/ Hex Artifact Content
Login

Artifact 4d11273a6a6644d948c534a17bdeaf42a2793d30:


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 2f 2a 0a 2a 2a 20 52 65 74 75 72  ;.}../*.** Retur
2a50: 6e 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79  n the numeric ty
2a60: 70 65 20 66 6f 72 20 70 4d 65 6d 2c 20 65 69 74  pe for pMem, eit
2a70: 68 65 72 20 4d 45 4d 5f 49 6e 74 20 6f 72 20 4d  her MEM_Int or M
2a80: 45 4d 5f 52 65 61 6c 20 6f 72 20 62 6f 74 68 20  EM_Real or both 
2a90: 6f 72 0a 2a 2a 20 6e 6f 6e 65 2e 20 20 0a 2a 2a  or.** none.  .**
2aa0: 0a 2a 2a 20 55 6e 6c 69 6b 65 20 61 70 70 6c 79  .** Unlike apply
2ab0: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
2ac0: 29 2c 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  ), this routine 
2ad0: 64 6f 65 73 20 6e 6f 74 20 6d 6f 64 69 66 79 20  does not modify 
2ae0: 70 4d 65 6d 2d 3e 66 6c 61 67 73 2e 0a 2a 2a 20  pMem->flags..** 
2af0: 42 75 74 20 69 74 20 64 6f 65 73 20 73 65 74 20  But it does set 
2b00: 70 4d 65 6d 2d 3e 72 20 61 6e 64 20 70 4d 65 6d  pMem->r and pMem
2b10: 2d 3e 75 2e 69 20 61 70 70 72 6f 70 72 69 61 74  ->u.i appropriat
2b20: 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75  ely..*/.static u
2b30: 31 36 20 6e 75 6d 65 72 69 63 54 79 70 65 28 4d  16 numericType(M
2b40: 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 66 28  em *pMem){.  if(
2b50: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28   pMem->flags & (
2b60: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
2b70: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
2b80: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
2b90: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
2ba0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4d 65 6d  ;.  }.  if( pMem
2bb0: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
2bc0: 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a  tr|MEM_Blob) ){.
2bd0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 41      if( sqlite3A
2be0: 74 6f 46 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d  toF(pMem->z, &pM
2bf0: 65 6d 2d 3e 72 2c 20 70 4d 65 6d 2d 3e 6e 2c 20  em->r, pMem->n, 
2c00: 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 30 20 29 7b  pMem->enc)==0 ){
2c10: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b  .      return 0;
2c20: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73  .    }.    if( s
2c30: 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70 4d 65  qlite3Atoi64(pMe
2c40: 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e 69  m->z, &pMem->u.i
2c50: 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d  , pMem->n, pMem-
2c60: 3e 65 6e 63 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b  >enc)==SQLITE_OK
2c70: 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   ){.      return
2c80: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a   MEM_Int;.    }.
2c90: 20 20 20 20 72 65 74 75 72 6e 20 4d 45 4d 5f 52      return MEM_R
2ca0: 65 61 6c 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  eal;.  }.  retur
2cb0: 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53  n 0;.}..#ifdef S
2cc0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a  QLITE_DEBUG./*.*
2cd0: 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20 73  * Write a nice s
2ce0: 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61  tring representa
2cf0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74  tion of the cont
2d00: 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65  ents of cell pMe
2d10: 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72  m.** into buffer
2d20: 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42   zBuf, length nB
2d30: 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  uf..*/.void sqli
2d40: 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79  te3VdbeMemPretty
2d50: 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c  Print(Mem *pMem,
2d60: 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20   char *zBuf){.  
2d70: 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75  char *zCsr = zBu
2d80: 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65  f;.  int f = pMe
2d90: 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61  m->flags;..  sta
2da0: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
2db0: 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d  const encnames[]
2dc0: 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22   = {"(X)", "(8)"
2dd0: 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36  , "(16LE)", "(16
2de0: 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26  BE)"};..  if( f&
2df0: 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20  MEM_Blob ){.    
2e00: 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20  int i;.    char 
2e10: 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  c;.    if( f & M
2e20: 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20  EM_Dyn ){.      
2e30: 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61  c = 'z';.      a
2e40: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
2e50: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65  _Static|MEM_Ephe
2e60: 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  m))==0 );.    }e
2e70: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
2e80: 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20  Static ){.      
2e90: 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61  c = 't';.      a
2ea0: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
2eb0: 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29  _Dyn|MEM_Ephem))
2ec0: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
2ed0: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68   if( f & MEM_Eph
2ee0: 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  em ){.      c = 
2ef0: 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'e';.      asser
2f00: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
2f10: 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30  tic|MEM_Dyn))==0
2f20: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   );.    }else{. 
2f30: 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20       c = 's';.  
2f40: 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33    }..    sqlite3
2f50: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
2f60: 43 73 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a 20  Csr, "%c", c);. 
2f70: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
2f80: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
2f90: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
2fa0: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
2fb0: 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e  , "%d[", pMem->n
2fc0: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
2fd0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
2fe0: 43 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  Csr);.    for(i=
2ff0: 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65  0; i<16 && i<pMe
3000: 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  m->n; i++){.    
3010: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
3020: 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25  tf(100, zCsr, "%
3030: 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d  02X", ((int)pMem
3040: 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b  ->z[i] & 0xFF));
3050: 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  .      zCsr += s
3060: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3070: 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  Csr);.    }.    
3080: 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26  for(i=0; i<16 &&
3090: 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29   i<pMem->n; i++)
30a0: 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20 3d  {.      char z =
30b0: 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20   pMem->z[i];.   
30c0: 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a     if( z<32 || z
30d0: 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d  >126 ) *zCsr++ =
30e0: 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73 65   '.';.      else
30f0: 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20   *zCsr++ = z;.  
3100: 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33    }..    sqlite3
3110: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
3120: 43 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63 6e  Csr, "]%s", encn
3130: 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29  ames[pMem->enc])
3140: 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71  ;.    zCsr += sq
3150: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
3160: 73 72 29 3b 0a 20 20 20 20 69 66 28 20 66 20 26  sr);.    if( f &
3170: 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
3180: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
3190: 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b  ntf(100, zCsr,"+
31a0: 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65  %dz",pMem->u.nZe
31b0: 72 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20  ro);.      zCsr 
31c0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
31d0: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a  30(zCsr);.    }.
31e0: 20 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27      *zCsr = '\0'
31f0: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20  ;.  }else if( f 
3200: 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20  & MEM_Str ){.   
3210: 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a   int j, k;.    z
3220: 42 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20  Buf[0] = ' ';.  
3230: 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79    if( f & MEM_Dy
3240: 6e 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b  n ){.      zBuf[
3250: 31 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20  1] = 'z';.      
3260: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
3270: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68  M_Static|MEM_Eph
3280: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
3290: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
32a0: 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20  _Static ){.     
32b0: 20 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a   zBuf[1] = 't';.
32c0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
32d0: 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f   & (MEM_Dyn|MEM_
32e0: 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20  Ephem))==0 );.  
32f0: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
3300: 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20  MEM_Ephem ){.   
3310: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27     zBuf[1] = 'e'
3320: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
3330: 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63  (f & (MEM_Static
3340: 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b  |MEM_Dyn))==0 );
3350: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
3360: 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b    zBuf[1] = 's';
3370: 0a 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32  .    }.    k = 2
3380: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
3390: 70 72 69 6e 74 66 28 31 30 30 2c 20 26 7a 42 75  printf(100, &zBu
33a0: 66 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d  f[k], "%d", pMem
33b0: 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73  ->n);.    k += s
33c0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26  qlite3Strlen30(&
33d0: 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42  zBuf[k]);.    zB
33e0: 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20  uf[k++] = '[';. 
33f0: 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35     for(j=0; j<15
3400: 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a   && j<pMem->n; j
3410: 2b 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63 20  ++){.      u8 c 
3420: 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20  = pMem->z[j];.  
3430: 20 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30 20      if( c>=0x20 
3440: 26 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20 20  && c<0x7f ){.   
3450: 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d       zBuf[k++] =
3460: 20 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   c;.      }else{
3470: 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b  .        zBuf[k+
3480: 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20  +] = '.';.      
3490: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75 66  }.    }.    zBuf
34a0: 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20  [k++] = ']';.   
34b0: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
34c0: 66 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20  f(100,&zBuf[k], 
34d0: 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65  encnames[pMem->e
34e0: 6e 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73  nc]);.    k += s
34f0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26  qlite3Strlen30(&
3500: 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42  zBuf[k]);.    zB
3510: 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d  uf[k++] = 0;.  }
3520: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  .}.#endif..#ifde
3530: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f  f SQLITE_DEBUG./
3540: 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 76  *.** Print the v
3550: 61 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73 74  alue of a regist
3560: 65 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20 70  er for tracing p
3570: 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74  urposes:.*/.stat
3580: 69 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63 65  ic void memTrace
3590: 50 72 69 6e 74 28 4d 65 6d 20 2a 70 29 7b 0a 20  Print(Mem *p){. 
35a0: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
35b0: 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 20 29 7b  MEM_Undefined ){
35c0: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 75 6e  .    printf(" un
35d0: 64 65 66 69 6e 65 64 22 29 3b 0a 20 20 7d 65 6c  defined");.  }el
35e0: 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20  se if( p->flags 
35f0: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
3600: 20 20 70 72 69 6e 74 66 28 22 20 4e 55 4c 4c 22    printf(" NULL"
3610: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28  );.  }else if( (
3620: 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  p->flags & (MEM_
3630: 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28  Int|MEM_Str))==(
3640: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
3650: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
3660: 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e   si:%lld", p->u.
3670: 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  i);.  }else if( 
3680: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  p->flags & MEM_I
3690: 6e 74 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66  nt ){.    printf
36a0: 28 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75  (" i:%lld", p->u
36b0: 2e 69 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  .i);.#ifndef SQL
36c0: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
36d0: 47 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20  G_POINT.  }else 
36e0: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
36f0: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70  EM_Real ){.    p
3700: 72 69 6e 74 66 28 22 20 72 3a 25 67 22 2c 20 70  rintf(" r:%g", p
3710: 2d 3e 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d  ->r);.#endif.  }
3720: 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67  else if( p->flag
3730: 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 20 29  s & MEM_RowSet )
3740: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 28  {.    printf(" (
3750: 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d 65 6c  rowset)");.  }el
3760: 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a 42 75  se{.    char zBu
3770: 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71 6c 69  f[200];.    sqli
3780: 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79  te3VdbeMemPretty
3790: 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29 3b 0a  Print(p, zBuf);.
37a0: 20 20 20 20 70 72 69 6e 74 66 28 22 20 25 73 22      printf(" %s"
37b0: 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 7d 0a 73  , zBuf);.  }.}.s
37c0: 74 61 74 69 63 20 76 6f 69 64 20 72 65 67 69 73  tatic void regis
37d0: 74 65 72 54 72 61 63 65 28 69 6e 74 20 69 52 65  terTrace(int iRe
37e0: 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 70 72  g, Mem *p){.  pr
37f0: 69 6e 74 66 28 22 52 45 47 5b 25 64 5d 20 3d 20  intf("REG[%d] = 
3800: 22 2c 20 69 52 65 67 29 3b 0a 20 20 6d 65 6d 54  ", iReg);.  memT
3810: 72 61 63 65 50 72 69 6e 74 28 70 29 3b 0a 20 20  racePrint(p);.  
3820: 70 72 69 6e 74 66 28 22 5c 6e 22 29 3b 0a 7d 0a  printf("\n");.}.
3830: 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
3840: 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 20 64  QLITE_DEBUG.#  d
3850: 65 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54  efine REGISTER_T
3860: 52 41 43 45 28 52 2c 4d 29 20 69 66 28 64 62 2d  RACE(R,M) if(db-
3870: 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 56 64  >flags&SQLITE_Vd
3880: 62 65 54 72 61 63 65 29 72 65 67 69 73 74 65 72  beTrace)register
3890: 54 72 61 63 65 28 52 2c 4d 29 0a 23 65 6c 73 65  Trace(R,M).#else
38a0: 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47 49 53  .#  define REGIS
38b0: 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29 0a 23  TER_TRACE(R,M).#
38c0: 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66 20 56  endif...#ifdef V
38d0: 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a 20  DBE_PROFILE../* 
38e0: 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63 6f 6e  .** hwtime.h con
38f0: 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61 73 73  tains inline ass
3900: 65 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f 72 20  embler code for 
3910: 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a 2a  implementing .**
3920: 20 68 69 67 68 2d 70 65 72 66 6f 72 6d 61 6e 63   high-performanc
3930: 65 20 74 69 6d 69 6e 67 20 72 6f 75 74 69 6e 65  e timing routine
3940: 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22  s..*/.#include "
3950: 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e 64 69  hwtime.h"..#endi
3960: 66 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55  f..#ifndef NDEBU
3970: 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e  G./*.** This fun
3980: 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 63 61  ction is only ca
3990: 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  lled from within
39a0: 20 61 6e 20 61 73 73 65 72 74 28 29 20 65 78 70   an assert() exp
39b0: 72 65 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63  ression. It.** c
39c0: 68 65 63 6b 73 20 74 68 61 74 20 74 68 65 20 73  hecks that the s
39d0: 71 6c 69 74 65 33 2e 6e 54 72 61 6e 73 61 63 74  qlite3.nTransact
39e0: 69 6f 6e 20 76 61 72 69 61 62 6c 65 20 69 73 20  ion variable is 
39f0: 63 6f 72 72 65 63 74 6c 79 20 73 65 74 20 74 6f  correctly set to
3a00: 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  .** the number o
3a10: 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f  f non-transactio
3a20: 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 63 75 72  n savepoints cur
3a30: 72 65 6e 74 6c 79 20 69 6e 20 74 68 65 20 0a 2a  rently in the .*
3a40: 2a 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74  * linked list st
3a50: 61 72 74 69 6e 67 20 61 74 20 73 71 6c 69 74 65  arting at sqlite
3a60: 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a  3.pSavepoint..**
3a70: 20 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a   .** Usage:.**.*
3a80: 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 63 68  *     assert( ch
3a90: 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e  eckSavepointCoun
3aa0: 74 28 64 62 29 20 29 3b 0a 2a 2f 0a 73 74 61 74  t(db) );.*/.stat
3ab0: 69 63 20 69 6e 74 20 63 68 65 63 6b 53 61 76 65  ic int checkSave
3ac0: 70 6f 69 6e 74 43 6f 75 6e 74 28 73 71 6c 69 74  pointCount(sqlit
3ad0: 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74 20 6e  e3 *db){.  int n
3ae0: 20 3d 20 30 3b 0a 20 20 53 61 76 65 70 6f 69 6e   = 0;.  Savepoin
3af0: 74 20 2a 70 3b 0a 20 20 66 6f 72 28 70 3d 64 62  t *p;.  for(p=db
3b00: 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20 70 3b  ->pSavepoint; p;
3b10: 20 70 3d 70 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b   p=p->pNext) n++
3b20: 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 28  ;.  assert( n==(
3b30: 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b  db->nSavepoint +
3b40: 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
3b50: 6f 6e 53 61 76 65 70 6f 69 6e 74 29 20 29 3b 0a  onSavepoint) );.
3b60: 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65    return 1;.}.#e
3b70: 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65  ndif.../*.** Exe
3b80: 63 75 74 65 20 61 73 20 6d 75 63 68 20 6f 66 20  cute as much of 
3b90: 61 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 61  a VDBE program a
3ba0: 73 20 77 65 20 63 61 6e 2e 0a 2a 2a 20 54 68 69  s we can..** Thi
3bb0: 73 20 69 73 20 74 68 65 20 63 6f 72 65 20 6f 66  s is the core of
3bc0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 2e   sqlite3_step().
3bd0: 20 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65    .*/.int sqlite
3be0: 33 56 64 62 65 45 78 65 63 28 0a 20 20 56 64 62  3VdbeExec(.  Vdb
3bf0: 65 20 2a 70 20 20 20 20 20 20 20 20 20 20 20 20  e *p            
3c00: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56          /* The V
3c10: 44 42 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20  DBE */.){.  int 
3c20: 70 63 3d 30 3b 20 20 20 20 20 20 20 20 20 20 20  pc=0;           
3c30: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72         /* The pr
3c40: 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 2a 2f  ogram counter */
3c50: 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70 2d 3e  .  Op *aOp = p->
3c60: 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  aOp;          /*
3c70: 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f 70 20   Copy of p->aOp 
3c80: 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 3b 20 20 20  */.  Op *pOp;   
3c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ca0: 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70 65 72 61  /* Current opera
3cb0: 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 72 63  tion */.  int rc
3cc0: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20   = SQLITE_OK;   
3cd0: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
3ce0: 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c   return */.  sql
3cf0: 69 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62  ite3 *db = p->db
3d00: 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64  ;       /* The d
3d10: 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20  atabase */.  u8 
3d20: 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
3d30: 6c 74 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65 74  lt = 0; /* Reset
3d40: 20 73 63 68 65 6d 61 20 61 66 74 65 72 20 61 6e   schema after an
3d50: 20 65 72 72 6f 72 20 69 66 20 70 6f 73 69 74 69   error if positi
3d60: 76 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64  ve */.  u8 encod
3d70: 69 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b 20 20  ing = ENC(db);  
3d80: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
3d90: 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20  se encoding */. 
3da0: 20 69 6e 74 20 69 43 6f 6d 70 61 72 65 20 3d 20   int iCompare = 
3db0: 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  0;          /* R
3dc0: 65 73 75 6c 74 20 6f 66 20 6c 61 73 74 20 4f 50  esult of last OP
3dd0: 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 69  _Compare operati
3de0: 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  on */.  unsigned
3df0: 20 6e 56 6d 53 74 65 70 20 3d 20 30 3b 20 20 20   nVmStep = 0;   
3e00: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
3e10: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20  virtual machine 
3e20: 73 74 65 70 73 20 2a 2f 0a 23 69 66 6e 64 65 66  steps */.#ifndef
3e30: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
3e40: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
3e50: 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72   unsigned nProgr
3e60: 65 73 73 4c 69 6d 69 74 20 3d 20 30 3b 2f 2a 20  essLimit = 0;/* 
3e70: 49 6e 76 6f 6b 65 20 78 50 72 6f 67 72 65 73 73  Invoke xProgress
3e80: 28 29 20 77 68 65 6e 20 6e 56 6d 53 74 65 70 20  () when nVmStep 
3e90: 72 65 61 63 68 65 73 20 74 68 69 73 20 2a 2f 0a  reaches this */.
3ea0: 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a 61 4d  #endif.  Mem *aM
3eb0: 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20 20 20  em = p->aMem;   
3ec0: 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70      /* Copy of p
3ed0: 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65 6d 20  ->aMem */.  Mem 
3ee0: 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20 20 20 20  *pIn1 = 0;      
3ef0: 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 69 6e         /* 1st in
3f00: 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  put operand */. 
3f10: 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30 3b 20   Mem *pIn2 = 0; 
3f20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32              /* 2
3f30: 6e 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64  nd input operand
3f40: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 33 20   */.  Mem *pIn3 
3f50: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
3f60: 20 2f 2a 20 33 72 64 20 69 6e 70 75 74 20 6f 70   /* 3rd input op
3f70: 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  erand */.  Mem *
3f80: 70 4f 75 74 20 3d 20 30 3b 20 20 20 20 20 20 20  pOut = 0;       
3f90: 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20        /* Output 
3fa0: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 6e 74  operand */.  int
3fb0: 20 2a 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 20   *aPermute = 0; 
3fc0: 20 20 20 20 20 20 20 20 2f 2a 20 50 65 72 6d 75          /* Permu
3fd0: 74 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d 6e  tation of column
3fe0: 73 20 66 6f 72 20 4f 50 5f 43 6f 6d 70 61 72 65  s for OP_Compare
3ff0: 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f   */.  i64 lastRo
4000: 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f  wid = db->lastRo
4010: 77 69 64 3b 20 20 2f 2a 20 53 61 76 65 64 20 76  wid;  /* Saved v
4020: 61 6c 75 65 20 6f 66 20 74 68 65 20 6c 61 73 74  alue of the last
4030: 20 69 6e 73 65 72 74 20 52 4f 57 49 44 20 2a 2f   insert ROWID */
4040: 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
4050: 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61 72 74  FILE.  u64 start
4060: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4070: 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b 20 63    /* CPU clock c
4080: 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20 6f 66  ount at start of
4090: 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69   opcode */.#endi
40a0: 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52 54 20  f.  /*** INSERT 
40b0: 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45 52 45  STACK UNION HERE
40c0: 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28   ***/..  assert(
40d0: 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f   p->magic==VDBE_
40e0: 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20 2f 2a  MAGIC_RUN );  /*
40f0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
4100: 76 65 72 69 66 69 65 73 20 74 68 69 73 20 2a 2f  verifies this */
4110: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 6e  .  sqlite3VdbeEn
4120: 74 65 72 28 70 29 3b 0a 20 20 69 66 28 20 70 2d  ter(p);.  if( p-
4130: 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45  >rc==SQLITE_NOME
4140: 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73  M ){.    /* This
4150: 20 68 61 70 70 65 6e 73 20 69 66 20 61 20 6d 61   happens if a ma
4160: 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20 61 20  lloc() inside a 
4170: 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f  call to sqlite3_
4180: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20 6f 72  column_text() or
4190: 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f  .    ** sqlite3_
41a0: 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29 20  column_text16() 
41b0: 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20 20 20  failed.  */.    
41c0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
41d0: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 63  .  assert( p->rc
41e0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70  ==SQLITE_OK || p
41f0: 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ->rc==SQLITE_BUS
4200: 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Y );.  assert( p
4210: 2d 3e 62 49 73 52 65 61 64 65 72 20 7c 7c 20 70  ->bIsReader || p
4220: 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d 30 20 29 3b  ->readOnly!=0 );
4230: 0a 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54  .  p->rc = SQLIT
4240: 45 5f 4f 4b 3b 0a 20 20 70 2d 3e 69 43 75 72 72  E_OK;.  p->iCurr
4250: 65 6e 74 54 69 6d 65 20 3d 20 30 3b 0a 20 20 61  entTime = 0;.  a
4260: 73 73 65 72 74 28 20 70 2d 3e 65 78 70 6c 61 69  ssert( p->explai
4270: 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e 70 52 65  n==0 );.  p->pRe
4280: 73 75 6c 74 53 65 74 20 3d 20 30 3b 0a 20 20 64  sultSet = 0;.  d
4290: 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e  b->busyHandler.n
42a0: 42 75 73 79 20 3d 20 30 3b 0a 20 20 69 66 28 20  Busy = 0;.  if( 
42b0: 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75  db->u1.isInterru
42c0: 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72  pted ) goto abor
42d0: 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75  t_due_to_interru
42e0: 70 74 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  pt;.  sqlite3Vdb
42f0: 65 49 4f 54 72 61 63 65 53 71 6c 28 70 29 3b 0a  eIOTraceSql(p);.
4300: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
4310: 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c  MIT_PROGRESS_CAL
4320: 4c 42 41 43 4b 0a 20 20 69 66 28 20 64 62 2d 3e  LBACK.  if( db->
4330: 78 50 72 6f 67 72 65 73 73 20 29 7b 0a 20 20 20  xProgress ){.   
4340: 20 61 73 73 65 72 74 28 20 30 20 3c 20 64 62 2d   assert( 0 < db-
4350: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 29 3b  >nProgressOps );
4360: 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69  .    nProgressLi
4370: 6d 69 74 20 3d 20 28 75 6e 73 69 67 6e 65 64 29  mit = (unsigned)
4380: 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49  p->aCounter[SQLI
4390: 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 56 4d  TE_STMTSTATUS_VM
43a0: 5f 53 54 45 50 5d 3b 0a 20 20 20 20 69 66 28 20  _STEP];.    if( 
43b0: 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 3d 3d  nProgressLimit==
43c0: 30 20 29 7b 0a 20 20 20 20 20 20 6e 50 72 6f 67  0 ){.      nProg
43d0: 72 65 73 73 4c 69 6d 69 74 20 3d 20 64 62 2d 3e  ressLimit = db->
43e0: 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 0a 20 20  nProgressOps;.  
43f0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e    }else{.      n
4400: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 25 3d  ProgressLimit %=
4410: 20 28 75 6e 73 69 67 6e 65 64 29 64 62 2d 3e 6e   (unsigned)db->n
4420: 50 72 6f 67 72 65 73 73 4f 70 73 3b 0a 20 20 20  ProgressOps;.   
4430: 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69   }.  }.#endif.#i
4440: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
4450: 47 0a 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e  G.  sqlite3Begin
4460: 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a  BenignMalloc();.
4470: 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d 30 0a 20    if( p->pc==0. 
4480: 20 20 26 26 20 28 70 2d 3e 64 62 2d 3e 66 6c 61    && (p->db->fla
4490: 67 73 20 26 20 28 53 51 4c 49 54 45 5f 56 64 62  gs & (SQLITE_Vdb
44a0: 65 4c 69 73 74 69 6e 67 7c 53 51 4c 49 54 45 5f  eListing|SQLITE_
44b0: 56 64 62 65 45 51 50 7c 53 51 4c 49 54 45 5f 56  VdbeEQP|SQLITE_V
44c0: 64 62 65 54 72 61 63 65 29 29 21 3d 30 0a 20 20  dbeTrace))!=0.  
44d0: 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  ){.    int i;.  
44e0: 20 20 69 6e 74 20 6f 6e 63 65 20 3d 20 31 3b 0a    int once = 1;.
44f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
4500: 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20 20  rintSql(p);.    
4510: 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73  if( p->db->flags
4520: 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69   & SQLITE_VdbeLi
4530: 73 74 69 6e 67 20 29 7b 0a 20 20 20 20 20 20 70  sting ){.      p
4540: 72 69 6e 74 66 28 22 56 44 42 45 20 50 72 6f 67  rintf("VDBE Prog
4550: 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e 22 29  ram Listing:\n")
4560: 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b  ;.      for(i=0;
4570: 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b   i<p->nOp; i++){
4580: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
4590: 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f  VdbePrintOp(stdo
45a0: 75 74 2c 20 69 2c 20 26 61 4f 70 5b 69 5d 29 3b  ut, i, &aOp[i]);
45b0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
45c0: 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c     if( p->db->fl
45d0: 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62  ags & SQLITE_Vdb
45e0: 65 45 51 50 20 29 7b 0a 20 20 20 20 20 20 66 6f  eEQP ){.      fo
45f0: 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b  r(i=0; i<p->nOp;
4600: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69   i++){.        i
4610: 66 28 20 61 4f 70 5b 69 5d 2e 6f 70 63 6f 64 65  f( aOp[i].opcode
4620: 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29 7b 0a  ==OP_Explain ){.
4630: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6f 6e            if( on
4640: 63 65 20 29 20 70 72 69 6e 74 66 28 22 56 44 42  ce ) printf("VDB
4650: 45 20 51 75 65 72 79 20 50 6c 61 6e 3a 5c 6e 22  E Query Plan:\n"
4660: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 72 69  );.          pri
4670: 6e 74 66 28 22 25 73 5c 6e 22 2c 20 61 4f 70 5b  ntf("%s\n", aOp[
4680: 69 5d 2e 70 34 2e 7a 29 3b 0a 20 20 20 20 20 20  i].p4.z);.      
4690: 20 20 20 20 6f 6e 63 65 20 3d 20 30 3b 0a 20 20      once = 0;.  
46a0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
46b0: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d      }.    if( p-
46c0: 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  >db->flags & SQL
46d0: 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 29 20  ITE_VdbeTrace ) 
46e0: 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 54 72   printf("VDBE Tr
46f0: 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 7d 0a 20 20  ace:\n");.  }.  
4700: 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e  sqlite3EndBenign
4710: 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64 69 66  Malloc();.#endif
4720: 0a 20 20 66 6f 72 28 70 63 3d 70 2d 3e 70 63 3b  .  for(pc=p->pc;
4730: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 3b 20   rc==SQLITE_OK; 
4740: 70 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72  pc++){.    asser
4750: 74 28 20 70 63 3e 3d 30 20 26 26 20 70 63 3c 70  t( pc>=0 && pc<p
4760: 2d 3e 6e 4f 70 20 29 3b 0a 20 20 20 20 69 66 28  ->nOp );.    if(
4770: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
4780: 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  d ) goto no_mem;
4790: 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
47a0: 46 49 4c 45 0a 20 20 20 20 73 74 61 72 74 20 3d  FILE.    start =
47b0: 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29   sqlite3Hwtime()
47c0: 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 6e 56 6d  ;.#endif.    nVm
47d0: 53 74 65 70 2b 2b 3b 0a 20 20 20 20 70 4f 70 20  Step++;.    pOp 
47e0: 3d 20 26 61 4f 70 5b 70 63 5d 3b 0a 0a 20 20 20  = &aOp[pc];..   
47f0: 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74   /* Only allow t
4800: 72 61 63 69 6e 67 20 69 66 20 53 51 4c 49 54 45  racing if SQLITE
4810: 5f 44 45 42 55 47 20 69 73 20 64 65 66 69 6e 65  _DEBUG is define
4820: 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66  d..    */.#ifdef
4830: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
4840: 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20    if( db->flags 
4850: 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  & SQLITE_VdbeTra
4860: 63 65 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ce ){.      sqli
4870: 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73  te3VdbePrintOp(s
4880: 74 64 6f 75 74 2c 20 70 63 2c 20 70 4f 70 29 3b  tdout, pc, pOp);
4890: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
48a0: 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65      ..    /* Che
48b0: 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77 65 20  ck to see if we 
48c0: 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c 61 74 65  need to simulate
48d0: 20 61 6e 20 69 6e 74 65 72 72 75 70 74 2e 20 20   an interrupt.  
48e0: 54 68 69 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e  This only happen
48f0: 73 0a 20 20 20 20 2a 2a 20 69 66 20 77 65 20 68  s.    ** if we h
4900: 61 76 65 20 61 20 73 70 65 63 69 61 6c 20 74 65  ave a special te
4910: 73 74 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f  st build..    */
4920: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
4930: 45 53 54 0a 20 20 20 20 69 66 28 20 73 71 6c 69  EST.    if( sqli
4940: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
4950: 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 73  unt>0 ){.      s
4960: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
4970: 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20  _count--;.      
4980: 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65  if( sqlite3_inte
4990: 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29  rrupt_count==0 )
49a0: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
49b0: 33 5f 69 6e 74 65 72 72 75 70 74 28 64 62 29 3b  3_interrupt(db);
49c0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23  .      }.    }.#
49d0: 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e  endif..    /* On
49e0: 20 61 6e 79 20 6f 70 63 6f 64 65 20 77 69 74 68   any opcode with
49f0: 20 74 68 65 20 22 6f 75 74 32 2d 70 72 65 72 65   the "out2-prere
4a00: 6c 65 61 73 65 22 20 74 61 67 2c 20 66 72 65 65  lease" tag, free
4a10: 20 61 6e 79 0a 20 20 20 20 2a 2a 20 65 78 74 65   any.    ** exte
4a20: 72 6e 61 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  rnal allocations
4a30: 20 6f 75 74 20 6f 66 20 6d 65 6d 5b 70 32 5d 20   out of mem[p2] 
4a40: 61 6e 64 20 73 65 74 20 6d 65 6d 5b 70 32 5d 20  and set mem[p2] 
4a50: 74 6f 20 62 65 0a 20 20 20 20 2a 2a 20 61 6e 20  to be.    ** an 
4a60: 75 6e 64 65 66 69 6e 65 64 20 69 6e 74 65 67 65  undefined intege
4a70: 72 2e 20 20 4f 70 63 6f 64 65 73 20 77 69 6c 6c  r.  Opcodes will
4a80: 20 65 69 74 68 65 72 20 66 69 6c 6c 20 69 6e 20   either fill in 
4a90: 74 68 65 20 69 6e 74 65 67 65 72 0a 20 20 20 20  the integer.    
4aa0: 2a 2a 20 76 61 6c 75 65 20 6f 72 20 63 6f 6e 76  ** value or conv
4ab0: 65 72 74 20 6d 65 6d 5b 70 32 5d 20 74 6f 20 61  ert mem[p2] to a
4ac0: 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 2e   different type.
4ad0: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65  .    */.    asse
4ae0: 72 74 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  rt( pOp->opflags
4af0: 3d 3d 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50  ==sqlite3OpcodeP
4b00: 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63  roperty[pOp->opc
4b10: 6f 64 65 5d 20 29 3b 0a 20 20 20 20 69 66 28 20  ode] );.    if( 
4b20: 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f  pOp->opflags & O
4b30: 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c  PFLG_OUT2_PREREL
4b40: 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 61 73  EASE ){.      as
4b50: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
4b60: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
4b70: 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d   pOp->p2<=(p->nM
4b80: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
4b90: 3b 0a 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26  ;.      pOut = &
4ba0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
4bb0: 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
4bc0: 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
4bd0: 20 20 20 20 20 20 56 64 62 65 4d 65 6d 52 65 6c        VdbeMemRel
4be0: 65 61 73 65 28 70 4f 75 74 29 3b 0a 20 20 20 20  ease(pOut);.    
4bf0: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
4c00: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a 0a  MEM_Int;.    }..
4c10: 20 20 20 20 2f 2a 20 53 61 6e 69 74 79 20 63 68      /* Sanity ch
4c20: 65 63 6b 69 6e 67 20 6f 6e 20 6f 74 68 65 72 20  ecking on other 
4c30: 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 23 69 66 64  operands */.#ifd
4c40: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
4c50: 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70      if( (pOp->op
4c60: 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e  flags & OPFLG_IN
4c70: 31 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61  1)!=0 ){.      a
4c80: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
4c90: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
4ca0: 28 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e  ( pOp->p1<=(p->n
4cb0: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
4cc0: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
4cd0: 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
4ce0: 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20  m[pOp->p1]) );. 
4cf0: 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
4d00: 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d  ite3VdbeCheckMem
4d10: 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d  Invariants(&aMem
4d20: 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20  [pOp->p1]) );.  
4d30: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
4d40: 43 45 28 70 4f 70 2d 3e 70 31 2c 20 26 61 4d 65  CE(pOp->p1, &aMe
4d50: 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 20  m[pOp->p1]);.   
4d60: 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d   }.    if( (pOp-
4d70: 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47  >opflags & OPFLG
4d80: 5f 49 4e 32 29 21 3d 30 20 29 7b 0a 20 20 20 20  _IN2)!=0 ){.    
4d90: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
4da0: 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  2>0 );.      ass
4db0: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70  ert( pOp->p2<=(p
4dc0: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
4dd0: 72 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  r) );.      asse
4de0: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
4df0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29  aMem[pOp->p2]) )
4e00: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
4e10: 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
4e20: 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61  MemInvariants(&a
4e30: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b  Mem[pOp->p2]) );
4e40: 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f  .      REGISTER_
4e50: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 26  TRACE(pOp->p2, &
4e60: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a  aMem[pOp->p2]);.
4e70: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70      }.    if( (p
4e80: 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50  Op->opflags & OP
4e90: 46 4c 47 5f 49 4e 33 29 21 3d 30 20 29 7b 0a 20  FLG_IN3)!=0 ){. 
4ea0: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
4eb0: 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p3>0 );.      
4ec0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
4ed0: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
4ee0: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 61  rsor) );.      a
4ef0: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
4f00: 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  d(&aMem[pOp->p3]
4f10: 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  ) );.      asser
4f20: 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  t( sqlite3VdbeCh
4f30: 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73  eckMemInvariants
4f40: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29  (&aMem[pOp->p3])
4f50: 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54   );.      REGIST
4f60: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
4f70: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  , &aMem[pOp->p3]
4f80: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
4f90: 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26   (pOp->opflags &
4fa0: 20 4f 50 46 4c 47 5f 4f 55 54 32 29 21 3d 30 20   OPFLG_OUT2)!=0 
4fb0: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
4fc0: 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
4fd0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
4fe0: 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p2<=(p->nMem-p-
4ff0: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
5000: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
5010: 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70  nge(p, &aMem[pOp
5020: 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  ->p2]);.    }.  
5030: 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c    if( (pOp->opfl
5040: 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33  ags & OPFLG_OUT3
5050: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73  )!=0 ){.      as
5060: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
5070: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
5080: 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
5090: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
50a0: 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74  ;.      memAbout
50b0: 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65  ToChange(p, &aMe
50c0: 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20  m[pOp->p3]);.   
50d0: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 20   }.#endif.  .   
50e0: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
50f0: 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a  code ){../******
5100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5140: 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61 74 20  *******.** What 
5150: 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20 6d 61 73  follows is a mas
5160: 73 69 76 65 20 73 77 69 74 63 68 20 73 74 61 74  sive switch stat
5170: 65 6d 65 6e 74 20 77 68 65 72 65 20 65 61 63 68  ement where each
5180: 20 63 61 73 65 20 69 6d 70 6c 65 6d 65 6e 74 73   case implements
5190: 20 61 0a 2a 2a 20 73 65 70 61 72 61 74 65 20 69   a.** separate i
51a0: 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 20 74 68  nstruction in th
51b0: 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  e virtual machin
51c0: 65 2e 20 20 49 66 20 77 65 20 66 6f 6c 6c 6f 77  e.  If we follow
51d0: 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a 20 69 6e   the usual.** in
51e0: 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e 76 65 6e  dentation conven
51f0: 74 69 6f 6e 73 2c 20 65 61 63 68 20 63 61 73 65  tions, each case
5200: 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e   should be inden
5210: 74 65 64 20 62 79 20 36 20 73 70 61 63 65 73 2e  ted by 6 spaces.
5220: 20 20 42 75 74 0a 2a 2a 20 74 68 61 74 20 69 73    But.** that is
5230: 20 61 20 6c 6f 74 20 6f 66 20 77 61 73 74 65 64   a lot of wasted
5240: 20 73 70 61 63 65 20 6f 6e 20 74 68 65 20 6c 65   space on the le
5250: 66 74 20 6d 61 72 67 69 6e 2e 20 20 53 6f 20 74  ft margin.  So t
5260: 68 65 20 63 6f 64 65 20 77 69 74 68 69 6e 0a 2a  he code within.*
5270: 2a 20 74 68 65 20 73 77 69 74 63 68 20 73 74 61  * the switch sta
5280: 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62 72 65 61  tement will brea
5290: 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e 74 69 6f  k with conventio
52a0: 6e 20 61 6e 64 20 62 65 20 66 6c 75 73 68 2d 6c  n and be flush-l
52b0: 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a 2a 2a 20  eft. Another.** 
52c0: 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28 73 69 6d  big comment (sim
52d0: 69 6c 61 72 20 74 6f 20 74 68 69 73 20 6f 6e 65  ilar to this one
52e0: 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74 68 65 20  ) will mark the 
52f0: 70 6f 69 6e 74 20 69 6e 20 74 68 65 20 63 6f 64  point in the cod
5300: 65 20 77 68 65 72 65 0a 2a 2a 20 77 65 20 74 72  e where.** we tr
5310: 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b 20 74 6f  ansition back to
5320: 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74   normal indentat
5330: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66  ion..**.** The f
5340: 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20 65 61 63  ormatting of eac
5350: 68 20 63 61 73 65 20 69 73 20 69 6d 70 6f 72 74  h case is import
5360: 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b 65 66 69  ant.  The makefi
5370: 6c 65 20 66 6f 72 20 53 51 4c 69 74 65 0a 2a 2a  le for SQLite.**
5380: 20 67 65 6e 65 72 61 74 65 73 20 74 77 6f 20 43   generates two C
5390: 20 66 69 6c 65 73 20 22 6f 70 63 6f 64 65 73 2e   files "opcodes.
53a0: 68 22 20 61 6e 64 20 22 6f 70 63 6f 64 65 73 2e  h" and "opcodes.
53b0: 63 22 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74  c" by scanning t
53c0: 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f 6f 6b  his.** file look
53d0: 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73 20 74 68  ing for lines th
53e0: 61 74 20 62 65 67 69 6e 20 77 69 74 68 20 22 63  at begin with "c
53f0: 61 73 65 20 4f 50 5f 22 2e 20 20 54 68 65 20 6f  ase OP_".  The o
5400: 70 63 6f 64 65 73 2e 68 20 66 69 6c 65 73 0a 2a  pcodes.h files.*
5410: 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c 6c 65 64  * will be filled
5420: 20 77 69 74 68 20 23 64 65 66 69 6e 65 73 20 74   with #defines t
5430: 68 61 74 20 67 69 76 65 20 75 6e 69 71 75 65 20  hat give unique 
5440: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 20 74  integer values t
5450: 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63 6f 64 65  o each.** opcode
5460: 20 61 6e 64 20 74 68 65 20 6f 70 63 6f 64 65 73   and the opcodes
5470: 2e 63 20 66 69 6c 65 20 69 73 20 66 69 6c 6c 65  .c file is fille
5480: 64 20 77 69 74 68 20 61 6e 20 61 72 72 61 79 20  d with an array 
5490: 6f 66 20 73 74 72 69 6e 67 73 20 77 68 65 72 65  of strings where
54a0: 0a 2a 2a 20 65 61 63 68 20 73 74 72 69 6e 67 20  .** each string 
54b0: 69 73 20 74 68 65 20 73 79 6d 62 6f 6c 69 63 20  is the symbolic 
54c0: 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 63 6f 72  name for the cor
54d0: 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70 63 6f 64  responding opcod
54e0: 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 63 61  e.  If the.** ca
54f0: 73 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  se statement is 
5500: 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f  followed by a co
5510: 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20 66 6f 72  mment of the for
5520: 6d 20 22 2f 23 20 73 61 6d 65 20 61 73 20 2e 2e  m "/# same as ..
5530: 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74 20 63 6f  . #/".** that co
5540: 6d 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f  mment is used to
5550: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 70   determine the p
5560: 61 72 74 69 63 75 6c 61 72 20 76 61 6c 75 65 20  articular value 
5570: 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 0a 2a  of the opcode..*
5580: 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65 79 77 6f  *.** Other keywo
5590: 72 64 73 20 69 6e 20 74 68 65 20 63 6f 6d 6d 65  rds in the comme
55a0: 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20  nt that follows 
55b0: 65 61 63 68 20 63 61 73 65 20 61 72 65 20 75 73  each case are us
55c0: 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74 72 75  ed to.** constru
55d0: 63 74 20 74 68 65 20 4f 50 46 4c 47 5f 49 4e 49  ct the OPFLG_INI
55e0: 54 49 41 4c 49 5a 45 52 20 76 61 6c 75 65 20 74  TIALIZER value t
55f0: 68 61 74 20 69 6e 69 74 69 61 6c 69 7a 65 73 20  hat initializes 
5600: 6f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d  opcodeProperty[]
5610: 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73 20 69 6e  ..** Keywords in
5620: 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69 6e 32 2c  clude: in1, in2,
5630: 20 69 6e 33 2c 20 6f 75 74 32 5f 70 72 65 72 65   in3, out2_prere
5640: 6c 65 61 73 65 2c 20 6f 75 74 32 2c 20 6f 75 74  lease, out2, out
5650: 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68 65 20 6d  3.  See.** the m
5660: 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20 73 63 72  kopcodeh.awk scr
5670: 69 70 74 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ipt for addition
5680: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
5690: 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74 61 74  **.** Documentat
56a0: 69 6f 6e 20 61 62 6f 75 74 20 56 44 42 45 20 6f  ion about VDBE o
56b0: 70 63 6f 64 65 73 20 69 73 20 67 65 6e 65 72 61  pcodes is genera
56c0: 74 65 64 20 62 79 20 73 63 61 6e 6e 69 6e 67 20  ted by scanning 
56d0: 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20 66 6f 72  this file.** for
56e0: 20 6c 69 6e 65 73 20 6f 66 20 74 68 61 74 20 63   lines of that c
56f0: 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64 65 3a 22  ontain "Opcode:"
5700: 2e 20 20 54 68 61 74 20 6c 69 6e 65 20 61 6e 64  .  That line and
5710: 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 0a   all subsequent.
5720: 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e 65 73  ** comment lines
5730: 20 61 72 65 20 75 73 65 64 20 69 6e 20 74 68 65   are used in the
5740: 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74   generation of t
5750: 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d 6c 20 64  he opcode.html d
5760: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20  ocumentation.** 
5770: 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d  file..**.** SUMM
5780: 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 46  ARY:.**.**     F
5790: 6f 72 6d 61 74 74 69 6e 67 20 69 73 20 69 6d 70  ormatting is imp
57a0: 6f 72 74 61 6e 74 20 74 6f 20 73 63 72 69 70 74  ortant to script
57b0: 73 20 74 68 61 74 20 73 63 61 6e 20 74 68 69 73  s that scan this
57c0: 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20 20 44 6f   file..**     Do
57d0: 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72 6f   not deviate fro
57e0: 6d 20 74 68 65 20 66 6f 72 6d 61 74 74 69 6e 67  m the formatting
57f0: 20 73 74 79 6c 65 20 63 75 72 72 65 6e 74 6c 79   style currently
5800: 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a   in use..**.****
5810: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5820: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5830: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5840: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5850: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f  *********/../* O
5860: 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20 2a 20 50  pcode:  Goto * P
5870: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e  2 * * *.**.** An
5880: 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 6a   unconditional j
5890: 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50  ump to address P
58a0: 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 69  2..** The next i
58b0: 6e 73 74 72 75 63 74 69 6f 6e 20 65 78 65 63 75  nstruction execu
58c0: 74 65 64 20 77 69 6c 6c 20 62 65 20 0a 2a 2a 20  ted will be .** 
58d0: 74 68 65 20 6f 6e 65 20 61 74 20 69 6e 64 65 78  the one at index
58e0: 20 50 32 20 66 72 6f 6d 20 74 68 65 20 62 65 67   P2 from the beg
58f0: 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74 68 65  inning of.** the
5900: 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20   program..**.** 
5910: 54 68 65 20 50 31 20 70 61 72 61 6d 65 74 65 72  The P1 parameter
5920: 20 69 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79   is not actually
5930: 20 75 73 65 64 20 62 79 20 74 68 69 73 20 6f 70   used by this op
5940: 63 6f 64 65 2e 20 20 48 6f 77 65 76 65 72 2c 20  code.  However, 
5950: 69 74 0a 2a 2a 20 69 73 20 73 6f 6d 65 74 69 6d  it.** is sometim
5960: 65 73 20 73 65 74 20 74 6f 20 31 20 69 6e 73 74  es set to 1 inst
5970: 65 61 64 20 6f 66 20 30 20 61 73 20 61 20 68 69  ead of 0 as a hi
5980: 6e 74 20 74 6f 20 74 68 65 20 63 6f 6d 6d 61 6e  nt to the comman
5990: 64 2d 6c 69 6e 65 20 73 68 65 6c 6c 0a 2a 2a 20  d-line shell.** 
59a0: 74 68 61 74 20 74 68 69 73 20 47 6f 74 6f 20 69  that this Goto i
59b0: 73 20 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20  s the bottom of 
59c0: 61 20 6c 6f 6f 70 20 61 6e 64 20 74 68 61 74 20  a loop and that 
59d0: 74 68 65 20 6c 69 6e 65 73 20 66 72 6f 6d 20 50  the lines from P
59e0: 32 20 64 6f 77 6e 0a 2a 2a 20 74 6f 20 74 68 65  2 down.** to the
59f0: 20 63 75 72 72 65 6e 74 20 6c 69 6e 65 20 73 68   current line sh
5a00: 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e 74 65 64  ould be indented
5a10: 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74   for EXPLAIN out
5a20: 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  put..*/.case OP_
5a30: 47 6f 74 6f 3a 20 7b 20 20 20 20 20 20 20 20 20  Goto: {         
5a40: 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
5a50: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
5a60: 31 3b 0a 0a 20 20 2f 2a 20 4f 70 63 6f 64 65 73  1;..  /* Opcodes
5a70: 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
5a80: 73 20 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20  s the bottom of 
5a90: 61 20 6c 6f 6f 70 20 28 4f 50 5f 4e 65 78 74 2c  a loop (OP_Next,
5aa0: 20 4f 50 5f 50 72 65 76 2c 0a 20 20 2a 2a 20 4f   OP_Prev,.  ** O
5ab0: 50 5f 56 4e 65 78 74 2c 20 4f 50 5f 52 6f 77 53  P_VNext, OP_RowS
5ac0: 65 74 4e 65 78 74 2c 20 6f 72 20 4f 50 5f 53 6f  etNext, or OP_So
5ad0: 72 74 65 72 4e 65 78 74 29 20 61 6c 6c 20 6a 75  rterNext) all ju
5ae0: 6d 70 20 68 65 72 65 20 75 70 6f 6e 0a 20 20 2a  mp here upon.  *
5af0: 2a 20 63 6f 6d 70 6c 65 74 69 6f 6e 2e 20 20 43  * completion.  C
5b00: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 73  heck to see if s
5b10: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
5b20: 28 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c  () has been call
5b30: 65 64 0a 20 20 2a 2a 20 6f 72 20 69 66 20 74 68  ed.  ** or if th
5b40: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
5b50: 61 63 6b 20 6e 65 65 64 73 20 74 6f 20 62 65 20  ack needs to be 
5b60: 69 6e 76 6f 6b 65 64 2e 20 0a 20 20 2a 2a 0a 20  invoked. .  **. 
5b70: 20 2a 2a 20 54 68 69 73 20 63 6f 64 65 20 75 73   ** This code us
5b80: 65 73 20 75 6e 73 74 72 75 63 74 75 72 65 64 20  es unstructured 
5b90: 22 67 6f 74 6f 22 20 73 74 61 74 65 6d 65 6e 74  "goto" statement
5ba0: 73 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 6c  s and does not l
5bb0: 6f 6f 6b 20 63 6c 65 61 6e 2e 0a 20 20 2a 2a 20  ook clean..  ** 
5bc0: 42 75 74 20 74 68 61 74 20 69 73 20 6e 6f 74 20  But that is not 
5bd0: 64 75 65 20 74 6f 20 73 6c 6f 70 70 79 20 63 6f  due to sloppy co
5be0: 64 69 6e 67 20 68 61 62 69 74 73 2e 20 54 68 65  ding habits. The
5bf0: 20 63 6f 64 65 20 69 73 20 77 72 69 74 74 65 6e   code is written
5c00: 20 74 68 69 73 0a 20 20 2a 2a 20 77 61 79 20 66   this.  ** way f
5c10: 6f 72 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20  or performance, 
5c20: 74 6f 20 61 76 6f 69 64 20 68 61 76 69 6e 67 20  to avoid having 
5c30: 74 6f 20 72 75 6e 20 74 68 65 20 69 6e 74 65 72  to run the inter
5c40: 72 75 70 74 20 61 6e 64 20 70 72 6f 67 72 65 73  rupt and progres
5c50: 73 0a 20 20 2a 2a 20 63 68 65 63 6b 73 20 6f 6e  s.  ** checks on
5c60: 20 65 76 65 72 79 20 6f 70 63 6f 64 65 2e 20 20   every opcode.  
5c70: 54 68 69 73 20 68 65 6c 70 73 20 73 71 6c 69 74  This helps sqlit
5c80: 65 33 5f 73 74 65 70 28 29 20 74 6f 20 72 75 6e  e3_step() to run
5c90: 20 61 62 6f 75 74 20 31 2e 35 25 0a 20 20 2a 2a   about 1.5%.  **
5ca0: 20 66 61 73 74 65 72 20 61 63 63 6f 72 64 69 6e   faster accordin
5cb0: 67 20 74 6f 20 22 76 61 6c 67 72 69 6e 64 20 2d  g to "valgrind -
5cc0: 2d 74 6f 6f 6c 3d 63 61 63 68 65 67 72 69 6e 64  -tool=cachegrind
5cd0: 22 20 2a 2f 0a 63 68 65 63 6b 5f 66 6f 72 5f 69  " */.check_for_i
5ce0: 6e 74 65 72 72 75 70 74 3a 0a 20 20 69 66 28 20  nterrupt:.  if( 
5cf0: 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75  db->u1.isInterru
5d00: 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72  pted ) goto abor
5d10: 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75  t_due_to_interru
5d20: 70 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  pt;.#ifndef SQLI
5d30: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
5d40: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 43  _CALLBACK.  /* C
5d50: 61 6c 6c 20 74 68 65 20 70 72 6f 67 72 65 73 73  all the progress
5d60: 20 63 61 6c 6c 62 61 63 6b 20 69 66 20 69 74 20   callback if it 
5d70: 69 73 20 63 6f 6e 66 69 67 75 72 65 64 20 61 6e  is configured an
5d80: 64 20 74 68 65 20 72 65 71 75 69 72 65 64 20 6e  d the required n
5d90: 75 6d 62 65 72 0a 20 20 2a 2a 20 6f 66 20 56 44  umber.  ** of VD
5da0: 42 45 20 6f 70 73 20 68 61 76 65 20 62 65 65 6e  BE ops have been
5db0: 20 65 78 65 63 75 74 65 64 20 28 65 69 74 68 65   executed (eithe
5dc0: 72 20 73 69 6e 63 65 20 74 68 69 73 20 69 6e 76  r since this inv
5dd0: 6f 63 61 74 69 6f 6e 20 6f 66 0a 20 20 2a 2a 20  ocation of.  ** 
5de0: 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63 28  sqlite3VdbeExec(
5df0: 29 20 6f 72 20 73 69 6e 63 65 20 6c 61 73 74 20  ) or since last 
5e00: 74 69 6d 65 20 74 68 65 20 70 72 6f 67 72 65 73  time the progres
5e10: 73 20 63 61 6c 6c 62 61 63 6b 20 77 61 73 20 63  s callback was c
5e20: 61 6c 6c 65 64 29 2e 0a 20 20 2a 2a 20 49 66 20  alled)..  ** If 
5e30: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
5e40: 6c 62 61 63 6b 20 72 65 74 75 72 6e 73 20 6e 6f  lback returns no
5e50: 6e 2d 7a 65 72 6f 2c 20 65 78 69 74 20 74 68 65  n-zero, exit the
5e60: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
5e70: 20 77 69 74 68 0a 20 20 2a 2a 20 61 20 72 65 74   with.  ** a ret
5e80: 75 72 6e 20 63 6f 64 65 20 53 51 4c 49 54 45 5f  urn code SQLITE_
5e90: 41 42 4f 52 54 2e 0a 20 20 2a 2f 0a 20 20 69 66  ABORT..  */.  if
5ea0: 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21  ( db->xProgress!
5eb0: 3d 30 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e  =0 && nVmStep>=n
5ec0: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 29 7b  ProgressLimit ){
5ed0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d  .    assert( db-
5ee0: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 21 3d 30  >nProgressOps!=0
5ef0: 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73   );.    nProgres
5f00: 73 4c 69 6d 69 74 20 3d 20 6e 56 6d 53 74 65 70  sLimit = nVmStep
5f10: 20 2b 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73   + db->nProgress
5f20: 4f 70 73 20 2d 20 28 6e 56 6d 53 74 65 70 25 64  Ops - (nVmStep%d
5f30: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 29  b->nProgressOps)
5f40: 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78 50  ;.    if( db->xP
5f50: 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f  rogress(db->pPro
5f60: 67 72 65 73 73 41 72 67 29 20 29 7b 0a 20 20 20  gressArg) ){.   
5f70: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49     rc = SQLITE_I
5f80: 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20 20 20  NTERRUPT;.      
5f90: 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
5fa0: 68 61 6c 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  halt;.    }.  }.
5fb0: 23 65 6e 64 69 66 0a 20 20 0a 20 20 62 72 65 61  #endif.  .  brea
5fc0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
5fd0: 20 20 47 6f 73 75 62 20 50 31 20 50 32 20 2a 20    Gosub P1 P2 * 
5fe0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  * *.**.** Write 
5ff0: 74 68 65 20 63 75 72 72 65 6e 74 20 61 64 64 72  the current addr
6000: 65 73 73 20 6f 6e 74 6f 20 72 65 67 69 73 74 65  ess onto registe
6010: 72 20 50 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e  r P1.** and then
6020: 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73   jump to address
6030: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
6040: 47 6f 73 75 62 3a 20 7b 20 20 20 20 20 20 20 20  Gosub: {        
6050: 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
6060: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
6070: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28  >0 && pOp->p1<=(
6080: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
6090: 6f 72 29 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20  or) );.  pIn1 = 
60a0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
60b0: 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65    assert( VdbeMe
60c0: 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d  mDynamic(pIn1)==
60d0: 30 20 29 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  0 );.  memAboutT
60e0: 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29  oChange(p, pIn1)
60f0: 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  ;.  pIn1->flags 
6100: 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e  = MEM_Int;.  pIn
6110: 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52  1->u.i = pc;.  R
6120: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
6130: 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20  p->p1, pIn1);.  
6140: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
6150: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
6160: 20 4f 70 63 6f 64 65 3a 20 20 52 65 74 75 72 6e   Opcode:  Return
6170: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
6180: 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 6e 65  * Jump to the ne
6190: 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  xt instruction a
61a0: 66 74 65 72 20 74 68 65 20 61 64 64 72 65 73 73  fter the address
61b0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
61c0: 20 20 41 66 74 65 72 0a 2a 2a 20 74 68 65 20 6a    After.** the j
61d0: 75 6d 70 2c 20 72 65 67 69 73 74 65 72 20 50 31  ump, register P1
61e0: 20 62 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e   becomes undefin
61f0: 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ed..*/.case OP_R
6200: 65 74 75 72 6e 3a 20 7b 20 20 20 20 20 20 20 20  eturn: {        
6210: 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70     /* in1 */.  p
6220: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
6230: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
6240: 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d  pIn1->flags==MEM
6250: 5f 49 6e 74 20 29 3b 0a 20 20 70 63 20 3d 20 28  _Int );.  pc = (
6260: 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20  int)pIn1->u.i;. 
6270: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d   pIn1->flags = M
6280: 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20  EM_Undefined;.  
6290: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
62a0: 6f 64 65 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69  ode: InitCorouti
62b0: 6e 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ne P1 P2 P3 * *.
62c0: 2a 2a 0a 2a 2a 20 53 65 74 20 75 70 20 72 65 67  **.** Set up reg
62d0: 69 73 74 65 72 20 50 31 20 73 6f 20 74 68 61 74  ister P1 so that
62e0: 20 69 74 20 77 69 6c 6c 20 4f 50 5f 59 69 65 6c   it will OP_Yiel
62f0: 64 20 74 6f 20 74 68 65 20 63 6f 2d 72 6f 75 74  d to the co-rout
6300: 69 6e 65 0a 2a 2a 20 6c 6f 63 61 74 65 64 20 61  ine.** located a
6310: 74 20 61 64 64 72 65 73 73 20 50 33 2e 0a 2a 2a  t address P3..**
6320: 0a 2a 2a 20 49 66 20 50 32 21 3d 30 20 74 68 65  .** If P2!=0 the
6330: 6e 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65  n the co-routine
6340: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
6350: 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c  immediately foll
6360: 6f 77 73 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f  ows.** this opco
6370: 64 65 2e 20 20 53 6f 20 6a 75 6d 70 20 6f 76 65  de.  So jump ove
6380: 72 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65  r the co-routine
6390: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
63a0: 74 6f 0a 2a 2a 20 61 64 64 72 65 73 73 20 50 32  to.** address P2
63b0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 69  ..*/.case OP_Ini
63c0: 74 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20  tCoroutine: {   
63d0: 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61    /* jump */.  a
63e0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
63f0: 20 26 26 20 20 70 4f 70 2d 3e 70 31 3c 3d 28 70   &&  pOp->p1<=(p
6400: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
6410: 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  r) );.  assert( 
6420: 70 4f 70 2d 3e 70 32 3e 3d 30 20 26 26 20 70 4f  pOp->p2>=0 && pO
6430: 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  p->p2<p->nOp );.
6440: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
6450: 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  3>=0 && pOp->p3<
6460: 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f 75 74  p->nOp );.  pOut
6470: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
6480: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 21 56 64  ];.  assert( !Vd
6490: 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75  beMemDynamic(pOu
64a0: 74 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  t) );.  pOut->u.
64b0: 69 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31 3b  i = pOp->p3 - 1;
64c0: 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
64d0: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 69 66 28 20   MEM_Int;.  if( 
64e0: 70 4f 70 2d 3e 70 32 20 29 20 70 63 20 3d 20 70  pOp->p2 ) pc = p
64f0: 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 62 72  Op->p2 - 1;.  br
6500: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
6510: 65 3a 20 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65  e:  EndCoroutine
6520: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
6530: 2a 20 54 68 65 20 69 6e 73 74 72 75 63 74 69 6f  * The instructio
6540: 6e 20 61 74 20 74 68 65 20 61 64 64 72 65 73 73  n at the address
6550: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
6560: 69 73 20 61 6e 20 4f 50 5f 59 69 65 6c 64 2e 0a  is an OP_Yield..
6570: 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 50  ** Jump to the P
6580: 32 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 74  2 parameter of t
6590: 68 61 74 20 4f 50 5f 59 69 65 6c 64 2e 0a 2a 2a  hat OP_Yield..**
65a0: 20 41 66 74 65 72 20 74 68 65 20 6a 75 6d 70 2c   After the jump,
65b0: 20 72 65 67 69 73 74 65 72 20 50 31 20 62 65 63   register P1 bec
65c0: 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a  omes undefined..
65d0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6e 64 43 6f  */.case OP_EndCo
65e0: 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20 20 20  routine: {      
65f0: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
6600: 20 56 64 62 65 4f 70 20 2a 70 43 61 6c 6c 65 72   VdbeOp *pCaller
6610: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
6620: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
6630: 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
6640: 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61  ==MEM_Int );.  a
6650: 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 75 2e 69  ssert( pIn1->u.i
6660: 3e 3d 30 20 26 26 20 70 49 6e 31 2d 3e 75 2e 69  >=0 && pIn1->u.i
6670: 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 43 61  <p->nOp );.  pCa
6680: 6c 6c 65 72 20 3d 20 26 61 4f 70 5b 70 49 6e 31  ller = &aOp[pIn1
6690: 2d 3e 75 2e 69 5d 3b 0a 20 20 61 73 73 65 72 74  ->u.i];.  assert
66a0: 28 20 70 43 61 6c 6c 65 72 2d 3e 6f 70 63 6f 64  ( pCaller->opcod
66b0: 65 3d 3d 4f 50 5f 59 69 65 6c 64 20 29 3b 0a 20  e==OP_Yield );. 
66c0: 20 61 73 73 65 72 74 28 20 70 43 61 6c 6c 65 72   assert( pCaller
66d0: 2d 3e 70 32 3e 3d 30 20 26 26 20 70 43 61 6c 6c  ->p2>=0 && pCall
66e0: 65 72 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b  er->p2<p->nOp );
66f0: 0a 20 20 70 63 20 3d 20 70 43 61 6c 6c 65 72 2d  .  pc = pCaller-
6700: 3e 70 32 20 2d 20 31 3b 0a 20 20 70 49 6e 31 2d  >p2 - 1;.  pIn1-
6710: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64  >flags = MEM_Und
6720: 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b  efined;.  break;
6730: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
6740: 59 69 65 6c 64 20 50 31 20 50 32 20 2a 20 2a 20  Yield P1 P2 * * 
6750: 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74 68 65  *.**.** Swap the
6760: 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72   program counter
6770: 20 77 69 74 68 20 74 68 65 20 76 61 6c 75 65 20   with the value 
6780: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
6790: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f 2d  **.** If the co-
67a0: 72 6f 75 74 69 6e 65 20 65 6e 64 73 20 77 69 74  routine ends wit
67b0: 68 20 4f 50 5f 59 69 65 6c 64 20 6f 72 20 4f 50  h OP_Yield or OP
67c0: 5f 52 65 74 75 72 6e 20 74 68 65 6e 20 63 6f 6e  _Return then con
67d0: 74 69 6e 75 65 0a 2a 2a 20 74 6f 20 74 68 65 20  tinue.** to the 
67e0: 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
67f0: 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63 6f  .  But if the co
6800: 2d 72 6f 75 74 69 6e 65 20 65 6e 64 73 20 77 69  -routine ends wi
6810: 74 68 0a 2a 2a 20 4f 50 5f 45 6e 64 43 6f 72 6f  th.** OP_EndCoro
6820: 75 74 69 6e 65 2c 20 6a 75 6d 70 20 69 6d 6d 65  utine, jump imme
6830: 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
6840: 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c 64 3a  /.case OP_Yield:
6850: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
6860: 20 69 6e 31 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20   in1, jump */.  
6870: 69 6e 74 20 70 63 44 65 73 74 3b 0a 20 20 70 49  int pcDest;.  pI
6880: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
6890: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 56  p1];.  assert( V
68a0: 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49  dbeMemDynamic(pI
68b0: 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31  n1)==0 );.  pIn1
68c0: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
68d0: 74 3b 0a 20 20 70 63 44 65 73 74 20 3d 20 28 69  t;.  pcDest = (i
68e0: 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20  nt)pIn1->u.i;.  
68f0: 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a  pIn1->u.i = pc;.
6900: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
6910: 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b  (pOp->p1, pIn1);
6920: 0a 20 20 70 63 20 3d 20 70 63 44 65 73 74 3b 0a  .  pc = pcDest;.
6930: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
6940: 70 63 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e 75  pcode:  HaltIfNu
6950: 6c 6c 20 20 50 31 20 50 32 20 50 33 20 50 34 20  ll  P1 P2 P3 P4 
6960: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
6970: 20 69 66 20 72 5b 50 33 5d 3d 6e 75 6c 6c 20 68   if r[P3]=null h
6980: 61 6c 74 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20  alt.**.** Check 
6990: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
69a0: 69 73 74 65 72 20 50 33 2e 20 20 49 66 20 69 74  ister P3.  If it
69b0: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61   is NULL then Ha
69c0: 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61  lt using.** para
69d0: 6d 65 74 65 72 20 50 31 2c 20 50 32 2c 20 61 6e  meter P1, P2, an
69e0: 64 20 50 34 20 61 73 20 69 66 20 74 68 69 73 20  d P4 as if this 
69f0: 77 65 72 65 20 61 20 48 61 6c 74 20 69 6e 73 74  were a Halt inst
6a00: 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65  ruction.  If the
6a10: 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67  .** value in reg
6a20: 69 73 74 65 72 20 50 33 20 69 73 20 6e 6f 74 20  ister P3 is not 
6a30: 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73 20  NULL, then this 
6a40: 72 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d  routine is a no-
6a50: 6f 70 2e 0a 2a 2a 20 54 68 65 20 50 35 20 70 61  op..** The P5 pa
6a60: 72 61 6d 65 74 65 72 20 73 68 6f 75 6c 64 20 62  rameter should b
6a70: 65 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  e 1..*/.case OP_
6a80: 48 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20  HaltIfNull: {   
6a90: 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 70     /* in3 */.  p
6aa0: 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
6ab0: 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p3];.  if( (pIn
6ac0: 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  3->flags & MEM_N
6ad0: 75 6c 6c 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b  ull)==0 ) break;
6ae0: 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
6af0: 67 68 20 69 6e 74 6f 20 4f 50 5f 48 61 6c 74 20  gh into OP_Halt 
6b00: 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  */.}../* Opcode:
6b10: 20 20 48 61 6c 74 20 50 31 20 50 32 20 2a 20 50    Halt P1 P2 * P
6b20: 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20  4 P5.**.** Exit 
6b30: 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 41 6c  immediately.  Al
6b40: 6c 20 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c 20  l open cursors, 
6b50: 65 74 63 20 61 72 65 20 63 6c 6f 73 65 64 0a 2a  etc are closed.*
6b60: 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e  * automatically.
6b70: 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65  .**.** P1 is the
6b80: 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65 74   result code ret
6b90: 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
6ba0: 5f 65 78 65 63 28 29 2c 20 73 71 6c 69 74 65 33  _exec(), sqlite3
6bb0: 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72 20  _reset(),.** or 
6bc0: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
6bd0: 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d 61  ().  For a norma
6be0: 6c 20 68 61 6c 74 2c 20 74 68 69 73 20 73 68 6f  l halt, this sho
6bf0: 75 6c 64 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b  uld be SQLITE_OK
6c00: 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72 72   (0)..** For err
6c10: 6f 72 73 2c 20 69 74 20 63 61 6e 20 62 65 20 73  ors, it can be s
6c20: 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c 75 65 2e  ome other value.
6c30: 20 20 49 66 20 50 31 21 3d 30 20 74 68 65 6e 20    If P1!=0 then 
6c40: 50 32 20 77 69 6c 6c 20 64 65 74 65 72 6d 69 6e  P2 will determin
6c50: 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20  e.** whether or 
6c60: 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20  not to rollback 
6c70: 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e  the current tran
6c80: 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74  saction.  Do not
6c90: 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66 20   rollback.** if 
6ca0: 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f 20  P2==OE_Fail. Do 
6cb0: 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66 20  the rollback if 
6cc0: 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e  P2==OE_Rollback.
6cd0: 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f 72    If P2==OE_Abor
6ce0: 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b 20  t,.** then back 
6cf0: 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 20  out all changes 
6d00: 74 68 61 74 20 68 61 76 65 20 6f 63 63 75 72 72  that have occurr
6d10: 65 64 20 64 75 72 69 6e 67 20 74 68 69 73 20 65  ed during this e
6d20: 78 65 63 75 74 69 6f 6e 20 6f 66 20 74 68 65 0a  xecution of the.
6d30: 2a 2a 20 56 44 42 45 2c 20 62 75 74 20 64 6f 20  ** VDBE, but do 
6d40: 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65  not rollback the
6d50: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a   transaction. .*
6d60: 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f  *.** If P4 is no
6d70: 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20 69  t null then it i
6d80: 73 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  s an error messa
6d90: 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a  ge string..**.**
6da0: 20 50 35 20 69 73 20 61 20 76 61 6c 75 65 20 62   P5 is a value b
6db0: 65 74 77 65 65 6e 20 30 20 61 6e 64 20 34 2c 20  etween 0 and 4, 
6dc0: 69 6e 63 6c 75 73 69 76 65 2c 20 74 68 61 74 20  inclusive, that 
6dd0: 6d 6f 64 69 66 69 65 73 20 74 68 65 20 50 34 20  modifies the P4 
6de0: 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20  string..**.**   
6df0: 20 30 3a 20 20 28 6e 6f 20 63 68 61 6e 67 65 29   0:  (no change)
6e00: 0a 2a 2a 20 20 20 20 31 3a 20 20 4e 4f 54 20 4e  .**    1:  NOT N
6e10: 55 4c 4c 20 63 6f 6e 74 72 61 69 6e 74 20 66 61  ULL contraint fa
6e20: 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 32  iled: P4.**    2
6e30: 3a 20 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72  :  UNIQUE constr
6e40: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a  aint failed: P4.
6e50: 2a 2a 20 20 20 20 33 3a 20 20 43 48 45 43 4b 20  **    3:  CHECK 
6e60: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
6e70: 64 3a 20 50 34 0a 2a 2a 20 20 20 20 34 3a 20 20  d: P4.**    4:  
6e80: 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73  FOREIGN KEY cons
6e90: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50  traint failed: P
6ea0: 34 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  4.**.** If P5 is
6eb0: 20 6e 6f 74 20 7a 65 72 6f 20 61 6e 64 20 50 34   not zero and P4
6ec0: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 65   is NULL, then e
6ed0: 76 65 72 79 74 68 69 6e 67 20 61 66 74 65 72 20  verything after 
6ee0: 74 68 65 20 22 3a 22 20 69 73 0a 2a 2a 20 6f 6d  the ":" is.** om
6ef0: 69 74 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  itted..**.** The
6f00: 72 65 20 69 73 20 61 6e 20 69 6d 70 6c 69 65 64  re is an implied
6f10: 20 22 48 61 6c 74 20 30 20 30 20 30 22 20 69 6e   "Halt 0 0 0" in
6f20: 73 74 72 75 63 74 69 6f 6e 20 69 6e 73 65 72 74  struction insert
6f30: 65 64 20 61 74 20 74 68 65 20 76 65 72 79 20 65  ed at the very e
6f40: 6e 64 20 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70  nd of.** every p
6f50: 72 6f 67 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75  rogram.  So a ju
6f60: 6d 70 20 70 61 73 74 20 74 68 65 20 6c 61 73 74  mp past the last
6f70: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20   instruction of 
6f80: 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69  the program.** i
6f90: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 65 78  s the same as ex
6fa0: 65 63 75 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f  ecuting Halt..*/
6fb0: 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b  .case OP_Halt: {
6fc0: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
6fd0: 54 79 70 65 3b 0a 20 20 63 6f 6e 73 74 20 63 68  Type;.  const ch
6fe0: 61 72 20 2a 7a 4c 6f 67 46 6d 74 3b 0a 0a 20 20  ar *zLogFmt;..  
6ff0: 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c  if( pOp->p1==SQL
7000: 49 54 45 5f 4f 4b 20 26 26 20 70 2d 3e 70 46 72  ITE_OK && p->pFr
7010: 61 6d 65 20 29 7b 0a 20 20 20 20 2f 2a 20 48 61  ame ){.    /* Ha
7020: 6c 74 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  lt the sub-progr
7030: 61 6d 2e 20 52 65 74 75 72 6e 20 63 6f 6e 74 72  am. Return contr
7040: 6f 6c 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74  ol to the parent
7050: 20 66 72 61 6d 65 2e 20 2a 2f 0a 20 20 20 20 56   frame. */.    V
7060: 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
7070: 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20   = p->pFrame;.  
7080: 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46    p->pFrame = pF
7090: 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 0a 20  rame->pParent;. 
70a0: 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a     p->nFrame--;.
70b0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
70c0: 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d  etChanges(db, p-
70d0: 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 20 20 70  >nChange);.    p
70e0: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 46  c = sqlite3VdbeF
70f0: 72 61 6d 65 52 65 73 74 6f 72 65 28 70 46 72 61  rameRestore(pFra
7100: 6d 65 29 3b 0a 20 20 20 20 6c 61 73 74 52 6f 77  me);.    lastRow
7110: 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77  id = db->lastRow
7120: 69 64 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  id;.    if( pOp-
7130: 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29  >p2==OE_Ignore )
7140: 7b 0a 20 20 20 20 20 20 2f 2a 20 49 6e 73 74 72  {.      /* Instr
7150: 75 63 74 69 6f 6e 20 70 63 20 69 73 20 74 68 65  uction pc is the
7160: 20 4f 50 5f 50 72 6f 67 72 61 6d 20 74 68 61 74   OP_Program that
7170: 20 69 6e 76 6f 6b 65 64 20 74 68 65 20 73 75 62   invoked the sub
7180: 2d 70 72 6f 67 72 61 6d 20 0a 20 20 20 20 20 20  -program .      
7190: 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69  ** currently bei
71a0: 6e 67 20 68 61 6c 74 65 64 2e 20 49 66 20 74 68  ng halted. If th
71b0: 65 20 70 32 20 69 6e 73 74 72 75 63 74 69 6f 6e  e p2 instruction
71c0: 20 6f 66 20 74 68 69 73 20 4f 50 5f 48 61 6c 74   of this OP_Halt
71d0: 0a 20 20 20 20 20 20 2a 2a 20 69 6e 73 74 72 75  .      ** instru
71e0: 63 74 69 6f 6e 20 69 73 20 73 65 74 20 74 6f 20  ction is set to 
71f0: 4f 45 5f 49 67 6e 6f 72 65 2c 20 74 68 65 6e 20  OE_Ignore, then 
7200: 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  the sub-program 
7210: 69 73 20 74 68 72 6f 77 69 6e 67 0a 20 20 20 20  is throwing.    
7220: 20 20 2a 2a 20 61 6e 20 49 47 4e 4f 52 45 20 65    ** an IGNORE e
7230: 78 63 65 70 74 69 6f 6e 2e 20 49 6e 20 74 68 69  xception. In thi
7240: 73 20 63 61 73 65 20 6a 75 6d 70 20 74 6f 20 74  s case jump to t
7250: 68 65 20 61 64 64 72 65 73 73 20 73 70 65 63 69  he address speci
7260: 66 69 65 64 0a 20 20 20 20 20 20 2a 2a 20 61 73  fied.      ** as
7270: 20 74 68 65 20 70 32 20 6f 66 20 74 68 65 20 63   the p2 of the c
7280: 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61  alling OP_Progra
7290: 6d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 63 20  m.  */.      pc 
72a0: 3d 20 70 2d 3e 61 4f 70 5b 70 63 5d 2e 70 32 2d  = p->aOp[pc].p2-
72b0: 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 4f 70  1;.    }.    aOp
72c0: 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 61   = p->aOp;.    a
72d0: 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20  Mem = p->aMem;. 
72e0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
72f0: 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e 70 31 3b  p->rc = pOp->p1;
7300: 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f  .  p->errorActio
7310: 6e 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 32 3b  n = (u8)pOp->p2;
7320: 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20  .  p->pc = pc;. 
7330: 20 69 66 28 20 70 2d 3e 72 63 20 29 7b 0a 20 20   if( p->rc ){.  
7340: 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b    if( pOp->p5 ){
7350: 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f  .      static co
7360: 6e 73 74 20 63 68 61 72 20 2a 20 63 6f 6e 73 74  nst char * const
7370: 20 61 7a 54 79 70 65 5b 5d 20 3d 20 7b 20 22 4e   azType[] = { "N
7380: 4f 54 20 4e 55 4c 4c 22 2c 20 22 55 4e 49 51 55  OT NULL", "UNIQU
7390: 45 22 2c 20 22 43 48 45 43 4b 22 2c 0a 20 20 20  E", "CHECK",.   
73a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
73b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
73c0: 20 20 20 20 20 20 20 20 20 20 22 46 4f 52 45 49            "FOREI
73d0: 47 4e 20 4b 45 59 22 20 7d 3b 0a 20 20 20 20 20  GN KEY" };.     
73e0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
73f0: 3e 3d 31 20 26 26 20 70 4f 70 2d 3e 70 35 3c 3d  >=1 && pOp->p5<=
7400: 34 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63  4 );.      testc
7410: 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 31 20  ase( pOp->p5==1 
7420: 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73  );.      testcas
7430: 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 32 20 29 3b  e( pOp->p5==2 );
7440: 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
7450: 20 70 4f 70 2d 3e 70 35 3d 3d 33 20 29 3b 0a 20   pOp->p5==3 );. 
7460: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
7470: 4f 70 2d 3e 70 35 3d 3d 34 20 29 3b 0a 20 20 20  Op->p5==4 );.   
7480: 20 20 20 7a 54 79 70 65 20 3d 20 61 7a 54 79 70     zType = azTyp
7490: 65 5b 70 4f 70 2d 3e 70 35 2d 31 5d 3b 0a 20 20  e[pOp->p5-1];.  
74a0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a    }else{.      z
74b0: 54 79 70 65 20 3d 20 30 3b 0a 20 20 20 20 7d 0a  Type = 0;.    }.
74c0: 20 20 20 20 61 73 73 65 72 74 28 20 7a 54 79 70      assert( zTyp
74d0: 65 21 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  e!=0 || pOp->p4.
74e0: 7a 21 3d 30 20 29 3b 0a 20 20 20 20 7a 4c 6f 67  z!=0 );.    zLog
74f0: 46 6d 74 20 3d 20 22 61 62 6f 72 74 20 61 74 20  Fmt = "abort at 
7500: 25 64 20 69 6e 20 5b 25 73 5d 3a 20 25 73 22 3b  %d in [%s]: %s";
7510: 0a 20 20 20 20 69 66 28 20 7a 54 79 70 65 20 26  .    if( zType &
7520: 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20  & pOp->p4.z ){. 
7530: 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
7540: 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
7550: 67 2c 20 64 62 2c 20 22 25 73 20 63 6f 6e 73 74  g, db, "%s const
7560: 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 25 73  raint failed: %s
7570: 22 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  ", .            
7580: 20 20 20 20 20 20 20 20 20 20 20 7a 54 79 70 65             zType
7590: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
75a0: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d    }else if( pOp-
75b0: 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20 73  >p4.z ){.      s
75c0: 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
75d0: 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
75e0: 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a   "%s", pOp->p4.z
75f0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
7600: 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
7610: 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
7620: 2c 20 64 62 2c 20 22 25 73 20 63 6f 6e 73 74 72  , db, "%s constr
7630: 61 69 6e 74 20 66 61 69 6c 65 64 22 2c 20 7a 54  aint failed", zT
7640: 79 70 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ype);.    }.    
7650: 73 71 6c 69 74 65 33 5f 6c 6f 67 28 70 4f 70 2d  sqlite3_log(pOp-
7660: 3e 70 31 2c 20 7a 4c 6f 67 46 6d 74 2c 20 70 63  >p1, zLogFmt, pc
7670: 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45  , p->zSql, p->zE
7680: 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 72 63  rrMsg);.  }.  rc
7690: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 48 61   = sqlite3VdbeHa
76a0: 6c 74 28 70 29 3b 0a 20 20 61 73 73 65 72 74 28  lt(p);.  assert(
76b0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc==SQLITE_BUSY
76c0: 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f   || rc==SQLITE_O
76d0: 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f  K || rc==SQLITE_
76e0: 45 52 52 4f 52 20 29 3b 0a 20 20 69 66 28 20 72  ERROR );.  if( r
76f0: 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  c==SQLITE_BUSY )
7700: 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63  {.    p->rc = rc
7710: 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
7720: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
7730: 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
7740: 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63 26 30 78 66  OK || (p->rc&0xf
7750: 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54  f)==SQLITE_CONST
7760: 52 41 49 4e 54 20 29 3b 0a 20 20 20 20 61 73 73  RAINT );.    ass
7770: 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
7780: 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72  OK || db->nDefer
7790: 72 65 64 43 6f 6e 73 3e 30 20 7c 7c 20 64 62 2d  redCons>0 || db-
77a0: 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
77b0: 73 3e 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  s>0 );.    rc = 
77c0: 70 2d 3e 72 63 20 3f 20 53 51 4c 49 54 45 5f 45  p->rc ? SQLITE_E
77d0: 52 52 4f 52 20 3a 20 53 51 4c 49 54 45 5f 44 4f  RROR : SQLITE_DO
77e0: 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76  NE;.  }.  goto v
77f0: 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f  dbe_return;.}../
7800: 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 65  * Opcode: Intege
7810: 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  r P1 P2 * * *.**
7820: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
7830: 3d 50 31 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33 32  =P1.**.** The 32
7840: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c  -bit integer val
7850: 75 65 20 50 31 20 69 73 20 77 72 69 74 74 65 6e  ue P1 is written
7860: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
7870: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  2..*/.case OP_In
7880: 74 65 67 65 72 3a 20 7b 20 20 20 20 20 20 20 20  teger: {        
7890: 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
78a0: 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75  ase */.  pOut->u
78b0: 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  .i = pOp->p1;.  
78c0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
78d0: 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20 50 32 20  ode: Int64 * 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 50 34 0a 2a 2a 0a  is: r[P2]=P4.**.
7900: 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
7910: 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20 69  er to a 64-bit i
7920: 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2a  nteger value..**
7930: 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75   Write that valu
7940: 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
7950: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P2..*/.case OP_I
7960: 6e 74 36 34 3a 20 7b 20 20 20 20 20 20 20 20 20  nt64: {         
7970: 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
7980: 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74  ease */.  assert
7990: 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36 34 21 3d  ( pOp->p4.pI64!=
79a0: 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  0 );.  pOut->u.i
79b0: 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 49 36 34   = *pOp->p4.pI64
79c0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  ;.  break;.}..#i
79d0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
79e0: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
79f0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c  ./* Opcode: Real
7a00: 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20   * P2 * P4 *.** 
7a10: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
7a20: 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  P4.**.** P4 is a
7a30: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34   pointer to a 64
7a40: 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20 70 6f  -bit floating po
7a50: 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72  int value..** Wr
7a60: 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69  ite that value i
7a70: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
7a80: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c  .*/.case OP_Real
7a90: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
7aa0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 46 4c 4f  * same as TK_FLO
7ab0: 41 54 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c 65  AT, out2-prerele
7ac0: 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66  ase */.  pOut->f
7ad0: 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b  lags = MEM_Real;
7ae0: 0a 20 20 61 73 73 65 72 74 28 20 21 73 71 6c 69  .  assert( !sqli
7af0: 74 65 33 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70  te3IsNaN(*pOp->p
7b00: 34 2e 70 52 65 61 6c 29 20 29 3b 0a 20 20 70 4f  4.pReal) );.  pO
7b10: 75 74 2d 3e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34  ut->r = *pOp->p4
7b20: 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b  .pReal;.  break;
7b30: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70  .}.#endif../* Op
7b40: 63 6f 64 65 3a 20 53 74 72 69 6e 67 38 20 2a 20  code: String8 * 
7b50: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
7b60: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34  opsis: r[P2]='P4
7b70: 27 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74  '.**.** P4 point
7b80: 73 20 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69  s to a nul termi
7b90: 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74 72 69  nated UTF-8 stri
7ba0: 6e 67 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20  ng. This opcode 
7bb0: 69 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a  is transformed .
7bc0: 2a 2a 20 69 6e 74 6f 20 61 6e 20 4f 50 5f 53 74  ** into an OP_St
7bd0: 72 69 6e 67 20 62 65 66 6f 72 65 20 69 74 20 69  ring before it i
7be0: 73 20 65 78 65 63 75 74 65 64 20 66 6f 72 20 74  s executed for t
7bf0: 68 65 20 66 69 72 73 74 20 74 69 6d 65 2e 20 20  he first time.  
7c00: 44 75 72 69 6e 67 0a 2a 2a 20 74 68 69 73 20 74  During.** this t
7c10: 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 2c 20 74  ransformation, t
7c20: 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 73 74 72  he length of str
7c30: 69 6e 67 20 50 34 20 69 73 20 63 6f 6d 70 75 74  ing P4 is comput
7c40: 65 64 20 61 6e 64 20 73 74 6f 72 65 64 0a 2a 2a  ed and stored.**
7c50: 20 61 73 20 74 68 65 20 50 31 20 70 61 72 61 6d   as the P1 param
7c60: 65 74 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  eter..*/.case OP
7c70: 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20 20 20  _String8: {     
7c80: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
7c90: 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32 2d 70  K_STRING, out2-p
7ca0: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61  rerelease */.  a
7cb0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a  ssert( pOp->p4.z
7cc0: 21 3d 30 20 29 3b 0a 20 20 70 4f 70 2d 3e 6f 70  !=0 );.  pOp->op
7cd0: 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72 69 6e 67  code = OP_String
7ce0: 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20 73 71  ;.  pOp->p1 = sq
7cf0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f  lite3Strlen30(pO
7d00: 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e 64  p->p4.z);..#ifnd
7d10: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
7d20: 54 46 31 36 0a 20 20 69 66 28 20 65 6e 63 6f 64  TF16.  if( encod
7d30: 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55 54 46 38  ing!=SQLITE_UTF8
7d40: 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
7d50: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74  ite3VdbeMemSetSt
7d60: 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e  r(pOut, pOp->p4.
7d70: 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54  z, -1, SQLITE_UT
7d80: 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  F8, SQLITE_STATI
7d90: 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  C);.    if( rc==
7da0: 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29 20  SQLITE_TOOBIG ) 
7db0: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
7dc0: 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21    if( SQLITE_OK!
7dd0: 3d 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e  =sqlite3VdbeChan
7de0: 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c  geEncoding(pOut,
7df0: 20 65 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f 74   encoding) ) got
7e00: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73  o no_mem;.    as
7e10: 73 65 72 74 28 20 70 4f 75 74 2d 3e 7a 4d 61 6c  sert( pOut->zMal
7e20: 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a  loc==pOut->z );.
7e30: 20 20 20 20 61 73 73 65 72 74 28 20 56 64 62 65      assert( Vdbe
7e40: 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29  MemDynamic(pOut)
7e50: 3d 3d 30 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d  ==0 );.    pOut-
7e60: 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20  >zMalloc = 0;.  
7e70: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d    pOut->flags |=
7e80: 20 4d 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20   MEM_Static;.   
7e90: 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
7ea0: 3d 3d 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a  ==P4_DYNAMIC ){.
7eb0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
7ec0: 72 65 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e  ree(db, pOp->p4.
7ed0: 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f  z);.    }.    pO
7ee0: 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 44  p->p4type = P4_D
7ef0: 59 4e 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d  YNAMIC;.    pOp-
7f00: 3e 70 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b  >p4.z = pOut->z;
7f10: 0a 20 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70  .    pOp->p1 = p
7f20: 4f 75 74 2d 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64  Out->n;.  }.#end
7f30: 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  if.  if( pOp->p1
7f40: 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  >db->aLimit[SQLI
7f50: 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
7f60: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
7f70: 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46  _big;.  }.  /* F
7f80: 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
7f90: 68 65 20 6e 65 78 74 20 63 61 73 65 2c 20 4f 50  he next case, OP
7fa0: 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a  _String */.}.  .
7fb0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e  /* Opcode: Strin
7fc0: 67 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  g P1 P2 * P4 *.*
7fd0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
7fe0: 5d 3d 27 50 34 27 20 28 6c 65 6e 3d 50 31 29 0a  ]='P4' (len=P1).
7ff0: 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67  **.** The string
8000: 20 76 61 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e   value P4 of len
8010: 67 74 68 20 50 31 20 28 62 79 74 65 73 29 20 69  gth P1 (bytes) i
8020: 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
8030: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
8040: 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20   OP_String: {   
8050: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
8060: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61  rerelease */.  a
8070: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a  ssert( pOp->p4.z
8080: 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66  !=0 );.  pOut->f
8090: 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d  lags = MEM_Str|M
80a0: 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65  EM_Static|MEM_Te
80b0: 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20  rm;.  pOut->z = 
80c0: 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75  pOp->p4.z;.  pOu
80d0: 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  t->n = pOp->p1;.
80e0: 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e    pOut->enc = en
80f0: 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45  coding;.  UPDATE
8100: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
8110: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
8120: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c  ./* Opcode: Null
8130: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
8140: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 32   Synopsis:  r[P2
8150: 2e 2e 50 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a  ..P3]=NULL.**.**
8160: 20 57 72 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e   Write a NULL in
8170: 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 32 2e  to registers P2.
8180: 20 20 49 66 20 50 33 20 67 72 65 61 74 65 72 20    If P3 greater 
8190: 74 68 61 6e 20 50 32 2c 20 74 68 65 6e 20 61 6c  than P2, then al
81a0: 73 6f 20 77 72 69 74 65 0a 2a 2a 20 4e 55 4c 4c  so write.** NULL
81b0: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
81c0: 33 20 61 6e 64 20 65 76 65 72 79 20 72 65 67 69  3 and every regi
81d0: 73 74 65 72 20 69 6e 20 62 65 74 77 65 65 6e 20  ster in between 
81e0: 50 32 20 61 6e 64 20 50 33 2e 20 20 49 66 20 50  P2 and P3.  If P
81f0: 33 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61  3.** is less tha
8200: 6e 20 50 32 20 28 74 79 70 69 63 61 6c 6c 79 20  n P2 (typically 
8210: 50 33 20 69 73 20 7a 65 72 6f 29 20 74 68 65 6e  P3 is zero) then
8220: 20 6f 6e 6c 79 20 72 65 67 69 73 74 65 72 20 50   only register P
8230: 32 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20 4e  2 is.** set to N
8240: 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ULL..**.** If th
8250: 65 20 50 31 20 76 61 6c 75 65 20 69 73 20 6e 6f  e P1 value is no
8260: 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 6c 73  n-zero, then als
8270: 6f 20 73 65 74 20 74 68 65 20 4d 45 4d 5f 43 6c  o set the MEM_Cl
8280: 65 61 72 65 64 20 66 6c 61 67 20 73 6f 20 74 68  eared flag so th
8290: 61 74 0a 2a 2a 20 4e 55 4c 4c 20 76 61 6c 75 65  at.** NULL value
82a0: 73 20 77 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70 61  s will not compa
82b0: 72 65 20 65 71 75 61 6c 20 65 76 65 6e 20 69 66  re equal even if
82c0: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69   SQLITE_NULLEQ i
82d0: 73 20 73 65 74 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e  s set on.** OP_N
82e0: 65 20 6f 72 20 4f 50 5f 45 71 2e 0a 2a 2f 0a 63  e or OP_Eq..*/.c
82f0: 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20  ase OP_Null: {  
8300: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
8310: 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
8320: 20 69 6e 74 20 63 6e 74 3b 0a 20 20 75 31 36 20   int cnt;.  u16 
8330: 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 63 6e 74 20  nullFlag;.  cnt 
8340: 3d 20 70 4f 70 2d 3e 70 33 2d 70 4f 70 2d 3e 70  = pOp->p3-pOp->p
8350: 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  2;.  assert( pOp
8360: 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
8370: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
8380: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75  pOut->flags = nu
8390: 6c 6c 46 6c 61 67 20 3d 20 70 4f 70 2d 3e 70 31  llFlag = pOp->p1
83a0: 20 3f 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d   ? (MEM_Null|MEM
83b0: 5f 43 6c 65 61 72 65 64 29 20 3a 20 4d 45 4d 5f  _Cleared) : MEM_
83c0: 4e 75 6c 6c 3b 0a 20 20 77 68 69 6c 65 28 20 63  Null;.  while( c
83d0: 6e 74 3e 30 20 29 7b 0a 20 20 20 20 70 4f 75 74  nt>0 ){.    pOut
83e0: 2b 2b 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74  ++;.    memAbout
83f0: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
8400: 29 3b 0a 20 20 20 20 56 64 62 65 4d 65 6d 52 65  );.    VdbeMemRe
8410: 6c 65 61 73 65 28 70 4f 75 74 29 3b 0a 20 20 20  lease(pOut);.   
8420: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e   pOut->flags = n
8430: 75 6c 6c 46 6c 61 67 3b 0a 20 20 20 20 63 6e 74  ullFlag;.    cnt
8440: 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  --;.  }.  break;
8450: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
8460: 6f 66 74 4e 75 6c 6c 20 50 31 20 2a 20 2a 20 2a  oftNull P1 * * *
8470: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
8480: 20 72 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a   r[P1]=NULL.**.*
8490: 2a 20 53 65 74 20 72 65 67 69 73 74 65 72 20 50  * Set register P
84a0: 31 20 74 6f 20 68 61 76 65 20 74 68 65 20 76 61  1 to have the va
84b0: 6c 75 65 20 4e 55 4c 4c 20 61 73 20 73 65 65 6e  lue NULL as seen
84c0: 20 62 79 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52   by the OP_MakeR
84d0: 65 63 6f 72 64 0a 2a 2a 20 69 6e 73 74 72 75 63  ecord.** instruc
84e0: 74 69 6f 6e 2c 20 62 75 74 20 64 6f 20 6e 6f 74  tion, but do not
84f0: 20 66 72 65 65 20 61 6e 79 20 73 74 72 69 6e 67   free any string
8500: 20 6f 72 20 62 6c 6f 62 20 6d 65 6d 6f 72 79 20   or blob memory 
8510: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a  associated with.
8520: 2a 2a 20 74 68 65 20 72 65 67 69 73 74 65 72 2c  ** the register,
8530: 20 73 6f 20 74 68 61 74 20 69 66 20 74 68 65 20   so that if the 
8540: 76 61 6c 75 65 20 77 61 73 20 61 20 73 74 72 69  value was a stri
8550: 6e 67 20 6f 72 20 62 6c 6f 62 20 74 68 61 74 20  ng or blob that 
8560: 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c  was.** previousl
8570: 79 20 63 6f 70 69 65 64 20 75 73 69 6e 67 20 4f  y copied using O
8580: 50 5f 53 43 6f 70 79 2c 20 74 68 65 20 63 6f 70  P_SCopy, the cop
8590: 69 65 73 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75  ies will continu
85a0: 65 20 74 6f 20 62 65 20 76 61 6c 69 64 2e 0a 2a  e to be valid..*
85b0: 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 66 74 4e 75  /.case OP_SoftNu
85c0: 6c 6c 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  ll: {.  assert( 
85d0: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
85e0: 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p1<=(p->nMem-p
85f0: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
8600: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
8610: 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66  ->p1];.  pOut->f
8620: 6c 61 67 73 20 3d 20 28 70 4f 75 74 2d 3e 66 6c  lags = (pOut->fl
8630: 61 67 73 7c 4d 45 4d 5f 4e 75 6c 6c 29 26 7e 4d  ags|MEM_Null)&~M
8640: 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20  EM_Undefined;.  
8650: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
8660: 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20 50 32 20  ode: Blob P1 P2 
8670: 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
8680: 69 73 3a 20 72 5b 50 32 5d 3d 50 34 20 28 6c 65  is: r[P2]=P4 (le
8690: 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 50 34 20 70  n=P1).**.** P4 p
86a0: 6f 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62 20  oints to a blob 
86b0: 6f 66 20 64 61 74 61 20 50 31 20 62 79 74 65 73  of data P1 bytes
86c0: 20 6c 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74 68   long.  Store th
86d0: 69 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65  is.** blob in re
86e0: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
86f0: 73 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20  se OP_Blob: {   
8700: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8710: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
8720: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
8730: 2d 3e 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d  ->p1 <= SQLITE_M
8740: 41 58 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20 73  AX_LENGTH );.  s
8750: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
8760: 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70  Str(pOut, pOp->p
8770: 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c  4.z, pOp->p1, 0,
8780: 20 30 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63   0);.  pOut->enc
8790: 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55   = encoding;.  U
87a0: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
87b0: 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
87c0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
87d0: 20 56 61 72 69 61 62 6c 65 20 50 31 20 50 32 20   Variable P1 P2 
87e0: 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
87f0: 69 73 3a 20 72 5b 50 32 5d 3d 70 61 72 61 6d 65  is: r[P2]=parame
8800: 74 65 72 28 50 31 2c 50 34 29 0a 2a 2a 0a 2a 2a  ter(P1,P4).**.**
8810: 20 54 72 61 6e 73 66 65 72 20 74 68 65 20 76 61   Transfer the va
8820: 6c 75 65 73 20 6f 66 20 62 6f 75 6e 64 20 70 61  lues of bound pa
8830: 72 61 6d 65 74 65 72 20 50 31 20 69 6e 74 6f 20  rameter P1 into 
8840: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a  register P2.**.*
8850: 2a 20 49 66 20 74 68 65 20 70 61 72 61 6d 65 74  * If the paramet
8860: 65 72 20 69 73 20 6e 61 6d 65 64 2c 20 74 68 65  er is named, the
8870: 6e 20 69 74 73 20 6e 61 6d 65 20 61 70 70 65 61  n its name appea
8880: 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 20 54 68 65  rs in P4..** The
8890: 20 50 34 20 76 61 6c 75 65 20 69 73 20 75 73 65   P4 value is use
88a0: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 62 69 6e  d by sqlite3_bin
88b0: 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
88c0: 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ()..*/.case OP_V
88d0: 61 72 69 61 62 6c 65 3a 20 7b 20 20 20 20 20 20  ariable: {      
88e0: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
88f0: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 4d 65  erelease */.  Me
8900: 6d 20 2a 70 56 61 72 3b 20 20 20 20 20 20 20 2f  m *pVar;       /
8910: 2a 20 56 61 6c 75 65 20 62 65 69 6e 67 20 74 72  * Value being tr
8920: 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20 20  ansferred */..  
8930: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
8940: 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d  0 && pOp->p1<=p-
8950: 3e 6e 56 61 72 20 29 3b 0a 20 20 61 73 73 65 72  >nVar );.  asser
8960: 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20  t( pOp->p4.z==0 
8970: 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 70 2d  || pOp->p4.z==p-
8980: 3e 61 7a 56 61 72 5b 70 4f 70 2d 3e 70 31 2d 31  >azVar[pOp->p1-1
8990: 5d 20 29 3b 0a 20 20 70 56 61 72 20 3d 20 26 70  ] );.  pVar = &p
89a0: 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20 2d  ->aVar[pOp->p1 -
89b0: 20 31 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69 74   1];.  if( sqlit
89c0: 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28  e3VdbeMemTooBig(
89d0: 70 56 61 72 29 20 29 7b 0a 20 20 20 20 67 6f 74  pVar) ){.    got
89e0: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
89f0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
8a00: 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
8a10: 20 70 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69   pVar, MEM_Stati
8a20: 63 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  c);.  UPDATE_MAX
8a30: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
8a40: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
8a50: 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20  Opcode: Move P1 
8a60: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
8a70: 6f 70 73 69 73 3a 20 20 72 5b 50 32 40 50 33 5d  opsis:  r[P2@P3]
8a80: 3d 72 5b 50 31 40 50 33 5d 0a 2a 2a 0a 2a 2a 20  =r[P1@P3].**.** 
8a90: 4d 6f 76 65 20 74 68 65 20 50 33 20 76 61 6c 75  Move the P3 valu
8aa0: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
8ab0: 31 2e 2e 50 31 2b 50 33 2d 31 20 6f 76 65 72 20  1..P1+P3-1 over 
8ac0: 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
8ad0: 73 20 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20  s P2..P2+P3-1.  
8ae0: 52 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31  Registers P1..P1
8af0: 2b 50 33 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66  +P3-1 are.** lef
8b00: 74 20 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c  t holding a NULL
8b10: 2e 20 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f  .  It is an erro
8b20: 72 20 66 6f 72 20 72 65 67 69 73 74 65 72 20 72  r for register r
8b30: 61 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b  anges.** P1..P1+
8b40: 50 33 2d 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b  P3-1 and P2..P2+
8b50: 50 33 2d 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e  P3-1 to overlap.
8b60: 20 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72    It is an error
8b70: 0a 2a 2a 20 66 6f 72 20 50 33 20 74 6f 20 62 65  .** for P3 to be
8b80: 20 6c 65 73 73 20 74 68 61 6e 20 31 2e 0a 2a 2f   less than 1..*/
8b90: 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b  .case OP_Move: {
8ba0: 0a 20 20 63 68 61 72 20 2a 7a 4d 61 6c 6c 6f 63  .  char *zMalloc
8bb0: 3b 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 76  ;   /* Holding v
8bc0: 61 72 69 61 62 6c 65 20 66 6f 72 20 61 6c 6c 6f  ariable for allo
8bd0: 63 61 74 65 64 20 6d 65 6d 6f 72 79 20 2a 2f 0a  cated memory */.
8be0: 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20    int n;        
8bf0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
8c00: 72 65 67 69 73 74 65 72 73 20 6c 65 66 74 20 74  registers left t
8c10: 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20  o copy */.  int 
8c20: 70 31 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p1;          /* 
8c30: 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79  Register to copy
8c40: 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70   from */.  int p
8c50: 32 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  2;          /* R
8c60: 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20  egister to copy 
8c70: 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70  to */..  n = pOp
8c80: 2d 3e 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70  ->p3;.  p1 = pOp
8c90: 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70  ->p1;.  p2 = pOp
8ca0: 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
8cb0: 6e 3e 30 20 26 26 20 70 31 3e 30 20 26 26 20 70  n>0 && p1>0 && p
8cc0: 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  2>0 );.  assert(
8cd0: 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b   p1+n<=p2 || p2+
8ce0: 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31  n<=p1 );..  pIn1
8cf0: 20 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20   = &aMem[p1];.  
8d00: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d  pOut = &aMem[p2]
8d10: 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65  ;.  do{.    asse
8d20: 72 74 28 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b  rt( pOut<=&aMem[
8d30: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
8d40: 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73  sor)] );.    ass
8d50: 65 72 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65 6d  ert( pIn1<=&aMem
8d60: 5b 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  [(p->nMem-p->nCu
8d70: 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73  rsor)] );.    as
8d80: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
8d90: 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 6d 65  (pIn1) );.    me
8da0: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
8db0: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c  , pOut);.    sql
8dc0: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
8dd0: 73 65 28 70 4f 75 74 29 3b 0a 20 20 20 20 7a 4d  se(pOut);.    zM
8de0: 61 6c 6c 6f 63 20 3d 20 70 4f 75 74 2d 3e 7a 4d  alloc = pOut->zM
8df0: 61 6c 6c 6f 63 3b 0a 20 20 20 20 6d 65 6d 63 70  alloc;.    memcp
8e00: 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 73 69  y(pOut, pIn1, si
8e10: 7a 65 6f 66 28 4d 65 6d 29 29 3b 0a 23 69 66 64  zeof(Mem));.#ifd
8e20: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
8e30: 20 20 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53      if( pOut->pS
8e40: 63 6f 70 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d 5b  copyFrom>=&aMem[
8e50: 70 31 5d 20 26 26 20 70 4f 75 74 2d 3e 70 53 63  p1] && pOut->pSc
8e60: 6f 70 79 46 72 6f 6d 3c 26 61 4d 65 6d 5b 70 31  opyFrom<&aMem[p1
8e70: 2b 70 4f 70 2d 3e 70 33 5d 20 29 7b 0a 20 20 20  +pOp->p3] ){.   
8e80: 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46     pOut->pScopyF
8e90: 72 6f 6d 20 2b 3d 20 70 31 20 2d 20 70 4f 70 2d  rom += p1 - pOp-
8ea0: 3e 70 32 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  >p2;.    }.#endi
8eb0: 66 0a 20 20 20 20 70 49 6e 31 2d 3e 66 6c 61 67  f.    pIn1->flag
8ec0: 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65  s = MEM_Undefine
8ed0: 64 3b 0a 20 20 20 20 70 49 6e 31 2d 3e 78 44 65  d;.    pIn1->xDe
8ee0: 6c 20 3d 20 30 3b 0a 20 20 20 20 70 49 6e 31 2d  l = 0;.    pIn1-
8ef0: 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 7a 4d 61 6c 6c  >zMalloc = zMall
8f00: 6f 63 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52  oc;.    REGISTER
8f10: 5f 54 52 41 43 45 28 70 32 2b 2b 2c 20 70 4f 75  _TRACE(p2++, pOu
8f20: 74 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a  t);.    pIn1++;.
8f30: 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d 77      pOut++;.  }w
8f40: 68 69 6c 65 28 20 2d 2d 6e 20 29 3b 0a 20 20 62  hile( --n );.  b
8f50: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
8f60: 64 65 3a 20 43 6f 70 79 20 50 31 20 50 32 20 50  de: Copy P1 P2 P
8f70: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
8f80: 73 3a 20 72 5b 50 32 40 50 33 2b 31 5d 3d 72 5b  s: r[P2@P3+1]=r[
8f90: 50 31 40 50 33 2b 31 5d 0a 2a 2a 0a 2a 2a 20 4d  P1@P3+1].**.** M
8fa0: 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 72 65  ake a copy of re
8fb0: 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50  gisters P1..P1+P
8fc0: 33 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 73  3 into registers
8fd0: 20 50 32 2e 2e 50 32 2b 50 33 2e 0a 2a 2a 0a 2a   P2..P2+P3..**.*
8fe0: 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
8ff0: 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65 65 70 20  on makes a deep 
9000: 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75  copy of the valu
9010: 65 2e 20 20 41 20 64 75 70 6c 69 63 61 74 65 0a  e.  A duplicate.
9020: 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66 20 61 6e  ** is made of an
9030: 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62  y string or blob
9040: 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65 20   constant.  See 
9050: 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a  also OP_SCopy..*
9060: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a 20  /.case OP_Copy: 
9070: 7b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20  {.  int n;..  n 
9080: 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 49 6e  = pOp->p3;.  pIn
9090: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
90a0: 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  1];.  pOut = &aM
90b0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
90c0: 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e  ssert( pOut!=pIn
90d0: 31 20 29 3b 0a 20 20 77 68 69 6c 65 28 20 31 20  1 );.  while( 1 
90e0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
90f0: 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
9100: 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d  (pOut, pIn1, MEM
9110: 5f 45 70 68 65 6d 29 3b 0a 20 20 20 20 44 65 65  _Ephem);.    Dee
9120: 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74  phemeralize(pOut
9130: 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
9140: 5f 44 45 42 55 47 0a 20 20 20 20 70 4f 75 74 2d  _DEBUG.    pOut-
9150: 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 30 3b  >pScopyFrom = 0;
9160: 0a 23 65 6e 64 69 66 0a 20 20 20 20 52 45 47 49  .#endif.    REGI
9170: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
9180: 70 32 2b 70 4f 70 2d 3e 70 33 2d 6e 2c 20 70 4f  p2+pOp->p3-n, pO
9190: 75 74 29 3b 0a 20 20 20 20 69 66 28 20 28 6e 2d  ut);.    if( (n-
91a0: 2d 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20  -)==0 ) break;. 
91b0: 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 70     pOut++;.    p
91c0: 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65  In1++;.  }.  bre
91d0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
91e0: 3a 20 53 43 6f 70 79 20 50 31 20 50 32 20 2a 20  : SCopy P1 P2 * 
91f0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
9200: 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a   r[P2]=r[P1].**.
9210: 2a 2a 20 4d 61 6b 65 20 61 20 73 68 61 6c 6c 6f  ** Make a shallo
9220: 77 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74  w copy of regist
9230: 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73  er P1 into regis
9240: 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68  ter P2..**.** Th
9250: 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d  is instruction m
9260: 61 6b 65 73 20 61 20 73 68 61 6c 6c 6f 77 20 63  akes a shallow c
9270: 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65  opy of the value
9280: 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a  .  If the value.
9290: 2a 2a 20 69 73 20 61 20 73 74 72 69 6e 67 20 6f  ** is a string o
92a0: 72 20 62 6c 6f 62 2c 20 74 68 65 6e 20 74 68 65  r blob, then the
92b0: 20 63 6f 70 79 20 69 73 20 6f 6e 6c 79 20 61 20   copy is only a 
92c0: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 0a 2a  pointer to the.*
92d0: 2a 20 6f 72 69 67 69 6e 61 6c 20 61 6e 64 20 68  * original and h
92e0: 65 6e 63 65 20 69 66 20 74 68 65 20 6f 72 69 67  ence if the orig
92f0: 69 6e 61 6c 20 63 68 61 6e 67 65 73 20 73 6f 20  inal changes so 
9300: 77 69 6c 6c 20 74 68 65 20 63 6f 70 79 2e 0a 2a  will the copy..*
9310: 2a 20 57 6f 72 73 65 2c 20 69 66 20 74 68 65 20  * Worse, if the 
9320: 6f 72 69 67 69 6e 61 6c 20 69 73 20 64 65 61 6c  original is deal
9330: 6c 6f 63 61 74 65 64 2c 20 74 68 65 20 63 6f 70  located, the cop
9340: 79 20 62 65 63 6f 6d 65 73 20 69 6e 76 61 6c 69  y becomes invali
9350: 64 2e 0a 2a 2a 20 54 68 75 73 20 74 68 65 20 70  d..** Thus the p
9360: 72 6f 67 72 61 6d 20 6d 75 73 74 20 67 75 61 72  rogram must guar
9370: 61 6e 74 65 65 20 74 68 61 74 20 74 68 65 20 6f  antee that the o
9380: 72 69 67 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74  riginal will not
9390: 20 63 68 61 6e 67 65 0a 2a 2a 20 64 75 72 69 6e   change.** durin
93a0: 67 20 74 68 65 20 6c 69 66 65 74 69 6d 65 20 6f  g the lifetime o
93b0: 66 20 74 68 65 20 63 6f 70 79 2e 20 20 55 73 65  f the copy.  Use
93c0: 20 4f 50 5f 43 6f 70 79 20 74 6f 20 6d 61 6b 65   OP_Copy to make
93d0: 20 61 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63   a complete.** c
93e0: 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  opy..*/.case OP_
93f0: 53 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20 20  SCopy: {        
9400: 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
9410: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
9420: 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p1];.  pOut =
9430: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
9440: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 21  .  assert( pOut!
9450: 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74  =pIn1 );.  sqlit
9460: 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
9470: 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c  Copy(pOut, pIn1,
9480: 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 23 69 66   MEM_Ephem);.#if
9490: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
94a0: 0a 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63  .  if( pOut->pSc
94b0: 6f 70 79 46 72 6f 6d 3d 3d 30 20 29 20 70 4f 75  opyFrom==0 ) pOu
94c0: 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20  t->pScopyFrom = 
94d0: 70 49 6e 31 3b 0a 23 65 6e 64 69 66 0a 20 20 62  pIn1;.#endif.  b
94e0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
94f0: 64 65 3a 20 52 65 73 75 6c 74 52 6f 77 20 50 31  de: ResultRow P1
9500: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
9510: 6f 70 73 69 73 3a 20 20 6f 75 74 70 75 74 3d 72  opsis:  output=r
9520: 5b 50 31 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68  [P1@P2].**.** Th
9530: 65 20 72 65 67 69 73 74 65 72 73 20 50 31 20 74  e registers P1 t
9540: 68 72 6f 75 67 68 20 50 31 2b 50 32 2d 31 20 63  hrough P1+P2-1 c
9550: 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c 65 20  ontain a single 
9560: 72 6f 77 20 6f 66 0a 2a 2a 20 72 65 73 75 6c 74  row of.** result
9570: 73 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 63  s. This opcode c
9580: 61 75 73 65 73 20 74 68 65 20 73 71 6c 69 74 65  auses the sqlite
9590: 33 5f 73 74 65 70 28 29 20 63 61 6c 6c 20 74 6f  3_step() call to
95a0: 20 74 65 72 6d 69 6e 61 74 65 0a 2a 2a 20 77 69   terminate.** wi
95b0: 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 52 4f 57  th an SQLITE_ROW
95c0: 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64   return code and
95d0: 20 69 74 20 73 65 74 73 20 75 70 20 74 68 65 20   it sets up the 
95e0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 0a 2a 2a 20  sqlite3_stmt.** 
95f0: 73 74 72 75 63 74 75 72 65 20 74 6f 20 70 72 6f  structure to pro
9600: 76 69 64 65 20 61 63 63 65 73 73 20 74 6f 20 74  vide access to t
9610: 68 65 20 72 28 50 31 29 2e 2e 72 28 50 31 2b 50  he r(P1)..r(P1+P
9620: 32 2d 31 29 20 76 61 6c 75 65 73 20 61 73 0a 2a  2-1) values as.*
9630: 2a 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77  * the result row
9640: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73  ..*/.case OP_Res
9650: 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20  ultRow: {.  Mem 
9660: 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a  *pMem;.  int i;.
9670: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6e 52 65    assert( p->nRe
9680: 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32  sColumn==pOp->p2
9690: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
96a0: 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73  p->p1>0 );.  ass
96b0: 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70  ert( pOp->p1+pOp
96c0: 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p2<=(p->nMem-p
96d0: 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
96e0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
96f0: 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41  OMIT_PROGRESS_CA
9700: 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 52 75 6e 20  LLBACK.  /* Run 
9710: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 6f 75  the progress cou
9720: 6e 74 65 72 20 6a 75 73 74 20 62 65 66 6f 72 65  nter just before
9730: 20 72 65 74 75 72 6e 69 6e 67 2e 0a 20 20 2a 2f   returning..  */
9740: 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67  .  if( db->xProg
9750: 72 65 73 73 21 3d 30 0a 20 20 20 26 26 20 6e 56  ress!=0.   && nV
9760: 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73  mStep>=nProgress
9770: 4c 69 6d 69 74 0a 20 20 20 26 26 20 64 62 2d 3e  Limit.   && db->
9780: 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50  xProgress(db->pP
9790: 72 6f 67 72 65 73 73 41 72 67 29 21 3d 30 0a 20  rogressArg)!=0. 
97a0: 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
97b0: 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20  ITE_INTERRUPT;. 
97c0: 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72     goto vdbe_err
97d0: 6f 72 5f 68 61 6c 74 3b 0a 20 20 7d 0a 23 65 6e  or_halt;.  }.#en
97e0: 64 69 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69  dif..  /* If thi
97f0: 73 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20  s statement has 
9800: 76 69 6f 6c 61 74 65 64 20 69 6d 6d 65 64 69 61  violated immedia
9810: 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
9820: 6f 6e 73 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20  onstraints, do. 
9830: 20 2a 2a 20 6e 6f 74 20 72 65 74 75 72 6e 20 74   ** not return t
9840: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
9850: 73 20 6d 6f 64 69 66 69 65 64 2e 20 41 6e 64 20  s modified. And 
9860: 64 6f 20 6e 6f 74 20 52 45 4c 45 41 53 45 20 74  do not RELEASE t
9870: 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a  he statement.  *
9880: 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49  * transaction. I
9890: 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f  t needs to be ro
98a0: 6c 6c 65 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20  lled back.  */. 
98b0: 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d   if( SQLITE_OK!=
98c0: 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62  (rc = sqlite3Vdb
98d0: 65 43 68 65 63 6b 46 6b 28 70 2c 20 30 29 29 20  eCheckFk(p, 0)) 
98e0: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64  ){.    assert( d
98f0: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
9900: 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20  CountRows );.   
9910: 20 61 73 73 65 72 74 28 20 70 2d 3e 75 73 65 73   assert( p->uses
9920: 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20  StmtJournal );. 
9930: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
9940: 20 2f 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54   /* If the SQLIT
9950: 45 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67  E_CountRows flag
9960: 20 69 73 20 73 65 74 20 69 6e 20 73 71 6c 69 74   is set in sqlit
9970: 65 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  e3.flags mask, t
9980: 68 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74  hen .  ** DML st
9990: 61 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20  atements invoke 
99a0: 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 72  this opcode to r
99b0: 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
99c0: 20 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d   of rows .  ** m
99d0: 6f 64 69 66 69 65 64 20 74 6f 20 74 68 65 20 75  odified to the u
99e0: 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 68 65  ser. This is the
99f0: 20 6f 6e 6c 79 20 77 61 79 20 74 68 61 74 20 61   only way that a
9a00: 20 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70   VM that.  ** op
9a10: 65 6e 73 20 61 20 73 74 61 74 65 6d 65 6e 74 20  ens a statement 
9a20: 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20  transaction may 
9a30: 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f  invoke this opco
9a40: 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e  de..  **.  ** In
9a50: 20 63 61 73 65 20 74 68 69 73 20 69 73 20 73 75   case this is su
9a60: 63 68 20 61 20 73 74 61 74 65 6d 65 6e 74 2c 20  ch a statement, 
9a70: 63 6c 6f 73 65 20 61 6e 79 20 73 74 61 74 65 6d  close any statem
9a80: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  ent transaction.
9a90: 20 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 74    ** opened by t
9aa0: 68 69 73 20 56 4d 20 62 65 66 6f 72 65 20 72 65  his VM before re
9ab0: 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20  turning control 
9ac0: 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68 69  to the user. Thi
9ad0: 73 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73  s is to.  ** ens
9ae0: 75 72 65 20 74 68 61 74 20 73 74 61 74 65 6d 65  ure that stateme
9af0: 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  nt-transactions 
9b00: 61 72 65 20 61 6c 77 61 79 73 20 6e 65 73 74 65  are always neste
9b10: 64 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69  d, not overlappi
9b20: 6e 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20  ng..  ** If the 
9b30: 6f 70 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74  open statement-t
9b40: 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f  ransaction is no
9b50: 74 20 63 6c 6f 73 65 64 20 68 65 72 65 2c 20 74  t closed here, t
9b60: 68 65 6e 20 74 68 65 20 75 73 65 72 0a 20 20 2a  hen the user.  *
9b70: 2a 20 6d 61 79 20 73 74 65 70 20 61 6e 6f 74 68  * may step anoth
9b80: 65 72 20 56 4d 20 74 68 61 74 20 6f 70 65 6e 73  er VM that opens
9b90: 20 69 74 73 20 6f 77 6e 20 73 74 61 74 65 6d 65   its own stateme
9ba0: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  nt transaction. 
9bb0: 54 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65  This.  ** may le
9bc0: 61 64 20 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e  ad to overlappin
9bd0: 67 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  g statement tran
9be0: 73 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20  sactions..  **. 
9bf0: 20 2a 2a 20 54 68 65 20 73 74 61 74 65 6d 65 6e   ** The statemen
9c00: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  t transaction is
9c10: 20 6e 65 76 65 72 20 61 20 74 6f 70 2d 6c 65 76   never a top-lev
9c20: 65 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  el transaction. 
9c30: 20 48 65 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20   Hence.  ** the 
9c40: 52 45 4c 45 41 53 45 20 63 61 6c 6c 20 62 65 6c  RELEASE call bel
9c50: 6f 77 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69  ow can never fai
9c60: 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  l..  */.  assert
9c70: 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d  ( p->iStatement=
9c80: 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26  =0 || db->flags&
9c90: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
9ca0: 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
9cb0: 65 33 56 64 62 65 43 6c 6f 73 65 53 74 61 74 65  e3VdbeCloseState
9cc0: 6d 65 6e 74 28 70 2c 20 53 41 56 45 50 4f 49 4e  ment(p, SAVEPOIN
9cd0: 54 5f 52 45 4c 45 41 53 45 29 3b 0a 20 20 69 66  T_RELEASE);.  if
9ce0: 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49  ( NEVER(rc!=SQLI
9cf0: 54 45 5f 4f 4b 29 20 29 7b 0a 20 20 20 20 62 72  TE_OK) ){.    br
9d00: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49  eak;.  }..  /* I
9d10: 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 65 70  nvalidate all ep
9d20: 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 20 72  hemeral cursor r
9d30: 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a 20 20 70  ow caches */.  p
9d40: 2d 3e 63 61 63 68 65 43 74 72 20 3d 20 28 70 2d  ->cacheCtr = (p-
9d50: 3e 63 61 63 68 65 43 74 72 20 2b 20 32 29 7c 31  >cacheCtr + 2)|1
9d60: 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  ;..  /* Make sur
9d70: 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
9d80: 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
9d90: 20 61 72 65 20 5c 30 30 30 20 74 65 72 6d 69 6e   are \000 termin
9da0: 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61  ated.  ** and ha
9db0: 76 65 20 61 6e 20 61 73 73 69 67 6e 65 64 20 74  ve an assigned t
9dc0: 79 70 65 2e 20 20 54 68 65 20 72 65 73 75 6c 74  ype.  The result
9dd0: 73 20 61 72 65 20 64 65 2d 65 70 68 65 6d 65 72  s are de-ephemer
9de0: 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61  alized as.  ** a
9df0: 20 73 69 64 65 20 65 66 66 65 63 74 2e 0a 20 20   side effect..  
9e00: 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70  */.  pMem = p->p
9e10: 52 65 73 75 6c 74 53 65 74 20 3d 20 26 61 4d 65  ResultSet = &aMe
9e20: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f  m[pOp->p1];.  fo
9e30: 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32  r(i=0; i<pOp->p2
9e40: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  ; i++){.    asse
9e50: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
9e60: 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20  pMem[i]) );.    
9e70: 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 26  Deephemeralize(&
9e80: 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73  pMem[i]);.    as
9e90: 73 65 72 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66  sert( (pMem[i].f
9ea0: 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d  lags & MEM_Ephem
9eb0: 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20  )==0.           
9ec0: 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61   || (pMem[i].fla
9ed0: 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
9ee0: 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20  M_Blob))==0 );. 
9ef0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
9f00: 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28 26 70  mNulTerminate(&p
9f10: 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 52 45 47  Mem[i]);.    REG
9f20: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
9f30: 3e 70 31 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29  >p1+i, &pMem[i])
9f40: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e  ;.  }.  if( db->
9f50: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67  mallocFailed ) g
9f60: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 2f  oto no_mem;..  /
9f70: 2a 20 52 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  * Return SQLITE_
9f80: 52 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70 63  ROW.  */.  p->pc
9f90: 20 3d 20 70 63 20 2b 20 31 3b 0a 20 20 72 63 20   = pc + 1;.  rc 
9fa0: 3d 20 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20  = SQLITE_ROW;.  
9fb0: 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
9fc0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
9fd0: 43 6f 6e 63 61 74 20 50 31 20 50 32 20 50 33 20  Concat P1 P2 P3 
9fe0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
9ff0: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2b 72 5b 50   r[P3]=r[P2]+r[P
a000: 31 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65  1].**.** Add the
a010: 20 74 65 78 74 20 69 6e 20 72 65 67 69 73 74 65   text in registe
a020: 72 20 50 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e  r P1 onto the en
a030: 64 20 6f 66 20 74 68 65 20 74 65 78 74 20 69 6e  d of the text in
a040: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 20  .** register P2 
a050: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
a060: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
a070: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
a080: 72 20 74 68 65 20 50 31 20 6f 72 20 50 32 20 74  r the P1 or P2 t
a090: 65 78 74 20 61 72 65 20 4e 55 4c 4c 20 74 68 65  ext are NULL the
a0a0: 6e 20 73 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20  n store NULL in 
a0b0: 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d  P3..**.**   P3 =
a0c0: 20 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20   P2 || P1.**.** 
a0d0: 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f  It is illegal fo
a0e0: 72 20 50 31 20 61 6e 64 20 50 33 20 74 6f 20 62  r P1 and P3 to b
a0f0: 65 20 74 68 65 20 73 61 6d 65 20 72 65 67 69 73  e the same regis
a100: 74 65 72 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a  ter. Sometimes,.
a110: 2a 2a 20 69 66 20 50 33 20 69 73 20 74 68 65 20  ** if P3 is the 
a120: 73 61 6d 65 20 72 65 67 69 73 74 65 72 20 61 73  same register as
a130: 20 50 32 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65   P2, the impleme
a140: 6e 74 61 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a  ntation is able.
a150: 2a 2a 20 74 6f 20 61 76 6f 69 64 20 61 20 6d 65  ** to avoid a me
a160: 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20  mcpy()..*/.case 
a170: 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20  OP_Concat: {    
a180: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
a190: 73 20 54 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31  s TK_CONCAT, in1
a1a0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
a1b0: 20 69 36 34 20 6e 42 79 74 65 3b 0a 0a 20 20 70   i64 nByte;..  p
a1c0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
a1d0: 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26  >p1];.  pIn2 = &
a1e0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
a1f0: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
a200: 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74  p->p3];.  assert
a210: 28 20 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a  ( pIn1!=pOut );.
a220: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
a230: 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73  gs | pIn2->flags
a240: 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  ) & MEM_Null ){.
a250: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
a260: 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
a270: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
a280: 20 20 69 66 28 20 45 78 70 61 6e 64 42 6c 6f 62    if( ExpandBlob
a290: 28 70 49 6e 31 29 20 7c 7c 20 45 78 70 61 6e 64  (pIn1) || Expand
a2a0: 42 6c 6f 62 28 70 49 6e 32 29 20 29 20 67 6f 74  Blob(pIn2) ) got
a2b0: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72 69  o no_mem;.  Stri
a2c0: 6e 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f  ngify(pIn1, enco
a2d0: 64 69 6e 67 29 3b 0a 20 20 53 74 72 69 6e 67 69  ding);.  Stringi
a2e0: 66 79 28 70 49 6e 32 2c 20 65 6e 63 6f 64 69 6e  fy(pIn2, encodin
a2f0: 67 29 3b 0a 20 20 6e 42 79 74 65 20 3d 20 70 49  g);.  nByte = pI
a300: 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b  n1->n + pIn2->n;
a310: 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d  .  if( nByte>db-
a320: 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
a330: 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
a340: 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
a350: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69  ;.  }.  if( sqli
a360: 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
a370: 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2b  Out, (int)nByte+
a380: 32 2c 20 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29  2, pOut==pIn2) )
a390: 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
a3a0: 6d 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54  m;.  }.  MemSetT
a3b0: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
a3c0: 4d 5f 53 74 72 29 3b 0a 20 20 69 66 28 20 70 4f  M_Str);.  if( pO
a3d0: 75 74 21 3d 70 49 6e 32 20 29 7b 0a 20 20 20 20  ut!=pIn2 ){.    
a3e0: 6d 65 6d 63 70 79 28 70 4f 75 74 2d 3e 7a 2c 20  memcpy(pOut->z, 
a3f0: 70 49 6e 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e  pIn2->z, pIn2->n
a400: 29 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28  );.  }.  memcpy(
a410: 26 70 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e  &pOut->z[pIn2->n
a420: 5d 2c 20 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31  ], pIn1->z, pIn1
a430: 2d 3e 6e 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b  ->n);.  pOut->z[
a440: 6e 42 79 74 65 5d 3d 30 3b 0a 20 20 70 4f 75 74  nByte]=0;.  pOut
a450: 2d 3e 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30  ->z[nByte+1] = 0
a460: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
a470: 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70  |= MEM_Term;.  p
a480: 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42  Out->n = (int)nB
a490: 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63  yte;.  pOut->enc
a4a0: 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55   = encoding;.  U
a4b0: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
a4c0: 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
a4d0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
a4e0: 20 41 64 64 20 50 31 20 50 32 20 50 33 20 2a 20   Add P1 P2 P3 * 
a4f0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
a500: 72 5b 50 33 5d 3d 72 5b 50 31 5d 2b 72 5b 50 32  r[P3]=r[P1]+r[P2
a510: 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20  ].**.** Add the 
a520: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
a530: 72 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75  r P1 to the valu
a540: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
a550: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
a560: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
a570: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
a580: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
a590: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
a5a0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
a5b0: 70 63 6f 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20  pcode: Multiply 
a5c0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
a5d0: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
a5e0: 3d 72 5b 50 31 5d 2a 72 5b 50 32 5d 0a 2a 2a 0a  =r[P1]*r[P2].**.
a5f0: 2a 2a 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74  **.** Multiply t
a600: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
a610: 73 74 65 72 20 50 31 20 62 79 20 74 68 65 20 76  ster P1 by the v
a620: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
a630: 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65   P2.** and store
a640: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
a650: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
a660: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
a670: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
a680: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
a690: 2a 20 4f 70 63 6f 64 65 3a 20 53 75 62 74 72 61  * Opcode: Subtra
a6a0: 63 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ct P1 P2 P3 * *.
a6b0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
a6c0: 50 33 5d 3d 72 5b 50 32 5d 2d 72 5b 50 31 5d 0a  P3]=r[P2]-r[P1].
a6d0: 2a 2a 0a 2a 2a 20 53 75 62 74 72 61 63 74 20 74  **.** Subtract t
a6e0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
a6f0: 73 74 65 72 20 50 31 20 66 72 6f 6d 20 74 68 65  ster P1 from the
a700: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
a710: 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f  er P2.** and sto
a720: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
a730: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
a740: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
a750: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
a760: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
a770: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76 69  ./* Opcode: Divi
a780: 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  de P1 P2 P3 * *.
a790: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
a7a0: 50 33 5d 3d 72 5b 50 32 5d 2f 72 5b 50 31 5d 0a  P3]=r[P2]/r[P1].
a7b0: 2a 2a 0a 2a 2a 20 44 69 76 69 64 65 20 74 68 65  **.** Divide the
a7c0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
a7d0: 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c  er P1 by the val
a7e0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
a7f0: 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74  2.** and store t
a800: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
a810: 69 73 74 65 72 20 50 33 20 28 50 33 3d 50 32 2f  ister P3 (P3=P2/
a820: 50 31 29 2e 20 49 66 20 74 68 65 20 76 61 6c 75  P1). If the valu
a830: 65 20 69 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65  e in .** registe
a840: 72 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68  r P1 is zero, th
a850: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
a860: 20 4e 55 4c 4c 2e 20 49 66 20 65 69 74 68 65 72   NULL. If either
a870: 20 69 6e 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55   input is .** NU
a880: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
a890: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
a8a0: 63 6f 64 65 3a 20 52 65 6d 61 69 6e 64 65 72 20  code: Remainder 
a8b0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
a8c0: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
a8d0: 3d 72 5b 50 32 5d 25 72 5b 50 31 5d 0a 2a 2a 0a  =r[P2]%r[P1].**.
a8e0: 2a 2a 20 43 6f 6d 70 75 74 65 20 74 68 65 20 72  ** Compute the r
a8f0: 65 6d 61 69 6e 64 65 72 20 61 66 74 65 72 20 69  emainder after i
a900: 6e 74 65 67 65 72 20 72 65 67 69 73 74 65 72 20  nteger register 
a910: 50 32 20 69 73 20 64 69 76 69 64 65 64 20 62 79  P2 is divided by
a920: 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31   .** register P1
a930: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
a940: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
a950: 72 20 50 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65  r P3. .** If the
a960: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
a970: 65 72 20 50 31 20 69 73 20 7a 65 72 6f 20 74 68  er P1 is zero th
a980: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
a990: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 6f  ..** If either o
a9a0: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20  perand is NULL, 
a9b0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
a9c0: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  LL..*/.case OP_A
a9d0: 64 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  dd:             
a9e0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
a9f0: 20 54 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69   TK_PLUS, in1, i
aa00: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
aa10: 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20   OP_Subtract:   
aa20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
aa30: 6d 65 20 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20  me as TK_MINUS, 
aa40: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
aa50: 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70  /.case OP_Multip
aa60: 6c 79 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  ly:             
aa70: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53   /* same as TK_S
aa80: 54 41 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  TAR, in1, in2, o
aa90: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  ut3 */.case OP_D
aaa0: 69 76 69 64 65 3a 20 20 20 20 20 20 20 20 20 20  ivide:          
aab0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
aac0: 20 54 4b 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20   TK_SLASH, in1, 
aad0: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
aae0: 65 20 4f 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20  e OP_Remainder: 
aaf0: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73  {           /* s
ab00: 61 6d 65 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69  ame as TK_REM, i
ab10: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
ab20: 0a 20 20 63 68 61 72 20 62 49 6e 74 69 6e 74 3b  .  char bIntint;
ab30: 20 20 20 2f 2a 20 53 74 61 72 74 65 64 20 6f 75     /* Started ou
ab40: 74 20 61 73 20 74 77 6f 20 69 6e 74 65 67 65 72  t as two integer
ab50: 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 20 20 75   operands */.  u
ab60: 31 36 20 66 6c 61 67 73 3b 20 20 20 20 20 20 2f  16 flags;      /
ab70: 2a 20 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a  * Combined MEM_*
ab80: 20 66 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74 68   flags from both
ab90: 20 69 6e 70 75 74 73 20 2a 2f 0a 20 20 75 31 36   inputs */.  u16
aba0: 20 74 79 70 65 31 3b 20 20 20 20 20 20 2f 2a 20   type1;      /* 
abb0: 4e 75 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20  Numeric type of 
abc0: 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  left operand */.
abd0: 20 20 75 31 36 20 74 79 70 65 32 3b 20 20 20 20    u16 type2;    
abe0: 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79 70    /* Numeric typ
abf0: 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61  e of right opera
ac00: 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 20  nd */.  i64 iA; 
ac10: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67          /* Integ
ac20: 65 72 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74  er value of left
ac30: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36   operand */.  i6
ac40: 34 20 69 42 3b 20 20 20 20 20 20 20 20 20 2f 2a  4 iB;         /*
ac50: 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f   Integer value o
ac60: 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20  f right operand 
ac70: 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 41 3b 20  */.  double rA; 
ac80: 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c       /* Real val
ac90: 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61  ue of left opera
aca0: 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72  nd */.  double r
acb0: 42 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20  B;      /* Real 
acc0: 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f  value of right o
acd0: 70 65 72 61 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e  perand */..  pIn
ace0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
acf0: 31 5d 3b 0a 20 20 74 79 70 65 31 20 3d 20 6e 75  1];.  type1 = nu
ad00: 6d 65 72 69 63 54 79 70 65 28 70 49 6e 31 29 3b  mericType(pIn1);
ad10: 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
ad20: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 74 79 70 65  pOp->p2];.  type
ad30: 32 20 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28  2 = numericType(
ad40: 70 49 6e 32 29 3b 0a 20 20 70 4f 75 74 20 3d 20  pIn2);.  pOut = 
ad50: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
ad60: 20 20 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e    flags = pIn1->
ad70: 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c  flags | pIn2->fl
ad80: 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67  ags;.  if( (flag
ad90: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  s & MEM_Null)!=0
ada0: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
adb0: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
adc0: 6c 3b 0a 20 20 69 66 28 20 28 74 79 70 65 31 20  l;.  if( (type1 
add0: 26 20 74 79 70 65 32 20 26 20 4d 45 4d 5f 49 6e  & type2 & MEM_In
ade0: 74 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 41 20  t)!=0 ){.    iA 
adf0: 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20  = pIn1->u.i;.   
ae00: 20 69 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b   iB = pIn2->u.i;
ae10: 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 31  .    bIntint = 1
ae20: 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f  ;.    switch( pO
ae30: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20  p->opcode ){.   
ae40: 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20     case OP_Add: 
ae50: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
ae60: 33 41 64 64 49 6e 74 36 34 28 26 69 42 2c 69 41  3AddInt64(&iB,iA
ae70: 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  ) ) goto fp_math
ae80: 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20  ;  break;.      
ae90: 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74  case OP_Subtract
aea0: 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 75  :  if( sqlite3Su
aeb0: 62 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29  bInt64(&iB,iA) )
aec0: 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20   goto fp_math;  
aed0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
aee0: 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20  e OP_Multiply:  
aef0: 69 66 28 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e  if( sqlite3MulIn
af00: 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f  t64(&iB,iA) ) go
af10: 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65  to fp_math;  bre
af20: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
af30: 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20  P_Divide: {.    
af40: 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20      if( iA==0 ) 
af50: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
af60: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
af70: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
af80: 2d 31 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45  -1 && iB==SMALLE
af90: 53 54 5f 49 4e 54 36 34 20 29 20 67 6f 74 6f 20  ST_INT64 ) goto 
afa0: 66 70 5f 6d 61 74 68 3b 0a 20 20 20 20 20 20 20  fp_math;.       
afb0: 20 69 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20 20   iB /= iA;.     
afc0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
afd0: 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a  }.      default:
afe0: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69   {.        if( i
aff0: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
b000: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
b010: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _null;.        i
b020: 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d  f( iA==-1 ) iA =
b030: 20 31 3b 0a 20 20 20 20 20 20 20 20 69 42 20 25   1;.        iB %
b040: 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72  = iA;.        br
b050: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
b060: 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69   }.    pOut->u.i
b070: 20 3d 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53 65   = iB;.    MemSe
b080: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
b090: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73  MEM_Int);.  }els
b0a0: 65 7b 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d  e{.    bIntint =
b0b0: 20 30 3b 0a 66 70 5f 6d 61 74 68 3a 0a 20 20 20   0;.fp_math:.   
b0c0: 20 72 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rA = sqlite3Vdb
b0d0: 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29  eRealValue(pIn1)
b0e0: 3b 0a 20 20 20 20 72 42 20 3d 20 73 71 6c 69 74  ;.    rB = sqlit
b0f0: 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28  e3VdbeRealValue(
b100: 70 49 6e 32 29 3b 0a 20 20 20 20 73 77 69 74 63  pIn2);.    switc
b110: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
b120: 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  {.      case OP_
b130: 41 64 64 3a 20 20 20 20 20 20 20 20 20 72 42 20  Add:         rB 
b140: 2b 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65  += rA;       bre
b150: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
b160: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 72  P_Subtract:    r
b170: 42 20 2d 3d 20 72 41 3b 20 20 20 20 20 20 20 62  B -= rA;       b
b180: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
b190: 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20   OP_Multiply:   
b1a0: 20 72 42 20 2a 3d 20 72 41 3b 20 20 20 20 20 20   rB *= rA;      
b1b0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
b1c0: 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a  se OP_Divide: {.
b1d0: 20 20 20 20 20 20 20 20 2f 2a 20 28 64 6f 75 62          /* (doub
b1e0: 6c 65 29 30 20 49 6e 20 63 61 73 65 20 6f 66 20  le)0 In case of 
b1f0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
b200: 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f  TING_POINT... */
b210: 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 41 3d  .        if( rA=
b220: 3d 28 64 6f 75 62 6c 65 29 30 20 29 20 67 6f 74  =(double)0 ) got
b230: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
b240: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
b250: 20 20 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20       rB /= rA;. 
b260: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
b270: 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61      }.      defa
b280: 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  ult: {.        i
b290: 41 20 3d 20 28 69 36 34 29 72 41 3b 0a 20 20 20  A = (i64)rA;.   
b2a0: 20 20 20 20 20 69 42 20 3d 20 28 69 36 34 29 72       iB = (i64)r
b2b0: 42 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  B;.        if( i
b2c0: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
b2d0: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
b2e0: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _null;.        i
b2f0: 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d  f( iA==-1 ) iA =
b300: 20 31 3b 0a 20 20 20 20 20 20 20 20 72 42 20 3d   1;.        rB =
b310: 20 28 64 6f 75 62 6c 65 29 28 69 42 20 25 20 69   (double)(iB % i
b320: 41 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  A);.        brea
b330: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
b340: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
b350: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
b360: 4e 54 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  NT.    pOut->u.i
b370: 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65   = rB;.    MemSe
b380: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
b390: 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65 0a  MEM_Int);.#else.
b3a0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 49      if( sqlite3I
b3b0: 73 4e 61 4e 28 72 42 29 20 29 7b 0a 20 20 20 20  sNaN(rB) ){.    
b3c0: 20 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69    goto arithmeti
b3d0: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
b3e0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74  ;.    }.    pOut
b3f0: 2d 3e 72 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65  ->r = rB;.    Me
b400: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
b410: 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20  t, MEM_Real);.  
b420: 20 20 69 66 28 20 28 28 74 79 70 65 31 7c 74 79    if( ((type1|ty
b430: 70 65 32 29 26 4d 45 4d 5f 52 65 61 6c 29 3d 3d  pe2)&MEM_Real)==
b440: 30 20 26 26 20 21 62 49 6e 74 69 6e 74 20 29 7b  0 && !bIntint ){
b450: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
b460: 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74  beIntegerAffinit
b470: 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23  y(pOut);.    }.#
b480: 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61  endif.  }.  brea
b490: 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f 72  k;..arithmetic_r
b4a0: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20  esult_is_null:. 
b4b0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
b4c0: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
b4d0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
b4e0: 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20 50 31 20  ode: CollSeq P1 
b4f0: 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20  * * P4.**.** P4 
b500: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
b510: 61 20 43 6f 6c 6c 53 65 71 20 73 74 72 75 63 74  a CollSeq struct
b520: 2e 20 49 66 20 74 68 65 20 6e 65 78 74 20 63 61  . If the next ca
b530: 6c 6c 20 74 6f 20 61 20 75 73 65 72 20 66 75 6e  ll to a user fun
b540: 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72  ction.** or aggr
b550: 65 67 61 74 65 20 63 61 6c 6c 73 20 73 71 6c 69  egate calls sqli
b560: 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65  te3GetFuncCollSe
b570: 71 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74  q(), this collat
b580: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 69 6c  ion sequence wil
b590: 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e 65 64  l.** be returned
b5a0: 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62  . This is used b
b5b0: 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d  y the built-in m
b5c0: 69 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e 64 20  in(), max() and 
b5d0: 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63  nullif().** func
b5e0: 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  tions..**.** If 
b5f0: 50 31 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P1 is not zero, 
b600: 74 68 65 6e 20 69 74 20 69 73 20 61 20 72 65 67  then it is a reg
b610: 69 73 74 65 72 20 74 68 61 74 20 61 20 73 75 62  ister that a sub
b620: 73 65 71 75 65 6e 74 20 6d 69 6e 28 29 20 6f 72  sequent min() or
b630: 0a 2a 2a 20 6d 61 78 28 29 20 61 67 67 72 65 67  .** max() aggreg
b640: 61 74 65 20 77 69 6c 6c 20 73 65 74 20 74 6f 20  ate will set to 
b650: 31 20 69 66 20 74 68 65 20 63 75 72 72 65 6e 74  1 if the current
b660: 20 72 6f 77 20 69 73 20 6e 6f 74 20 74 68 65 20   row is not the 
b670: 6d 69 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20 6d 61  minimum or.** ma
b680: 78 69 6d 75 6d 2e 20 20 54 68 65 20 50 31 20 72  ximum.  The P1 r
b690: 65 67 69 73 74 65 72 20 69 73 20 69 6e 69 74 69  egister is initi
b6a0: 61 6c 69 7a 65 64 20 74 6f 20 30 20 62 79 20 74  alized to 0 by t
b6b0: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
b6c0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72  .**.** The inter
b6d0: 66 61 63 65 20 75 73 65 64 20 62 79 20 74 68 65  face used by the
b6e0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
b6f0: 6f 66 20 74 68 65 20 61 66 6f 72 65 6d 65 6e 74  of the aforement
b700: 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a  ioned functions.
b710: 2a 2a 20 74 6f 20 72 65 74 72 69 65 76 65 20 74  ** to retrieve t
b720: 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  he collation seq
b730: 75 65 6e 63 65 20 73 65 74 20 62 79 20 74 68 69  uence set by thi
b740: 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f 74 20  s opcode is not 
b750: 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62  available.** pub
b760: 6c 69 63 6c 79 2c 20 6f 6e 6c 79 20 74 6f 20 75  licly, only to u
b770: 73 65 72 20 66 75 6e 63 74 69 6f 6e 73 20 64 65  ser functions de
b780: 66 69 6e 65 64 20 69 6e 20 66 75 6e 63 2e 63 2e  fined in func.c.
b790: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c  .*/.case OP_Coll
b7a0: 53 65 71 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  Seq: {.  assert(
b7b0: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
b7c0: 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 69 66  _COLLSEQ );.  if
b7d0: 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20  ( pOp->p1 ){.   
b7e0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
b7f0: 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f  etInt64(&aMem[pO
b800: 70 2d 3e 70 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a  p->p1], 0);.  }.
b810: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
b820: 70 63 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e 20  pcode: Function 
b830: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
b840: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
b850: 5d 3d 66 75 6e 63 28 72 5b 50 32 40 50 35 5d 29  ]=func(r[P2@P5])
b860: 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20  .**.** Invoke a 
b870: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 28 50  user function (P
b880: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
b890: 6f 20 61 20 46 75 6e 63 74 69 6f 6e 20 73 74 72  o a Function str
b8a0: 75 63 74 75 72 65 20 74 68 61 74 0a 2a 2a 20 64  ucture that.** d
b8b0: 65 66 69 6e 65 73 20 74 68 65 20 66 75 6e 63 74  efines the funct
b8c0: 69 6f 6e 29 20 77 69 74 68 20 50 35 20 61 72 67  ion) with P5 arg
b8d0: 75 6d 65 6e 74 73 20 74 61 6b 65 6e 20 66 72 6f  uments taken fro
b8e0: 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  m register P2 an
b8f0: 64 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e  d.** successors.
b900: 20 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20    The result of 
b910: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  the function is 
b920: 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
b930: 65 72 20 50 33 2e 0a 2a 2a 20 52 65 67 69 73 74  er P3..** Regist
b940: 65 72 20 50 33 20 6d 75 73 74 20 6e 6f 74 20 62  er P3 must not b
b950: 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 75 6e  e one of the fun
b960: 63 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a  ction inputs..**
b970: 0a 2a 2a 20 50 31 20 69 73 20 61 20 33 32 2d 62  .** P1 is a 32-b
b980: 69 74 20 62 69 74 6d 61 73 6b 20 69 6e 64 69 63  it bitmask indic
b990: 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72  ating whether or
b9a0: 20 6e 6f 74 20 65 61 63 68 20 61 72 67 75 6d 65   not each argume
b9b0: 6e 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75  nt to the .** fu
b9c0: 6e 63 74 69 6f 6e 20 77 61 73 20 64 65 74 65 72  nction was deter
b9d0: 6d 69 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e 73  mined to be cons
b9e0: 74 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65 20  tant at compile 
b9f0: 74 69 6d 65 2e 20 49 66 20 74 68 65 20 66 69 72  time. If the fir
ba00: 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77  st.** argument w
ba10: 61 73 20 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e  as constant then
ba20: 20 62 69 74 20 30 20 6f 66 20 50 31 20 69 73 20   bit 0 of P1 is 
ba30: 73 65 74 2e 20 54 68 69 73 20 69 73 20 75 73 65  set. This is use
ba40: 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a  d to determine.*
ba50: 2a 20 77 68 65 74 68 65 72 20 6d 65 74 61 20 64  * whether meta d
ba60: 61 74 61 20 61 73 73 6f 63 69 61 74 65 64 20 77  ata associated w
ba70: 69 74 68 20 61 20 75 73 65 72 20 66 75 6e 63 74  ith a user funct
ba80: 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75 73 69  ion argument usi
ba90: 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  ng the.** sqlite
baa0: 33 5f 73 65 74 5f 61 75 78 64 61 74 61 28 29 20  3_set_auxdata() 
bab0: 41 50 49 20 6d 61 79 20 62 65 20 73 61 66 65 6c  API may be safel
bac0: 79 20 72 65 74 61 69 6e 65 64 20 75 6e 74 69 6c  y retained until
bad0: 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76   the next.** inv
bae0: 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 20  ocation of this 
baf0: 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65  opcode..**.** Se
bb00: 65 20 61 6c 73 6f 3a 20 41 67 67 53 74 65 70 20  e also: AggStep 
bb10: 61 6e 64 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a  and AggFinal.*/.
bb20: 63 61 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e  case OP_Function
bb30: 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d  : {.  int i;.  M
bb40: 65 6d 20 2a 70 41 72 67 3b 0a 20 20 73 71 6c 69  em *pArg;.  sqli
bb50: 74 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b  te3_context ctx;
bb60: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
bb70: 20 2a 2a 61 70 56 61 6c 3b 0a 20 20 69 6e 74 20   **apVal;.  int 
bb80: 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70  n;..  n = pOp->p
bb90: 35 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e  5;.  apVal = p->
bba0: 61 70 41 72 67 3b 0a 20 20 61 73 73 65 72 74 28  apArg;.  assert(
bbb0: 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29   apVal || n==0 )
bbc0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
bbd0: 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
bbe0: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
bbf0: 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74  ursor) );.  pOut
bc00: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
bc10: 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
bc20: 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
bc30: 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20  .  assert( n==0 
bc40: 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26  || (pOp->p2>0 &&
bc50: 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70 2d 3e   pOp->p2+n<=(p->
bc60: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
bc70: 2b 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  +1) );.  assert(
bc80: 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32   pOp->p3<pOp->p2
bc90: 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70   || pOp->p3>=pOp
bca0: 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 41 72 67  ->p2+n );.  pArg
bcb0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
bcc0: 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  ];.  for(i=0; i<
bcd0: 6e 3b 20 69 2b 2b 2c 20 70 41 72 67 2b 2b 29 7b  n; i++, pArg++){
bce0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
bcf0: 49 73 56 61 6c 69 64 28 70 41 72 67 29 20 29 3b  IsValid(pArg) );
bd00: 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20  .    apVal[i] = 
bd10: 70 41 72 67 3b 0a 20 20 20 20 44 65 65 70 68 65  pArg;.    Deephe
bd20: 6d 65 72 61 6c 69 7a 65 28 70 41 72 67 29 3b 0a  meralize(pArg);.
bd30: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
bd40: 43 45 28 70 4f 70 2d 3e 70 32 2b 69 2c 20 70 41  CE(pOp->p2+i, pA
bd50: 72 67 29 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65  rg);.  }..  asse
bd60: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
bd70: 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20  =P4_FUNCDEF );. 
bd80: 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70   ctx.pFunc = pOp
bd90: 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 63 74  ->p4.pFunc;.  ct
bda0: 78 2e 69 4f 70 20 3d 20 70 63 3b 0a 20 20 63 74  x.iOp = pc;.  ct
bdb0: 78 2e 70 56 64 62 65 20 3d 20 70 3b 0a 0a 20 20  x.pVdbe = p;..  
bdc0: 2f 2a 20 54 68 65 20 6f 75 74 70 75 74 20 63 65  /* The output ce
bdd0: 6c 6c 20 6d 61 79 20 61 6c 72 65 61 64 79 20 68  ll may already h
bde0: 61 76 65 20 61 20 62 75 66 66 65 72 20 61 6c 6c  ave a buffer all
bdf0: 6f 63 61 74 65 64 2e 20 4d 6f 76 65 0a 20 20 2a  ocated. Move.  *
be00: 2a 20 74 68 65 20 70 6f 69 6e 74 65 72 20 74 6f  * the pointer to
be10: 20 63 74 78 2e 73 20 73 6f 20 69 6e 20 63 61 73   ctx.s so in cas
be20: 65 20 74 68 65 20 75 73 65 72 2d 66 75 6e 63 74  e the user-funct
be30: 69 6f 6e 20 63 61 6e 20 75 73 65 0a 20 20 2a 2a  ion can use.  **
be40: 20 74 68 65 20 61 6c 72 65 61 64 79 20 61 6c 6c   the already all
be50: 6f 63 61 74 65 64 20 62 75 66 66 65 72 20 69 6e  ocated buffer in
be60: 73 74 65 61 64 20 6f 66 20 61 6c 6c 6f 63 61 74  stead of allocat
be70: 69 6e 67 20 61 20 6e 65 77 20 6f 6e 65 2e 0a 20  ing a new one.. 
be80: 20 2a 2f 0a 20 20 6d 65 6d 63 70 79 28 26 63 74   */.  memcpy(&ct
be90: 78 2e 73 2c 20 70 4f 75 74 2c 20 73 69 7a 65 6f  x.s, pOut, sizeo
bea0: 66 28 4d 65 6d 29 29 3b 0a 20 20 70 4f 75 74 2d  f(Mem));.  pOut-
beb0: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  >flags = MEM_Nul
bec0: 6c 3b 0a 20 20 70 4f 75 74 2d 3e 78 44 65 6c 20  l;.  pOut->xDel 
bed0: 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 4d 61  = 0;.  pOut->zMa
bee0: 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 4d 65 6d 53  lloc = 0;.  MemS
bef0: 65 74 54 79 70 65 46 6c 61 67 28 26 63 74 78 2e  etTypeFlag(&ctx.
bf00: 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20  s, MEM_Null);.. 
bf10: 20 63 74 78 2e 66 45 72 72 6f 72 4f 72 41 75 78   ctx.fErrorOrAux
bf20: 20 3d 20 30 3b 0a 20 20 69 66 28 20 63 74 78 2e   = 0;.  if( ctx.
bf30: 70 46 75 6e 63 2d 3e 66 75 6e 63 46 6c 61 67 73  pFunc->funcFlags
bf40: 20 26 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e   & SQLITE_FUNC_N
bf50: 45 45 44 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61  EEDCOLL ){.    a
bf60: 73 73 65 72 74 28 20 70 4f 70 3e 61 4f 70 20 29  ssert( pOp>aOp )
bf70: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
bf80: 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34  p[-1].p4type==P4
bf90: 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20  _COLLSEQ );.    
bfa0: 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
bfb0: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53  opcode==OP_CollS
bfc0: 65 71 20 29 3b 0a 20 20 20 20 63 74 78 2e 70 43  eq );.    ctx.pC
bfd0: 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34  oll = pOp[-1].p4
bfe0: 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 64 62  .pColl;.  }.  db
bff0: 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61  ->lastRowid = la
c000: 73 74 52 6f 77 69 64 3b 0a 20 20 28 2a 63 74 78  stRowid;.  (*ctx
c010: 2e 70 46 75 6e 63 2d 3e 78 46 75 6e 63 29 28 26  .pFunc->xFunc)(&
c020: 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 20  ctx, n, apVal); 
c030: 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d  /* IMP: R-24505-
c040: 32 33 32 33 30 20 2a 2f 0a 20 20 6c 61 73 74 52  23230 */.  lastR
c050: 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52  owid = db->lastR
c060: 6f 77 69 64 3b 0a 0a 20 20 69 66 28 20 64 62 2d  owid;..  if( db-
c070: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b  >mallocFailed ){
c080: 0a 20 20 20 20 2f 2a 20 45 76 65 6e 20 74 68 6f  .    /* Even tho
c090: 75 67 68 20 61 20 6d 61 6c 6c 6f 63 28 29 20 68  ugh a malloc() h
c0a0: 61 73 20 66 61 69 6c 65 64 2c 20 74 68 65 20 69  as failed, the i
c0b0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
c0c0: 20 74 68 65 0a 20 20 20 20 2a 2a 20 75 73 65 72   the.    ** user
c0d0: 20 66 75 6e 63 74 69 6f 6e 20 6d 61 79 20 68 61   function may ha
c0e0: 76 65 20 63 61 6c 6c 65 64 20 61 6e 20 73 71 6c  ve called an sql
c0f0: 69 74 65 33 5f 72 65 73 75 6c 74 5f 58 58 58 28  ite3_result_XXX(
c100: 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 20 20 2a  ) function.    *
c110: 2a 20 74 6f 20 72 65 74 75 72 6e 20 61 20 76 61  * to return a va
c120: 6c 75 65 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69  lue. The followi
c130: 6e 67 20 63 61 6c 6c 20 72 65 6c 65 61 73 65 73  ng call releases
c140: 20 61 6e 79 20 72 65 73 6f 75 72 63 65 73 0a 20   any resources. 
c150: 20 20 20 2a 2a 20 61 73 73 6f 63 69 61 74 65 64     ** associated
c160: 20 77 69 74 68 20 73 75 63 68 20 61 20 76 61 6c   with such a val
c170: 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73  ue..    */.    s
c180: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
c190: 65 61 73 65 28 26 63 74 78 2e 73 29 3b 0a 20 20  ease(&ctx.s);.  
c1a0: 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
c1b0: 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20   }..  /* If the 
c1c0: 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 65  function returne
c1d0: 64 20 61 6e 20 65 72 72 6f 72 2c 20 74 68 72 6f  d an error, thro
c1e0: 77 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 2a  w an exception *
c1f0: 2f 0a 20 20 69 66 28 20 63 74 78 2e 66 45 72 72  /.  if( ctx.fErr
c200: 6f 72 4f 72 41 75 78 20 29 7b 0a 20 20 20 20 69  orOrAux ){.    i
c210: 66 28 20 63 74 78 2e 69 73 45 72 72 6f 72 20 29  f( ctx.isError )
c220: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  {.      sqlite3S
c230: 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
c240: 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20  rMsg, db, "%s", 
c250: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
c260: 78 74 28 26 63 74 78 2e 73 29 29 3b 0a 20 20 20  xt(&ctx.s));.   
c270: 20 20 20 72 63 20 3d 20 63 74 78 2e 69 73 45 72     rc = ctx.isEr
c280: 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  ror;.    }.    s
c290: 71 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74 65  qlite3VdbeDelete
c2a0: 41 75 78 44 61 74 61 28 70 2c 20 70 63 2c 20 70  AuxData(p, pc, p
c2b0: 4f 70 2d 3e 70 31 29 3b 0a 20 20 7d 0a 0a 20 20  Op->p1);.  }..  
c2c0: 2f 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73 75  /* Copy the resu
c2d0: 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  lt of the functi
c2e0: 6f 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  on into register
c2f0: 20 50 33 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33   P3 */.  sqlite3
c300: 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
c310: 6e 67 28 26 63 74 78 2e 73 2c 20 65 6e 63 6f 64  ng(&ctx.s, encod
c320: 69 6e 67 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ing);.  assert( 
c330: 70 4f 75 74 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d  pOut->flags==MEM
c340: 5f 4e 75 6c 6c 20 29 3b 0a 20 20 6d 65 6d 63 70  _Null );.  memcp
c350: 79 28 70 4f 75 74 2c 20 26 63 74 78 2e 73 2c 20  y(pOut, &ctx.s, 
c360: 73 69 7a 65 6f 66 28 4d 65 6d 29 29 3b 0a 20 20  sizeof(Mem));.  
c370: 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
c380: 65 6d 54 6f 6f 42 69 67 28 70 4f 75 74 29 20 29  emTooBig(pOut) )
c390: 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
c3a0: 69 67 3b 0a 20 20 7d 0a 0a 23 69 66 20 30 0a 20  ig;.  }..#if 0. 
c3b0: 20 2f 2a 20 54 68 65 20 61 70 70 2d 64 65 66 69   /* The app-defi
c3c0: 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20 68 61 73  ned function has
c3d0: 20 64 6f 6e 65 20 73 6f 6d 65 74 68 69 6e 67 20   done something 
c3e0: 74 68 61 74 20 61 73 20 63 61 75 73 65 64 20 74  that as caused t
c3f0: 68 69 73 0a 20 20 2a 2a 20 73 74 61 74 65 6d 65  his.  ** stateme
c400: 6e 74 20 74 6f 20 65 78 70 69 72 65 2e 20 20 28  nt to expire.  (
c410: 50 65 72 68 61 70 73 20 74 68 65 20 66 75 6e 63  Perhaps the func
c420: 74 69 6f 6e 20 63 61 6c 6c 65 64 20 73 71 6c 69  tion called sqli
c430: 74 65 33 5f 65 78 65 63 28 29 0a 20 20 2a 2a 20  te3_exec().  ** 
c440: 77 69 74 68 20 61 20 43 52 45 41 54 45 20 54 41  with a CREATE TA
c450: 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 29 0a  BLE statement.).
c460: 20 20 2a 2f 0a 20 20 69 66 28 20 70 2d 3e 65 78    */.  if( p->ex
c470: 70 69 72 65 64 20 29 20 72 63 20 3d 20 53 51 4c  pired ) rc = SQL
c480: 49 54 45 5f 41 42 4f 52 54 3b 0a 23 65 6e 64 69  ITE_ABORT;.#endi
c490: 66 0a 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  f..  REGISTER_TR
c4a0: 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75  ACE(pOp->p3, pOu
c4b0: 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  t);.  UPDATE_MAX
c4c0: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
c4d0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
c4e0: 4f 70 63 6f 64 65 3a 20 42 69 74 41 6e 64 20 50  Opcode: BitAnd P
c4f0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
c500: 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d  ynopsis:  r[P3]=
c510: 72 5b 50 31 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a  r[P1]&r[P2].**.*
c520: 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77  * Take the bit-w
c530: 69 73 65 20 41 4e 44 20 6f 66 20 74 68 65 20 76  ise AND of the v
c540: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
c550: 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a  r P1 and P2 and.
c560: 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  ** store the res
c570: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
c580: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
c590: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
c5a0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
c5b0: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
c5c0: 3a 20 42 69 74 4f 72 20 50 31 20 50 32 20 50 33  : BitOr P1 P2 P3
c5d0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
c5e0: 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72  :  r[P3]=r[P1]|r
c5f0: 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20  [P2].**.** Take 
c600: 74 68 65 20 62 69 74 2d 77 69 73 65 20 4f 52 20  the bit-wise OR 
c610: 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  of the values in
c620: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
c630: 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65   P2 and.** store
c640: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
c650: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
c660: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
c670: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
c680: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
c690: 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 4c  * Opcode: ShiftL
c6a0: 65 66 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  eft P1 P2 P3 * *
c6b0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
c6c0: 5b 50 33 5d 3d 72 5b 50 32 5d 3c 3c 72 5b 50 31  [P3]=r[P2]<<r[P1
c6d0: 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68  ].**.** Shift th
c6e0: 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  e integer value 
c6f0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74  in register P2 t
c700: 6f 20 74 68 65 20 6c 65 66 74 20 62 79 20 74 68  o the left by th
c710: 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62  e.** number of b
c720: 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79  its specified by
c730: 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20   the integer in 
c740: 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20  register P1..** 
c750: 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  Store the result
c760: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
c770: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
c780: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
c790: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
c7a0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
c7b0: 68 69 66 74 52 69 67 68 74 20 50 31 20 50 32 20  hiftRight P1 P2 
c7c0: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
c7d0: 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d  is:  r[P3]=r[P2]
c7e0: 3e 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68  >>r[P1].**.** Sh
c7f0: 69 66 74 20 74 68 65 20 69 6e 74 65 67 65 72 20  ift the integer 
c800: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
c810: 72 20 50 32 20 74 6f 20 74 68 65 20 72 69 67 68  r P2 to the righ
c820: 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62  t by the.** numb
c830: 65 72 20 6f 66 20 62 69 74 73 20 73 70 65 63 69  er of bits speci
c840: 66 69 65 64 20 62 79 20 74 68 65 20 69 6e 74 65  fied by the inte
c850: 67 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20  ger in register 
c860: 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65  P1..** Store the
c870: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
c880: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
c890: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
c8a0: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
c8b0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
c8c0: 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20  OP_BitAnd:      
c8d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
c8e0: 6d 65 20 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c  me as TK_BITAND,
c8f0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
c900: 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f 72  */.case OP_BitOr
c910: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
c920: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
c930: 5f 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32  _BITOR, in1, in2
c940: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
c950: 50 5f 53 68 69 66 74 4c 65 66 74 3a 20 20 20 20  P_ShiftLeft:    
c960: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
c970: 65 20 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20  e as TK_LSHIFT, 
c980: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
c990: 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74 52  /.case OP_ShiftR
c9a0: 69 67 68 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ight: {         
c9b0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
c9c0: 52 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32  RSHIFT, in1, in2
c9d0: 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20  , out3 */.  i64 
c9e0: 69 41 3b 0a 20 20 75 36 34 20 75 41 3b 0a 20 20  iA;.  u64 uA;.  
c9f0: 69 36 34 20 69 42 3b 0a 20 20 75 38 20 6f 70 3b  i64 iB;.  u8 op;
ca00: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
ca10: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e  [pOp->p1];.  pIn
ca20: 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
ca30: 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  2];.  pOut = &aM
ca40: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
ca50: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
ca60: 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26  | pIn2->flags) &
ca70: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
ca80: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
ca90: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
caa0: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69    break;.  }.  i
cab0: 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  A = sqlite3VdbeI
cac0: 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20  ntValue(pIn2);. 
cad0: 20 69 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62   iB = sqlite3Vdb
cae0: 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b  eIntValue(pIn1);
caf0: 0a 20 20 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63  .  op = pOp->opc
cb00: 6f 64 65 3b 0a 20 20 69 66 28 20 6f 70 3d 3d 4f  ode;.  if( op==O
cb10: 50 5f 42 69 74 41 6e 64 20 29 7b 0a 20 20 20 20  P_BitAnd ){.    
cb20: 69 41 20 26 3d 20 69 42 3b 0a 20 20 7d 65 6c 73  iA &= iB;.  }els
cb30: 65 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74  e if( op==OP_Bit
cb40: 4f 72 20 29 7b 0a 20 20 20 20 69 41 20 7c 3d 20  Or ){.    iA |= 
cb50: 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  iB;.  }else if( 
cb60: 69 42 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73  iB!=0 ){.    ass
cb70: 65 72 74 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66  ert( op==OP_Shif
cb80: 74 52 69 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50  tRight || op==OP
cb90: 5f 53 68 69 66 74 4c 65 66 74 20 29 3b 0a 0a 20  _ShiftLeft );.. 
cba0: 20 20 20 2f 2a 20 49 66 20 73 68 69 66 74 69 6e     /* If shiftin
cbb0: 67 20 62 79 20 61 20 6e 65 67 61 74 69 76 65 20  g by a negative 
cbc0: 61 6d 6f 75 6e 74 2c 20 73 68 69 66 74 20 69 6e  amount, shift in
cbd0: 20 74 68 65 20 6f 74 68 65 72 20 64 69 72 65 63   the other direc
cbe0: 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20  tion */.    if( 
cbf0: 69 42 3c 30 20 29 7b 0a 20 20 20 20 20 20 61 73  iB<0 ){.      as
cc00: 73 65 72 74 28 20 4f 50 5f 53 68 69 66 74 52 69  sert( OP_ShiftRi
cc10: 67 68 74 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66  ght==OP_ShiftLef
cc20: 74 2b 31 20 29 3b 0a 20 20 20 20 20 20 6f 70 20  t+1 );.      op 
cc30: 3d 20 32 2a 4f 50 5f 53 68 69 66 74 4c 65 66 74  = 2*OP_ShiftLeft
cc40: 20 2b 20 31 20 2d 20 6f 70 3b 0a 20 20 20 20 20   + 1 - op;.     
cc50: 20 69 42 20 3d 20 69 42 3e 28 2d 36 34 29 20 3f   iB = iB>(-64) ?
cc60: 20 2d 69 42 20 3a 20 36 34 3b 0a 20 20 20 20 7d   -iB : 64;.    }
cc70: 0a 0a 20 20 20 20 69 66 28 20 69 42 3e 3d 36 34  ..    if( iB>=64
cc80: 20 29 7b 0a 20 20 20 20 20 20 69 41 20 3d 20 28   ){.      iA = (
cc90: 69 41 3e 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f  iA>=0 || op==OP_
cca0: 53 68 69 66 74 4c 65 66 74 29 20 3f 20 30 20 3a  ShiftLeft) ? 0 :
ccb0: 20 2d 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a   -1;.    }else{.
ccc0: 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26 75 41        memcpy(&uA
ccd0: 2c 20 26 69 41 2c 20 73 69 7a 65 6f 66 28 75 41  , &iA, sizeof(uA
cce0: 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6f 70  ));.      if( op
ccf0: 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 29  ==OP_ShiftLeft )
cd00: 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3c 3c 3d  {.        uA <<=
cd10: 20 69 42 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65   iB;.      }else
cd20: 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3e 3e 3d  {.        uA >>=
cd30: 20 69 42 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20   iB;.        /* 
cd40: 53 69 67 6e 2d 65 78 74 65 6e 64 20 6f 6e 20 61  Sign-extend on a
cd50: 20 72 69 67 68 74 20 73 68 69 66 74 20 6f 66 20   right shift of 
cd60: 61 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65  a negative numbe
cd70: 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28  r */.        if(
cd80: 20 69 41 3c 30 20 29 20 75 41 20 7c 3d 20 28 28   iA<0 ) uA |= ((
cd90: 28 28 75 36 34 29 30 78 66 66 66 66 66 66 66 66  ((u64)0xffffffff
cda0: 29 3c 3c 33 32 29 7c 30 78 66 66 66 66 66 66 66  )<<32)|0xfffffff
cdb0: 66 29 20 3c 3c 20 28 36 34 2d 69 42 29 3b 0a 20  f) << (64-iB);. 
cdc0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d       }.      mem
cdd0: 63 70 79 28 26 69 41 2c 20 26 75 41 2c 20 73 69  cpy(&iA, &uA, si
cde0: 7a 65 6f 66 28 69 41 29 29 3b 0a 20 20 20 20 7d  zeof(iA));.    }
cdf0: 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
ce00: 20 3d 20 69 41 3b 0a 20 20 4d 65 6d 53 65 74 54   = iA;.  MemSetT
ce10: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
ce20: 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b  M_Int);.  break;
ce30: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
ce40: 64 64 49 6d 6d 20 20 50 31 20 50 32 20 2a 20 2a  ddImm  P1 P2 * *
ce50: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
ce60: 20 72 5b 50 31 5d 3d 72 5b 50 31 5d 2b 50 32 0a   r[P1]=r[P1]+P2.
ce70: 2a 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65 20 63  ** .** Add the c
ce80: 6f 6e 73 74 61 6e 74 20 50 32 20 74 6f 20 74 68  onstant P2 to th
ce90: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
cea0: 74 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72  ter P1..** The r
ceb0: 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20  esult is always 
cec0: 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a  an integer..**.*
ced0: 2a 20 54 6f 20 66 6f 72 63 65 20 61 6e 79 20 72  * To force any r
cee0: 65 67 69 73 74 65 72 20 74 6f 20 62 65 20 61 6e  egister to be an
cef0: 20 69 6e 74 65 67 65 72 2c 20 6a 75 73 74 20 61   integer, just a
cf00: 64 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  dd 0..*/.case OP
cf10: 5f 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20  _AddImm: {      
cf20: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
cf30: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
cf40: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p1];.  memAb
cf50: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
cf60: 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  In1);.  sqlite3V
cf70: 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
cf80: 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e  (pIn1);.  pIn1->
cf90: 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a  u.i += pOp->p2;.
cfa0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
cfb0: 70 63 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e 74  pcode: MustBeInt
cfc0: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
cfd0: 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61  .** Force the va
cfe0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
cff0: 50 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65  P1 to be an inte
d000: 67 65 72 2e 20 20 49 66 20 74 68 65 20 76 61 6c  ger.  If the val
d010: 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 6e  ue.** in P1 is n
d020: 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e  ot an integer an
d030: 64 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76  d cannot be conv
d040: 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e  erted into an in
d050: 74 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75 74  teger.** without
d060: 20 64 61 74 61 20 6c 6f 73 73 2c 20 74 68 65 6e   data loss, then
d070: 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
d080: 79 20 74 6f 20 50 32 2c 20 6f 72 20 69 66 20 50  y to P2, or if P
d090: 32 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61 6e  2==0.** raise an
d0a0: 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48   SQLITE_MISMATCH
d0b0: 20 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63   exception..*/.c
d0c0: 61 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74  ase OP_MustBeInt
d0d0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
d0e0: 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
d0f0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
d100: 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70  p->p1];.  if( (p
d110: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
d120: 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  _Int)==0 ){.    
d130: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49  applyAffinity(pI
d140: 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e  n1, SQLITE_AFF_N
d150: 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67  UMERIC, encoding
d160: 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  );.    VdbeBranc
d170: 68 54 61 6b 65 6e 28 28 70 49 6e 31 2d 3e 66 6c  hTaken((pIn1->fl
d180: 61 67 73 26 4d 45 4d 5f 49 6e 74 29 3d 3d 30 2c  ags&MEM_Int)==0,
d190: 20 32 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49   2);.    if( (pI
d1a0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
d1b0: 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  Int)==0 ){.     
d1c0: 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20   if( pOp->p2==0 
d1d0: 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
d1e0: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b  SQLITE_MISMATCH;
d1f0: 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
d200: 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
d210: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
d220: 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d         pc = pOp-
d230: 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 20  >p2 - 1;.       
d240: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
d250: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 4d 65 6d 53      }.  }.  MemS
d260: 65 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c  etTypeFlag(pIn1,
d270: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65   MEM_Int);.  bre
d280: 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53  ak;.}..#ifndef S
d290: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
d2a0: 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63  ING_POINT./* Opc
d2b0: 6f 64 65 3a 20 52 65 61 6c 41 66 66 69 6e 69 74  ode: RealAffinit
d2c0: 79 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  y P1 * * * *.**.
d2d0: 2a 2a 20 49 66 20 72 65 67 69 73 74 65 72 20 50  ** If register P
d2e0: 31 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67  1 holds an integ
d2f0: 65 72 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f  er convert it to
d300: 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a   a real value..*
d310: 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
d320: 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 65 78   is used when ex
d330: 74 72 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d 61  tracting informa
d340: 74 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c 75  tion from a colu
d350: 6d 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73 20 52  mn that.** has R
d360: 45 41 4c 20 61 66 66 69 6e 69 74 79 2e 20 20 53  EAL affinity.  S
d370: 75 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65  uch column value
d380: 73 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 73  s may still be s
d390: 74 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74 65  tored as.** inte
d3a0: 67 65 72 73 2c 20 66 6f 72 20 73 70 61 63 65 20  gers, for space 
d3b0: 65 66 66 69 63 69 65 6e 63 79 2c 20 62 75 74 20  efficiency, but 
d3c0: 61 66 74 65 72 20 65 78 74 72 61 63 74 69 6f 6e  after extraction
d3d0: 20 77 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a 2a   we want them.**
d3e0: 20 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61 20   to have only a 
d3f0: 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63  real value..*/.c
d400: 61 73 65 20 4f 50 5f 52 65 61 6c 41 66 66 69 6e  ase OP_RealAffin
d410: 69 74 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ity: {          
d420: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
d430: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
d440: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
d450: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
d460: 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73 71  EM_Int ){.    sq
d470: 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c  lite3VdbeMemReal
d480: 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20  ify(pIn1);.  }. 
d490: 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
d4a0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
d4b0: 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70  _OMIT_CAST./* Op
d4c0: 63 6f 64 65 3a 20 54 6f 54 65 78 74 20 50 31 20  code: ToText P1 
d4d0: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f  * * * *.**.** Fo
d4e0: 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rce the value in
d4f0: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
d500: 62 65 20 74 65 78 74 2e 0a 2a 2a 20 49 66 20 74  be text..** If t
d510: 68 65 20 76 61 6c 75 65 20 69 73 20 6e 75 6d 65  he value is nume
d520: 72 69 63 2c 20 63 6f 6e 76 65 72 74 20 69 74 20  ric, convert it 
d530: 74 6f 20 61 20 73 74 72 69 6e 67 20 75 73 69 6e  to a string usin
d540: 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c  g the.** equival
d550: 65 6e 74 20 6f 66 20 73 70 72 69 6e 74 66 28 29  ent of sprintf()
d560: 2e 20 20 42 6c 6f 62 20 76 61 6c 75 65 73 20 61  .  Blob values a
d570: 72 65 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64  re unchanged and
d580: 0a 2a 2a 20 61 72 65 20 61 66 74 65 72 77 61 72  .** are afterwar
d590: 64 73 20 73 69 6d 70 6c 79 20 69 6e 74 65 72 70  ds simply interp
d5a0: 72 65 74 65 64 20 61 73 20 74 65 78 74 2e 0a 2a  reted as text..*
d5b0: 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75  *.** A NULL valu
d5c0: 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64  e is not changed
d5d0: 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65   by this routine
d5e0: 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55  .  It remains NU
d5f0: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  LL..*/.case OP_T
d600: 6f 54 65 78 74 3a 20 7b 20 20 20 20 20 20 20 20  oText: {        
d610: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
d620: 65 20 61 73 20 54 4b 5f 54 4f 5f 54 45 58 54 2c  e as TK_TO_TEXT,
d630: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
d640: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
d650: 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
d660: 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20  nge(p, pIn1);.  
d670: 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
d680: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65  & MEM_Null ) bre
d690: 61 6b 3b 0a 20 20 61 73 73 65 72 74 28 20 4d 45  ak;.  assert( ME
d6a0: 4d 5f 53 74 72 3d 3d 28 4d 45 4d 5f 42 6c 6f 62  M_Str==(MEM_Blob
d6b0: 3e 3e 33 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e  >>3) );.  pIn1->
d6c0: 66 6c 61 67 73 20 7c 3d 20 28 70 49 6e 31 2d 3e  flags |= (pIn1->
d6d0: 66 6c 61 67 73 26 4d 45 4d 5f 42 6c 6f 62 29 3e  flags&MEM_Blob)>
d6e0: 3e 33 3b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e  >3;.  applyAffin
d6f0: 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45  ity(pIn1, SQLITE
d700: 5f 41 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64  _AFF_TEXT, encod
d710: 69 6e 67 29 3b 0a 20 20 72 63 20 3d 20 45 78 70  ing);.  rc = Exp
d720: 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20  andBlob(pIn1);. 
d730: 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
d740: 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c  lags & MEM_Str |
d750: 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  | db->mallocFail
d760: 65 64 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  ed );.  pIn1->fl
d770: 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 49 6e 74  ags &= ~(MEM_Int
d780: 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 42 6c  |MEM_Real|MEM_Bl
d790: 6f 62 7c 4d 45 4d 5f 5a 65 72 6f 29 3b 0a 20 20  ob|MEM_Zero);.  
d7a0: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
d7b0: 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65  IZE(pIn1);.  bre
d7c0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
d7d0: 3a 20 54 6f 42 6c 6f 62 20 50 31 20 2a 20 2a 20  : ToBlob P1 * * 
d7e0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20  * *.**.** Force 
d7f0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
d800: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61  ister P1 to be a
d810: 20 42 4c 4f 42 2e 0a 2a 2a 20 49 66 20 74 68 65   BLOB..** If the
d820: 20 76 61 6c 75 65 20 69 73 20 6e 75 6d 65 72 69   value is numeri
d830: 63 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f  c, convert it to
d840: 20 61 20 73 74 72 69 6e 67 20 66 69 72 73 74 2e   a string first.
d850: 0a 2a 2a 20 53 74 72 69 6e 67 73 20 61 72 65 20  .** Strings are 
d860: 73 69 6d 70 6c 79 20 72 65 69 6e 74 65 72 70 72  simply reinterpr
d870: 65 74 65 64 20 61 73 20 62 6c 6f 62 73 20 77 69  eted as blobs wi
d880: 74 68 20 6e 6f 20 63 68 61 6e 67 65 0a 2a 2a 20  th no change.** 
d890: 74 6f 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  to the underlyin
d8a0: 67 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 41 20  g data..**.** A 
d8b0: 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f  NULL value is no
d8c0: 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69  t changed by thi
d8d0: 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72  s routine.  It r
d8e0: 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  emains NULL..*/.
d8f0: 63 61 73 65 20 4f 50 5f 54 6f 42 6c 6f 62 3a 20  case OP_ToBlob: 
d900: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
d910: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
d920: 5f 54 4f 5f 42 4c 4f 42 2c 20 69 6e 31 20 2a 2f  _TO_BLOB, in1 */
d930: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
d940: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
d950: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
d960: 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a  M_Null ) break;.
d970: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
d980: 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d  gs & MEM_Blob)==
d990: 30 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66  0 ){.    applyAf
d9a0: 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c  finity(pIn1, SQL
d9b0: 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 65 6e  ITE_AFF_TEXT, en
d9c0: 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 61 73 73  coding);.    ass
d9d0: 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
d9e0: 20 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62   & MEM_Str || db
d9f0: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
da00: 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
da10: 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 42  Flag(pIn1, MEM_B
da20: 6c 6f 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  lob);.  }else{. 
da30: 20 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26     pIn1->flags &
da40: 3d 20 7e 28 4d 45 4d 5f 54 79 70 65 4d 61 73 6b  = ~(MEM_TypeMask
da50: 26 7e 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d  &~MEM_Blob);.  }
da60: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
da70: 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20  OBSIZE(pIn1);.  
da80: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
da90: 6f 64 65 3a 20 54 6f 4e 75 6d 65 72 69 63 20 50  ode: ToNumeric P
daa0: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
dab0: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
dac0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
dad0: 6f 20 62 65 20 6e 75 6d 65 72 69 63 20 28 65 69  o be numeric (ei
dae0: 74 68 65 72 20 61 6e 0a 2a 2a 20 69 6e 74 65 67  ther an.** integ
daf0: 65 72 20 6f 72 20 61 20 66 6c 6f 61 74 69 6e 67  er or a floating
db00: 2d 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 29 0a  -point number.).
db10: 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
db20: 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c  is text or blob,
db30: 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   try to convert 
db40: 69 74 20 74 6f 20 61 6e 20 75 73 69 6e 67 20 74  it to an using t
db50: 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74  he.** equivalent
db60: 20 6f 66 20 61 74 6f 69 28 29 20 6f 72 20 61 74   of atoi() or at
db70: 6f 66 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30  of() and store 0
db80: 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76   if no such conv
db90: 65 72 73 69 6f 6e 20 0a 2a 2a 20 69 73 20 70 6f  ersion .** is po
dba0: 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20  ssible..**.** A 
dbb0: 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f  NULL value is no
dbc0: 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69  t changed by thi
dbd0: 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72  s routine.  It r
dbe0: 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  emains NULL..*/.
dbf0: 63 61 73 65 20 4f 50 5f 54 6f 4e 75 6d 65 72 69  case OP_ToNumeri
dc00: 63 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  c: {            
dc10: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
dc20: 20 54 4b 5f 54 4f 5f 4e 55 4d 45 52 49 43 2c 20   TK_TO_NUMERIC, 
dc30: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
dc40: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
dc50: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
dc60: 4e 75 6d 65 72 69 66 79 28 70 49 6e 31 29 3b 0a  Numerify(pIn1);.
dc70: 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
dc80: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
dc90: 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  _CAST */../* Opc
dca0: 6f 64 65 3a 20 54 6f 49 6e 74 20 50 31 20 2a 20  ode: ToInt P1 * 
dcb0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63  * * *.**.** Forc
dcc0: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
dcd0: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65  egister P1 to be
dce0: 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66   an integer.  If
dcf0: 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 69 73  .** The value is
dd00: 20 63 75 72 72 65 6e 74 6c 79 20 61 20 72 65 61   currently a rea
dd10: 6c 20 6e 75 6d 62 65 72 2c 20 64 72 6f 70 20 69  l number, drop i
dd20: 74 73 20 66 72 61 63 74 69 6f 6e 61 6c 20 70 61  ts fractional pa
dd30: 72 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  rt..** If the va
dd40: 6c 75 65 20 69 73 20 74 65 78 74 20 6f 72 20 62  lue is text or b
dd50: 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76  lob, try to conv
dd60: 65 72 74 20 69 74 20 74 6f 20 61 6e 20 69 6e 74  ert it to an int
dd70: 65 67 65 72 20 75 73 69 6e 67 20 74 68 65 0a 2a  eger using the.*
dd80: 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20  * equivalent of 
dd90: 61 74 6f 69 28 29 20 61 6e 64 20 73 74 6f 72 65  atoi() and store
dda0: 20 30 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f   0 if no such co
ddb0: 6e 76 65 72 73 69 6f 6e 20 69 73 20 70 6f 73 73  nversion is poss
ddc0: 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  ible..**.** A NU
ddd0: 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20  LL value is not 
dde0: 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20  changed by this 
ddf0: 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d  routine.  It rem
de00: 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  ains NULL..*/.ca
de10: 73 65 20 4f 50 5f 54 6f 49 6e 74 3a 20 7b 20 20  se OP_ToInt: {  
de20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de30: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f  /* same as TK_TO
de40: 5f 49 4e 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  _INT, in1 */.  p
de50: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
de60: 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p1];.  if( (pIn
de70: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
de80: 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73  ull)==0 ){.    s
de90: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
dea0: 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20  egerify(pIn1);. 
deb0: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23   }.  break;.}..#
dec0: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
ded0: 54 45 5f 4f 4d 49 54 5f 43 41 53 54 29 20 26 26  TE_OMIT_CAST) &&
dee0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
def0: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
df00: 4f 49 4e 54 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a  OINT)./* Opcode:
df10: 20 54 6f 52 65 61 6c 20 50 31 20 2a 20 2a 20 2a   ToReal P1 * * *
df20: 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74   *.**.** Force t
df30: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
df40: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 20  ster P1 to be a 
df50: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e  floating point n
df60: 75 6d 62 65 72 2e 0a 2a 2a 20 49 66 20 54 68 65  umber..** If The
df70: 20 76 61 6c 75 65 20 69 73 20 63 75 72 72 65 6e   value is curren
df80: 74 6c 79 20 61 6e 20 69 6e 74 65 67 65 72 2c 20  tly an integer, 
df90: 63 6f 6e 76 65 72 74 20 69 74 2e 0a 2a 2a 20 49  convert it..** I
dfa0: 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 74  f the value is t
dfb0: 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79  ext or blob, try
dfc0: 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74   to convert it t
dfd0: 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 75 73 69  o an integer usi
dfe0: 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61  ng the.** equiva
dff0: 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 61  lent of atoi() a
e000: 6e 64 20 73 74 6f 72 65 20 30 2e 30 20 69 66 20  nd store 0.0 if 
e010: 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69  no such conversi
e020: 6f 6e 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a  on is possible..
e030: 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c  **.** A NULL val
e040: 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65  ue is not change
e050: 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e  d by this routin
e060: 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e  e.  It remains N
e070: 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
e080: 54 6f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20  ToReal: {       
e090: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
e0a0: 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 52 45 41 4c  me as TK_TO_REAL
e0b0: 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
e0c0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
e0d0: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
e0e0: 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20  ange(p, pIn1);. 
e0f0: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
e100: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
e110: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
e120: 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49  dbeMemRealify(pI
e130: 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  n1);.  }.  break
e140: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64  ;.}.#endif /* !d
e150: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
e160: 49 54 5f 43 41 53 54 29 20 26 26 20 21 64 65 66  IT_CAST) && !def
e170: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
e180: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 29  _FLOATING_POINT)
e190: 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
e1a0: 4c 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Lt P1 P2 P3 P4 P
e1b0: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  5.** Synopsis: i
e1c0: 66 20 72 5b 50 31 5d 3c 72 5b 50 33 5d 20 67 6f  f r[P1]<r[P3] go
e1d0: 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70  to P2.**.** Comp
e1e0: 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 69  are the values i
e1f0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
e200: 64 20 50 33 2e 20 20 49 66 20 72 65 67 28 50 33  d P3.  If reg(P3
e210: 29 3c 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a  )<reg(P1) then.*
e220: 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  * jump to addres
e230: 73 20 50 32 2e 20 20 0a 2a 2a 0a 2a 2a 20 49 66  s P2.  .**.** If
e240: 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50   the SQLITE_JUMP
e250: 49 46 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50 35  IFNULL bit of P5
e260: 20 69 73 20 73 65 74 20 61 6e 64 20 65 69 74 68   is set and eith
e270: 65 72 20 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a  er reg(P1) or.**
e280: 20 72 65 67 28 50 33 29 20 69 73 20 4e 55 4c 4c   reg(P3) is NULL
e290: 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a   then take the j
e2a0: 75 6d 70 2e 20 20 49 66 20 74 68 65 20 53 51 4c  ump.  If the SQL
e2b0: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a  ITE_JUMPIFNULL .
e2c0: 2a 2a 20 62 69 74 20 69 73 20 63 6c 65 61 72 20  ** bit is clear 
e2d0: 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
e2e0: 68 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72  h if either oper
e2f0: 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a  and is NULL..**.
e300: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46  ** The SQLITE_AF
e310: 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f  F_MASK portion o
e320: 66 20 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20  f P5 must be an 
e330: 61 66 66 69 6e 69 74 79 20 63 68 61 72 61 63 74  affinity charact
e340: 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  er -.** SQLITE_A
e350: 46 46 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f  FF_TEXT, SQLITE_
e360: 41 46 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64  AFF_INTEGER, and
e370: 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74   so forth. An at
e380: 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a  tempt is made .*
e390: 2a 20 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68  * to coerce both
e3a0: 20 69 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e   inputs accordin
e3b0: 67 20 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69  g to this affini
e3c0: 74 79 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a  ty before the.**
e3d0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d   comparison is m
e3e0: 61 64 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49  ade. If the SQLI
e3f0: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30  TE_AFF_MASK is 0
e400: 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69  x00, then numeri
e410: 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73  c.** affinity is
e420: 20 75 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74   used. Note that
e430: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f   the affinity co
e440: 6e 76 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74  nversions are st
e450: 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74  ored.** back int
e460: 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69  o the input regi
e470: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e  sters P1 and P3.
e480: 20 20 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65    So this opcode
e490: 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65   can cause.** pe
e4a0: 72 73 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73  rsistent changes
e4b0: 20 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 31   to registers P1
e4c0: 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f   and P3..**.** O
e4d0: 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69  nce any conversi
e4e0: 6f 6e 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70  ons have taken p
e4f0: 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65  lace, and neithe
e500: 72 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c  r value is NULL,
e510: 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20   .** the values 
e520: 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66  are compared. If
e530: 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65   both values are
e540: 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63   blobs then memc
e550: 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20  mp() is.** used 
e560: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
e570: 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20   results of the 
e580: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20  comparison.  If 
e590: 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61  both values.** a
e5a0: 72 65 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68  re text, then th
e5b0: 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f  e appropriate co
e5c0: 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
e5d0: 20 73 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a   specified in.**
e5e0: 20 50 34 20 69 73 20 20 75 73 65 64 20 74 6f 20   P4 is  used to 
e5f0: 64 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  do the compariso
e600: 6e 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74  n.  If P4 is not
e610: 20 73 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a   specified then.
e620: 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75  ** memcmp() is u
e630: 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74  sed to compare t
e640: 65 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20  ext string.  If 
e650: 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a  both values are.
e660: 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e  ** numeric, then
e670: 20 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61   a numeric compa
e680: 72 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49  rison is used. I
e690: 66 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73  f the two values
e6a0: 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65  .** are of diffe
e6b0: 72 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e  rent types, then
e6c0: 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e   numbers are con
e6d0: 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61  sidered less tha
e6e0: 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64  n.** strings and
e6f0: 20 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e   strings are con
e700: 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61  sidered less tha
e710: 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49  n blobs..**.** I
e720: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f  f the SQLITE_STO
e730: 52 45 50 32 20 62 69 74 20 6f 66 20 50 35 20 69  REP2 bit of P5 i
e740: 73 20 73 65 74 2c 20 74 68 65 6e 20 64 6f 20 6e  s set, then do n
e750: 6f 74 20 6a 75 6d 70 2e 20 20 49 6e 73 74 65 61  ot jump.  Instea
e760: 64 2c 0a 2a 2a 20 73 74 6f 72 65 20 61 20 62 6f  d,.** store a bo
e770: 6f 6c 65 61 6e 20 72 65 73 75 6c 74 20 28 65 69  olean result (ei
e780: 74 68 65 72 20 30 2c 20 6f 72 20 31 2c 20 6f 72  ther 0, or 1, or
e790: 20 4e 55 4c 4c 29 20 69 6e 20 72 65 67 69 73 74   NULL) in regist
e7a0: 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P2..**.** If 
e7b0: 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  the SQLITE_NULLE
e7c0: 51 20 62 69 74 20 69 73 20 73 65 74 20 69 6e 20  Q bit is set in 
e7d0: 50 35 2c 20 74 68 65 6e 20 4e 55 4c 4c 20 76 61  P5, then NULL va
e7e0: 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65  lues are conside
e7f0: 72 65 64 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 20  red.** equal to 
e800: 6f 6e 65 20 61 6e 6f 74 68 65 72 2c 20 70 72 6f  one another, pro
e810: 76 69 64 65 64 20 74 68 61 74 20 74 68 65 79 20  vided that they 
e820: 64 6f 20 6e 6f 74 20 68 61 76 65 20 74 68 65 69  do not have thei
e830: 72 20 4d 45 4d 5f 43 6c 65 61 72 65 64 0a 2a 2a  r MEM_Cleared.**
e840: 20 62 69 74 20 73 65 74 2e 0a 2a 2f 0a 2f 2a 20   bit set..*/./* 
e850: 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31 20 50 32  Opcode: Ne P1 P2
e860: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
e870: 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21  opsis: if r[P1]!
e880: 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a  =r[P3] goto P2.*
e890: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
e8a0: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
e8b0: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
e8c0: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
e8d0: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
e8e0: 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69  operands in regi
e8f0: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 20  sters P1 and P3 
e900: 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20  are not equal.  
e910: 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  See the Lt opcod
e920: 65 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f  e for.** additio
e930: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
e940: 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  .**.** If SQLITE
e950: 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69  _NULLEQ is set i
e960: 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20 72 65  n P5 then the re
e970: 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73  sult of comparis
e980: 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69 74  on is always eit
e990: 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66  her.** true or f
e9a0: 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65  alse and is neve
e9b0: 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68  r NULL.  If both
e9c0: 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55   operands are NU
e9d0: 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  LL then the resu
e9e0: 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69  lt.** of compari
e9f0: 73 6f 6e 20 69 73 20 66 61 6c 73 65 2e 20 20 49  son is false.  I
ea00: 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
ea10: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68   is NULL then th
ea20: 65 20 72 65 73 75 6c 74 20 69 73 20 74 72 75 65  e result is true
ea30: 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20  ..** If neither 
ea40: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
ea50: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68  the result is th
ea60: 65 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75  e same as it wou
ea70: 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20  ld be if.** the 
ea80: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c  SQLITE_NULLEQ fl
ea90: 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20  ag were omitted 
eaa0: 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f  from P5..*/./* O
eab0: 70 63 6f 64 65 3a 20 45 71 20 50 31 20 50 32 20  pcode: Eq P1 P2 
eac0: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
ead0: 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3d 3d  psis: if r[P1]==
eae0: 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a  r[P3] goto P2.**
eaf0: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
eb00: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
eb10: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
eb20: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
eb30: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f  aken if.** the o
eb40: 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73  perands in regis
eb50: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61  ters P1 and P3 a
eb60: 72 65 20 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65  re equal..** See
eb70: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
eb80: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
eb90: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  formation..**.**
eba0: 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45   If SQLITE_NULLE
ebb0: 51 20 69 73 20 73 65 74 20 69 6e 20 50 35 20 74  Q is set in P5 t
ebc0: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f  hen the result o
ebd0: 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  f comparison is 
ebe0: 61 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a  always either.**
ebf0: 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61   true or false a
ec00: 6e 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c  nd is never NULL
ec10: 2e 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61  .  If both opera
ec20: 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65  nds are NULL the
ec30: 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20  n the result.** 
ec40: 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  of comparison is
ec50: 20 74 72 75 65 2e 20 20 49 66 20 65 69 74 68 65   true.  If eithe
ec60: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
ec70: 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  L then the resul
ec80: 74 20 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49  t is false..** I
ec90: 66 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e  f neither operan
eca0: 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 72 65  d is NULL the re
ecb0: 73 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65  sult is the same
ecc0: 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20   as it would be 
ecd0: 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45  if.** the SQLITE
ece0: 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72  _NULLEQ flag wer
ecf0: 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50  e omitted from P
ed00: 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  5..*/./* Opcode:
ed10: 20 4c 65 20 50 31 20 50 32 20 50 33 20 50 34 20   Le P1 P2 P3 P4 
ed20: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
ed30: 69 66 20 72 5b 50 31 5d 3c 3d 72 5b 50 33 5d 20  if r[P1]<=r[P3] 
ed40: 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  goto P2.**.** Th
ed50: 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
ed60: 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ke the Lt opcode
ed70: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
ed80: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
ed90: 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74  f.** the content
eda0: 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20   of register P3 
edb0: 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20  is less than or 
edc0: 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e  equal to the con
edd0: 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73  tent of.** regis
ede0: 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65  ter P1.  See the
edf0: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
ee00: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
ee10: 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ation..*/./* Opc
ee20: 6f 64 65 3a 20 47 74 20 50 31 20 50 32 20 50 33  ode: Gt P1 P2 P3
ee30: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
ee40: 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 72 5b 50  is: if r[P1]>r[P
ee50: 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  3] goto P2.**.**
ee60: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
ee70: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
ee80: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
ee90: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
eea0: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  n if.** the cont
eeb0: 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
eec0: 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68  P3 is greater th
eed0: 61 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  an the content o
eee0: 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  f.** register P1
eef0: 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70  .  See the Lt op
ef00: 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
ef10: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
ef20: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47  .*/./* Opcode: G
ef30: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
ef40: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
ef50: 20 72 5b 50 31 5d 3e 3d 72 5b 50 33 5d 20 67 6f   r[P1]>=r[P3] go
ef60: 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73  to P2.**.** This
ef70: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
ef80: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65   the Lt opcode e
ef90: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
efa0: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
efb0: 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** the content o
efc0: 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  f register P3 is
efd0: 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
efe0: 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f   equal to the co
eff0: 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69  ntent of.** regi
f000: 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68  ster P1.  See th
f010: 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20  e Lt opcode for 
f020: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
f030: 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  mation..*/.case 
f040: 4f 50 5f 45 71 3a 20 20 20 20 20 20 20 20 20 20  OP_Eq:          
f050: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
f060: 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_EQ, jump, in1
f070: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
f080: 5f 4e 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Ne:            
f090: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
f0a0: 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _NE, jump, in1, 
f0b0: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c  in3 */.case OP_L
f0c0: 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t:              
f0d0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c   /* same as TK_L
f0e0: 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  T, jump, in1, in
f0f0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a  3 */.case OP_Le:
f100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f110: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c  * same as TK_LE,
f120: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
f130: 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20 20  */.case OP_Gt:  
f140: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
f150: 73 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a  same as TK_GT, j
f160: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
f170: 0a 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20  .case OP_Ge: {  
f180: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
f190: 6d 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d  me as TK_GE, jum
f1a0: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20  p, in1, in3 */. 
f1b0: 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20   int res;       
f1c0: 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f       /* Result o
f1d0: 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  f the comparison
f1e0: 20 6f 66 20 70 49 6e 31 20 61 67 61 69 6e 73 74   of pIn1 against
f1f0: 20 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20   pIn3 */.  char 
f200: 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 2f  affinity;      /
f210: 2a 20 41 66 66 69 6e 69 74 79 20 74 6f 20 75 73  * Affinity to us
f220: 65 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e  e for comparison
f230: 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 31   */.  u16 flags1
f240: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70  ;         /* Cop
f250: 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c  y of initial val
f260: 75 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67  ue of pIn1->flag
f270: 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73  s */.  u16 flags
f280: 33 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  3;         /* Co
f290: 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61  py of initial va
f2a0: 6c 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61  lue of pIn3->fla
f2b0: 67 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20  gs */..  pIn1 = 
f2c0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
f2d0: 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
f2e0: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73  Op->p3];.  flags
f2f0: 31 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b  1 = pIn1->flags;
f300: 0a 20 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33  .  flags3 = pIn3
f310: 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28  ->flags;.  if( (
f320: 66 6c 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29  flags1 | flags3)
f330: 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20  &MEM_Null ){.   
f340: 20 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20   /* One or both 
f350: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c  operands are NUL
f360: 4c 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70  L */.    if( pOp
f370: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55  ->p5 & SQLITE_NU
f380: 4c 4c 45 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a  LLEQ ){.      /*
f390: 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45   If SQLITE_NULLE
f3a0: 51 20 69 73 20 73 65 74 20 28 77 68 69 63 68 20  Q is set (which 
f3b0: 77 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e  will only happen
f3c0: 20 69 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72   if the operator
f3d0: 20 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f   is.      ** OP_
f3e0: 45 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65  Eq or OP_Ne) the
f3f0: 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20  n take the jump 
f400: 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67  or not depending
f410: 20 6f 6e 20 77 68 65 74 68 65 72 0a 20 20 20 20   on whether.    
f420: 20 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68    ** or not both
f430: 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 75   operands are nu
f440: 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  ll..      */.   
f450: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
f460: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c  opcode==OP_Eq ||
f470: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
f480: 5f 4e 65 20 29 3b 0a 20 20 20 20 20 20 61 73 73  _Ne );.      ass
f490: 65 72 74 28 20 28 66 6c 61 67 73 31 20 26 20 4d  ert( (flags1 & M
f4a0: 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30 20 29  EM_Cleared)==0 )
f4b0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
f4c0: 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54  (pOp->p5 & SQLIT
f4d0: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 29 3d 3d 30  E_JUMPIFNULL)==0
f4e0: 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28 66   );.      if( (f
f4f0: 6c 61 67 73 31 26 4d 45 4d 5f 4e 75 6c 6c 29 21  lags1&MEM_Null)!
f500: 3d 30 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c  =0.       && (fl
f510: 61 67 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  ags3&MEM_Null)!=
f520: 30 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c 61  0.       && (fla
f530: 67 73 33 26 4d 45 4d 5f 43 6c 65 61 72 65 64 29  gs3&MEM_Cleared)
f540: 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20  ==0.      ){.   
f550: 20 20 20 20 20 72 65 73 20 3d 20 30 3b 20 20 2f       res = 0;  /
f560: 2a 20 52 65 73 75 6c 74 73 20 61 72 65 20 65 71  * Results are eq
f570: 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c  ual */.      }el
f580: 73 65 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20  se{.        res 
f590: 3d 20 31 3b 20 20 2f 2a 20 52 65 73 75 6c 74 73  = 1;  /* Results
f5a0: 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a   are not equal *
f5b0: 2f 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  /.      }.    }e
f5c0: 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 53 51  lse{.      /* SQ
f5d0: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 63  LITE_NULLEQ is c
f5e0: 6c 65 61 72 20 61 6e 64 20 61 74 20 6c 65 61 73  lear and at leas
f5f0: 74 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69 73  t one operand is
f600: 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a 20   NULL,.      ** 
f610: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
f620: 69 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a  is always NULL..
f630: 20 20 20 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d        ** The jum
f640: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68  p is taken if th
f650: 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  e SQLITE_JUMPIFN
f660: 55 4c 4c 20 62 69 74 20 69 73 20 73 65 74 2e 0a  ULL bit is set..
f670: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
f680: 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  f( pOp->p5 & SQL
f690: 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20  ITE_STOREP2 ){. 
f6a0: 20 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61         pOut = &a
f6b0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
f6c0: 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65        MemSetType
f6d0: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e  Flag(pOut, MEM_N
f6e0: 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20 52 45  ull);.        RE
f6f0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
f700: 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20  ->p2, pOut);.   
f710: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
f720: 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
f730: 6e 28 32 2c 33 29 3b 0a 20 20 20 20 20 20 20 20  n(2,3);.        
f740: 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  if( pOp->p5 & SQ
f750: 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20  LITE_JUMPIFNULL 
f760: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 63 20  ){.          pc 
f770: 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 20  = pOp->p2-1;.   
f780: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
f790: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
f7a0: 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  }.  }else{.    /
f7b0: 2a 20 4e 65 69 74 68 65 72 20 6f 70 65 72 61 6e  * Neither operan
f7c0: 64 20 69 73 20 4e 55 4c 4c 2e 20 20 44 6f 20 61  d is NULL.  Do a
f7d0: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a   comparison. */.
f7e0: 20 20 20 20 61 66 66 69 6e 69 74 79 20 3d 20 70      affinity = p
f7f0: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
f800: 41 46 46 5f 4d 41 53 4b 3b 0a 20 20 20 20 69 66  AFF_MASK;.    if
f810: 28 20 61 66 66 69 6e 69 74 79 20 29 7b 0a 20 20  ( affinity ){.  
f820: 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74      applyAffinit
f830: 79 28 70 49 6e 31 2c 20 61 66 66 69 6e 69 74 79  y(pIn1, affinity
f840: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
f850: 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
f860: 28 70 49 6e 33 2c 20 61 66 66 69 6e 69 74 79 2c  (pIn3, affinity,
f870: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
f880: 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63    if( db->malloc
f890: 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f  Failed ) goto no
f8a0: 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  _mem;.    }..   
f8b0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
f8c0: 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51  type==P4_COLLSEQ
f8d0: 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c   || pOp->p4.pCol
f8e0: 6c 3d 3d 30 20 29 3b 0a 20 20 20 20 45 78 70 61  l==0 );.    Expa
f8f0: 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20  ndBlob(pIn1);.  
f900: 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e    ExpandBlob(pIn
f910: 33 29 3b 0a 20 20 20 20 72 65 73 20 3d 20 73 71  3);.    res = sq
f920: 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28  lite3MemCompare(
f930: 70 49 6e 33 2c 20 70 49 6e 31 2c 20 70 4f 70 2d  pIn3, pIn1, pOp-
f940: 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a  >p4.pColl);.  }.
f950: 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f    switch( pOp->o
f960: 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 63 61 73  pcode ){.    cas
f970: 65 20 4f 50 5f 45 71 3a 20 20 20 20 72 65 73 20  e OP_Eq:    res 
f980: 3d 20 72 65 73 3d 3d 30 3b 20 20 20 20 20 62 72  = res==0;     br
f990: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50  eak;.    case OP
f9a0: 5f 4e 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65  _Ne:    res = re
f9b0: 73 21 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b  s!=0;     break;
f9c0: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 74 3a  .    case OP_Lt:
f9d0: 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c 30 3b      res = res<0;
f9e0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
f9f0: 20 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20   case OP_Le:    
fa00: 72 65 73 20 3d 20 72 65 73 3c 3d 30 3b 20 20 20  res = res<=0;   
fa10: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
fa20: 65 20 4f 50 5f 47 74 3a 20 20 20 20 72 65 73 20  e OP_Gt:    res 
fa30: 3d 20 72 65 73 3e 30 3b 20 20 20 20 20 20 62 72  = res>0;      br
fa40: 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74  eak;.    default
fa50: 3a 20 20 20 20 20 20 20 72 65 73 20 3d 20 72 65  :       res = re
fa60: 73 3e 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b  s>=0;     break;
fa70: 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d  .  }..  if( pOp-
fa80: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f  >p5 & SQLITE_STO
fa90: 52 45 50 32 20 29 7b 0a 20 20 20 20 70 4f 75 74  REP2 ){.    pOut
faa0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
fab0: 5d 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  ];.    memAboutT
fac0: 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
fad0: 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
fae0: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
faf0: 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  nt);.    pOut->u
fb00: 2e 69 20 3d 20 72 65 73 3b 0a 20 20 20 20 52 45  .i = res;.    RE
fb10: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
fb20: 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 7d  ->p2, pOut);.  }
fb30: 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72  else{.    VdbeBr
fb40: 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
fb50: 2c 20 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  , (pOp->p5 & SQL
fb60: 49 54 45 5f 4e 55 4c 4c 45 51 29 3f 32 3a 33 29  ITE_NULLEQ)?2:3)
fb70: 3b 0a 20 20 20 20 69 66 28 20 72 65 73 20 29 7b  ;.    if( res ){
fb80: 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
fb90: 3e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  >p2-1;.    }.  }
fba0: 0a 20 20 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63  .  /* Undo any c
fbb0: 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 61  hanges made by a
fbc0: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 20 74  pplyAffinity() t
fbd0: 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69  o the input regi
fbe0: 73 74 65 72 73 2e 20 2a 2f 0a 20 20 70 49 6e 31  sters. */.  pIn1
fbf0: 2d 3e 66 6c 61 67 73 20 3d 20 28 70 49 6e 31 2d  ->flags = (pIn1-
fc00: 3e 66 6c 61 67 73 26 7e 4d 45 4d 5f 54 79 70 65  >flags&~MEM_Type
fc10: 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73 31 26  Mask) | (flags1&
fc20: 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20  MEM_TypeMask);. 
fc30: 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 3d 20 28   pIn3->flags = (
fc40: 70 49 6e 33 2d 3e 66 6c 61 67 73 26 7e 4d 45 4d  pIn3->flags&~MEM
fc50: 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c  _TypeMask) | (fl
fc60: 61 67 73 33 26 4d 45 4d 5f 54 79 70 65 4d 61 73  ags3&MEM_TypeMas
fc70: 6b 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  k);.  break;.}..
fc80: 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75  /* Opcode: Permu
fc90: 74 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20  tation * * * P4 
fca0: 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  *.**.** Set the 
fcb0: 70 65 72 6d 75 74 61 74 69 6f 6e 20 75 73 65 64  permutation used
fcc0: 20 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61   by the OP_Compa
fcd0: 72 65 20 6f 70 65 72 61 74 6f 72 20 74 6f 20 62  re operator to b
fce0: 65 20 74 68 65 20 61 72 72 61 79 0a 2a 2a 20 6f  e the array.** o
fcf0: 66 20 69 6e 74 65 67 65 72 73 20 69 6e 20 50 34  f integers in P4
fd00: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d  ..**.** The perm
fd10: 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  utation is only 
fd20: 76 61 6c 69 64 20 75 6e 74 69 6c 20 74 68 65 20  valid until the 
fd30: 6e 65 78 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20  next OP_Compare 
fd40: 74 68 61 74 20 68 61 73 0a 2a 2a 20 74 68 65 20  that has.** the 
fd50: 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62  OPFLAG_PERMUTE b
fd60: 69 74 20 73 65 74 20 69 6e 20 50 35 2e 20 54 79  it set in P5. Ty
fd70: 70 69 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50  pically the OP_P
fd80: 65 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c  ermutation shoul
fd90: 64 20 0a 2a 2a 20 6f 63 63 75 72 20 69 6d 6d 65  d .** occur imme
fda0: 64 69 61 74 65 6c 79 20 70 72 69 6f 72 20 74 6f  diately prior to
fdb0: 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e   the OP_Compare.
fdc0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d  .*/.case OP_Perm
fdd0: 75 74 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73  utation: {.  ass
fde0: 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
fdf0: 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b  ==P4_INTARRAY );
fe00: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
fe10: 70 34 2e 61 69 20 29 3b 0a 20 20 61 50 65 72 6d  p4.ai );.  aPerm
fe20: 75 74 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69  ute = pOp->p4.ai
fe30: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
fe40: 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65   Opcode: Compare
fe50: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
fe60: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
fe70: 31 40 50 33 5d 20 3c 2d 3e 20 72 5b 50 32 40 50  1@P3] <-> r[P2@P
fe80: 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65  3].**.** Compare
fe90: 20 74 77 6f 20 76 65 63 74 6f 72 73 20 6f 66 20   two vectors of 
fea0: 72 65 67 69 73 74 65 72 73 20 69 6e 20 72 65 67  registers in reg
feb0: 28 50 31 29 2e 2e 72 65 67 28 50 31 2b 50 33 2d  (P1)..reg(P1+P3-
fec0: 31 29 20 28 63 61 6c 6c 20 74 68 69 73 0a 2a 2a  1) (call this.**
fed0: 20 76 65 63 74 6f 72 20 22 41 22 29 20 61 6e 64   vector "A") and
fee0: 20 69 6e 20 72 65 67 28 50 32 29 2e 2e 72 65 67   in reg(P2)..reg
fef0: 28 50 32 2b 50 33 2d 31 29 20 28 22 42 22 29 2e  (P2+P3-1) ("B").
ff00: 20 20 53 61 76 65 20 74 68 65 20 72 65 73 75 6c    Save the resul
ff10: 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d 70  t of.** the comp
ff20: 61 72 69 73 6f 6e 20 66 6f 72 20 75 73 65 20 62  arison for use b
ff30: 79 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a 75  y the next OP_Ju
ff40: 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a  mp instruct..**.
ff50: 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68 65  ** If P5 has the
ff60: 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20   OPFLAG_PERMUTE 
ff70: 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68  bit set, then th
ff80: 65 20 6f 72 64 65 72 20 6f 66 20 63 6f 6d 70 61  e order of compa
ff90: 72 69 73 6f 6e 20 69 73 0a 2a 2a 20 64 65 74 65  rison is.** dete
ffa0: 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6d 6f  rmined by the mo
ffb0: 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 50 65 72  st recent OP_Per
ffc0: 6d 75 74 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f  mutation operato
ffd0: 72 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 4f 50  r.  If the.** OP
ffe0: 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74  FLAG_PERMUTE bit
fff0: 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20   is clear, then 
10000 72 65 67 69 73 74 65 72 20 61 72 65 20 63 6f 6d  register are com
10010 70 61 72 65 64 20 69 6e 20 73 65 71 75 65 6e 74  pared in sequent
10020 69 61 6c 0a 2a 2a 20 6f 72 64 65 72 2e 0a 2a 2a  ial.** order..**
10030 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b 65 79 49  .** P4 is a KeyI
10040 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 74 68  nfo structure th
10050 61 74 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c 61  at defines colla
10060 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 61  ting sequences a
10070 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65 72  nd sort.** order
10080 73 20 66 6f 72 20 74 68 65 20 63 6f 6d 70 61 72  s for the compar
10090 69 73 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d 75  ison.  The permu
100a0 74 61 74 69 6f 6e 20 61 70 70 6c 69 65 73 20 74  tation applies t
100b0 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 6f  o registers.** o
100c0 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79 49 6e 66  nly.  The KeyInf
100d0 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 75  o elements are u
100e0 73 65 64 20 73 65 71 75 65 6e 74 69 61 6c 6c 79  sed sequentially
100f0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 70  ..**.** The comp
10100 61 72 69 73 6f 6e 20 69 73 20 61 20 73 6f 72 74  arison is a sort
10110 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f 20   comparison, so 
10120 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65 71  NULLs compare eq
10130 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72  ual,.** NULLs ar
10140 65 20 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d 62  e less than numb
10150 65 72 73 2c 20 6e 75 6d 62 65 72 73 20 61 72 65  ers, numbers are
10160 20 6c 65 73 73 20 74 68 61 6e 20 73 74 72 69 6e   less than strin
10170 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69 6e  gs,.** and strin
10180 67 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e  gs are less than
10190 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65 20   blobs..*/.case 
101a0 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20  OP_Compare: {.  
101b0 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a  int n;.  int i;.
101c0 20 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74 20    int p1;.  int 
101d0 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79 49  p2;.  const KeyI
101e0 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20  nfo *pKeyInfo;. 
101f0 20 69 6e 74 20 69 64 78 3b 0a 20 20 43 6f 6c 6c   int idx;.  Coll
10200 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f  Seq *pColl;    /
10210 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
10220 65 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e 20 74  ence to use on t
10230 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20 69 6e  his term */.  in
10240 74 20 62 52 65 76 3b 20 20 20 20 20 20 20 20 20  t bRev;         
10250 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 44 45 53   /* True for DES
10260 43 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72 64  CENDING sort ord
10270 65 72 20 2a 2f 0a 0a 20 20 69 66 28 20 28 70 4f  er */..  if( (pO
10280 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50  p->p5 & OPFLAG_P
10290 45 52 4d 55 54 45 29 3d 3d 30 20 29 20 61 50 65  ERMUTE)==0 ) aPe
102a0 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 6e 20 3d  rmute = 0;.  n =
102b0 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65 79   pOp->p3;.  pKey
102c0 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
102d0 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72  KeyInfo;.  asser
102e0 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65  t( n>0 );.  asse
102f0 72 74 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30 20  rt( pKeyInfo!=0 
10300 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70  );.  p1 = pOp->p
10310 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70  1;.  p2 = pOp->p
10320 32 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45  2;.#if SQLITE_DE
10330 42 55 47 0a 20 20 69 66 28 20 61 50 65 72 6d 75  BUG.  if( aPermu
10340 74 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b 2c  te ){.    int k,
10350 20 6d 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72   mx = 0;.    for
10360 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20  (k=0; k<n; k++) 
10370 69 66 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3e  if( aPermute[k]>
10380 6d 78 20 29 20 6d 78 20 3d 20 61 50 65 72 6d 75  mx ) mx = aPermu
10390 74 65 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65 72  te[k];.    asser
103a0 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6d 78  t( p1>0 && p1+mx
103b0 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
103c0 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20  ursor)+1 );.    
103d0 61 73 73 65 72 74 28 20 70 32 3e 30 20 26 26 20  assert( p2>0 && 
103e0 70 32 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p2+mx<=(p->nMem-
103f0 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
10400 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
10410 73 65 72 74 28 20 70 31 3e 30 20 26 26 20 70 31  sert( p1>0 && p1
10420 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  +n<=(p->nMem-p->
10430 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
10440 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 26    assert( p2>0 &
10450 26 20 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d  & p2+n<=(p->nMem
10460 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29  -p->nCursor)+1 )
10470 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ;.  }.#endif /* 
10480 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a  SQLITE_DEBUG */.
10490 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20    for(i=0; i<n; 
104a0 69 2b 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d 20  i++){.    idx = 
104b0 61 50 65 72 6d 75 74 65 20 3f 20 61 50 65 72 6d  aPermute ? aPerm
104c0 75 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20  ute[i] : i;.    
104d0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
104e0 69 64 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d  id(&aMem[p1+idx]
104f0 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ) );.    assert(
10500 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
10510 6d 5b 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20 20  m[p2+idx]) );.  
10520 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
10530 28 70 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70  (p1+idx, &aMem[p
10540 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45 47  1+idx]);.    REG
10550 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 69  ISTER_TRACE(p2+i
10560 64 78 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78  dx, &aMem[p2+idx
10570 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  ]);.    assert( 
10580 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65  i<pKeyInfo->nFie
10590 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c 20  ld );.    pColl 
105a0 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c  = pKeyInfo->aCol
105b0 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76 20 3d  l[i];.    bRev =
105c0 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72 74   pKeyInfo->aSort
105d0 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69 43  Order[i];.    iC
105e0 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69 74 65 33  ompare = sqlite3
105f0 4d 65 6d 43 6f 6d 70 61 72 65 28 26 61 4d 65 6d  MemCompare(&aMem
10600 5b 70 31 2b 69 64 78 5d 2c 20 26 61 4d 65 6d 5b  [p1+idx], &aMem[
10610 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b  p2+idx], pColl);
10620 0a 20 20 20 20 69 66 28 20 69 43 6f 6d 70 61 72  .    if( iCompar
10630 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 62  e ){.      if( b
10640 52 65 76 20 29 20 69 43 6f 6d 70 61 72 65 20 3d  Rev ) iCompare =
10650 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20   -iCompare;.    
10660 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
10670 20 7d 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20   }.  aPermute = 
10680 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  0;.  break;.}../
10690 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20 50  * Opcode: Jump P
106a0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
106b0 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 69 6e  * Jump to the in
106c0 73 74 72 75 63 74 69 6f 6e 20 61 74 20 61 64 64  struction at add
106d0 72 65 73 73 20 50 31 2c 20 50 32 2c 20 6f 72 20  ress P1, P2, or 
106e0 50 33 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  P3 depending on 
106f0 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74 68  whether.** in th
10700 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50  e most recent OP
10710 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74 72 75 63  _Compare instruc
10720 74 69 6f 6e 20 74 68 65 20 50 31 20 76 65 63 74  tion the P1 vect
10730 6f 72 20 77 61 73 20 6c 65 73 73 20 74 68 61 6e  or was less than
10740 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f 72  .** equal to, or
10750 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
10760 65 20 50 32 20 76 65 63 74 6f 72 2c 20 72 65 73  e P2 vector, res
10770 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61  pectively..*/.ca
10780 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20 20  se OP_Jump: {   
10790 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
107a0 70 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d 70  p */.  if( iComp
107b0 61 72 65 3c 30 20 29 7b 0a 20 20 20 20 70 63 20  are<0 ){.    pc 
107c0 3d 20 70 4f 70 2d 3e 70 31 20 2d 20 31 3b 20 20  = pOp->p1 - 1;  
107d0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
107e0 30 2c 33 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  0,3);.  }else if
107f0 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30 20 29 7b  ( iCompare==0 ){
10800 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
10810 32 20 2d 20 31 3b 20 20 56 64 62 65 42 72 61 6e  2 - 1;  VdbeBran
10820 63 68 54 61 6b 65 6e 28 31 2c 33 29 3b 0a 20 20  chTaken(1,3);.  
10830 7d 65 6c 73 65 7b 0a 20 20 20 20 70 63 20 3d 20  }else{.    pc = 
10840 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 20 20 56 64  pOp->p3 - 1;  Vd
10850 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c  beBranchTaken(2,
10860 33 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  3);.  }.  break;
10870 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
10880 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  nd P1 P2 P3 * *.
10890 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
108a0 33 5d 3d 28 72 5b 50 31 5d 20 26 26 20 72 5b 50  3]=(r[P1] && r[P
108b0 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74  2]).**.** Take t
108c0 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20 6f  he logical AND o
108d0 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  f the values in 
108e0 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
108f0 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74 65   P2 and.** write
10900 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 74 6f   the result into
10910 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
10920 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 31  .** If either P1
10930 20 6f 72 20 50 32 20 69 73 20 30 20 28 66 61 6c   or P2 is 0 (fal
10940 73 65 29 20 74 68 65 6e 20 74 68 65 20 72 65 73  se) then the res
10950 75 6c 74 20 69 73 20 30 20 65 76 65 6e 20 69 66  ult is 0 even if
10960 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72 20 69 6e  .** the other in
10970 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20  put is NULL.  A 
10980 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f 72  NULL and true or
10990 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65 0a   two NULLs give.
109a0 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74  ** a NULL output
109b0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
109c0 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  Or P1 P2 P3 * *.
109d0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
109e0 33 5d 3d 28 72 5b 50 31 5d 20 7c 7c 20 72 5b 50  3]=(r[P1] || r[P
109f0 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74  2]).**.** Take t
10a00 68 65 20 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66  he logical OR of
10a10 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
10a20 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50  egister P1 and P
10a30 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74  2 and.** store t
10a40 68 65 20 61 6e 73 77 65 72 20 69 6e 20 72 65 67  he answer in reg
10a50 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  ister P3..**.** 
10a60 49 66 20 65 69 74 68 65 72 20 50 31 20 6f 72 20  If either P1 or 
10a70 50 32 20 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74  P2 is nonzero (t
10a80 72 75 65 29 20 74 68 65 6e 20 74 68 65 20 72 65  rue) then the re
10a90 73 75 6c 74 20 69 73 20 31 20 28 74 72 75 65 29  sult is 1 (true)
10aa0 0a 2a 2a 20 65 76 65 6e 20 69 66 20 74 68 65 20  .** even if the 
10ab0 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  other input is N
10ac0 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64  ULL.  A NULL and
10ad0 20 66 61 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55   false or two NU
10ae0 4c 4c 73 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55  LLs.** give a NU
10af0 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61  LL output..*/.ca
10b00 73 65 20 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20  se OP_And:      
10b10 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
10b20 61 73 20 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20  as TK_AND, in1, 
10b30 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
10b40 65 20 4f 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20  e OP_Or: {      
10b50 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
10b60 73 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e  s TK_OR, in1, in
10b70 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74  2, out3 */.  int
10b80 20 76 31 3b 20 20 20 20 2f 2a 20 4c 65 66 74 20   v1;    /* Left 
10b90 6f 70 65 72 61 6e 64 3a 20 20 30 3d 3d 46 41 4c  operand:  0==FAL
10ba0 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d  SE, 1==TRUE, 2==
10bb0 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20  UNKNOWN or NULL 
10bc0 2a 2f 0a 20 20 69 6e 74 20 76 32 3b 20 20 20 20  */.  int v2;    
10bd0 2f 2a 20 52 69 67 68 74 20 6f 70 65 72 61 6e 64  /* Right operand
10be0 3a 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54  : 0==FALSE, 1==T
10bf0 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20  RUE, 2==UNKNOWN 
10c00 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49  or NULL */..  pI
10c10 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
10c20 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  p1];.  if( pIn1-
10c30 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
10c40 6c 20 29 7b 0a 20 20 20 20 76 31 20 3d 20 32 3b  l ){.    v1 = 2;
10c50 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 31  .  }else{.    v1
10c60 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
10c70 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b  tValue(pIn1)!=0;
10c80 0a 20 20 7d 0a 20 20 70 49 6e 32 20 3d 20 26 61  .  }.  pIn2 = &a
10c90 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
10ca0 69 66 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20  if( pIn2->flags 
10cb0 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
10cc0 20 20 76 32 20 3d 20 32 3b 0a 20 20 7d 65 6c 73    v2 = 2;.  }els
10cd0 65 7b 0a 20 20 20 20 76 32 20 3d 20 73 71 6c 69  e{.    v2 = sqli
10ce0 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
10cf0 70 49 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a 20 20  pIn2)!=0;.  }.  
10d00 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
10d10 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20 73  =OP_And ){.    s
10d20 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69  tatic const unsi
10d30 67 6e 65 64 20 63 68 61 72 20 61 6e 64 5f 6c 6f  gned char and_lo
10d40 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c 20  gic[] = { 0, 0, 
10d50 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20 32  0, 0, 1, 2, 0, 2
10d60 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20  , 2 };.    v1 = 
10d70 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76  and_logic[v1*3+v
10d80 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  2];.  }else{.   
10d90 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e   static const un
10da0 73 69 67 6e 65 64 20 63 68 61 72 20 6f 72 5f 6c  signed char or_l
10db0 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c  ogic[] = { 0, 1,
10dc0 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c 20   2, 1, 1, 1, 2, 
10dd0 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d  1, 2 };.    v1 =
10de0 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76   or_logic[v1*3+v
10df0 32 5d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d  2];.  }.  pOut =
10e00 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
10e10 0a 20 20 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a  .  if( v1==2 ){.
10e20 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
10e30 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c  ag(pOut, MEM_Nul
10e40 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  l);.  }else{.   
10e50 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b   pOut->u.i = v1;
10e60 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
10e70 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
10e80 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  t);.  }.  break;
10e90 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
10ea0 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ot P1 P2 * * *.*
10eb0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
10ec0 5d 3d 20 21 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  ]= !r[P1].**.** 
10ed0 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 76 61  Interpret the va
10ee0 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
10ef0 50 31 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20  P1 as a boolean 
10f00 76 61 6c 75 65 2e 20 20 53 74 6f 72 65 20 74 68  value.  Store th
10f10 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d  e.** boolean com
10f20 70 6c 65 6d 65 6e 74 20 69 6e 20 72 65 67 69 73  plement in regis
10f30 74 65 72 20 50 32 2e 20 20 49 66 20 74 68 65 20  ter P2.  If the 
10f40 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
10f50 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c  r P1 is .** NULL
10f60 2c 20 74 68 65 6e 20 61 20 4e 55 4c 4c 20 69 73  , then a NULL is
10f70 20 73 74 6f 72 65 64 20 69 6e 20 50 32 2e 0a 2a   stored in P2..*
10f80 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b  /.case OP_Not: {
10f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fa0 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f  /* same as TK_NO
10fb0 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a  T, in1, out2 */.
10fc0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
10fd0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Op->p1];.  pOut 
10fe0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
10ff0 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  ;.  if( pIn1->fl
11000 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
11010 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
11020 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
11030 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
11040 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
11050 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 21 73 71  tInt64(pOut, !sq
11060 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
11070 65 28 70 49 6e 31 29 29 3b 0a 20 20 7d 0a 20 20  e(pIn1));.  }.  
11080 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
11090 6f 64 65 3a 20 42 69 74 4e 6f 74 20 50 31 20 50  ode: BitNot P1 P
110a0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
110b0 73 69 73 3a 20 72 5b 50 31 5d 3d 20 7e 72 5b 50  sis: r[P1]= ~r[P
110c0 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  1].**.** Interpr
110d0 65 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  et the content o
110e0 66 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73  f register P1 as
110f0 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 53 74   an integer.  St
11100 6f 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d  ore the.** ones-
11110 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68  complement of th
11120 65 20 50 31 20 76 61 6c 75 65 20 69 6e 74 6f 20  e P1 value into 
11130 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66  register P2.  If
11140 20 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e   P1 holds.** a N
11150 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 61  ULL then store a
11160 20 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a   NULL in P2..*/.
11170 63 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20  case OP_BitNot: 
11180 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
11190 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e   same as TK_BITN
111a0 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f  OT, in1, out2 */
111b0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
111c0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74  pOp->p1];.  pOut
111d0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
111e0 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
111f0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
11200 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
11210 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
11220 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  t);.  }else{.   
11230 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
11240 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 7e 73  etInt64(pOut, ~s
11250 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
11260 75 65 28 70 49 6e 31 29 29 3b 0a 20 20 7d 0a 20  ue(pIn1));.  }. 
11270 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
11280 63 6f 64 65 3a 20 4f 6e 63 65 20 50 31 20 50 32  code: Once P1 P2
11290 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65   * * *.**.** Che
112a0 63 6b 20 69 66 20 4f 50 5f 4f 6e 63 65 20 66 6c  ck if OP_Once fl
112b0 61 67 20 50 31 20 69 73 20 73 65 74 2e 20 49 66  ag P1 is set. If
112c0 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73   so, jump to ins
112d0 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68  truction P2. Oth
112e0 65 72 77 69 73 65 2c 0a 2a 2a 20 73 65 74 20 74  erwise,.** set t
112f0 68 65 20 66 6c 61 67 20 61 6e 64 20 66 61 6c 6c  he flag and fall
11300 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
11310 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
11320 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
11330 73 2c 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f 64  s,.** this opcod
11340 65 20 63 61 75 73 65 73 20 61 6c 6c 20 66 6f 6c  e causes all fol
11350 6c 6f 77 69 6e 67 20 6f 70 63 6f 64 65 73 20 75  lowing opcodes u
11360 70 20 74 68 72 6f 75 67 68 20 50 32 20 28 62 75  p through P2 (bu
11370 74 20 6e 6f 74 20 69 6e 63 6c 75 64 69 6e 67 0a  t not including.
11380 2a 2a 20 50 32 29 20 74 6f 20 72 75 6e 20 6a 75  ** P2) to run ju
11390 73 74 20 6f 6e 63 65 20 61 6e 64 20 74 6f 20 62  st once and to b
113a0 65 20 73 6b 69 70 70 65 64 20 6f 6e 20 73 75 62  e skipped on sub
113b0 73 65 71 75 65 6e 74 20 74 69 6d 65 73 20 74 68  sequent times th
113c0 72 6f 75 67 68 20 74 68 65 20 6c 6f 6f 70 2e 0a  rough the loop..
113d0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 6e 63 65 3a  */.case OP_Once:
113e0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
113f0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65  * jump */.  asse
11400 72 74 28 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e  rt( pOp->p1<p->n
11410 4f 6e 63 65 46 6c 61 67 20 29 3b 0a 20 20 56 64  OnceFlag );.  Vd
11420 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 2d  beBranchTaken(p-
11430 3e 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e  >aOnceFlag[pOp->
11440 70 31 5d 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66  p1]!=0, 2);.  if
11450 28 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b 70  ( p->aOnceFlag[p
11460 4f 70 2d 3e 70 31 5d 20 29 7b 0a 20 20 20 20 70  Op->p1] ){.    p
11470 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20  c = pOp->p2-1;. 
11480 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 61   }else{.    p->a
11490 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31  OnceFlag[pOp->p1
114a0 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  ] = 1;.  }.  bre
114b0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
114c0 3a 20 49 66 20 50 31 20 50 32 20 50 33 20 2a 20  : If P1 P2 P3 * 
114d0 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  *.**.** Jump to 
114e0 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20  P2 if the value 
114f0 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
11500 73 20 74 72 75 65 2e 20 20 54 68 65 20 76 61 6c  s true.  The val
11510 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65  ue.** is conside
11520 72 65 64 20 74 72 75 65 20 69 66 20 69 74 20 69  red true if it i
11530 73 20 6e 75 6d 65 72 69 63 20 61 6e 64 20 6e 6f  s numeric and no
11540 6e 2d 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20  n-zero.  If the 
11550 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69  value.** in P1 i
11560 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65  s NULL then take
11570 20 74 68 65 20 6a 75 6d 70 20 69 66 20 50 33 20   the jump if P3 
11580 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a  is non-zero..*/.
11590 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74  /* Opcode: IfNot
115a0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
115b0 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
115c0 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
115d0 65 67 69 73 74 65 72 20 50 31 20 69 73 20 46 61  egister P1 is Fa
115e0 6c 73 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a  lse.  The value.
115f0 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  ** is considered
11600 20 66 61 6c 73 65 20 69 66 20 69 74 20 68 61 73   false if it has
11610 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65   a numeric value
11620 20 6f 66 20 7a 65 72 6f 2e 20 20 49 66 20 74 68   of zero.  If th
11630 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31  e value.** in P1
11640 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61   is NULL then ta
11650 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 50  ke the jump if P
11660 33 20 69 73 20 7a 65 72 6f 2e 0a 2a 2f 0a 63 61  3 is zero..*/.ca
11670 73 65 20 4f 50 5f 49 66 3a 20 20 20 20 20 20 20  se OP_If:       
11680 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
11690 70 2c 20 69 6e 31 20 2a 2f 0a 63 61 73 65 20 4f  p, in1 */.case O
116a0 50 5f 49 66 4e 6f 74 3a 20 7b 20 20 20 20 20 20  P_IfNot: {      
116b0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
116c0 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a 20  n1 */.  int c;. 
116d0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
116e0 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49  p->p1];.  if( pI
116f0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
11700 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 63 20 3d 20  Null ){.    c = 
11710 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 65 6c 73 65  pOp->p3;.  }else
11720 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  {.#ifdef SQLITE_
11730 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
11740 49 4e 54 0a 20 20 20 20 63 20 3d 20 73 71 6c 69  INT.    c = sqli
11750 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
11760 70 49 6e 31 29 21 3d 30 3b 0a 23 65 6c 73 65 0a  pIn1)!=0;.#else.
11770 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56      c = sqlite3V
11780 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e  dbeRealValue(pIn
11790 31 29 21 3d 30 2e 30 3b 0a 23 65 6e 64 69 66 0a  1)!=0.0;.#endif.
117a0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63      if( pOp->opc
117b0 6f 64 65 3d 3d 4f 50 5f 49 66 4e 6f 74 20 29 20  ode==OP_IfNot ) 
117c0 63 20 3d 20 21 63 3b 0a 20 20 7d 0a 20 20 56 64  c = !c;.  }.  Vd
117d0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 63 21  beBranchTaken(c!
117e0 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 63 20  =0, 2);.  if( c 
117f0 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
11800 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65  >p2-1;.  }.  bre
11810 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
11820 3a 20 49 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a  : IsNull P1 P2 *
11830 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
11840 3a 20 20 69 66 20 72 5b 50 31 5d 3d 3d 4e 55 4c  :  if r[P1]==NUL
11850 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  L goto P2.**.** 
11860 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
11870 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
11880 74 65 72 20 50 31 20 69 73 20 4e 55 4c 4c 2e 0a  ter P1 is NULL..
11890 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c  */.case OP_IsNul
118a0 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  l: {            
118b0 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 49 53  /* same as TK_IS
118c0 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20  NULL, jump, in1 
118d0 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
118e0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56 64  m[pOp->p1];.  Vd
118f0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 28  beBranchTaken( (
11900 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
11910 4d 5f 4e 75 6c 6c 29 21 3d 30 2c 20 32 29 3b 0a  M_Null)!=0, 2);.
11920 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
11930 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  gs & MEM_Null)!=
11940 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  0 ){.    pc = pO
11950 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
11960 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
11970 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50 31  code: NotNull P1
11980 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
11990 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21  opsis: if r[P1]!
119a0 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a  =NULL goto P2.**
119b0 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
119c0 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
119d0 65 67 69 73 74 65 72 20 50 31 20 69 73 20 6e 6f  egister P1 is no
119e0 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73  t NULL.  .*/.cas
119f0 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20  e OP_NotNull: { 
11a00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
11a10 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c  me as TK_NOTNULL
11a20 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  , jump, in1 */. 
11a30 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
11a40 70 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42 72  p->p1];.  VdbeBr
11a50 61 6e 63 68 54 61 6b 65 6e 28 20 28 70 49 6e 31  anchTaken( (pIn1
11a60 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
11a70 6c 6c 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66  ll)==0, 2);.  if
11a80 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
11a90 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b   MEM_Null)==0 ){
11aa0 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
11ab0 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
11ac0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
11ad0 3a 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50  : Column P1 P2 P
11ae0 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
11af0 73 69 73 3a 20 20 72 5b 50 33 5d 3d 50 58 0a 2a  sis:  r[P3]=PX.*
11b00 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
11b10 68 65 20 64 61 74 61 20 74 68 61 74 20 63 75 72  he data that cur
11b20 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f  sor P1 points to
11b30 20 61 73 20 61 20 73 74 72 75 63 74 75 72 65 20   as a structure 
11b40 62 75 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74  built using.** t
11b50 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e  he MakeRecord in
11b60 73 74 72 75 63 74 69 6f 6e 2e 20 20 28 53 65 65  struction.  (See
11b70 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20   the MakeRecord 
11b80 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74  opcode for addit
11b90 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61  ional.** informa
11ba0 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 66  tion about the f
11bb0 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 64 61 74  ormat of the dat
11bc0 61 2e 29 20 20 45 78 74 72 61 63 74 20 74 68 65  a.)  Extract the
11bd0 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a   P2-th column.**
11be0 20 66 72 6f 6d 20 74 68 69 73 20 72 65 63 6f 72   from this recor
11bf0 64 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65  d.  If there are
11c00 20 6c 65 73 73 20 74 68 61 74 20 28 50 32 2b 31   less that (P2+1
11c10 29 20 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20  ) .** values in 
11c20 74 68 65 20 72 65 63 6f 72 64 2c 20 65 78 74 72  the record, extr
11c30 61 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  act a NULL..**.*
11c40 2a 20 54 68 65 20 76 61 6c 75 65 20 65 78 74 72  * The value extr
11c50 61 63 74 65 64 20 69 73 20 73 74 6f 72 65 64 20  acted is stored 
11c60 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
11c70 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f 6c  **.** If the col
11c80 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 66 65 77  umn contains few
11c90 65 72 20 74 68 61 6e 20 50 32 20 66 69 65 6c 64  er than P2 field
11ca0 73 2c 20 74 68 65 6e 20 65 78 74 72 61 63 74 20  s, then extract 
11cb0 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20  a NULL.  Or,.** 
11cc0 69 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65  if the P4 argume
11cd0 6e 74 20 69 73 20 61 20 50 34 5f 4d 45 4d 20 75  nt is a P4_MEM u
11ce0 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  se the value of 
11cf0 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20  the P4 argument 
11d00 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74  as.** the result
11d10 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
11d20 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45  PFLAG_CLEARCACHE
11d30 20 62 69 74 20 69 73 20 73 65 74 20 6f 6e 20 50   bit is set on P
11d40 35 20 61 6e 64 20 50 31 20 69 73 20 61 20 70 73  5 and P1 is a ps
11d50 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f  eudo-table curso
11d60 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63  r,.** then the c
11d70 61 63 68 65 20 6f 66 20 74 68 65 20 63 75 72 73  ache of the curs
11d80 6f 72 20 69 73 20 72 65 73 65 74 20 70 72 69 6f  or is reset prio
11d90 72 20 74 6f 20 65 78 74 72 61 63 74 69 6e 67 20  r to extracting 
11da0 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54  the column..** T
11db0 68 65 20 66 69 72 73 74 20 4f 50 5f 43 6f 6c 75  he first OP_Colu
11dc0 6d 6e 20 61 67 61 69 6e 73 74 20 61 20 70 73 65  mn against a pse
11dd0 75 64 6f 2d 74 61 62 6c 65 20 61 66 74 65 72 20  udo-table after 
11de0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
11df0 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65 67 69   content.** regi
11e00 73 74 65 72 20 68 61 73 20 63 68 61 6e 67 65 64  ster has changed
11e10 20 73 68 6f 75 6c 64 20 68 61 76 65 20 74 68 69   should have thi
11e20 73 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  s bit set..**.**
11e30 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c   If the OPFLAG_L
11e40 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46  ENGTHARG and OPF
11e50 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20 62 69  LAG_TYPEOFARG bi
11e60 74 73 20 61 72 65 20 73 65 74 20 6f 6e 20 50 35  ts are set on P5
11e70 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 72 65 73   when.** the res
11e80 75 6c 74 20 69 73 20 67 75 61 72 61 6e 74 65 65  ult is guarantee
11e90 64 20 74 6f 20 6f 6e 6c 79 20 62 65 20 75 73 65  d to only be use
11ea0 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e  d as the argumen
11eb0 74 20 6f 66 20 61 20 6c 65 6e 67 74 68 28 29 0a  t of a length().
11ec0 2a 2a 20 6f 72 20 74 79 70 65 6f 66 28 29 20 66  ** or typeof() f
11ed0 75 6e 63 74 69 6f 6e 2c 20 72 65 73 70 65 63 74  unction, respect
11ee0 69 76 65 6c 79 2e 20 20 54 68 65 20 6c 6f 61 64  ively.  The load
11ef0 69 6e 67 20 6f 66 20 6c 61 72 67 65 20 62 6c 6f  ing of large blo
11f00 62 73 20 63 61 6e 20 62 65 0a 2a 2a 20 73 6b 69  bs can be.** ski
11f10 70 70 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28  pped for length(
11f20 29 20 61 6e 64 20 61 6c 6c 20 63 6f 6e 74 65 6e  ) and all conten
11f30 74 20 6c 6f 61 64 69 6e 67 20 63 61 6e 20 62 65  t loading can be
11f40 20 73 6b 69 70 70 65 64 20 66 6f 72 20 74 79 70   skipped for typ
11f50 65 6f 66 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  eof()..*/.case O
11f60 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69 36  P_Column: {.  i6
11f70 34 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b  4 payloadSize64;
11f80 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
11f90 74 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  tes in the recor
11fa0 64 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20  d */.  int p2;  
11fb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c            /* col
11fc0 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f 20 72 65  umn number to re
11fd0 74 72 69 65 76 65 20 2a 2f 0a 20 20 56 64 62 65  trieve */.  Vdbe
11fe0 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f  Cursor *pC;    /
11ff0 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f  * The VDBE curso
12000 72 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20  r */.  BtCursor 
12010 2a 70 43 72 73 72 3b 20 20 20 2f 2a 20 54 68 65  *pCrsr;   /* The
12020 20 42 54 72 65 65 20 63 75 72 73 6f 72 20 2a 2f   BTree cursor */
12030 0a 20 20 75 33 32 20 2a 61 54 79 70 65 3b 20 20  .  u32 *aType;  
12040 20 20 20 20 20 20 2f 2a 20 61 54 79 70 65 5b 69        /* aType[i
12050 5d 20 68 6f 6c 64 73 20 74 68 65 20 6e 75 6d 65  ] holds the nume
12060 72 69 63 20 74 79 70 65 20 6f 66 20 74 68 65 20  ric type of the 
12070 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  i-th column */. 
12080 20 75 33 32 20 2a 61 4f 66 66 73 65 74 3b 20 20   u32 *aOffset;  
12090 20 20 20 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69      /* aOffset[i
120a0 5d 20 69 73 20 6f 66 66 73 65 74 20 74 6f 20 73  ] is offset to s
120b0 74 61 72 74 20 6f 66 20 64 61 74 61 20 66 6f 72  tart of data for
120c0 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   i-th column */.
120d0 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20    int len;      
120e0 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 65 6e 67       /* The leng
120f0 74 68 20 6f 66 20 74 68 65 20 73 65 72 69 61 6c  th of the serial
12100 69 7a 65 64 20 64 61 74 61 20 66 6f 72 20 74 68  ized data for th
12110 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e  e column */.  in
12120 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  t i;            
12130 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72   /* Loop counter
12140 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74   */.  Mem *pDest
12150 3b 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65 72  ;        /* Wher
12160 65 20 74 6f 20 77 72 69 74 65 20 74 68 65 20 65  e to write the e
12170 78 74 72 61 63 74 65 64 20 76 61 6c 75 65 20 2a  xtracted value *
12180 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20  /.  Mem sMem;   
12190 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 73 74         /* For st
121a0 6f 72 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64  oring the record
121b0 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a   being decoded *
121c0 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 44  /.  const u8 *zD
121d0 61 74 61 3b 20 20 20 2f 2a 20 50 61 72 74 20 6f  ata;   /* Part o
121e0 66 20 74 68 65 20 72 65 63 6f 72 64 20 62 65 69  f the record bei
121f0 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20  ng decoded */.  
12200 63 6f 6e 73 74 20 75 38 20 2a 7a 48 64 72 3b 20  const u8 *zHdr; 
12210 20 20 20 2f 2a 20 4e 65 78 74 20 75 6e 70 61 72     /* Next unpar
12220 73 65 64 20 62 79 74 65 20 6f 66 20 74 68 65 20  sed byte of the 
12230 68 65 61 64 65 72 20 2a 2f 0a 20 20 63 6f 6e 73  header */.  cons
12240 74 20 75 38 20 2a 7a 45 6e 64 48 64 72 3b 20 2f  t u8 *zEndHdr; /
12250 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 66 69 72  * Pointer to fir
12260 73 74 20 62 79 74 65 20 61 66 74 65 72 20 74 68  st byte after th
12270 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 75 33  e header */.  u3
12280 32 20 6f 66 66 73 65 74 3b 20 20 20 20 20 20 20  2 offset;       
12290 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 74 6f 20   /* Offset into 
122a0 74 68 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 33  the data */.  u3
122b0 32 20 73 7a 46 69 65 6c 64 3b 20 20 20 20 20 20  2 szField;      
122c0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
122d0 74 65 73 20 69 6e 20 74 68 65 20 63 6f 6e 74 65  tes in the conte
122e0 6e 74 20 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f  nt of a field */
122f0 0a 20 20 75 33 32 20 61 76 61 69 6c 3b 20 20 20  .  u32 avail;   
12300 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
12310 6f 66 20 62 79 74 65 73 20 6f 66 20 61 76 61 69  of bytes of avai
12320 6c 61 62 6c 65 20 64 61 74 61 20 2a 2f 0a 20 20  lable data */.  
12330 75 33 32 20 74 3b 20 20 20 20 20 20 20 20 20 20  u32 t;          
12340 20 20 20 2f 2a 20 41 20 74 79 70 65 20 63 6f 64     /* A type cod
12350 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72  e from the recor
12360 64 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 4d 65  d header */.  Me
12370 6d 20 2a 70 52 65 67 3b 20 20 20 20 20 20 20 20  m *pReg;        
12380 20 2f 2a 20 50 73 65 75 64 6f 54 61 62 6c 65 20   /* PseudoTable 
12390 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 20 2a  input register *
123a0 2f 0a 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70  /..  p2 = pOp->p
123b0 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  2;.  assert( pOp
123c0 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
123d0 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  3<=(p->nMem-p->n
123e0 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44 65  Cursor) );.  pDe
123f0 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  st = &aMem[pOp->
12400 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p3];.  memAboutT
12410 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74  oChange(p, pDest
12420 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
12430 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
12440 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
12450 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
12460 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
12470 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
12480 61 73 73 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e  assert( p2<pC->n
12490 46 69 65 6c 64 20 29 3b 0a 20 20 61 54 79 70 65  Field );.  aType
124a0 20 3d 20 70 43 2d 3e 61 54 79 70 65 3b 0a 20 20   = pC->aType;.  
124b0 61 4f 66 66 73 65 74 20 3d 20 61 54 79 70 65 20  aOffset = aType 
124c0 2b 20 70 43 2d 3e 6e 46 69 65 6c 64 3b 0a 23 69  + pC->nField;.#i
124d0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
124e0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
124f0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 56 74   assert( pC->pVt
12500 61 62 43 75 72 73 6f 72 3d 3d 30 20 29 3b 20 2f  abCursor==0 ); /
12510 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6e 65 76 65  * OP_Column neve
12520 72 20 63 61 6c 6c 65 64 20 6f 6e 20 76 69 72 74  r called on virt
12530 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e  ual table */.#en
12540 64 69 66 0a 20 20 70 43 72 73 72 20 3d 20 70 43  dif.  pCrsr = pC
12550 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73  ->pCursor;.  ass
12560 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 7c 7c  ert( pCrsr!=0 ||
12570 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
12580 52 65 67 3e 30 20 29 3b 20 2f 2a 20 70 43 72 73  Reg>0 ); /* pCrs
12590 72 20 4e 55 4c 4c 20 6f 6e 20 50 73 65 75 64 6f  r NULL on Pseudo
125a0 54 61 62 6c 65 73 20 2a 2f 0a 20 20 61 73 73 65  Tables */.  asse
125b0 72 74 28 20 70 43 72 73 72 21 3d 30 20 7c 7c 20  rt( pCrsr!=0 || 
125c0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 20 20  pC->nullRow );  
125d0 20 20 20 20 20 20 20 20 2f 2a 20 70 43 2d 3e 6e          /* pC->n
125e0 75 6c 6c 52 6f 77 20 6f 6e 20 50 73 65 75 64 6f  ullRow on Pseudo
125f0 54 61 62 6c 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20  Tables */..  /* 
12600 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 63 61  If the cursor ca
12610 63 68 65 20 69 73 20 73 74 61 6c 65 2c 20 62 72  che is stale, br
12620 69 6e 67 20 69 74 20 75 70 2d 74 6f 2d 64 61 74  ing it up-to-dat
12630 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69  e */.  rc = sqli
12640 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
12650 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 72  eto(pC);.  if( r
12660 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
12670 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69  ue_to_error;.  i
12680 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  f( pC->cacheStat
12690 75 73 21 3d 70 2d 3e 63 61 63 68 65 43 74 72 20  us!=p->cacheCtr 
126a0 7c 7c 20 28 70 4f 70 2d 3e 70 35 26 4f 50 46 4c  || (pOp->p5&OPFL
126b0 41 47 5f 43 4c 45 41 52 43 41 43 48 45 29 21 3d  AG_CLEARCACHE)!=
126c0 30 20 29 7b 0a 20 20 20 20 69 66 28 20 70 43 2d  0 ){.    if( pC-
126d0 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
126e0 20 20 69 66 28 20 70 43 72 73 72 3d 3d 30 20 29    if( pCrsr==0 )
126f0 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
12700 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
12710 65 52 65 67 3e 30 20 29 3b 0a 20 20 20 20 20 20  eReg>0 );.      
12720 20 20 70 52 65 67 20 3d 20 26 61 4d 65 6d 5b 70    pReg = &aMem[p
12730 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
12740 67 5d 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  g];.        asse
12750 72 74 28 20 70 52 65 67 2d 3e 66 6c 61 67 73 20  rt( pReg->flags 
12760 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20  & MEM_Blob );.  
12770 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
12780 6d 49 73 56 61 6c 69 64 28 70 52 65 67 29 20 29  mIsValid(pReg) )
12790 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70 61  ;.        pC->pa
127a0 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e  yloadSize = pC->
127b0 73 7a 52 6f 77 20 3d 20 61 76 61 69 6c 20 3d 20  szRow = avail = 
127c0 70 52 65 67 2d 3e 6e 3b 0a 20 20 20 20 20 20 20  pReg->n;.       
127d0 20 70 43 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a   pC->aRow = (u8*
127e0 29 70 52 65 67 2d 3e 7a 3b 0a 20 20 20 20 20 20  )pReg->z;.      
127f0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 4d  }else{.        M
12800 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 44  emSetTypeFlag(pD
12810 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  est, MEM_Null);.
12820 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f          goto op_
12830 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20  column_out;.    
12840 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
12850 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 72       assert( pCr
12860 73 72 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  sr );.      if( 
12870 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29  pC->isTable==0 )
12880 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
12890 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  ( sqlite3BtreeCu
128a0 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73  rsorIsValid(pCrs
128b0 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 56 56  r) );.        VV
128c0 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c  A_ONLY(rc =) sql
128d0 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65  ite3BtreeKeySize
128e0 28 70 43 72 73 72 2c 20 26 70 61 79 6c 6f 61 64  (pCrsr, &payload
128f0 53 69 7a 65 36 34 29 3b 0a 20 20 20 20 20 20 20  Size64);.       
12900 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
12910 49 54 45 5f 4f 4b 20 29 3b 20 2f 2a 20 54 72 75  ITE_OK ); /* Tru
12920 65 20 62 65 63 61 75 73 65 20 6f 66 20 43 75 72  e because of Cur
12930 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c  sorMoveto() call
12940 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20 20 20   above */.      
12950 20 20 2f 2a 20 73 71 6c 69 74 65 33 42 74 72 65    /* sqlite3Btre
12960 65 50 61 72 73 65 43 65 6c 6c 50 74 72 28 29 20  eParseCellPtr() 
12970 75 73 65 73 20 67 65 74 56 61 72 69 6e 74 33 32  uses getVarint32
12980 28 29 20 74 6f 20 65 78 74 72 61 63 74 20 74 68  () to extract th
12990 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 70 61 79  e.        ** pay
129a0 6c 6f 61 64 20 73 69 7a 65 2c 20 73 6f 20 69 74  load size, so it
129b0 20 69 73 20 69 6d 70 6f 73 73 69 62 6c 65 20 66   is impossible f
129c0 6f 72 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  or payloadSize64
129d0 20 74 6f 20 62 65 0a 20 20 20 20 20 20 20 20 2a   to be.        *
129e0 2a 20 6c 61 72 67 65 72 20 74 68 61 6e 20 33 32  * larger than 32
129f0 20 62 69 74 73 2e 20 2a 2f 0a 20 20 20 20 20 20   bits. */.      
12a00 20 20 61 73 73 65 72 74 28 20 28 70 61 79 6c 6f    assert( (paylo
12a10 61 64 53 69 7a 65 36 34 20 26 20 53 51 4c 49 54  adSize64 & SQLIT
12a20 45 5f 4d 41 58 5f 55 33 32 29 3d 3d 28 75 36 34  E_MAX_U32)==(u64
12a30 29 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 29  )payloadSize64 )
12a40 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52  ;.        pC->aR
12a50 6f 77 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  ow = sqlite3Btre
12a60 65 4b 65 79 46 65 74 63 68 28 70 43 72 73 72 2c  eKeyFetch(pCrsr,
12a70 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20 20 20   &avail);.      
12a80 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a    pC->payloadSiz
12a90 65 20 3d 20 28 75 33 32 29 70 61 79 6c 6f 61 64  e = (u32)payload
12aa0 53 69 7a 65 36 34 3b 0a 20 20 20 20 20 20 7d 65  Size64;.      }e
12ab0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 61 73 73  lse{.        ass
12ac0 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
12ad0 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70  eCursorIsValid(p
12ae0 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20 20  Crsr) );.       
12af0 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20   VVA_ONLY(rc =) 
12b00 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61  sqlite3BtreeData
12b10 53 69 7a 65 28 70 43 72 73 72 2c 20 26 70 43 2d  Size(pCrsr, &pC-
12b20 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 3b 0a 20  >payloadSize);. 
12b30 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72         assert( r
12b40 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
12b50 20 20 2f 2a 20 44 61 74 61 53 69 7a 65 28 29 20    /* DataSize() 
12b60 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20  cannot fail */. 
12b70 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20         pC->aRow 
12b80 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61  = sqlite3BtreeDa
12b90 74 61 46 65 74 63 68 28 70 43 72 73 72 2c 20 26  taFetch(pCrsr, &
12ba0 61 76 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d 0a  avail);.      }.
12bb0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 61 76        assert( av
12bc0 61 69 6c 3c 3d 36 35 35 33 36 20 29 3b 20 20 2f  ail<=65536 );  /
12bd0 2a 20 4d 61 78 69 6d 75 6d 20 70 61 67 65 20 73  * Maximum page s
12be0 69 7a 65 20 69 73 20 36 34 4b 69 42 20 2a 2f 0a  ize is 64KiB */.
12bf0 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 70 61        if( pC->pa
12c00 79 6c 6f 61 64 53 69 7a 65 20 3c 3d 20 28 75 33  yloadSize <= (u3
12c10 32 29 61 76 61 69 6c 20 29 7b 0a 20 20 20 20 20  2)avail ){.     
12c20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 70     pC->szRow = p
12c30 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a  C->payloadSize;.
12c40 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
12c50 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d       pC->szRow =
12c60 20 61 76 61 69 6c 3b 0a 20 20 20 20 20 20 7d 0a   avail;.      }.
12c70 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 70 61        if( pC->pa
12c80 79 6c 6f 61 64 53 69 7a 65 20 3e 20 28 75 33 32  yloadSize > (u32
12c90 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  )db->aLimit[SQLI
12ca0 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
12cb0 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
12cc0 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 20 20   too_big;.      
12cd0 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e  }.    }.    pC->
12ce0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 70 2d  cacheStatus = p-
12cf0 3e 63 61 63 68 65 43 74 72 3b 0a 20 20 20 20 70  >cacheCtr;.    p
12d00 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 20 3d 20  C->iHdrOffset = 
12d10 67 65 74 56 61 72 69 6e 74 33 32 28 70 43 2d 3e  getVarint32(pC->
12d20 61 52 6f 77 2c 20 6f 66 66 73 65 74 29 3b 0a 20  aRow, offset);. 
12d30 20 20 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65     pC->nHdrParse
12d40 64 20 3d 20 30 3b 0a 20 20 20 20 61 4f 66 66 73  d = 0;.    aOffs
12d50 65 74 5b 30 5d 20 3d 20 6f 66 66 73 65 74 3b 0a  et[0] = offset;.
12d60 20 20 20 20 69 66 28 20 61 76 61 69 6c 3c 6f 66      if( avail<of
12d70 66 73 65 74 20 29 7b 0a 20 20 20 20 20 20 2f 2a  fset ){.      /*
12d80 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e   pC->aRow does n
12d90 6f 74 20 68 61 76 65 20 74 6f 20 68 6f 6c 64 20  ot have to hold 
12da0 74 68 65 20 65 6e 74 69 72 65 20 72 6f 77 2c 20  the entire row, 
12db0 62 75 74 20 69 74 20 64 6f 65 73 20 61 74 20 6c  but it does at l
12dc0 65 61 73 74 0a 20 20 20 20 20 20 2a 2a 20 6e 65  east.      ** ne
12dd0 65 64 20 74 6f 20 63 6f 76 65 72 20 74 68 65 20  ed to cover the 
12de0 68 65 61 64 65 72 20 6f 66 20 74 68 65 20 72 65  header of the re
12df0 63 6f 72 64 2e 20 20 49 66 20 70 43 2d 3e 61 52  cord.  If pC->aR
12e00 6f 77 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74  ow does not cont
12e10 61 69 6e 0a 20 20 20 20 20 20 2a 2a 20 74 68 65  ain.      ** the
12e20 20 63 6f 6d 70 6c 65 74 65 20 68 65 61 64 65 72   complete header
12e30 2c 20 74 68 65 6e 20 73 65 74 20 69 74 20 74 6f  , then set it to
12e40 20 7a 65 72 6f 2c 20 66 6f 72 63 69 6e 67 20 74   zero, forcing t
12e50 68 65 20 68 65 61 64 65 72 20 74 6f 20 62 65 0a  he header to be.
12e60 20 20 20 20 20 20 2a 2a 20 64 79 6e 61 6d 69 63        ** dynamic
12e70 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20  ally allocated. 
12e80 2a 2f 0a 20 20 20 20 20 20 70 43 2d 3e 61 52 6f  */.      pC->aRo
12e90 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 43 2d  w = 0;.      pC-
12ea0 3e 73 7a 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20  >szRow = 0;.    
12eb0 7d 0a 0a 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73  }..    /* Make s
12ec0 75 72 65 20 61 20 63 6f 72 72 75 70 74 20 64 61  ure a corrupt da
12ed0 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20 67  tabase has not g
12ee0 69 76 65 6e 20 75 73 20 61 6e 20 6f 76 65 72 73  iven us an overs
12ef0 69 7a 65 20 68 65 61 64 65 72 2e 0a 20 20 20 20  ize header..    
12f00 2a 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77 20 74  ** Do this now t
12f10 6f 20 61 76 6f 69 64 20 61 6e 20 6f 76 65 72 73  o avoid an overs
12f20 69 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ize memory alloc
12f30 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 0a 20 20  ation..    **.  
12f40 20 20 2a 2a 20 54 79 70 65 20 65 6e 74 72 69 65    ** Type entrie
12f50 73 20 63 61 6e 20 62 65 20 62 65 74 77 65 65 6e  s can be between
12f60 20 31 20 61 6e 64 20 35 20 62 79 74 65 73 20 65   1 and 5 bytes e
12f70 61 63 68 2e 20 20 42 75 74 20 34 20 61 6e 64 20  ach.  But 4 and 
12f80 35 20 62 79 74 65 0a 20 20 20 20 2a 2a 20 74 79  5 byte.    ** ty
12f90 70 65 73 20 75 73 65 20 73 6f 20 6d 75 63 68 20  pes use so much 
12fa0 64 61 74 61 20 73 70 61 63 65 20 74 68 61 74 20  data space that 
12fb0 74 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62  there can only b
12fc0 65 20 34 30 39 36 20 61 6e 64 20 33 32 20 6f 66  e 4096 and 32 of
12fd0 0a 20 20 20 20 2a 2a 20 74 68 65 6d 2c 20 72 65  .    ** them, re
12fe0 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53 6f 20  spectively.  So 
12ff0 74 68 65 20 6d 61 78 69 6d 75 6d 20 68 65 61 64  the maximum head
13000 65 72 20 6c 65 6e 67 74 68 20 72 65 73 75 6c 74  er length result
13010 73 20 66 72 6f 6d 20 61 0a 20 20 20 20 2a 2a 20  s from a.    ** 
13020 33 2d 62 79 74 65 20 74 79 70 65 20 66 6f 72 20  3-byte type for 
13030 65 61 63 68 20 6f 66 20 74 68 65 20 6d 61 78 69  each of the maxi
13040 6d 75 6d 20 6f 66 20 33 32 37 36 38 20 63 6f 6c  mum of 32768 col
13050 75 6d 6e 73 20 70 6c 75 73 20 74 68 72 65 65 0a  umns plus three.
13060 20 20 20 20 2a 2a 20 65 78 74 72 61 20 62 79 74      ** extra byt
13070 65 73 20 66 6f 72 20 74 68 65 20 68 65 61 64 65  es for the heade
13080 72 20 6c 65 6e 67 74 68 20 69 74 73 65 6c 66 2e  r length itself.
13090 20 20 33 32 37 36 38 2a 33 20 2b 20 33 20 3d 20    32768*3 + 3 = 
130a0 39 38 33 30 37 2e 0a 20 20 20 20 2a 2f 0a 20 20  98307..    */.  
130b0 20 20 69 66 28 20 6f 66 66 73 65 74 20 3e 20 39    if( offset > 9
130c0 38 33 30 37 20 7c 7c 20 6f 66 66 73 65 74 20 3e  8307 || offset >
130d0 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
130e0 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
130f0 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
13100 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f  PT;.      goto o
13110 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a  p_column_error;.
13120 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20      }.  }..  /* 
13130 4d 61 6b 65 20 73 75 72 65 20 61 74 20 6c 65 61  Make sure at lea
13140 73 74 20 74 68 65 20 66 69 72 73 74 20 70 32 2b  st the first p2+
13150 31 20 65 6e 74 72 69 65 73 20 6f 66 20 74 68 65  1 entries of the
13160 20 68 65 61 64 65 72 20 68 61 76 65 20 62 65 65   header have bee
13170 6e 0a 20 20 2a 2a 20 70 61 72 73 65 64 20 61 6e  n.  ** parsed an
13180 64 20 76 61 6c 69 64 20 69 6e 66 6f 72 6d 61 74  d valid informat
13190 69 6f 6e 20 69 73 20 69 6e 20 61 4f 66 66 73 65  ion is in aOffse
131a0 74 5b 5d 20 61 6e 64 20 61 54 79 70 65 5b 5d 2e  t[] and aType[].
131b0 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70 43 2d 3e  .  */.  if( pC->
131c0 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29  nHdrParsed<=p2 )
131d0 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72  {.    /* If ther
131e0 65 20 69 73 20 6d 6f 72 65 20 68 65 61 64 65 72  e is more header
131f0 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 70   available for p
13200 61 72 73 69 6e 67 20 69 6e 20 74 68 65 20 72 65  arsing in the re
13210 63 6f 72 64 2c 20 74 72 79 0a 20 20 20 20 2a 2a  cord, try.    **
13220 20 74 6f 20 65 78 74 72 61 63 74 20 61 64 64 69   to extract addi
13230 74 69 6f 6e 61 6c 20 66 69 65 6c 64 73 20 75 70  tional fields up
13240 20 74 68 72 6f 75 67 68 20 74 68 65 20 70 32 2b   through the p2+
13250 31 2d 74 68 20 66 69 65 6c 64 20 0a 20 20 20 20  1-th field .    
13260 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69  */.    if( pC->i
13270 48 64 72 4f 66 66 73 65 74 3c 61 4f 66 66 73 65  HdrOffset<aOffse
13280 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 2f 2a  t[0] ){.      /*
13290 20 4d 61 6b 65 20 73 75 72 65 20 7a 44 61 74 61   Make sure zData
132a0 20 70 6f 69 6e 74 73 20 74 6f 20 65 6e 6f 75 67   points to enoug
132b0 68 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  h of the record 
132c0 74 6f 20 63 6f 76 65 72 20 74 68 65 20 68 65 61  to cover the hea
132d0 64 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66  der. */.      if
132e0 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b  ( pC->aRow==0 ){
132f0 0a 20 20 20 20 20 20 20 20 6d 65 6d 73 65 74 28  .        memset(
13300 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66  &sMem, 0, sizeof
13310 28 73 4d 65 6d 29 29 3b 0a 20 20 20 20 20 20 20  (sMem));.       
13320 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
13330 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43  eMemFromBtree(pC
13340 72 73 72 2c 20 30 2c 20 61 4f 66 66 73 65 74 5b  rsr, 0, aOffset[
13350 30 5d 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  0], .           
13360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13370 20 20 20 20 20 20 20 20 20 20 21 70 43 2d 3e 69            !pC->i
13380 73 54 61 62 6c 65 2c 20 26 73 4d 65 6d 29 3b 0a  sTable, &sMem);.
13390 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
133a0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
133b0 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63         goto op_c
133c0 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20  olumn_error;.   
133d0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7a       }.        z
133e0 44 61 74 61 20 3d 20 28 75 38 2a 29 73 4d 65 6d  Data = (u8*)sMem
133f0 2e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  .z;.      }else{
13400 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d  .        zData =
13410 20 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 20   pC->aRow;.     
13420 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 46   }.  .      /* F
13430 69 6c 6c 20 69 6e 20 61 54 79 70 65 5b 69 5d 20  ill in aType[i] 
13440 61 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d 20 76  and aOffset[i] v
13450 61 6c 75 65 73 20 74 68 72 6f 75 67 68 20 74 68  alues through th
13460 65 20 70 32 2d 74 68 20 66 69 65 6c 64 2e 20 2a  e p2-th field. *
13470 2f 0a 20 20 20 20 20 20 69 20 3d 20 70 43 2d 3e  /.      i = pC->
13480 6e 48 64 72 50 61 72 73 65 64 3b 0a 20 20 20 20  nHdrParsed;.    
13490 20 20 6f 66 66 73 65 74 20 3d 20 61 4f 66 66 73    offset = aOffs
134a0 65 74 5b 69 5d 3b 0a 20 20 20 20 20 20 7a 48 64  et[i];.      zHd
134b0 72 20 3d 20 7a 44 61 74 61 20 2b 20 70 43 2d 3e  r = zData + pC->
134c0 69 48 64 72 4f 66 66 73 65 74 3b 0a 20 20 20 20  iHdrOffset;.    
134d0 20 20 7a 45 6e 64 48 64 72 20 3d 20 7a 44 61 74    zEndHdr = zDat
134e0 61 20 2b 20 61 4f 66 66 73 65 74 5b 30 5d 3b 0a  a + aOffset[0];.
134f0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 69 3c        assert( i<
13500 3d 70 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64  =p2 && zHdr<zEnd
13510 48 64 72 20 29 3b 0a 20 20 20 20 20 20 64 6f 7b  Hdr );.      do{
13520 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a 48 64  .        if( zHd
13530 72 5b 30 5d 3c 30 78 38 30 20 29 7b 0a 20 20 20  r[0]<0x80 ){.   
13540 20 20 20 20 20 20 20 74 20 3d 20 7a 48 64 72 5b         t = zHdr[
13550 30 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 7a 48  0];.          zH
13560 64 72 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 65  dr++;.        }e
13570 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 7a  lse{.          z
13580 48 64 72 20 2b 3d 20 73 71 6c 69 74 65 33 47 65  Hdr += sqlite3Ge
13590 74 56 61 72 69 6e 74 33 32 28 7a 48 64 72 2c 20  tVarint32(zHdr, 
135a0 26 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  &t);.        }. 
135b0 20 20 20 20 20 20 20 61 54 79 70 65 5b 69 5d 20         aType[i] 
135c0 3d 20 74 3b 0a 20 20 20 20 20 20 20 20 73 7a 46  = t;.        szF
135d0 69 65 6c 64 20 3d 20 73 71 6c 69 74 65 33 56 64  ield = sqlite3Vd
135e0 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28  beSerialTypeLen(
135f0 74 29 3b 0a 20 20 20 20 20 20 20 20 6f 66 66 73  t);.        offs
13600 65 74 20 2b 3d 20 73 7a 46 69 65 6c 64 3b 0a 20  et += szField;. 
13610 20 20 20 20 20 20 20 69 66 28 20 6f 66 66 73 65         if( offse
13620 74 3c 73 7a 46 69 65 6c 64 20 29 7b 20 20 2f 2a  t<szField ){  /*
13630 20 54 72 75 65 20 69 66 20 6f 66 66 73 65 74 20   True if offset 
13640 6f 76 65 72 66 6c 6f 77 73 20 2a 2f 0a 20 20 20  overflows */.   
13650 20 20 20 20 20 20 20 7a 48 64 72 20 3d 20 26 7a         zHdr = &z
13660 45 6e 64 48 64 72 5b 31 5d 3b 20 20 2f 2a 20 46  EndHdr[1];  /* F
13670 6f 72 63 65 73 20 53 51 4c 49 54 45 5f 43 4f 52  orces SQLITE_COR
13680 52 55 50 54 20 72 65 74 75 72 6e 20 62 65 6c 6f  RUPT return belo
13690 77 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 62  w */.          b
136a0 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a  reak;.        }.
136b0 20 20 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20          i++;.   
136c0 20 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20       aOffset[i] 
136d0 3d 20 6f 66 66 73 65 74 3b 0a 20 20 20 20 20 20  = offset;.      
136e0 7d 77 68 69 6c 65 28 20 69 3c 3d 70 32 20 26 26  }while( i<=p2 &&
136f0 20 7a 48 64 72 3c 7a 45 6e 64 48 64 72 20 29 3b   zHdr<zEndHdr );
13700 0a 20 20 20 20 20 20 70 43 2d 3e 6e 48 64 72 50  .      pC->nHdrP
13710 61 72 73 65 64 20 3d 20 69 3b 0a 20 20 20 20 20  arsed = i;.     
13720 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 20   pC->iHdrOffset 
13730 3d 20 28 75 33 32 29 28 7a 48 64 72 20 2d 20 7a  = (u32)(zHdr - z
13740 44 61 74 61 29 3b 0a 20 20 20 20 20 20 69 66 28  Data);.      if(
13750 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a   pC->aRow==0 ){.
13760 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
13770 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73  dbeMemRelease(&s
13780 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 73 4d  Mem);.        sM
13790 65 6d 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e  em.flags = MEM_N
137a0 75 6c 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a  ull;.      }.  .
137b0 20 20 20 20 20 20 2f 2a 20 49 66 20 77 65 20 68        /* If we h
137c0 61 76 65 20 72 65 61 64 20 6d 6f 72 65 20 68 65  ave read more he
137d0 61 64 65 72 20 64 61 74 61 20 74 68 61 6e 20 77  ader data than w
137e0 61 73 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  as contained in 
137f0 74 68 65 20 68 65 61 64 65 72 2c 0a 20 20 20 20  the header,.    
13800 20 20 2a 2a 20 6f 72 20 69 66 20 74 68 65 20 65    ** or if the e
13810 6e 64 20 6f 66 20 74 68 65 20 6c 61 73 74 20 66  nd of the last f
13820 69 65 6c 64 20 61 70 70 65 61 72 73 20 74 6f 20  ield appears to 
13830 62 65 20 70 61 73 74 20 74 68 65 20 65 6e 64 20  be past the end 
13840 6f 66 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20  of the.      ** 
13850 72 65 63 6f 72 64 2c 20 6f 72 20 69 66 20 74 68  record, or if th
13860 65 20 65 6e 64 20 6f 66 20 74 68 65 20 6c 61 73  e end of the las
13870 74 20 66 69 65 6c 64 20 61 70 70 65 61 72 73 20  t field appears 
13880 74 6f 20 62 65 20 62 65 66 6f 72 65 20 74 68 65  to be before the
13890 20 65 6e 64 0a 20 20 20 20 20 20 2a 2a 20 6f 66   end.      ** of
138a0 20 74 68 65 20 72 65 63 6f 72 64 20 28 77 68 65   the record (whe
138b0 6e 20 61 6c 6c 20 66 69 65 6c 64 73 20 70 72 65  n all fields pre
138c0 73 65 6e 74 29 2c 20 74 68 65 6e 20 77 65 20 6d  sent), then we m
138d0 75 73 74 20 62 65 20 64 65 61 6c 69 6e 67 20 0a  ust be dealing .
138e0 20 20 20 20 20 20 2a 2a 20 77 69 74 68 20 61 20        ** with a 
138f0 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73 65  corrupt database
13900 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
13910 20 69 66 28 20 28 7a 48 64 72 20 3e 20 7a 45 6e   if( (zHdr > zEn
13920 64 48 64 72 29 0a 20 20 20 20 20 20 20 7c 7c 20  dHdr).       || 
13930 28 6f 66 66 73 65 74 20 3e 20 70 43 2d 3e 70 61  (offset > pC->pa
13940 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20 20 20  yloadSize).     
13950 20 20 7c 7c 20 28 7a 48 64 72 3d 3d 7a 45 6e 64    || (zHdr==zEnd
13960 48 64 72 20 26 26 20 6f 66 66 73 65 74 21 3d 70  Hdr && offset!=p
13970 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a  C->payloadSize).
13980 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20        ){.       
13990 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52   rc = SQLITE_COR
139a0 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20  RUPT_BKPT;.     
139b0 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
139c0 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  n_error;.      }
139d0 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 49  .    }..    /* I
139e0 66 20 61 66 74 65 72 20 74 72 79 69 6e 67 20 74  f after trying t
139f0 6f 20 65 78 74 72 61 20 6e 65 77 20 65 6e 74 72  o extra new entr
13a00 69 65 73 20 66 72 6f 6d 20 74 68 65 20 68 65 61  ies from the hea
13a10 64 65 72 2c 20 6e 48 64 72 50 61 72 73 65 64 20  der, nHdrParsed 
13a20 69 73 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20  is.    ** still 
13a30 6e 6f 74 20 75 70 20 74 6f 20 70 32 2c 20 74 68  not up to p2, th
13a40 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  at means that th
13a50 65 20 72 65 63 6f 72 64 20 68 61 73 20 66 65 77  e record has few
13a60 65 72 20 74 68 61 6e 20 70 32 0a 20 20 20 20 2a  er than p2.    *
13a70 2a 20 63 6f 6c 75 6d 6e 73 2e 20 20 53 6f 20 74  * columns.  So t
13a80 68 65 20 72 65 73 75 6c 74 20 77 69 6c 6c 20 62  he result will b
13a90 65 20 65 69 74 68 65 72 20 74 68 65 20 64 65 66  e either the def
13aa0 61 75 6c 74 20 76 61 6c 75 65 20 6f 72 20 61 20  ault value or a 
13ab0 4e 55 4c 4c 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  NULL..    */.   
13ac0 20 69 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72   if( pC->nHdrPar
13ad0 73 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 20  sed<=p2 ){.     
13ae0 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
13af0 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a 20 20 20 20  ==P4_MEM ){.    
13b00 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
13b10 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44  emShallowCopy(pD
13b20 65 73 74 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d 65  est, pOp->p4.pMe
13b30 6d 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a  m, MEM_Static);.
13b40 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
13b50 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46       MemSetTypeF
13b60 6c 61 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e  lag(pDest, MEM_N
13b70 75 6c 6c 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ull);.      }.  
13b80 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
13b90 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20  mn_out;.    }.  
13ba0 7d 0a 0a 20 20 2f 2a 20 45 78 74 72 61 63 74 20  }..  /* Extract 
13bb0 74 68 65 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20  the content for 
13bc0 74 68 65 20 70 32 2b 31 2d 74 68 20 63 6f 6c 75  the p2+1-th colu
13bd0 6d 6e 2e 20 20 43 6f 6e 74 72 6f 6c 20 63 61 6e  mn.  Control can
13be0 20 6f 6e 6c 79 0a 20 20 2a 2a 20 72 65 61 63 68   only.  ** reach
13bf0 20 74 68 69 73 20 70 6f 69 6e 74 20 69 66 20 61   this point if a
13c00 4f 66 66 73 65 74 5b 70 32 5d 2c 20 61 4f 66 66  Offset[p2], aOff
13c10 73 65 74 5b 70 32 2b 31 5d 2c 20 61 6e 64 20 61  set[p2+1], and a
13c20 54 79 70 65 5b 70 32 5d 20 61 72 65 0a 20 20 2a  Type[p2] are.  *
13c30 2a 20 61 6c 6c 20 76 61 6c 69 64 2e 0a 20 20 2a  * all valid..  *
13c40 2f 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c 70  /.  assert( p2<p
13c50 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 29 3b  C->nHdrParsed );
13c60 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
13c70 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 61 73  QLITE_OK );.  as
13c80 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64 62  sert( sqlite3Vdb
13c90 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61  eCheckMemInvaria
13ca0 6e 74 73 28 70 44 65 73 74 29 20 29 3b 0a 20 20  nts(pDest) );.  
13cb0 69 66 28 20 70 43 2d 3e 73 7a 52 6f 77 3e 3d 61  if( pC->szRow>=a
13cc0 4f 66 66 73 65 74 5b 70 32 2b 31 5d 20 29 7b 0a  Offset[p2+1] ){.
13cd0 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74      /* This is t
13ce0 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77  he common case w
13cf0 68 65 72 65 20 74 68 65 20 64 65 73 69 72 65 64  here the desired
13d00 20 63 6f 6e 74 65 6e 74 20 66 69 74 73 20 6f 6e   content fits on
13d10 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 20 20   the original.  
13d20 20 20 2a 2a 20 70 61 67 65 20 2d 20 77 68 65 72    ** page - wher
13d30 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69 73  e the content is
13d40 20 6e 6f 74 20 6f 6e 20 61 6e 20 6f 76 65 72 66   not on an overf
13d50 6c 6f 77 20 70 61 67 65 20 2a 2f 0a 20 20 20 20  low page */.    
13d60 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70  VdbeMemRelease(p
13d70 44 65 73 74 29 3b 0a 20 20 20 20 73 71 6c 69 74  Dest);.    sqlit
13d80 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28  e3VdbeSerialGet(
13d90 70 43 2d 3e 61 52 6f 77 2b 61 4f 66 66 73 65 74  pC->aRow+aOffset
13da0 5b 70 32 5d 2c 20 61 54 79 70 65 5b 70 32 5d 2c  [p2], aType[p2],
13db0 20 70 44 65 73 74 29 3b 0a 20 20 7d 65 6c 73 65   pDest);.  }else
13dc0 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 62 72  {.    /* This br
13dd0 61 6e 63 68 20 68 61 70 70 65 6e 73 20 6f 6e 6c  anch happens onl
13de0 79 20 77 68 65 6e 20 63 6f 6e 74 65 6e 74 20 69  y when content i
13df0 73 20 6f 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61  s on overflow pa
13e00 67 65 73 20 2a 2f 0a 20 20 20 20 74 20 3d 20 61  ges */.    t = a
13e10 54 79 70 65 5b 70 32 5d 3b 0a 20 20 20 20 69 66  Type[p2];.    if
13e20 28 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f  ( ((pOp->p5 & (O
13e30 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 7c  PFLAG_LENGTHARG|
13e40 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
13e50 29 29 21 3d 30 0a 20 20 20 20 20 20 20 20 20 20  ))!=0.          
13e60 26 26 20 28 28 74 3e 3d 31 32 20 26 26 20 28 74  && ((t>=12 && (t
13e70 26 31 29 3d 3d 30 29 20 7c 7c 20 28 70 4f 70 2d  &1)==0) || (pOp-
13e80 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 54 59 50  >p5 & OPFLAG_TYP
13e90 45 4f 46 41 52 47 29 21 3d 30 29 29 0a 20 20 20  EOFARG)!=0)).   
13ea0 20 20 7c 7c 20 28 6c 65 6e 20 3d 20 73 71 6c 69    || (len = sqli
13eb0 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
13ec0 65 4c 65 6e 28 74 29 29 3d 3d 30 0a 20 20 20 20  eLen(t))==0.    
13ed0 29 7b 0a 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74  ){.      /* Cont
13ee0 65 6e 74 20 69 73 20 69 72 72 65 6c 65 76 61 6e  ent is irrelevan
13ef0 74 20 66 6f 72 20 74 68 65 20 74 79 70 65 6f 66  t for the typeof
13f00 28 29 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20  () function and 
13f10 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20 74 68 65  for.      ** the
13f20 20 6c 65 6e 67 74 68 28 58 29 20 66 75 6e 63 74   length(X) funct
13f30 69 6f 6e 20 69 66 20 58 20 69 73 20 61 20 62 6c  ion if X is a bl
13f40 6f 62 2e 20 20 53 6f 20 77 65 20 6d 69 67 68 74  ob.  So we might
13f50 20 61 73 20 77 65 6c 6c 20 75 73 65 0a 20 20 20   as well use.   
13f60 20 20 20 2a 2a 20 62 6f 67 75 73 20 63 6f 6e 74     ** bogus cont
13f70 65 6e 74 20 72 61 74 68 65 72 20 74 68 61 6e 20  ent rather than 
13f80 72 65 61 64 69 6e 67 20 63 6f 6e 74 65 6e 74 20  reading content 
13f90 66 72 6f 6d 20 64 69 73 6b 2e 20 20 4e 55 4c 4c  from disk.  NULL
13fa0 20 77 6f 72 6b 73 0a 20 20 20 20 20 20 2a 2a 20   works.      ** 
13fb0 66 6f 72 20 74 65 78 74 20 61 6e 64 20 62 6c 6f  for text and blo
13fc0 62 20 61 6e 64 20 77 68 61 74 65 76 65 72 20 69  b and whatever i
13fd0 73 20 69 6e 20 74 68 65 20 70 61 79 6c 6f 61 64  s in the payload
13fe0 53 69 7a 65 36 34 20 76 61 72 69 61 62 6c 65 0a  Size64 variable.
13ff0 20 20 20 20 20 20 2a 2a 20 77 69 6c 6c 20 77 6f        ** will wo
14000 72 6b 20 66 6f 72 20 65 76 65 72 79 74 68 69 6e  rk for everythin
14010 67 20 65 6c 73 65 2e 20 20 43 6f 6e 74 65 6e 74  g else.  Content
14020 20 69 73 20 61 6c 73 6f 20 69 72 72 65 6c 65 76   is also irrelev
14030 61 6e 74 20 69 66 0a 20 20 20 20 20 20 2a 2a 20  ant if.      ** 
14040 74 68 65 20 63 6f 6e 74 65 6e 74 20 6c 65 6e 67  the content leng
14050 74 68 20 69 73 20 30 2e 20 2a 2f 0a 20 20 20 20  th is 0. */.    
14060 20 20 7a 44 61 74 61 20 3d 20 74 3c 3d 31 33 20    zData = t<=13 
14070 3f 20 28 75 38 2a 29 26 70 61 79 6c 6f 61 64 53  ? (u8*)&payloadS
14080 69 7a 65 36 34 20 3a 20 30 3b 0a 20 20 20 20 20  ize64 : 0;.     
14090 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 3d 20   sMem.zMalloc = 
140a0 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  0;.    }else{.  
140b0 20 20 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d      memset(&sMem
140c0 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d  , 0, sizeof(sMem
140d0 29 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ));.      sqlite
140e0 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 73 4d  3VdbeMemMove(&sM
140f0 65 6d 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20  em, pDest);.    
14100 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
14110 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70  beMemFromBtree(p
14120 43 72 73 72 2c 20 61 4f 66 66 73 65 74 5b 70 32  Crsr, aOffset[p2
14130 5d 2c 20 6c 65 6e 2c 20 21 70 43 2d 3e 69 73 54  ], len, !pC->isT
14140 61 62 6c 65 2c 0a 20 20 20 20 20 20 20 20 20 20  able,.          
14150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14160 20 20 20 20 20 20 20 20 20 26 73 4d 65 6d 29 3b           &sMem);
14170 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
14180 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
14190 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
141a0 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  mn_error;.      
141b0 7d 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20  }.      zData = 
141c0 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20  (u8*)sMem.z;.   
141d0 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64   }.    sqlite3Vd
141e0 62 65 53 65 72 69 61 6c 47 65 74 28 7a 44 61 74  beSerialGet(zDat
141f0 61 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20  a, t, pDest);.  
14200 20 20 2f 2a 20 49 66 20 77 65 20 64 79 6e 61 6d    /* If we dynam
14210 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
14220 20 73 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74   space to hold t
14230 68 65 20 64 61 74 61 20 28 69 6e 20 74 68 65 0a  he data (in the.
14240 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64      ** sqlite3Vd
14250 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 29  beMemFromBtree()
14260 20 63 61 6c 6c 20 61 62 6f 76 65 29 20 74 68 65   call above) the
14270 6e 20 74 72 61 6e 73 66 65 72 20 63 6f 6e 74 72  n transfer contr
14280 6f 6c 20 6f 66 20 74 68 61 74 0a 20 20 20 20 2a  ol of that.    *
14290 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  * dynamically al
142a0 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 6f 76  located space ov
142b0 65 72 20 74 6f 20 74 68 65 20 70 44 65 73 74 20  er to the pDest 
142c0 73 74 72 75 63 74 75 72 65 2e 0a 20 20 20 20 2a  structure..    *
142d0 2a 20 54 68 69 73 20 70 72 65 76 65 6e 74 73 20  * This prevents 
142e0 61 20 6d 65 6d 6f 72 79 20 63 6f 70 79 2e 20 2a  a memory copy. *
142f0 2f 0a 20 20 20 20 69 66 28 20 73 4d 65 6d 2e 7a  /.    if( sMem.z
14300 4d 61 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 20 20  Malloc ){.      
14310 61 73 73 65 72 74 28 20 73 4d 65 6d 2e 7a 3d 3d  assert( sMem.z==
14320 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 3b 0a  sMem.zMalloc );.
14330 20 20 20 20 20 20 61 73 73 65 72 74 28 20 56 64        assert( Vd
14340 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 44 65  beMemDynamic(pDe
14350 73 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  st)==0 );.      
14360 61 73 73 65 72 74 28 20 28 70 44 65 73 74 2d 3e  assert( (pDest->
14370 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f  flags & (MEM_Blo
14380 62 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 30 20 7c  b|MEM_Str))==0 |
14390 7c 20 70 44 65 73 74 2d 3e 7a 3d 3d 73 4d 65 6d  | pDest->z==sMem
143a0 2e 7a 20 29 3b 0a 20 20 20 20 20 20 70 44 65 73  .z );.      pDes
143b0 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45  t->flags &= ~(ME
143c0 4d 5f 45 70 68 65 6d 7c 4d 45 4d 5f 53 74 61 74  M_Ephem|MEM_Stat
143d0 69 63 29 3b 0a 20 20 20 20 20 20 70 44 65 73 74  ic);.      pDest
143e0 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54  ->flags |= MEM_T
143f0 65 72 6d 3b 0a 20 20 20 20 20 20 70 44 65 73 74  erm;.      pDest
14400 2d 3e 7a 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20  ->z = sMem.z;.  
14410 20 20 20 20 70 44 65 73 74 2d 3e 7a 4d 61 6c 6c      pDest->zMall
14420 6f 63 20 3d 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f  oc = sMem.zMallo
14430 63 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70  c;.    }.  }.  p
14440 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f  Dest->enc = enco
14450 64 69 6e 67 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e  ding;..op_column
14460 5f 6f 75 74 3a 0a 20 20 44 65 65 70 68 65 6d 65  _out:.  Deepheme
14470 72 61 6c 69 7a 65 28 70 44 65 73 74 29 3b 0a 6f  ralize(pDest);.o
14480 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3a 0a  p_column_error:.
14490 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
144a0 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 20 20  BSIZE(pDest);.  
144b0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
144c0 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a  Op->p3, pDest);.
144d0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
144e0 70 63 6f 64 65 3a 20 41 66 66 69 6e 69 74 79 20  pcode: Affinity 
144f0 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20  P1 P2 * P4 *.** 
14500 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e 69  Synopsis: affini
14510 74 79 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a  ty(r[P1@P2]).**.
14520 2a 2a 20 41 70 70 6c 79 20 61 66 66 69 6e 69 74  ** Apply affinit
14530 69 65 73 20 74 6f 20 61 20 72 61 6e 67 65 20 6f  ies to a range o
14540 66 20 50 32 20 72 65 67 69 73 74 65 72 73 20 73  f P2 registers s
14550 74 61 72 74 69 6e 67 20 77 69 74 68 20 50 31 2e  tarting with P1.
14560 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 73  .**.** P4 is a s
14570 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32  tring that is P2
14580 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67   characters long
14590 2e 20 54 68 65 20 6e 74 68 20 63 68 61 72 61 63  . The nth charac
145a0 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74  ter of the.** st
145b0 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74  ring indicates t
145c0 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  he column affini
145d0 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62  ty that should b
145e0 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 6e  e used for the n
145f0 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c  th.** memory cel
14600 6c 20 69 6e 20 74 68 65 20 72 61 6e 67 65 2e 0a  l in the range..
14610 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66 69 6e  */.case OP_Affin
14620 69 74 79 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63  ity: {.  const c
14630 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20  har *zAffinity; 
14640 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
14650 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20  y to be applied 
14660 2a 2f 0a 20 20 63 68 61 72 20 63 41 66 66 3b 20  */.  char cAff; 
14670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
14680 20 41 20 73 69 6e 67 6c 65 20 63 68 61 72 61 63   A single charac
14690 74 65 72 20 6f 66 20 61 66 66 69 6e 69 74 79 20  ter of affinity 
146a0 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e 69 74 79 20  */..  zAffinity 
146b0 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61  = pOp->p4.z;.  a
146c0 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79  ssert( zAffinity
146d0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
146e0 20 7a 41 66 66 69 6e 69 74 79 5b 70 4f 70 2d 3e   zAffinity[pOp->
146f0 70 32 5d 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31  p2]==0 );.  pIn1
14700 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
14710 5d 3b 0a 20 20 77 68 69 6c 65 28 20 28 63 41 66  ];.  while( (cAf
14720 66 20 3d 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b  f = *(zAffinity+
14730 2b 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 61 73  +))!=0 ){.    as
14740 73 65 72 74 28 20 70 49 6e 31 20 3c 3d 20 26 70  sert( pIn1 <= &p
14750 2d 3e 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d  ->aMem[(p->nMem-
14760 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a  p->nCursor)] );.
14770 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
14780 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a  sValid(pIn1) );.
14790 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74      applyAffinit
147a0 79 28 70 49 6e 31 2c 20 63 41 66 66 2c 20 65 6e  y(pIn1, cAff, en
147b0 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 70 49 6e  coding);.    pIn
147c0 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  1++;.  }.  break
147d0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
147e0 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50 32  MakeRecord P1 P2
147f0 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
14800 70 73 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72 65  psis: r[P3]=mkre
14810 63 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a  c(r[P1@P2]).**.*
14820 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65 67  * Convert P2 reg
14830 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e 67  isters beginning
14840 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20 74 68   with P1 into th
14850 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61 74  e [record format
14860 5d 0a 2a 2a 20 75 73 65 20 61 73 20 61 20 64 61  ].** use as a da
14870 74 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20 64  ta record in a d
14880 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72  atabase table or
14890 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e 20   as a key.** in 
148a0 61 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20 4f  an index.  The O
148b0 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20  P_Column opcode 
148c0 63 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20 72  can decode the r
148d0 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 0a  ecord later..**.
148e0 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 73  ** P4 may be a s
148f0 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32  tring that is P2
14900 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67   characters long
14910 2e 20 20 54 68 65 20 6e 74 68 20 63 68 61 72 61  .  The nth chara
14920 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73  cter of the.** s
14930 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20  tring indicates 
14940 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e  the column affin
14950 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20  ity that should 
14960 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20  be used for the 
14970 6e 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20  nth.** field of 
14980 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a 2a  the index key..*
14990 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e 67  *.** The mapping
149a0 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65 72 20   from character 
149b0 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73 20 67  to affinity is g
149c0 69 76 65 6e 20 62 79 20 74 68 65 20 53 51 4c 49  iven by the SQLI
149d0 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f  TE_AFF_.** macro
149e0 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73 71 6c  s defined in sql
149f0 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20  iteInt.h..**.** 
14a00 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20 74 68  If P4 is NULL th
14a10 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66 69 65  en all index fie
14a20 6c 64 73 20 68 61 76 65 20 74 68 65 20 61 66 66  lds have the aff
14a30 69 6e 69 74 79 20 4e 4f 4e 45 2e 0a 2a 2f 0a 63  inity NONE..*/.c
14a40 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72  ase OP_MakeRecor
14a50 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65 77 52  d: {.  u8 *zNewR
14a60 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20 2f 2a  ecord;        /*
14a70 20 41 20 62 75 66 66 65 72 20 74 6f 20 68 6f 6c   A buffer to hol
14a80 64 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 74  d the data for t
14a90 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f  he new record */
14aa0 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20 20  .  Mem *pRec;   
14ab0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
14ac0 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20   new record */. 
14ad0 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20 20 20   u64 nData;     
14ae0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
14af0 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61  r of bytes of da
14b00 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e  ta space */.  in
14b10 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20 20 20  t nHdr;         
14b20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
14b30 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64 65  f bytes of heade
14b40 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 36 34  r space */.  i64
14b50 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20 20   nByte;         
14b60 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61 63      /* Data spac
14b70 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74  e required for t
14b80 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  his record */.  
14b90 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20  int nZero;      
14ba0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
14bb0 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20 61   of zero bytes a
14bc0 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
14bd0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
14be0 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20 20   nVarint;       
14bf0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
14c00 20 62 79 74 65 73 20 69 6e 20 61 20 76 61 72 69   bytes in a vari
14c10 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72 69  nt */.  u32 seri
14c20 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20 2f  al_type;       /
14c30 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f 0a  * Type field */.
14c40 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20 20    Mem *pData0;  
14c50 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
14c60 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63 6f  t field to be co
14c70 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65 20  mbined into the 
14c80 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20  record */.  Mem 
14c90 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20 20  *pLast;         
14ca0 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c 64     /* Last field
14cb0 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a   of the record *
14cc0 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20  /.  int nField; 
14cd0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
14ce0 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
14cf0 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  n the record */.
14d00 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74    char *zAffinit
14d10 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  y;       /* The 
14d20 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67 20  affinity string 
14d30 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a  for the record *
14d40 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f 72  /.  int file_for
14d50 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46 69  mat;       /* Fi
14d60 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73 65  le format to use
14d70 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a 2f   for encoding */
14d80 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20  .  int i;       
14d90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61            /* Spa
14da0 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77 52  ce used in zNewR
14db0 65 63 6f 72 64 5b 5d 20 68 65 61 64 65 72 20 2a  ecord[] header *
14dc0 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20 20  /.  int j;      
14dd0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70             /* Sp
14de0 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77  ace used in zNew
14df0 52 65 63 6f 72 64 5b 5d 20 63 6f 6e 74 65 6e 74  Record[] content
14e00 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20   */.  int len;  
14e10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14e20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69 65 6c  Length of a fiel
14e30 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75 6d  d */..  /* Assum
14e40 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 63  ing the record c
14e50 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64 73  ontains N fields
14e60 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f 72  , the record for
14e70 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c  mat looks.  ** l
14e80 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a 20  ike this:.  **. 
14e90 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ** ------------
14ea0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14eb0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14ec0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14ed0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a  ------------.  *
14ee0 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20 74  * | hdr-size | t
14ef0 79 70 65 20 30 20 7c 20 74 79 70 65 20 31 20 7c  ype 0 | type 1 |
14f00 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31 20   ... | type N-1 
14f10 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c 20  | data0 | ... | 
14f20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a  data N-1 | .  **
14f30 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ---------------
14f40 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14f50 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14f60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14f70 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20  ---------.  **. 
14f80 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20 74   ** Data(0) is t
14f90 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74  aken from regist
14fa0 65 72 20 50 31 2e 20 20 44 61 74 61 28 31 29 20  er P1.  Data(1) 
14fb0 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69 73  comes from regis
14fc0 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61 6e  ter P1+1.  ** an
14fd0 64 20 73 6f 20 66 72 6f 74 68 2e 0a 20 20 2a 2a  d so froth..  **
14fe0 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65 20  .  ** Each type 
14ff0 66 69 65 6c 64 20 69 73 20 61 20 76 61 72 69 6e  field is a varin
15000 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74  t representing t
15010 68 65 20 73 65 72 69 61 6c 20 74 79 70 65 20 6f  he serial type o
15020 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72 72  f the .  ** corr
15030 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20 65  esponding data e
15040 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c 69  lement (see sqli
15050 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
15060 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20 68  e()). The.  ** h
15070 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69 73  dr-size field is
15080 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20 77   also a varint w
15090 68 69 63 68 20 69 73 20 74 68 65 20 6f 66 66 73  hich is the offs
150a0 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69  et from the begi
150b0 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74 68  nning.  ** of th
150c0 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74 61  e record to data
150d0 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61 20  0..  */.  nData 
150e0 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  = 0;         /* 
150f0 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
15100 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a 2f  of data space */
15110 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20 20 20  .  nHdr = 0;    
15120 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
15130 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64  of bytes of head
15140 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 5a  er space */.  nZ
15150 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20 20  ero = 0;        
15160 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65   /* Number of ze
15170 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20  ro bytes at the 
15180 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72  end of the recor
15190 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20  d */.  nField = 
151a0 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69  pOp->p1;.  zAffi
151b0 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  nity = pOp->p4.z
151c0 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69 65  ;.  assert( nFie
151d0 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e  ld>0 && pOp->p2>
151e0 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69  0 && pOp->p2+nFi
151f0 65 6c 64 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  eld<=(p->nMem-p-
15200 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
15210 20 70 44 61 74 61 30 20 3d 20 26 61 4d 65 6d 5b   pData0 = &aMem[
15220 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65 6c  nField];.  nFiel
15230 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70  d = pOp->p2;.  p
15240 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b 6e  Last = &pData0[n
15250 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c 65  Field-1];.  file
15260 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69 6e  _format = p->min
15270 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 3b  WriteFileFormat;
15280 0a 0a 20 20 2f 2a 20 49 64 65 6e 74 69 66 79 20  ..  /* Identify 
15290 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73  the output regis
152a0 74 65 72 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ter */.  assert(
152b0 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 31   pOp->p3<pOp->p1
152c0 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70   || pOp->p3>=pOp
152d0 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b 0a  ->p1+pOp->p2 );.
152e0 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
152f0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p3];.  memAb
15300 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
15310 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 41 70 70 6c  Out);..  /* Appl
15320 79 20 74 68 65 20 72 65 71 75 65 73 74 65 64 20  y the requested 
15330 61 66 66 69 6e 69 74 79 20 74 6f 20 61 6c 6c 20  affinity to all 
15340 69 6e 70 75 74 73 0a 20 20 2a 2f 0a 20 20 61 73  inputs.  */.  as
15350 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70 4c  sert( pData0<=pL
15360 61 73 74 20 29 3b 0a 20 20 69 66 28 20 7a 41 66  ast );.  if( zAf
15370 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 70 52  finity ){.    pR
15380 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20 20  ec = pData0;.   
15390 20 64 6f 7b 0a 20 20 20 20 20 20 61 70 70 6c 79   do{.      apply
153a0 41 66 66 69 6e 69 74 79 28 70 52 65 63 2b 2b 2c  Affinity(pRec++,
153b0 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 2c   *(zAffinity++),
153c0 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
153d0 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e    assert( zAffin
153e0 69 74 79 5b 30 5d 3d 3d 30 20 7c 7c 20 70 52 65  ity[0]==0 || pRe
153f0 63 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 20 20  c<=pLast );.    
15400 7d 77 68 69 6c 65 28 20 7a 41 66 66 69 6e 69 74  }while( zAffinit
15410 79 5b 30 5d 20 29 3b 0a 20 20 7d 0a 0a 20 20 2f  y[0] );.  }..  /
15420 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20 74  * Loop through t
15430 68 65 20 65 6c 65 6d 65 6e 74 73 20 74 68 61 74  he elements that
15440 20 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68   will make up th
15450 65 20 72 65 63 6f 72 64 20 74 6f 20 66 69 67 75  e record to figu
15460 72 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20  re.  ** out how 
15470 6d 75 63 68 20 73 70 61 63 65 20 69 73 20 72 65  much space is re
15480 71 75 69 72 65 64 20 66 6f 72 20 74 68 65 20 6e  quired for the n
15490 65 77 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a  ew record..  */.
154a0 20 20 70 52 65 63 20 3d 20 70 4c 61 73 74 3b 0a    pRec = pLast;.
154b0 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74    do{.    assert
154c0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65  ( memIsValid(pRe
154d0 63 29 20 29 3b 0a 20 20 20 20 73 65 72 69 61 6c  c) );.    serial
154e0 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56  _type = sqlite3V
154f0 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 70 52  dbeSerialType(pR
15500 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29  ec, file_format)
15510 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 73 71 6c 69  ;.    len = sqli
15520 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
15530 65 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65  eLen(serial_type
15540 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d  );.    if( pRec-
15550 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72  >flags & MEM_Zer
15560 6f 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e  o ){.      if( n
15570 44 61 74 61 20 29 7b 0a 20 20 20 20 20 20 20 20  Data ){.        
15580 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78  sqlite3VdbeMemEx
15590 70 61 6e 64 42 6c 6f 62 28 70 52 65 63 29 3b 0a  pandBlob(pRec);.
155a0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
155b0 20 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52       nZero += pR
155c0 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20  ec->u.nZero;.   
155d0 20 20 20 20 20 6c 65 6e 20 2d 3d 20 70 52 65 63       len -= pRec
155e0 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20  ->u.nZero;.     
155f0 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 6e 44 61   }.    }.    nDa
15600 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20 74  ta += len;.    t
15610 65 73 74 63 61 73 65 28 20 73 65 72 69 61 6c 5f  estcase( serial_
15620 74 79 70 65 3d 3d 31 32 37 20 29 3b 0a 20 20 20  type==127 );.   
15630 20 74 65 73 74 63 61 73 65 28 20 73 65 72 69 61   testcase( seria
15640 6c 5f 74 79 70 65 3d 3d 31 32 38 20 29 3b 0a 20  l_type==128 );. 
15650 20 20 20 6e 48 64 72 20 2b 3d 20 73 65 72 69 61     nHdr += seria
15660 6c 5f 74 79 70 65 3c 3d 31 32 37 20 3f 20 31 20  l_type<=127 ? 1 
15670 3a 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c  : sqlite3VarintL
15680 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b  en(serial_type);
15690 0a 20 20 7d 77 68 69 6c 65 28 20 28 2d 2d 70 52  .  }while( (--pR
156a0 65 63 29 3e 3d 70 44 61 74 61 30 20 29 3b 0a 0a  ec)>=pData0 );..
156b0 20 20 2f 2a 20 41 64 64 20 74 68 65 20 69 6e 69    /* Add the ini
156c0 74 69 61 6c 20 68 65 61 64 65 72 20 76 61 72 69  tial header vari
156d0 6e 74 20 61 6e 64 20 74 6f 74 61 6c 20 74 68 65  nt and total the
156e0 20 73 69 7a 65 20 2a 2f 0a 20 20 74 65 73 74 63   size */.  testc
156f0 61 73 65 28 20 6e 48 64 72 3d 3d 31 32 36 20 29  ase( nHdr==126 )
15700 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 48  ;.  testcase( nH
15710 64 72 3d 3d 31 32 37 20 29 3b 0a 20 20 69 66 28  dr==127 );.  if(
15720 20 6e 48 64 72 3c 3d 31 32 36 20 29 7b 0a 20 20   nHdr<=126 ){.  
15730 20 20 2f 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20    /* The common 
15740 63 61 73 65 20 2a 2f 0a 20 20 20 20 6e 48 64 72  case */.    nHdr
15750 20 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a   += 1;.  }else{.
15760 20 20 20 20 2f 2a 20 52 61 72 65 20 63 61 73 65      /* Rare case
15770 20 6f 66 20 61 20 72 65 61 6c 6c 79 20 6c 61 72   of a really lar
15780 67 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 20  ge header */.   
15790 20 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69 74   nVarint = sqlit
157a0 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72  e3VarintLen(nHdr
157b0 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 6e  );.    nHdr += n
157c0 56 61 72 69 6e 74 3b 0a 20 20 20 20 69 66 28 20  Varint;.    if( 
157d0 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74 65 33 56  nVarint<sqlite3V
157e0 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29  arintLen(nHdr) )
157f0 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e   nHdr++;.  }.  n
15800 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74  Byte = nHdr+nDat
15810 61 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64  a;.  if( nByte>d
15820 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
15830 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
15840 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
15850 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61  ig;.  }..  /* Ma
15860 6b 65 20 73 75 72 65 20 74 68 65 20 6f 75 74 70  ke sure the outp
15870 75 74 20 72 65 67 69 73 74 65 72 20 68 61 73 20  ut register has 
15880 61 20 62 75 66 66 65 72 20 6c 61 72 67 65 20 65  a buffer large e
15890 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72 65 20 0a  nough to store .
158a0 20 20 2a 2a 20 74 68 65 20 6e 65 77 20 72 65 63    ** the new rec
158b0 6f 72 64 2e 20 54 68 65 20 6f 75 74 70 75 74 20  ord. The output 
158c0 72 65 67 69 73 74 65 72 20 28 70 4f 70 2d 3e 70  register (pOp->p
158d0 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65  3) is not allowe
158e0 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65  d to.  ** be one
158f0 20 6f 66 20 74 68 65 20 69 6e 70 75 74 20 72 65   of the input re
15900 67 69 73 74 65 72 73 20 28 62 65 63 61 75 73 65  gisters (because
15910 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   the following c
15920 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69  all to.  ** sqli
15930 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 29  te3VdbeMemGrow()
15940 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20 74   could clobber t
15950 68 65 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20  he value before 
15960 69 74 20 69 73 20 75 73 65 64 29 2e 0a 20 20 2a  it is used)..  *
15970 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  /.  if( sqlite3V
15980 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c  dbeMemGrow(pOut,
15990 20 28 69 6e 74 29 6e 42 79 74 65 2c 20 30 29 20   (int)nByte, 0) 
159a0 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  ){.    goto no_m
159b0 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65 77 52 65  em;.  }.  zNewRe
159c0 63 6f 72 64 20 3d 20 28 75 38 20 2a 29 70 4f 75  cord = (u8 *)pOu
159d0 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72 69 74  t->z;..  /* Writ
159e0 65 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  e the record */.
159f0 20 20 69 20 3d 20 70 75 74 56 61 72 69 6e 74 33    i = putVarint3
15a00 32 28 7a 4e 65 77 52 65 63 6f 72 64 2c 20 6e 48  2(zNewRecord, nH
15a10 64 72 29 3b 0a 20 20 6a 20 3d 20 6e 48 64 72 3b  dr);.  j = nHdr;
15a20 0a 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61  .  assert( pData
15a30 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 70 52  0<=pLast );.  pR
15a40 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20 64  ec = pData0;.  d
15a50 6f 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79  o{.    serial_ty
15a60 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  pe = sqlite3Vdbe
15a70 53 65 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c  SerialType(pRec,
15a80 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20   file_format);. 
15a90 20 20 20 69 20 2b 3d 20 70 75 74 56 61 72 69 6e     i += putVarin
15aa0 74 33 32 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b  t32(&zNewRecord[
15ab0 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29  i], serial_type)
15ac0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
15ad0 73 65 72 69 61 6c 20 74 79 70 65 20 2a 2f 0a 20  serial type */. 
15ae0 20 20 20 6a 20 2b 3d 20 73 71 6c 69 74 65 33 56     j += sqlite3V
15af0 64 62 65 53 65 72 69 61 6c 50 75 74 28 26 7a 4e  dbeSerialPut(&zN
15b00 65 77 52 65 63 6f 72 64 5b 6a 5d 2c 20 70 52 65  ewRecord[j], pRe
15b10 63 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b  c, serial_type);
15b20 20 2f 2a 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20   /* content */. 
15b30 20 7d 77 68 69 6c 65 28 20 28 2b 2b 70 52 65 63   }while( (++pRec
15b40 29 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 61 73  )<=pLast );.  as
15b50 73 65 72 74 28 20 69 3d 3d 6e 48 64 72 20 29 3b  sert( i==nHdr );
15b60 0a 20 20 61 73 73 65 72 74 28 20 6a 3d 3d 6e 42  .  assert( j==nB
15b70 79 74 65 20 29 3b 0a 0a 20 20 61 73 73 65 72 74  yte );..  assert
15b80 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
15b90 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
15ba0 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
15bb0 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74    pOut->n = (int
15bc0 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e  )nByte;.  pOut->
15bd0 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62  flags = MEM_Blob
15be0 3b 0a 20 20 70 4f 75 74 2d 3e 78 44 65 6c 20 3d  ;.  pOut->xDel =
15bf0 20 30 3b 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20   0;.  if( nZero 
15c00 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e  ){.    pOut->u.n
15c10 5a 65 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20  Zero = nZero;.  
15c20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d    pOut->flags |=
15c30 20 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20   MEM_Zero;.  }. 
15c40 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c   pOut->enc = SQL
15c50 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e  ITE_UTF8;  /* In
15c60 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69   case the blob i
15c70 73 20 65 76 65 72 20 63 6f 6e 76 65 72 74 65 64  s ever converted
15c80 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20 52 45   to text */.  RE
15c90 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
15ca0 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55  ->p3, pOut);.  U
15cb0 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
15cc0 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
15cd0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
15ce0 20 43 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a   Count P1 P2 * *
15cf0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
15d00 72 5b 50 32 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a  r[P2]=count().**
15d10 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 6e 75  .** Store the nu
15d20 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
15d30 28 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75  (an integer valu
15d40 65 29 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  e) in the table 
15d50 6f 72 20 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65  or index .** ope
15d60 6e 65 64 20 62 79 20 63 75 72 73 6f 72 20 50 31  ned by cursor P1
15d70 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
15d80 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
15d90 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e  E_OMIT_BTREECOUN
15da0 54 0a 63 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a  T.case OP_Count:
15db0 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75   {         /* ou
15dc0 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
15dd0 0a 20 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20  .  i64 nEntry;. 
15de0 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
15df0 3b 0a 0a 20 20 70 43 72 73 72 20 3d 20 70 2d 3e  ;..  pCrsr = p->
15e00 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e  apCsr[pOp->p1]->
15e10 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72  pCursor;.  asser
15e20 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 6e 45  t( pCrsr );.  nE
15e30 6e 74 72 79 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f  ntry = 0;  /* No
15e40 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20  t needed.  Only 
15e50 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20  used to silence 
15e60 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  a warning. */.  
15e70 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
15e80 65 43 6f 75 6e 74 28 70 43 72 73 72 2c 20 26 6e  eCount(pCrsr, &n
15e90 45 6e 74 72 79 29 3b 0a 20 20 70 4f 75 74 2d 3e  Entry);.  pOut->
15ea0 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20  u.i = nEntry;.  
15eb0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
15ec0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76 65  ./* Opcode: Save
15ed0 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20  point P1 * * P4 
15ee0 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65  *.**.** Open, re
15ef0 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63  lease or rollbac
15f00 6b 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  k the savepoint 
15f10 6e 61 6d 65 64 20 62 79 20 70 61 72 61 6d 65 74  named by paramet
15f20 65 72 20 50 34 2c 20 64 65 70 65 6e 64 69 6e 67  er P4, depending
15f30 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75 65  .** on the value
15f40 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20   of P1. To open 
15f50 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 2c  a new savepoint,
15f60 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61   P1==0. To relea
15f70 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a  se (commit) an.*
15f80 2a 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70  * existing savep
15f90 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20  oint, P1==1, or 
15fa0 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65  to rollback an e
15fb0 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e  xisting savepoin
15fc0 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65  t P1==2..*/.case
15fd0 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b   OP_Savepoint: {
15fe0 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20  .  int p1;      
15ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16000 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50     /* Value of P
16010 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63  1 operand */.  c
16020 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
16030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
16040 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76 65 70 6f  * Name of savepo
16050 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61  int */.  int nNa
16060 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20  me;.  Savepoint 
16070 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f 69  *pNew;.  Savepoi
16080 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a  nt *pSavepoint;.
16090 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d    Savepoint *pTm
160a0 70 3b 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f  p;.  int iSavepo
160b0 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a  int;.  int ii;..
160c0 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a    p1 = pOp->p1;.
160d0 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70    zName = pOp->p
160e0 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72  4.z;..  /* Asser
160f0 74 20 74 68 61 74 20 74 68 65 20 70 31 20 70 61  t that the p1 pa
16100 72 61 6d 65 74 65 72 20 69 73 20 76 61 6c 69 64  rameter is valid
16110 2e 20 41 6c 73 6f 20 74 68 61 74 20 69 66 20 74  . Also that if t
16120 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a  here is no open.
16130 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e    ** transaction
16140 2c 20 74 68 65 6e 20 74 68 65 72 65 20 63 61 6e  , then there can
16150 6e 6f 74 20 62 65 20 61 6e 79 20 73 61 76 65 70  not be any savep
16160 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61  oints. .  */.  a
16170 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65  ssert( db->pSave
16180 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e  point==0 || db->
16190 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b  autoCommit==0 );
161a0 0a 20 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53  .  assert( p1==S
161b0 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c  AVEPOINT_BEGIN||
161c0 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
161d0 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50  LEASE||p1==SAVEP
161e0 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b  OINT_ROLLBACK );
161f0 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70  .  assert( db->p
16200 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d  Savepoint || db-
16210 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
16220 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20  vepoint==0 );.  
16230 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76  assert( checkSav
16240 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20  epointCount(db) 
16250 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
16260 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 20 20  bIsReader );..  
16270 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  if( p1==SAVEPOIN
16280 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20 20 20 69  T_BEGIN ){.    i
16290 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74  f( db->nVdbeWrit
162a0 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  e>0 ){.      /* 
162b0 41 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20  A new savepoint 
162c0 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61 74 65  cannot be create
162d0 64 20 69 66 20 74 68 65 72 65 20 61 72 65 20 61  d if there are a
162e0 63 74 69 76 65 20 77 72 69 74 65 20 0a 20 20 20  ctive write .   
162f0 20 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73     ** statements
16300 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64   (i.e. open read
16310 2f 77 72 69 74 65 20 69 6e 63 72 65 6d 65 6e 74  /write increment
16320 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29  al blob handles)
16330 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
16340 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
16350 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
16360 62 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20  b, "cannot open 
16370 73 61 76 65 70 6f 69 6e 74 20 2d 20 22 0a 20 20  savepoint - ".  
16380 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65        "SQL state
16390 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73  ments in progres
163a0 73 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  s");.      rc = 
163b0 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20  SQLITE_BUSY;.   
163c0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4e   }else{.      nN
163d0 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 53 74 72  ame = sqlite3Str
163e0 6c 65 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a 0a 23  len30(zName);..#
163f0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
16400 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
16410 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 63 61        /* This ca
16420 6c 6c 20 69 73 20 4f 6b 20 65 76 65 6e 20 69 66  ll is Ok even if
16430 20 74 68 69 73 20 73 61 76 65 70 6f 69 6e 74 20   this savepoint 
16440 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20 74 72  is actually a tr
16450 61 6e 73 61 63 74 69 6f 6e 0a 20 20 20 20 20 20  ansaction.      
16460 2a 2a 20 73 61 76 65 70 6f 69 6e 74 20 28 61 6e  ** savepoint (an
16470 64 20 74 68 65 72 65 66 6f 72 65 20 73 68 6f 75  d therefore shou
16480 6c 64 20 6e 6f 74 20 70 72 6f 6d 70 74 20 78 53  ld not prompt xS
16490 61 76 65 70 6f 69 6e 74 28 29 29 20 63 61 6c 6c  avepoint()) call
164a0 62 61 63 6b 73 2e 0a 20 20 20 20 20 20 2a 2a 20  backs..      ** 
164b0 49 66 20 74 68 69 73 20 69 73 20 61 20 74 72 61  If this is a tra
164c0 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
164d0 6e 74 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2c  nt being opened,
164e0 20 69 74 20 69 73 20 67 75 61 72 61 6e 74 65 65   it is guarantee
164f0 64 0a 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20  d.      ** that 
16500 74 68 65 20 64 62 2d 3e 61 56 54 72 61 6e 73 5b  the db->aVTrans[
16510 5d 20 61 72 72 61 79 20 69 73 20 65 6d 70 74 79  ] array is empty
16520 2e 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65  .  */.      asse
16530 72 74 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  rt( db->autoComm
16540 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 54  it==0 || db->nVT
16550 72 61 6e 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20  rans==0 );.     
16560 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
16570 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53  bSavepoint(db, S
16580 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 0a  AVEPOINT_BEGIN,.
16590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165b0 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 64  db->nStatement+d
165c0 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 29 3b 0a  b->nSavepoint);.
165d0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
165e0 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
165f0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
16600 72 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20  r;.#endif..     
16610 20 2f 2a 20 43 72 65 61 74 65 20 61 20 6e 65 77   /* Create a new
16620 20 73 61 76 65 70 6f 69 6e 74 20 73 74 72 75 63   savepoint struc
16630 74 75 72 65 2e 20 2a 2f 0a 20 20 20 20 20 20 70  ture. */.      p
16640 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 44 62 4d  New = sqlite3DbM
16650 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a  allocRaw(db, siz
16660 65 6f 66 28 53 61 76 65 70 6f 69 6e 74 29 2b 6e  eof(Savepoint)+n
16670 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 20 20 69  Name+1);.      i
16680 66 28 20 70 4e 65 77 20 29 7b 0a 20 20 20 20 20  f( pNew ){.     
16690 20 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d     pNew->zName =
166a0 20 28 63 68 61 72 20 2a 29 26 70 4e 65 77 5b 31   (char *)&pNew[1
166b0 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 63 70  ];.        memcp
166c0 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a  y(pNew->zName, z
166d0 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a  Name, nName+1);.
166e0 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20      .        /* 
166f0 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f  If there is no o
16700 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  pen transaction,
16710 20 74 68 65 6e 20 6d 61 72 6b 20 74 68 69 73 20   then mark this 
16720 61 73 20 61 20 73 70 65 63 69 61 6c 0a 20 20 20  as a special.   
16730 20 20 20 20 20 2a 2a 20 22 74 72 61 6e 73 61 63       ** "transac
16740 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 22 2e  tion savepoint".
16750 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
16760 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29  db->autoCommit )
16770 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  {.          db->
16780 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a  autoCommit = 0;.
16790 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73            db->is
167a0 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
167b0 6f 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20 20  oint = 1;.      
167c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
167d0 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e     db->nSavepoin
167e0 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  t++;.        }. 
167f0 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 4c     .        /* L
16800 69 6e 6b 20 74 68 65 20 6e 65 77 20 73 61 76 65  ink the new save
16810 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68 65 20 64  point into the d
16820 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 27 73  atabase handle's
16830 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20 20 20 20   list. */.      
16840 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74 20 3d 20    pNew->pNext = 
16850 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a  db->pSavepoint;.
16860 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76          db->pSav
16870 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77 3b 0a 20  epoint = pNew;. 
16880 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65         pNew->nDe
16890 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 64 62 2d  ferredCons = db-
168a0 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a  >nDeferredCons;.
168b0 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44          pNew->nD
168c0 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d  eferredImmCons =
168d0 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
168e0 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 20  mCons;.      }. 
168f0 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
16900 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 30    iSavepoint = 0
16910 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 6e 64 20 74  ;..    /* Find t
16920 68 65 20 6e 61 6d 65 64 20 73 61 76 65 70 6f 69  he named savepoi
16930 6e 74 2e 20 49 66 20 74 68 65 72 65 20 69 73 20  nt. If there is 
16940 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e  no such savepoin
16950 74 2c 20 74 68 65 6e 20 61 6e 0a 20 20 20 20 2a  t, then an.    *
16960 2a 20 61 6e 20 65 72 72 6f 72 20 69 73 20 72 65  * an error is re
16970 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73  turned to the us
16980 65 72 2e 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28  er.  */.    for(
16990 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e  .      pSavepoin
169a0 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  t = db->pSavepoi
169b0 6e 74 3b 20 0a 20 20 20 20 20 20 70 53 61 76 65  nt; .      pSave
169c0 70 6f 69 6e 74 20 26 26 20 73 71 6c 69 74 65 33  point && sqlite3
169d0 53 74 72 49 43 6d 70 28 70 53 61 76 65 70 6f 69  StrICmp(pSavepoi
169e0 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65  nt->zName, zName
169f0 29 3b 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f  );.      pSavepo
16a00 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  int = pSavepoint
16a10 2d 3e 70 4e 65 78 74 0a 20 20 20 20 29 7b 0a 20  ->pNext.    ){. 
16a20 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 2b       iSavepoint+
16a30 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  +;.    }.    if(
16a40 20 21 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a   !pSavepoint ){.
16a50 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
16a60 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
16a70 73 67 2c 20 64 62 2c 20 22 6e 6f 20 73 75 63 68  sg, db, "no such
16a80 20 73 61 76 65 70 6f 69 6e 74 3a 20 25 73 22 2c   savepoint: %s",
16a90 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 72   zName);.      r
16aa0 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
16ab0 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
16ac0 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30  db->nVdbeWrite>0
16ad0 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e   && p1==SAVEPOIN
16ae0 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20  T_RELEASE ){.   
16af0 20 20 20 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20     /* It is not 
16b00 70 6f 73 73 69 62 6c 65 20 74 6f 20 72 65 6c 65  possible to rele
16b10 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 20 73  ase (commit) a s
16b20 61 76 65 70 6f 69 6e 74 20 69 66 20 74 68 65 72  avepoint if ther
16b30 65 20 61 72 65 20 0a 20 20 20 20 20 20 2a 2a 20  e are .      ** 
16b40 61 63 74 69 76 65 20 77 72 69 74 65 20 73 74 61  active write sta
16b50 74 65 6d 65 6e 74 73 2e 0a 20 20 20 20 20 20 2a  tements..      *
16b60 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  /.      sqlite3S
16b70 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
16b80 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20 20 20 20  rMsg, db, .     
16b90 20 20 20 22 63 61 6e 6e 6f 74 20 72 65 6c 65 61     "cannot relea
16ba0 73 65 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 53  se savepoint - S
16bb0 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  QL statements in
16bc0 20 70 72 6f 67 72 65 73 73 22 0a 20 20 20 20 20   progress".     
16bd0 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   );.      rc = S
16be0 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
16bf0 7d 65 6c 73 65 7b 0a 0a 20 20 20 20 20 20 2f 2a  }else{..      /*
16c00 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68   Determine wheth
16c10 65 72 20 6f 72 20 6e 6f 74 20 74 68 69 73 20 69  er or not this i
16c20 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  s a transaction 
16c30 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 73 6f  savepoint. If so
16c40 2c 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 74  ,.      ** and t
16c50 68 69 73 20 69 73 20 61 20 52 45 4c 45 41 53 45  his is a RELEASE
16c60 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e 20 74   command, then t
16c70 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73  he current trans
16c80 61 63 74 69 6f 6e 20 0a 20 20 20 20 20 20 2a 2a  action .      **
16c90 20 69 73 20 63 6f 6d 6d 69 74 74 65 64 2e 20 0a   is committed. .
16ca0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
16cb0 6e 74 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  nt isTransaction
16cc0 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70   = pSavepoint->p
16cd0 4e 65 78 74 3d 3d 30 20 26 26 20 64 62 2d 3e 69  Next==0 && db->i
16ce0 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
16cf0 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 69 66 28  point;.      if(
16d00 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 26   isTransaction &
16d10 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  & p1==SAVEPOINT_
16d20 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20  RELEASE ){.     
16d30 20 20 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c     if( (rc = sql
16d40 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28  ite3VdbeCheckFk(
16d50 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f  p, 1))!=SQLITE_O
16d60 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67  K ){.          g
16d70 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
16d80 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
16d90 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
16da0 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69  t = 1;.        i
16db0 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 48 61  f( sqlite3VdbeHa
16dc0 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55  lt(p)==SQLITE_BU
16dd0 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  SY ){.          
16de0 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20  p->pc = pc;.    
16df0 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
16e00 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20  mmit = 0;.      
16e10 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d      p->rc = rc =
16e20 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
16e30 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62          goto vdb
16e40 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20  e_return;.      
16e50 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e    }.        db->
16e60 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
16e70 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20 20 20 20  epoint = 0;.    
16e80 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 3b 0a      rc = p->rc;.
16e90 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
16ea0 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20       iSavepoint 
16eb0 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  = db->nSavepoint
16ec0 20 2d 20 69 53 61 76 65 70 6f 69 6e 74 20 2d 20   - iSavepoint - 
16ed0 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  1;.        if( p
16ee0 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  1==SAVEPOINT_ROL
16ef0 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20 20 20 20  LBACK ){.       
16f00 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c     for(ii=0; ii<
16f10 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a  db->nDb; ii++){.
16f20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
16f30 74 65 33 42 74 72 65 65 54 72 69 70 41 6c 6c 43  te3BtreeTripAllC
16f40 75 72 73 6f 72 73 28 64 62 2d 3e 61 44 62 5b 69  ursors(db->aDb[i
16f50 69 5d 2e 70 42 74 2c 20 53 51 4c 49 54 45 5f 41  i].pBt, SQLITE_A
16f60 42 4f 52 54 29 3b 0a 20 20 20 20 20 20 20 20 20  BORT);.         
16f70 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
16f80 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69       for(ii=0; i
16f90 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29  i<db->nDb; ii++)
16fa0 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d  {.          rc =
16fb0 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 61 76   sqlite3BtreeSav
16fc0 65 70 6f 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69  epoint(db->aDb[i
16fd0 69 5d 2e 70 42 74 2c 20 70 31 2c 20 69 53 61 76  i].pBt, p1, iSav
16fe0 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20  epoint);.       
16ff0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
17000 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
17010 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
17020 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
17030 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
17040 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 70   }.        if( p
17050 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  1==SAVEPOINT_ROL
17060 4c 42 41 43 4b 20 26 26 20 28 64 62 2d 3e 66 6c  LBACK && (db->fl
17070 61 67 73 26 53 51 4c 49 54 45 5f 49 6e 74 65 72  ags&SQLITE_Inter
17080 6e 43 68 61 6e 67 65 73 29 21 3d 30 20 29 7b 0a  nChanges)!=0 ){.
17090 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
170a0 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
170b0 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20  tatements(db);. 
170c0 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
170d0 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f  ResetAllSchemasO
170e0 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b  fConnection(db);
170f0 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 66  .          db->f
17100 6c 61 67 73 20 3d 20 28 64 62 2d 3e 66 6c 61 67  lags = (db->flag
17110 73 20 7c 20 53 51 4c 49 54 45 5f 49 6e 74 65 72  s | SQLITE_Inter
17120 6e 43 68 61 6e 67 65 73 29 3b 0a 20 20 20 20 20  nChanges);.     
17130 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a     }.      }.  .
17140 20 20 20 20 20 20 2f 2a 20 52 65 67 61 72 64 6c        /* Regardl
17150 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 74  ess of whether t
17160 68 69 73 20 69 73 20 61 20 52 45 4c 45 41 53 45  his is a RELEASE
17170 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65   or ROLLBACK, de
17180 73 74 72 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20  stroy all .     
17190 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 73 20 6e   ** savepoints n
171a0 65 73 74 65 64 20 69 6e 73 69 64 65 20 6f 66 20  ested inside of 
171b0 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65  the savepoint be
171c0 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e  ing operated on.
171d0 20 2a 2f 0a 20 20 20 20 20 20 77 68 69 6c 65 28   */.      while(
171e0 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21   db->pSavepoint!
171f0 3d 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20  =pSavepoint ){. 
17200 20 20 20 20 20 20 20 70 54 6d 70 20 3d 20 64 62         pTmp = db
17210 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20  ->pSavepoint;.  
17220 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70        db->pSavep
17230 6f 69 6e 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65  oint = pTmp->pNe
17240 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  xt;.        sqli
17250 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 54  te3DbFree(db, pT
17260 6d 70 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  mp);.        db-
17270 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20  >nSavepoint--;. 
17280 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
17290 20 49 66 20 69 74 20 69 73 20 61 20 52 45 4c 45   If it is a RELE
172a0 41 53 45 2c 20 74 68 65 6e 20 64 65 73 74 72 6f  ASE, then destro
172b0 79 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  y the savepoint 
172c0 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f  being operated o
172d0 6e 20 0a 20 20 20 20 20 20 2a 2a 20 74 6f 6f 2e  n .      ** too.
172e0 20 49 66 20 69 74 20 69 73 20 61 20 52 4f 4c 4c   If it is a ROLL
172f0 42 41 43 4b 20 54 4f 2c 20 74 68 65 6e 20 73 65  BACK TO, then se
17300 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  t the number of 
17310 64 65 66 65 72 72 65 64 20 0a 20 20 20 20 20 20  deferred .      
17320 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  ** constraint vi
17330 6f 6c 61 74 69 6f 6e 73 20 70 72 65 73 65 6e 74  olations present
17340 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
17350 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 73 74   to the value st
17360 6f 72 65 64 0a 20 20 20 20 20 20 2a 2a 20 77 68  ored.      ** wh
17370 65 6e 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  en the savepoint
17380 20 77 61 73 20 63 72 65 61 74 65 64 2e 20 20 2a   was created.  *
17390 2f 0a 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d  /.      if( p1==
173a0 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
173b0 45 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  E ){.        ass
173c0 65 72 74 28 20 70 53 61 76 65 70 6f 69 6e 74 3d  ert( pSavepoint=
173d0 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20  =db->pSavepoint 
173e0 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70  );.        db->p
173f0 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76  Savepoint = pSav
17400 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20  epoint->pNext;. 
17410 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62         sqlite3Db
17420 46 72 65 65 28 64 62 2c 20 70 53 61 76 65 70 6f  Free(db, pSavepo
17430 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66  int);.        if
17440 28 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  ( !isTransaction
17450 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62   ){.          db
17460 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a  ->nSavepoint--;.
17470 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
17480 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 64  }else{.        d
17490 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
174a0 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e   = pSavepoint->n
174b0 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20  DeferredCons;.  
174c0 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72        db->nDefer
174d0 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 70 53 61  redImmCons = pSa
174e0 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72  vepoint->nDeferr
174f0 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20  edImmCons;.     
17500 20 7d 0a 0a 20 20 20 20 20 20 69 66 28 20 21 69   }..      if( !i
17510 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a  sTransaction ){.
17520 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
17530 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
17540 74 28 64 62 2c 20 70 31 2c 20 69 53 61 76 65 70  t(db, p1, iSavep
17550 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69  oint);.        i
17560 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
17570 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
17580 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
17590 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20    }.    }.  }.. 
175a0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
175b0 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74  code: AutoCommit
175c0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
175d0 2a 2a 20 53 65 74 20 74 68 65 20 64 61 74 61 62  ** Set the datab
175e0 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20  ase auto-commit 
175f0 66 6c 61 67 20 74 6f 20 50 31 20 28 31 20 6f 72  flag to P1 (1 or
17600 20 30 29 2e 20 49 66 20 50 32 20 69 73 20 74 72   0). If P2 is tr
17610 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b  ue, roll.** back
17620 20 61 6e 79 20 63 75 72 72 65 6e 74 6c 79 20 61   any currently a
17630 63 74 69 76 65 20 62 74 72 65 65 20 74 72 61 6e  ctive btree tran
17640 73 61 63 74 69 6f 6e 73 2e 20 49 66 20 74 68 65  sactions. If the
17650 72 65 20 61 72 65 20 61 6e 79 20 61 63 74 69 76  re are any activ
17660 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72 74 20  e.** VMs (apart 
17670 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20  from this one), 
17680 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20  then a ROLLBACK 
17690 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54  fails.  A COMMIT
176a0 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65   fails if.** the
176b0 72 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72  re are active wr
176c0 69 74 69 6e 67 20 56 4d 73 20 6f 72 20 61 63 74  iting VMs or act
176d0 69 76 65 20 56 4d 73 20 74 68 61 74 20 75 73 65  ive VMs that use
176e0 20 73 68 61 72 65 64 20 63 61 63 68 65 2e 0a 2a   shared cache..*
176f0 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
17700 63 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65  ction causes the
17710 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a   VM to halt..*/.
17720 63 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d  case OP_AutoComm
17730 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73 69  it: {.  int desi
17740 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20  redAutoCommit;. 
17750 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a   int iRollback;.
17760 20 20 69 6e 74 20 74 75 72 6e 4f 6e 41 43 3b 0a    int turnOnAC;.
17770 0a 20 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  .  desiredAutoCo
17780 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  mmit = pOp->p1;.
17790 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f    iRollback = pO
177a0 70 2d 3e 70 32 3b 0a 20 20 74 75 72 6e 4f 6e 41  p->p2;.  turnOnA
177b0 43 20 3d 20 64 65 73 69 72 65 64 41 75 74 6f 43  C = desiredAutoC
177c0 6f 6d 6d 69 74 20 26 26 20 21 64 62 2d 3e 61 75  ommit && !db->au
177d0 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 61 73 73 65  toCommit;.  asse
177e0 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  rt( desiredAutoC
177f0 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69  ommit==1 || desi
17800 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  redAutoCommit==0
17810 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65   );.  assert( de
17820 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d  siredAutoCommit=
17830 3d 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d  =1 || iRollback=
17840 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
17850 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65 3e  db->nVdbeActive>
17860 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73  0 );  /* At leas
17870 74 20 74 68 69 73 20 6f 6e 65 20 56 4d 20 69 73  t this one VM is
17880 20 61 63 74 69 76 65 20 2a 2f 0a 20 20 61 73 73   active */.  ass
17890 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
178a0 72 20 29 3b 0a 0a 23 69 66 20 30 0a 20 20 69 66  r );..#if 0.  if
178b0 28 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 69 52  ( turnOnAC && iR
178c0 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e 6e  ollback && db->n
178d0 56 64 62 65 41 63 74 69 76 65 3e 31 20 29 7b 0a  VdbeActive>1 ){.
178e0 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69      /* If this i
178f0 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65  nstruction imple
17900 6d 65 6e 74 73 20 61 20 52 4f 4c 4c 42 41 43 4b  ments a ROLLBACK
17910 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61   and other VMs a
17920 72 65 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20  re.    ** still 
17930 72 75 6e 6e 69 6e 67 2c 20 61 6e 64 20 61 20 74  running, and a t
17940 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63  ransaction is ac
17950 74 69 76 65 2c 20 72 65 74 75 72 6e 20 61 6e 20  tive, return an 
17960 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67  error indicating
17970 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65  .    ** that the
17980 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20   other VMs must 
17990 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20  complete first. 
179a0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69  .    */.    sqli
179b0 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
179c0 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63  >zErrMsg, db, "c
179d0 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74  annot rollback t
179e0 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20  ransaction - ". 
179f0 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74         "SQL stat
17a00 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65  ements in progre
17a10 73 73 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53  ss");.    rc = S
17a20 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65  QLITE_BUSY;.  }e
17a30 6c 73 65 0a 23 65 6e 64 69 66 0a 20 20 69 66 28  lse.#endif.  if(
17a40 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 21 69 52   turnOnAC && !iR
17a50 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e 6e  ollback && db->n
17a60 56 64 62 65 57 72 69 74 65 3e 30 20 29 7b 0a 20  VdbeWrite>0 ){. 
17a70 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e     /* If this in
17a80 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d  struction implem
17a90 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54 20 61 6e  ents a COMMIT an
17aa0 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65 20  d other VMs are 
17ab0 77 72 69 74 69 6e 67 0a 20 20 20 20 2a 2a 20 72  writing.    ** r
17ac0 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69  eturn an error i
17ad0 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20 74  ndicating that t
17ae0 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73  he other VMs mus
17af0 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74  t complete first
17b00 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71  . .    */.    sq
17b10 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
17b20 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
17b30 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 74  "cannot commit t
17b40 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20  ransaction - ". 
17b50 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74         "SQL stat
17b60 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65  ements in progre
17b70 73 73 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53  ss");.    rc = S
17b80 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65  QLITE_BUSY;.  }e
17b90 6c 73 65 20 69 66 28 20 64 65 73 69 72 65 64 41  lse if( desiredA
17ba0 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61  utoCommit!=db->a
17bb0 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20  utoCommit ){.   
17bc0 20 69 66 28 20 69 52 6f 6c 6c 62 61 63 6b 20 29   if( iRollback )
17bd0 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
17be0 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
17bf0 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 73 71  t==1 );.      sq
17c00 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c  lite3RollbackAll
17c10 28 64 62 2c 20 53 51 4c 49 54 45 5f 41 42 4f 52  (db, SQLITE_ABOR
17c20 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20 20  T_ROLLBACK);.   
17c30 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
17c40 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65  t = 1;.    }else
17c50 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74   if( (rc = sqlit
17c60 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c  e3VdbeCheckFk(p,
17c70 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20   1))!=SQLITE_OK 
17c80 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64  ){.      goto vd
17c90 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d  be_return;.    }
17ca0 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e  else{.      db->
17cb0 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38  autoCommit = (u8
17cc0 29 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d  )desiredAutoComm
17cd0 69 74 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71  it;.      if( sq
17ce0 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29  lite3VdbeHalt(p)
17cf0 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b  ==SQLITE_BUSY ){
17d00 0a 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d  .        p->pc =
17d10 20 70 63 3b 0a 20 20 20 20 20 20 20 20 64 62 2d   pc;.        db-
17d20 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75  >autoCommit = (u
17d30 38 29 28 31 2d 64 65 73 69 72 65 64 41 75 74 6f  8)(1-desiredAuto
17d40 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20 20 20  Commit);.       
17d50 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
17d60 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
17d70 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
17d80 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  urn;.      }.   
17d90 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 64   }.    assert( d
17da0 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3d 3d 30  b->nStatement==0
17db0 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43   );.    sqlite3C
17dc0 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28 64  loseSavepoints(d
17dd0 62 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 72  b);.    if( p->r
17de0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
17df0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
17e00 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c 73  E_DONE;.    }els
17e10 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  e{.      rc = SQ
17e20 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
17e30 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f  }.    goto vdbe_
17e40 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b  return;.  }else{
17e50 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
17e60 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
17e70 67 2c 20 64 62 2c 0a 20 20 20 20 20 20 20 20 28  g, db,.        (
17e80 21 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d  !desiredAutoComm
17e90 69 74 29 3f 22 63 61 6e 6e 6f 74 20 73 74 61 72  it)?"cannot star
17ea0 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  t a transaction 
17eb0 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63  within a transac
17ec0 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20 20 20 20  tion":(.        
17ed0 28 69 52 6f 6c 6c 62 61 63 6b 29 3f 22 63 61 6e  (iRollback)?"can
17ee0 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e  not rollback - n
17ef0 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  o transaction is
17f00 20 61 63 74 69 76 65 22 3a 0a 20 20 20 20 20 20   active":.      
17f10 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 61               "ca
17f20 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f  nnot commit - no
17f30 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
17f40 61 63 74 69 76 65 22 29 29 3b 0a 20 20 20 20 20  active"));.     
17f50 20 20 20 20 0a 20 20 20 20 72 63 20 3d 20 53 51      .    rc = SQ
17f60 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a  LITE_ERROR;.  }.
17f70 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
17f80 70 63 6f 64 65 3a 20 54 72 61 6e 73 61 63 74 69  pcode: Transacti
17f90 6f 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50  on P1 P2 P3 P4 P
17fa0 35 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20  5.**.** Begin a 
17fb0 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 64  transaction on d
17fc0 61 74 61 62 61 73 65 20 50 31 20 69 66 20 61 20  atabase P1 if a 
17fd0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
17fe0 6f 74 20 61 6c 72 65 61 64 79 0a 2a 2a 20 61 63  ot already.** ac
17ff0 74 69 76 65 2e 0a 2a 2a 20 49 66 20 50 32 20 69  tive..** If P2 i
18000 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
18010 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63   a write-transac
18020 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2c  tion is started,
18030 20 6f 72 20 69 66 20 61 20 0a 2a 2a 20 72 65 61   or if a .** rea
18040 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  d-transaction is
18050 20 61 6c 72 65 61 64 79 20 61 63 74 69 76 65 2c   already active,
18060 20 69 74 20 69 73 20 75 70 67 72 61 64 65 64 20   it is upgraded 
18070 74 6f 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73  to a write-trans
18080 61 63 74 69 6f 6e 2e 0a 2a 2a 20 49 66 20 50 32  action..** If P2
18090 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61   is zero, then a
180a0 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69 6f   read-transactio
180b0 6e 20 69 73 20 73 74 61 72 74 65 64 2e 0a 2a 2a  n is started..**
180c0 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e  .** P1 is the in
180d0 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62  dex of the datab
180e0 61 73 65 20 66 69 6c 65 20 6f 6e 20 77 68 69 63  ase file on whic
180f0 68 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  h the transactio
18100 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e  n is.** started.
18110 20 20 49 6e 64 65 78 20 30 20 69 73 20 74 68 65    Index 0 is the
18120 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
18130 69 6c 65 20 61 6e 64 20 69 6e 64 65 78 20 31 20  ile and index 1 
18140 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75  is the.** file u
18150 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72  sed for temporar
18160 79 20 74 61 62 6c 65 73 2e 20 20 49 6e 64 69 63  y tables.  Indic
18170 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20  es of 2 or more 
18180 61 72 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20  are used for.** 
18190 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
181a0 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20 77  es..**.** If a w
181b0 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e  rite-transaction
181c0 20 69 73 20 73 74 61 72 74 65 64 20 61 6e 64 20   is started and 
181d0 74 68 65 20 56 64 62 65 2e 75 73 65 73 53 74 6d  the Vdbe.usesStm
181e0 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67 20 69 73  tJournal flag is
181f0 0a 2a 2a 20 74 72 75 65 20 28 74 68 69 73 20 66  .** true (this f
18200 6c 61 67 20 69 73 20 73 65 74 20 69 66 20 74 68  lag is set if th
18210 65 20 56 64 62 65 20 6d 61 79 20 6d 6f 64 69 66  e Vdbe may modif
18220 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  y more than one 
18230 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a 2a 20 74  row and may.** t
18240 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78  hrow an ABORT ex
18250 63 65 70 74 69 6f 6e 29 2c 20 61 20 73 74 61 74  ception), a stat
18260 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
18270 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f 70  n may also be op
18280 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70  ened..** More sp
18290 65 63 69 66 69 63 61 6c 6c 79 2c 20 61 20 73 74  ecifically, a st
182a0 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
182b0 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64 20 69 66  ion is opened if
182c0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  f the database.*
182d0 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  * connection is 
182e0 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74 20 69 6e  currently not in
182f0 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65   autocommit mode
18300 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20 61 72  , or if there ar
18310 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63 74 69 76  e other.** activ
18320 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 41 20  e statements. A 
18330 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
18340 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20 74 68 65  ction allows the
18350 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79   changes made by
18360 20 74 68 69 73 0a 2a 2a 20 56 44 42 45 20 74 6f   this.** VDBE to
18370 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20   be rolled back 
18380 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 77  after an error w
18390 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f  ithout having to
183a0 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a 2a   roll back the.*
183b0 2a 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63  * entire transac
183c0 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65 72 72 6f  tion. If no erro
183d0 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  r is encountered
183e0 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  , the statement 
183f0 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 77  transaction.** w
18400 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ill automaticall
18410 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68  y commit when th
18420 65 20 56 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a  e VDBE halts..**
18430 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65  .** If P5!=0 the
18440 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 61 6c  n this opcode al
18450 73 6f 20 63 68 65 63 6b 73 20 74 68 65 20 73 63  so checks the sc
18460 68 65 6d 61 20 63 6f 6f 6b 69 65 20 61 67 61 69  hema cookie agai
18470 6e 73 74 20 50 33 0a 2a 2a 20 61 6e 64 20 74 68  nst P3.** and th
18480 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61 74  e schema generat
18490 69 6f 6e 20 63 6f 75 6e 74 65 72 20 61 67 61 69  ion counter agai
184a0 6e 73 74 20 50 34 2e 0a 2a 2a 20 54 68 65 20 63  nst P4..** The c
184b0 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 20 69 74  ookie changes it
184c0 73 20 76 61 6c 75 65 20 77 68 65 6e 65 76 65 72  s value whenever
184d0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
184e0 68 65 6d 61 20 63 68 61 6e 67 65 73 2e 0a 2a 2a  hema changes..**
184f0 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20   This operation 
18500 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 63  is used to detec
18510 74 20 77 68 65 6e 20 74 68 61 74 20 74 68 65 20  t when that the 
18520 63 6f 6f 6b 69 65 20 68 61 73 20 63 68 61 6e 67  cookie has chang
18530 65 64 0a 2a 2a 20 61 6e 64 20 74 68 61 74 20 74  ed.** and that t
18540 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65  he current proce
18550 73 73 20 6e 65 65 64 73 20 74 6f 20 72 65 72 65  ss needs to rere
18560 61 64 20 74 68 65 20 73 63 68 65 6d 61 2e 20 20  ad the schema.  
18570 49 66 20 74 68 65 20 73 63 68 65 6d 61 0a 2a 2a  If the schema.**
18580 20 63 6f 6f 6b 69 65 20 69 6e 20 50 33 20 64 69   cookie in P3 di
18590 66 66 65 72 73 20 66 72 6f 6d 20 74 68 65 20 73  ffers from the s
185a0 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 69 6e 20  chema cookie in 
185b0 74 68 65 20 64 61 74 61 62 61 73 65 20 68 65 61  the database hea
185c0 64 65 72 20 6f 72 0a 2a 2a 20 69 66 20 74 68 65  der or.** if the
185d0 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61 74 69   schema generati
185e0 6f 6e 20 63 6f 75 6e 74 65 72 20 69 6e 20 50 34  on counter in P4
185f0 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68   differs from th
18600 65 20 63 75 72 72 65 6e 74 0a 2a 2a 20 67 65 6e  e current.** gen
18610 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2c  eration counter,
18620 20 74 68 65 6e 20 61 6e 20 53 51 4c 49 54 45 5f   then an SQLITE_
18630 53 43 48 45 4d 41 20 65 72 72 6f 72 20 69 73 20  SCHEMA error is 
18640 72 61 69 73 65 64 20 61 6e 64 20 65 78 65 63 75  raised and execu
18650 74 69 6f 6e 0a 2a 2a 20 68 61 6c 74 73 2e 20 20  tion.** halts.  
18660 54 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70  The sqlite3_step
18670 28 29 20 77 72 61 70 70 65 72 20 66 75 6e 63 74  () wrapper funct
18680 69 6f 6e 20 6d 69 67 68 74 20 74 68 65 6e 20 72  ion might then r
18690 65 70 72 65 70 61 72 65 20 74 68 65 0a 2a 2a 20  eprepare the.** 
186a0 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 72 65  statement and re
186b0 72 75 6e 20 69 74 20 66 72 6f 6d 20 74 68 65 20  run it from the 
186c0 62 65 67 69 6e 6e 69 6e 67 2e 0a 2a 2f 0a 63 61  beginning..*/.ca
186d0 73 65 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f  se OP_Transactio
186e0 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a 70 42  n: {.  Btree *pB
186f0 74 3b 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a  t;.  int iMeta;.
18700 20 20 69 6e 74 20 69 47 65 6e 3b 0a 0a 20 20 61    int iGen;..  a
18710 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
18720 64 65 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  der );.  assert(
18730 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
18740 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b  || pOp->p2==0 );
18750 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
18760 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
18770 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
18780 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
18790 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b  ask & (((yDbMask
187a0 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d  )1)<<pOp->p1))!=
187b0 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  0 );.  if( pOp->
187c0 70 32 20 26 26 20 28 64 62 2d 3e 66 6c 61 67 73  p2 && (db->flags
187d0 20 26 20 53 51 4c 49 54 45 5f 51 75 65 72 79 4f   & SQLITE_QueryO
187e0 6e 6c 79 29 21 3d 30 20 29 7b 0a 20 20 20 20 72  nly)!=0 ){.    r
187f0 63 20 3d 20 53 51 4c 49 54 45 5f 52 45 41 44 4f  c = SQLITE_READO
18800 4e 4c 59 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62  NLY;.    goto ab
18810 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
18820 3b 0a 20 20 7d 0a 20 20 70 42 74 20 3d 20 64 62  ;.  }.  pBt = db
18830 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
18840 42 74 3b 0a 0a 20 20 69 66 28 20 70 42 74 20 29  Bt;..  if( pBt )
18850 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
18860 65 33 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e  e3BtreeBeginTran
18870 73 28 70 42 74 2c 20 70 4f 70 2d 3e 70 32 29 3b  s(pBt, pOp->p2);
18880 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
18890 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
188a0 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20    p->pc = pc;.  
188b0 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d      p->rc = rc =
188c0 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
188d0 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
188e0 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20  turn;.    }.    
188f0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
18900 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  K ){.      goto 
18910 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
18920 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69  or;.    }..    i
18930 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 70 2d  f( pOp->p2 && p-
18940 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c  >usesStmtJournal
18950 20 0a 20 20 20 20 20 26 26 20 28 64 62 2d 3e 61   .     && (db->a
18960 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20  utoCommit==0 || 
18970 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31 29  db->nVdbeRead>1)
18980 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 61   .    ){.      a
18990 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
189a0 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74  reeIsInTrans(pBt
189b0 29 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  ) );.      if( p
189c0 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20  ->iStatement==0 
189d0 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
189e0 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e  t( db->nStatemen
189f0 74 3e 3d 30 20 26 26 20 64 62 2d 3e 6e 53 61 76  t>=0 && db->nSav
18a00 65 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20 20 20  epoint>=0 );.   
18a10 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d       db->nStatem
18a20 65 6e 74 2b 2b 3b 20 0a 20 20 20 20 20 20 20 20  ent++; .        
18a30 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 20 3d 20  p->iStatement = 
18a40 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b  db->nSavepoint +
18a50 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3b   db->nStatement;
18a60 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
18a70 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
18a80 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53 41  Savepoint(db, SA
18a90 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 20 70  VEPOINT_BEGIN, p
18aa0 2d 3e 69 53 74 61 74 65 6d 65 6e 74 2d 31 29 3b  ->iStatement-1);
18ab0 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
18ac0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
18ad0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
18ae0 42 74 72 65 65 42 65 67 69 6e 53 74 6d 74 28 70  BtreeBeginStmt(p
18af0 42 74 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e  Bt, p->iStatemen
18b00 74 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  t);.      }..   
18b10 20 20 20 2f 2a 20 53 74 6f 72 65 20 74 68 65 20     /* Store the 
18b20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 6f 66  current value of
18b30 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
18b40 6e 64 6c 65 73 20 64 65 66 65 72 72 65 64 20 63  ndles deferred c
18b50 6f 6e 73 74 72 61 69 6e 74 0a 20 20 20 20 20 20  onstraint.      
18b60 2a 2a 20 63 6f 75 6e 74 65 72 2e 20 49 66 20 74  ** counter. If t
18b70 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  he statement tra
18b80 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64 73 20 74  nsaction needs t
18b90 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
18ba0 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 76  ,.      ** the v
18bb0 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 75  alue of this cou
18bc0 6e 74 65 72 20 6e 65 65 64 73 20 74 6f 20 62 65  nter needs to be
18bd0 20 72 65 73 74 6f 72 65 64 20 74 6f 6f 2e 20 20   restored too.  
18be0 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d  */.      p->nStm
18bf0 74 44 65 66 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e  tDefCons = db->n
18c00 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20  DeferredCons;.  
18c10 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 49      p->nStmtDefI
18c20 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65  mmCons = db->nDe
18c30 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20  ferredImmCons;. 
18c40 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 47 61 74     }..    /* Gat
18c50 68 65 72 20 74 68 65 20 73 63 68 65 6d 61 20 76  her the schema v
18c60 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f  ersion number fo
18c70 72 20 63 68 65 63 6b 69 6e 67 20 2a 2f 0a 20 20  r checking */.  
18c80 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65    sqlite3BtreeGe
18c90 74 4d 65 74 61 28 70 42 74 2c 20 42 54 52 45 45  tMeta(pBt, BTREE
18ca0 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 2c  _SCHEMA_VERSION,
18cb0 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b   (u32 *)&iMeta);
18cc0 0a 20 20 20 20 69 47 65 6e 20 3d 20 64 62 2d 3e  .    iGen = db->
18cd0 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63  aDb[pOp->p1].pSc
18ce0 68 65 6d 61 2d 3e 69 47 65 6e 65 72 61 74 69 6f  hema->iGeneratio
18cf0 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  n;.  }else{.    
18d00 69 47 65 6e 20 3d 20 69 4d 65 74 61 20 3d 20 30  iGen = iMeta = 0
18d10 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
18d20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f  pOp->p5==0 || pO
18d30 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
18d40 54 33 32 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  T32 );.  if( pOp
18d50 2d 3e 70 35 20 26 26 20 28 69 4d 65 74 61 21 3d  ->p5 && (iMeta!=
18d60 70 4f 70 2d 3e 70 33 20 7c 7c 20 69 47 65 6e 21  pOp->p3 || iGen!
18d70 3d 70 4f 70 2d 3e 70 34 2e 69 29 20 29 7b 0a 20  =pOp->p4.i) ){. 
18d80 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
18d90 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29  (db, p->zErrMsg)
18da0 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67  ;.    p->zErrMsg
18db0 20 3d 20 73 71 6c 69 74 65 33 44 62 53 74 72 44   = sqlite3DbStrD
18dc0 75 70 28 64 62 2c 20 22 64 61 74 61 62 61 73 65  up(db, "database
18dd0 20 73 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e   schema has chan
18de0 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66  ged");.    /* If
18df0 20 74 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b   the schema-cook
18e00 69 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ie from the data
18e10 62 61 73 65 20 66 69 6c 65 20 6d 61 74 63 68 65  base file matche
18e20 73 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20  s the cookie .  
18e30 20 20 2a 2a 20 73 74 6f 72 65 64 20 77 69 74 68    ** stored with
18e40 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72   the in-memory r
18e50 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
18e60 20 74 68 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a   the schema, do.
18e70 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61      ** not reloa
18e80 64 20 74 68 65 20 73 63 68 65 6d 61 20 66 72 6f  d the schema fro
18e90 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  m the database f
18ea0 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20  ile..    **.    
18eb0 2a 2a 20 49 66 20 76 69 72 74 75 61 6c 2d 74 61  ** If virtual-ta
18ec0 62 6c 65 73 20 61 72 65 20 69 6e 20 75 73 65 2c  bles are in use,
18ed0 20 74 68 69 73 20 69 73 20 6e 6f 74 20 6a 75 73   this is not jus
18ee0 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f  t an optimizatio
18ef0 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c  n..    ** Often,
18f00 20 76 2d 74 61 62 6c 65 73 20 73 74 6f 72 65 20   v-tables store 
18f10 74 68 65 69 72 20 64 61 74 61 20 69 6e 20 6f 74  their data in ot
18f20 68 65 72 20 53 51 4c 69 74 65 20 74 61 62 6c 65  her SQLite table
18f30 73 2c 20 77 68 69 63 68 0a 20 20 20 20 2a 2a 20  s, which.    ** 
18f40 61 72 65 20 71 75 65 72 69 65 64 20 66 72 6f 6d  are queried from
18f50 20 77 69 74 68 69 6e 20 78 4e 65 78 74 28 29 20   within xNext() 
18f60 61 6e 64 20 6f 74 68 65 72 20 76 2d 74 61 62 6c  and other v-tabl
18f70 65 20 6d 65 74 68 6f 64 73 20 75 73 69 6e 67 0a  e methods using.
18f80 20 20 20 20 2a 2a 20 70 72 65 70 61 72 65 64 20      ** prepared 
18f90 71 75 65 72 69 65 73 2e 20 49 66 20 73 75 63 68  queries. If such
18fa0 20 61 20 71 75 65 72 79 20 69 73 20 6f 75 74 2d   a query is out-
18fb0 6f 66 2d 64 61 74 65 2c 20 77 65 20 64 6f 20 6e  of-date, we do n
18fc0 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a  ot want to.    *
18fd0 2a 20 64 69 73 63 61 72 64 20 74 68 65 20 64 61  * discard the da
18fe0 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20 61  tabase schema, a
18ff0 73 20 74 68 65 20 75 73 65 72 20 63 6f 64 65 20  s the user code 
19000 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65  implementing the
19010 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20  .    ** v-table 
19020 77 6f 75 6c 64 20 68 61 76 65 20 74 6f 20 62 65  would have to be
19030 20 72 65 61 64 79 20 66 6f 72 20 74 68 65 20 73   ready for the s
19040 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
19050 63 74 75 72 65 20 69 74 73 65 6c 66 0a 20 20 20  cture itself.   
19060 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61 6c 69   ** to be invali
19070 64 61 74 65 64 20 77 68 65 6e 65 76 65 72 20 73  dated whenever s
19080 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69 73  qlite3_step() is
19090 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74   called from wit
190a0 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d  hin .    ** a v-
190b0 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20  table method..  
190c0 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d    */.    if( db-
190d0 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53  >aDb[pOp->p1].pS
190e0 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f  chema->schema_co
190f0 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20  okie!=iMeta ){. 
19100 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65       sqlite3Rese
19110 74 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c 20 70  tOneSchema(db, p
19120 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 20  Op->p1);.    }. 
19130 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20     p->expired = 
19140 31 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  1;.    rc = SQLI
19150 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20  TE_SCHEMA;.  }. 
19160 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
19170 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f 6b 69 65  code: ReadCookie
19180 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
19190 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b 69 65 20  .** Read cookie 
191a0 6e 75 6d 62 65 72 20 50 33 20 66 72 6f 6d 20 64  number P3 from d
191b0 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 77  atabase P1 and w
191c0 72 69 74 65 20 69 74 20 69 6e 74 6f 20 72 65 67  rite it into reg
191d0 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 50 33 3d  ister P2..** P3=
191e0 3d 31 20 69 73 20 74 68 65 20 73 63 68 65 6d 61  =1 is the schema
191f0 20 76 65 72 73 69 6f 6e 2e 20 20 50 33 3d 3d 32   version.  P3==2
19200 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
19210 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d   format..** P3==
19220 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65  3 is the recomme
19230 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68 65  nded pager cache
19240 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f   size, and so fo
19250 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a  rth.  P1==0 is.*
19260 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  * the main datab
19270 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d  ase file and P1=
19280 3d 31 20 69 73 20 74 68 65 20 64 61 74 61 62 61  =1 is the databa
19290 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20  se file used to 
192a0 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61  store.** tempora
192b0 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a  ry tables..**.**
192c0 20 54 68 65 72 65 20 6d 75 73 74 20 62 65 20 61   There must be a
192d0 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74 68   read-lock on th
192e0 65 20 64 61 74 61 62 61 73 65 20 28 65 69 74 68  e database (eith
192f0 65 72 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  er a transaction
19300 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73 74 61 72  .** must be star
19310 74 65 64 20 6f 72 20 74 68 65 72 65 20 6d 75 73  ted or there mus
19320 74 20 62 65 20 61 6e 20 6f 70 65 6e 20 63 75 72  t be an open cur
19330 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a 2a 20 65  sor) before.** e
19340 78 65 63 75 74 69 6e 67 20 74 68 69 73 20 69 6e  xecuting this in
19350 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
19360 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65  se OP_ReadCookie
19370 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
19380 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
19390 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d  ease */.  int iM
193a0 65 74 61 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a  eta;.  int iDb;.
193b0 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a    int iCookie;..
193c0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
193d0 52 65 61 64 65 72 20 29 3b 0a 20 20 69 44 62 20  Reader );.  iDb 
193e0 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f  = pOp->p1;.  iCo
193f0 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  okie = pOp->p3;.
19400 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
19410 33 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45  3<SQLITE_N_BTREE
19420 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72  _META );.  asser
19430 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62  t( iDb>=0 && iDb
19440 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
19450 73 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 44  sert( db->aDb[iD
19460 62 5d 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61  b].pBt!=0 );.  a
19470 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
19480 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73  Mask & (((yDbMas
19490 6b 29 31 29 3c 3c 69 44 62 29 29 21 3d 30 20 29  k)1)<<iDb))!=0 )
194a0 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65  ;..  sqlite3Btre
194b0 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62  eGetMeta(db->aDb
194c0 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b  [iDb].pBt, iCook
194d0 69 65 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74  ie, (u32 *)&iMet
194e0 61 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  a);.  pOut->u.i 
194f0 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b  = iMeta;.  break
19500 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
19510 53 65 74 43 6f 6f 6b 69 65 20 50 31 20 50 32 20  SetCookie P1 P2 
19520 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69  P3 * *.**.** Wri
19530 74 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  te the content o
19540 66 20 72 65 67 69 73 74 65 72 20 50 33 20 28 69  f register P3 (i
19550 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61 6e  nterpreted as an
19560 20 69 6e 74 65 67 65 72 29 0a 2a 2a 20 69 6e 74   integer).** int
19570 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20  o cookie number 
19580 50 32 20 6f 66 20 64 61 74 61 62 61 73 65 20 50  P2 of database P
19590 31 2e 20 20 50 32 3d 3d 31 20 69 73 20 74 68 65  1.  P2==1 is the
195a0 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e   schema version.
195b0 20 20 0a 2a 2a 20 50 32 3d 3d 32 20 69 73 20 74    .** P2==2 is t
195c0 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d  he database form
195d0 61 74 2e 20 50 32 3d 3d 33 20 69 73 20 74 68 65  at. P2==3 is the
195e0 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67   recommended pag
195f0 65 72 20 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a  er cache .** siz
19600 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e  e, and so forth.
19610 20 20 50 31 3d 3d 30 20 69 73 20 74 68 65 20 6d    P1==0 is the m
19620 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
19630 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74  e and P1==1 is t
19640 68 65 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  he .** database 
19650 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f  file used to sto
19660 72 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  re temporary tab
19670 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61  les..**.** A tra
19680 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65  nsaction must be
19690 20 73 74 61 72 74 65 64 20 62 65 66 6f 72 65 20   started before 
196a0 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20 6f  executing this o
196b0 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  pcode..*/.case O
196c0 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 20 20  P_SetCookie: {  
196d0 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20       /* in3 */. 
196e0 20 44 62 20 2a 70 44 62 3b 0a 20 20 61 73 73 65   Db *pDb;.  asse
196f0 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49  rt( pOp->p2<SQLI
19700 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20  TE_N_BTREE_META 
19710 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
19720 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
19730 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
19740 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
19750 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61  eMask & (((yDbMa
19760 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29  sk)1)<<pOp->p1))
19770 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
19780 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
19790 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e  );.  pDb = &db->
197a0 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  aDb[pOp->p1];.  
197b0 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74  assert( pDb->pBt
197c0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
197d0 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75   sqlite3SchemaMu
197e0 74 65 78 48 65 6c 64 28 64 62 2c 20 70 4f 70 2d  texHeld(db, pOp-
197f0 3e 70 31 2c 20 30 29 20 29 3b 0a 20 20 70 49 6e  >p1, 0) );.  pIn
19800 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
19810 33 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  3];.  sqlite3Vdb
19820 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
19830 49 6e 33 29 3b 0a 20 20 2f 2a 20 53 65 65 20 6e  In3);.  /* See n
19840 6f 74 65 20 61 62 6f 75 74 20 69 6e 64 65 78 20  ote about index 
19850 73 68 69 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52  shifting on OP_R
19860 65 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72  eadCookie */.  r
19870 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
19880 55 70 64 61 74 65 4d 65 74 61 28 70 44 62 2d 3e  UpdateMeta(pDb->
19890 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 28 69  pBt, pOp->p2, (i
198a0 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20  nt)pIn3->u.i);. 
198b0 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54   if( pOp->p2==BT
198c0 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49  REE_SCHEMA_VERSI
198d0 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65  ON ){.    /* Whe
198e0 6e 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f  n the schema coo
198f0 6b 69 65 20 63 68 61 6e 67 65 73 2c 20 72 65 63  kie changes, rec
19900 6f 72 64 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b  ord the new cook
19910 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f  ie internally */
19920 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d  .    pDb->pSchem
19930 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65  a->schema_cookie
19940 20 3d 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e   = (int)pIn3->u.
19950 69 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73  i;.    db->flags
19960 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65 72   |= SQLITE_Inter
19970 6e 43 68 61 6e 67 65 73 3b 0a 20 20 7d 65 6c 73  nChanges;.  }els
19980 65 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42  e if( pOp->p2==B
19990 54 52 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54  TREE_FILE_FORMAT
199a0 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72   ){.    /* Recor
199b0 64 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65  d changes in the
199c0 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a   file format */.
199d0 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61      pDb->pSchema
199e0 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20  ->file_format = 
199f0 28 75 38 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20  (u8)pIn3->u.i;. 
19a00 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31   }.  if( pOp->p1
19a10 3d 3d 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e  ==1 ){.    /* In
19a20 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 70 72 65  validate all pre
19a30 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73  pared statements
19a40 20 77 68 65 6e 65 76 65 72 20 74 68 65 20 54 45   whenever the TE
19a50 4d 50 20 64 61 74 61 62 61 73 65 0a 20 20 20 20  MP database.    
19a60 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 63 68 61  ** schema is cha
19a70 6e 67 65 64 2e 20 20 54 69 63 6b 65 74 20 23 31  nged.  Ticket #1
19a80 36 34 34 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74  644 */.    sqlit
19a90 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64  e3ExpirePrepared
19aa0 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a  Statements(db);.
19ab0 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d      p->expired =
19ac0 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   0;.  }.  break;
19ad0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
19ae0 70 65 6e 52 65 61 64 20 50 31 20 50 32 20 50 33  penRead P1 P2 P3
19af0 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
19b00 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d  is: root=P2 iDb=
19b10 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20  P3.**.** Open a 
19b20 72 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72  read-only cursor
19b30 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73   for the databas
19b40 65 20 74 61 62 6c 65 20 77 68 6f 73 65 20 72 6f  e table whose ro
19b50 6f 74 20 70 61 67 65 20 69 73 0a 2a 2a 20 50 32  ot page is.** P2
19b60 20 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 66   in a database f
19b70 69 6c 65 2e 20 20 54 68 65 20 64 61 74 61 62 61  ile.  The databa
19b80 73 65 20 66 69 6c 65 20 69 73 20 64 65 74 65 72  se file is deter
19b90 6d 69 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a  mined by P3. .**
19ba0 20 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65   P3==0 means the
19bb0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20   main database, 
19bc0 50 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65 20  P3==1 means the 
19bd0 64 61 74 61 62 61 73 65 20 75 73 65 64 20 66 6f  database used fo
19be0 72 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20  r .** temporary 
19bf0 74 61 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31  tables, and P3>1
19c00 20 6d 65 61 6e 73 20 75 73 65 64 20 74 68 65 20   means used the 
19c10 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 61 74  corresponding at
19c20 74 61 63 68 65 64 0a 2a 2a 20 64 61 74 61 62 61  tached.** databa
19c30 73 65 2e 20 20 47 69 76 65 20 74 68 65 20 6e 65  se.  Give the ne
19c40 77 20 63 75 72 73 6f 72 20 61 6e 20 69 64 65 6e  w cursor an iden
19c50 74 69 66 69 65 72 20 6f 66 20 50 31 2e 20 20 54  tifier of P1.  T
19c60 68 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20  he P1.** values 
19c70 6e 65 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74  need not be cont
19c80 69 67 75 6f 75 73 20 62 75 74 20 61 6c 6c 20 50  iguous but all P
19c90 31 20 76 61 6c 75 65 73 20 73 68 6f 75 6c 64 20  1 values should 
19ca0 62 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72  be small integer
19cb0 73 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20 65  s..** It is an e
19cc0 72 72 6f 72 20 66 6f 72 20 50 31 20 74 6f 20 62  rror for P1 to b
19cd0 65 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a  e negative..**.*
19ce0 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20  * If P5!=0 then 
19cf0 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  use the content 
19d00 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20 61  of register P2 a
19d10 73 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 2c  s the root page,
19d20 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 76 61 6c 75   not.** the valu
19d30 65 20 6f 66 20 50 32 20 69 74 73 65 6c 66 2e 0a  e of P2 itself..
19d40 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 69 6c 6c  **.** There will
19d50 20 62 65 20 61 20 72 65 61 64 20 6c 6f 63 6b 20   be a read lock 
19d60 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
19d70 77 68 65 6e 65 76 65 72 20 74 68 65 72 65 20 69  whenever there i
19d80 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75 72  s an.** open cur
19d90 73 6f 72 2e 20 20 49 66 20 74 68 65 20 64 61 74  sor.  If the dat
19da0 61 62 61 73 65 20 77 61 73 20 75 6e 6c 6f 63 6b  abase was unlock
19db0 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73  ed prior to this
19dc0 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20   instruction.** 
19dd0 74 68 65 6e 20 61 20 72 65 61 64 20 6c 6f 63 6b  then a read lock
19de0 20 69 73 20 61 63 71 75 69 72 65 64 20 61 73 20   is acquired as 
19df0 70 61 72 74 20 6f 66 20 74 68 69 73 20 69 6e 73  part of this ins
19e00 74 72 75 63 74 69 6f 6e 2e 20 20 41 20 72 65 61  truction.  A rea
19e10 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73  d.** lock allows
19e20 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 65 73   other processes
19e30 20 74 6f 20 72 65 61 64 20 74 68 65 20 64 61 74   to read the dat
19e40 61 62 61 73 65 20 62 75 74 20 70 72 6f 68 69 62  abase but prohib
19e50 69 74 73 0a 2a 2a 20 61 6e 79 20 6f 74 68 65 72  its.** any other
19e60 20 70 72 6f 63 65 73 73 20 66 72 6f 6d 20 6d 6f   process from mo
19e70 64 69 66 79 69 6e 67 20 74 68 65 20 64 61 74 61  difying the data
19e80 62 61 73 65 2e 20 20 54 68 65 20 72 65 61 64 20  base.  The read 
19e90 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72 65 6c 65 61  lock is.** relea
19ea0 73 65 64 20 77 68 65 6e 20 61 6c 6c 20 63 75 72  sed when all cur
19eb0 73 6f 72 73 20 61 72 65 20 63 6c 6f 73 65 64 2e  sors are closed.
19ec0 20 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75    If this instru
19ed0 63 74 69 6f 6e 20 61 74 74 65 6d 70 74 73 0a 2a  ction attempts.*
19ee0 2a 20 74 6f 20 67 65 74 20 61 20 72 65 61 64 20  * to get a read 
19ef0 6c 6f 63 6b 20 62 75 74 20 66 61 69 6c 73 2c 20  lock but fails, 
19f00 74 68 65 20 73 63 72 69 70 74 20 74 65 72 6d 69  the script termi
19f10 6e 61 74 65 73 20 77 69 74 68 20 61 6e 0a 2a 2a  nates with an.**
19f20 20 53 51 4c 49 54 45 5f 42 55 53 59 20 65 72 72   SQLITE_BUSY err
19f30 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54  or code..**.** T
19f40 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20  he P4 value may 
19f50 62 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74  be either an int
19f60 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20  eger (P4_INT32) 
19f70 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a  or a pointer to.
19f80 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72  ** a KeyInfo str
19f90 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e  ucture (P4_KEYIN
19fa0 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20  FO). If it is a 
19fb0 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79  pointer to a Key
19fc0 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75  Info .** structu
19fd0 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74  re, then said st
19fe0 72 75 63 74 75 72 65 20 64 65 66 69 6e 65 73 20  ructure defines 
19ff0 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20  the content and 
1a000 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65  collating .** se
1a010 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e  quence of the in
1a020 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64  dex being opened
1a030 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20  . Otherwise, if 
1a040 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  P4 is an integer
1a050 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69   .** value, it i
1a060 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d  s set to the num
1a070 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
1a080 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a  n the table..**.
1a090 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e  ** See also Open
1a0a0 57 72 69 74 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  Write..*/./* Opc
1a0b0 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20 50  ode: OpenWrite P
1a0c0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
1a0d0 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d   Synopsis: root=
1a0e0 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20  P2 iDb=P3.**.** 
1a0f0 4f 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74  Open a read/writ
1a100 65 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50  e cursor named P
1a110 31 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f  1 on the table o
1a120 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f  r index whose ro
1a130 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32  ot.** page is P2
1a140 2e 20 20 4f 72 20 69 66 20 50 35 21 3d 30 20 75  .  Or if P5!=0 u
1a150 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  se the content o
1a160 66 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  f register P2 to
1a170 20 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f   find the.** roo
1a180 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  t page..**.** Th
1a190 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62  e P4 value may b
1a1a0 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65  e either an inte
1a1b0 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f  ger (P4_INT32) o
1a1c0 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a  r a pointer to.*
1a1d0 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75  * a KeyInfo stru
1a1e0 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46  cture (P4_KEYINF
1a1f0 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70  O). If it is a p
1a200 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49  ointer to a KeyI
1a210 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72  nfo .** structur
1a220 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72  e, then said str
1a230 75 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74  ucture defines t
1a240 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63  he content and c
1a250 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71  ollating .** seq
1a260 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64  uence of the ind
1a270 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e  ex being opened.
1a280 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50   Otherwise, if P
1a290 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  4 is an integer 
1a2a0 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73  .** value, it is
1a2b0 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62   set to the numb
1a2c0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
1a2d0 20 74 68 65 20 74 61 62 6c 65 2c 20 6f 72 20 74   the table, or t
1a2e0 6f 20 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73 74  o the.** largest
1a2f0 20 69 6e 64 65 78 20 6f 66 20 61 6e 79 20 63 6f   index of any co
1a300 6c 75 6d 6e 20 6f 66 20 74 68 65 20 74 61 62 6c  lumn of the tabl
1a310 65 20 74 68 61 74 20 69 73 20 61 63 74 75 61 6c  e that is actual
1a320 6c 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  ly used..**.** T
1a330 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
1a340 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
1a350 4f 70 65 6e 52 65 61 64 20 65 78 63 65 70 74 20  OpenRead except 
1a360 74 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74 68  that it opens th
1a370 65 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72  e cursor.** in r
1a380 65 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e 20  ead/write mode. 
1a390 20 46 6f 72 20 61 20 67 69 76 65 6e 20 74 61 62   For a given tab
1a3a0 6c 65 2c 20 74 68 65 72 65 20 63 61 6e 20 62 65  le, there can be
1a3b0 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65 61   one or more rea
1a3c0 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f 72  d-only.** cursor
1a3d0 73 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 65  s or a single re
1a3e0 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20  ad/write cursor 
1a3f0 62 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a  but not both..**
1a400 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65  .** See also Ope
1a410 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  nRead..*/.case O
1a420 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73 65  P_OpenRead:.case
1a430 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a 20 7b   OP_OpenWrite: {
1a440 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20  .  int nField;. 
1a450 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
1a460 66 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20  fo;.  int p2;.  
1a470 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 77  int iDb;.  int w
1a480 72 46 6c 61 67 3b 0a 20 20 42 74 72 65 65 20 2a  rFlag;.  Btree *
1a490 70 58 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  pX;.  VdbeCursor
1a4a0 20 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a 70 44   *pCur;.  Db *pD
1a4b0 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 28 70  b;..  assert( (p
1a4c0 4f 70 2d 3e 70 35 26 28 4f 50 46 4c 41 47 5f 50  Op->p5&(OPFLAG_P
1a4d0 32 49 53 52 45 47 7c 4f 50 46 4c 41 47 5f 42 55  2ISREG|OPFLAG_BU
1a4e0 4c 4b 43 53 52 29 29 3d 3d 70 4f 70 2d 3e 70 35  LKCSR))==pOp->p5
1a4f0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1a500 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70  p->opcode==OP_Op
1a510 65 6e 57 72 69 74 65 20 7c 7c 20 70 4f 70 2d 3e  enWrite || pOp->
1a520 70 35 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  p5==0 );.  asser
1a530 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
1a540 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1a550 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65  ->opcode==OP_Ope
1a560 6e 52 65 61 64 20 7c 7c 20 70 2d 3e 72 65 61 64  nRead || p->read
1a570 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 69 66  Only==0 );..  if
1a580 28 20 70 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a  ( p->expired ){.
1a590 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
1a5a0 41 42 4f 52 54 3b 0a 20 20 20 20 62 72 65 61 6b  ABORT;.    break
1a5b0 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20  ;.  }..  nField 
1a5c0 3d 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20  = 0;.  pKeyInfo 
1a5d0 3d 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d  = 0;.  p2 = pOp-
1a5e0 3e 70 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70  >p2;.  iDb = pOp
1a5f0 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p3;.  assert( 
1a600 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62  iDb>=0 && iDb<db
1a610 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
1a620 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
1a630 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29   & (((yDbMask)1)
1a640 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a 20 20  <<iDb))!=0 );.  
1a650 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69  pDb = &db->aDb[i
1a660 44 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d  Db];.  pX = pDb-
1a670 3e 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20  >pBt;.  assert( 
1a680 70 58 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70  pX!=0 );.  if( p
1a690 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f  Op->opcode==OP_O
1a6a0 70 65 6e 57 72 69 74 65 20 29 7b 0a 20 20 20 20  penWrite ){.    
1a6b0 77 72 46 6c 61 67 20 3d 20 31 3b 0a 20 20 20 20  wrFlag = 1;.    
1a6c0 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53  assert( sqlite3S
1a6d0 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64  chemaMutexHeld(d
1a6e0 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20  b, iDb, 0) );.  
1a6f0 20 20 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65    if( pDb->pSche
1a700 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20  ma->file_format 
1a710 3c 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c  < p->minWriteFil
1a720 65 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20  eFormat ){.     
1a730 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65   p->minWriteFile
1a740 46 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53  Format = pDb->pS
1a750 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d  chema->file_form
1a760 61 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  at;.    }.  }els
1a770 65 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20  e{.    wrFlag = 
1a780 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  0;.  }.  if( pOp
1a790 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 32  ->p5 & OPFLAG_P2
1a7a0 49 53 52 45 47 20 29 7b 0a 20 20 20 20 61 73 73  ISREG ){.    ass
1a7b0 65 72 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 20  ert( p2>0 );.   
1a7c0 20 61 73 73 65 72 74 28 20 70 32 3c 3d 28 70 2d   assert( p2<=(p-
1a7d0 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
1a7e0 29 20 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20  ) );.    pIn2 = 
1a7f0 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61  &aMem[p2];.    a
1a800 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
1a810 64 28 70 49 6e 32 29 20 29 3b 0a 20 20 20 20 61  d(pIn2) );.    a
1a820 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c  ssert( (pIn2->fl
1a830 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d  ags & MEM_Int)!=
1a840 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 );.    sqlite3
1a850 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
1a860 79 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 32 20  y(pIn2);.    p2 
1a870 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69  = (int)pIn2->u.i
1a880 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 70 32 20  ;.    /* The p2 
1a890 76 61 6c 75 65 20 61 6c 77 61 79 73 20 63 6f 6d  value always com
1a8a0 65 73 20 66 72 6f 6d 20 61 20 70 72 69 6f 72 20  es from a prior 
1a8b0 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 6f  OP_CreateTable o
1a8c0 70 63 6f 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a  pcode and.    **
1a8d0 20 74 68 61 74 20 6f 70 63 6f 64 65 20 77 69 6c   that opcode wil
1a8e0 6c 20 61 6c 77 61 79 73 20 73 65 74 20 74 68 65  l always set the
1a8f0 20 70 32 20 76 61 6c 75 65 20 74 6f 20 32 20 6f   p2 value to 2 o
1a900 72 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65 20 66  r more or else f
1a910 61 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74  ail..    ** If t
1a920 68 65 72 65 20 77 65 72 65 20 61 20 66 61 69 6c  here were a fail
1a930 75 72 65 2c 20 74 68 65 20 70 72 65 70 61 72 65  ure, the prepare
1a940 64 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c  d statement woul
1a950 64 20 68 61 76 65 20 68 61 6c 74 65 64 0a 20 20  d have halted.  
1a960 20 20 2a 2a 20 62 65 66 6f 72 65 20 72 65 61 63    ** before reac
1a970 68 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75  hing this instru
1a980 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 69 66  ction. */.    if
1a990 28 20 4e 45 56 45 52 28 70 32 3c 32 29 20 29 20  ( NEVER(p2<2) ) 
1a9a0 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
1a9b0 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
1a9c0 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  ;.      goto abo
1a9d0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1a9e0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28  .    }.  }.  if(
1a9f0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1aa00 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20  _KEYINFO ){.    
1aa10 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
1aa20 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  p4.pKeyInfo;.   
1aa30 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
1aa40 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20  o->enc==ENC(db) 
1aa50 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
1aa60 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20  KeyInfo->db==db 
1aa70 29 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20  );.    nField = 
1aa80 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64  pKeyInfo->nField
1aa90 2b 70 4b 65 79 49 6e 66 6f 2d 3e 6e 58 46 69 65  +pKeyInfo->nXFie
1aaa0 6c 64 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ld;.  }else if( 
1aab0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1aac0 49 4e 54 33 32 20 29 7b 0a 20 20 20 20 6e 46 69  INT32 ){.    nFi
1aad0 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  eld = pOp->p4.i;
1aae0 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
1aaf0 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61  Op->p1>=0 );.  a
1ab00 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 3d 30  ssert( nField>=0
1ab10 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
1ab20 6e 46 69 65 6c 64 3d 3d 30 20 29 3b 20 20 2f 2a  nField==0 );  /*
1ab30 20 54 61 62 6c 65 20 77 69 74 68 20 49 4e 54 45   Table with INTE
1ab40 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20  GER PRIMARY KEY 
1ab50 61 6e 64 20 6e 6f 74 68 69 6e 67 20 65 6c 73 65  and nothing else
1ab60 20 2a 2f 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c   */.  pCur = all
1ab70 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70  ocateCursor(p, p
1ab80 4f 70 2d 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20  Op->p1, nField, 
1ab90 69 44 62 2c 20 31 29 3b 0a 20 20 69 66 28 20 70  iDb, 1);.  if( p
1aba0 43 75 72 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  Cur==0 ) goto no
1abb0 5f 6d 65 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e 75  _mem;.  pCur->nu
1abc0 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 75  llRow = 1;.  pCu
1abd0 72 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 31  r->isOrdered = 1
1abe0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
1abf0 42 74 72 65 65 43 75 72 73 6f 72 28 70 58 2c 20  BtreeCursor(pX, 
1ac00 70 32 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65 79  p2, wrFlag, pKey
1ac10 49 6e 66 6f 2c 20 70 43 75 72 2d 3e 70 43 75 72  Info, pCur->pCur
1ac20 73 6f 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b  sor);.  pCur->pK
1ac30 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66  eyInfo = pKeyInf
1ac40 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46  o;.  assert( OPF
1ac50 4c 41 47 5f 42 55 4c 4b 43 53 52 3d 3d 42 54 52  LAG_BULKCSR==BTR
1ac60 45 45 5f 42 55 4c 4b 4c 4f 41 44 20 29 3b 0a 20  EE_BULKLOAD );. 
1ac70 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
1ac80 73 6f 72 48 69 6e 74 73 28 70 43 75 72 2d 3e 70  sorHints(pCur->p
1ac90 43 75 72 73 6f 72 2c 20 28 70 4f 70 2d 3e 70 35  Cursor, (pOp->p5
1aca0 20 26 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53   & OPFLAG_BULKCS
1acb0 52 29 29 3b 0a 0a 20 20 2f 2a 20 53 69 6e 63 65  R));..  /* Since
1acc0 20 69 74 20 70 65 72 66 6f 72 6d 73 20 6e 6f 20   it performs no 
1acd0 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
1ace0 6e 20 6f 72 20 49 4f 2c 20 74 68 65 20 6f 6e 6c  n or IO, the onl
1acf0 79 20 76 61 6c 75 65 20 74 68 61 74 0a 20 20 2a  y value that.  *
1ad00 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  * sqlite3BtreeCu
1ad10 72 73 6f 72 28 29 20 6d 61 79 20 72 65 74 75 72  rsor() may retur
1ad20 6e 20 69 73 20 53 51 4c 49 54 45 5f 4f 4b 2e 20  n is SQLITE_OK. 
1ad30 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d  */.  assert( rc=
1ad40 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a 20  =SQLITE_OK );.. 
1ad50 20 2f 2a 20 53 65 74 20 74 68 65 20 56 64 62 65   /* Set the Vdbe
1ad60 43 75 72 73 6f 72 2e 69 73 54 61 62 6c 65 20 76  Cursor.isTable v
1ad70 61 72 69 61 62 6c 65 2e 20 50 72 65 76 69 6f 75  ariable. Previou
1ad80 73 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 20 20  s versions of.  
1ad90 2a 2a 20 53 51 4c 69 74 65 20 75 73 65 64 20 74  ** SQLite used t
1ada0 6f 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 72  o check if the r
1adb0 6f 6f 74 2d 70 61 67 65 20 66 6c 61 67 73 20 77  oot-page flags w
1adc0 65 72 65 20 73 61 6e 65 20 61 74 20 74 68 69 73  ere sane at this
1add0 20 70 6f 69 6e 74 0a 20 20 2a 2a 20 61 6e 64 20   point.  ** and 
1ade0 72 65 70 6f 72 74 20 64 61 74 61 62 61 73 65 20  report database 
1adf0 63 6f 72 72 75 70 74 69 6f 6e 20 69 66 20 74 68  corruption if th
1ae00 65 79 20 77 65 72 65 20 6e 6f 74 2c 20 62 75 74  ey were not, but
1ae10 20 74 68 69 73 20 63 68 65 63 6b 20 68 61 73 0a   this check has.
1ae20 20 20 2a 2a 20 73 69 6e 63 65 20 6d 6f 76 65 64    ** since moved
1ae30 20 69 6e 74 6f 20 74 68 65 20 62 74 72 65 65 20   into the btree 
1ae40 6c 61 79 65 72 2e 20 20 2a 2f 20 20 0a 20 20 70  layer.  */  .  p
1ae50 43 75 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70  Cur->isTable = p
1ae60 4f 70 2d 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b  Op->p4type!=P4_K
1ae70 45 59 49 4e 46 4f 3b 0a 20 20 62 72 65 61 6b 3b  EYINFO;.  break;
1ae80 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
1ae90 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 50 31 20  penEphemeral P1 
1aea0 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 20 53 79  P2 * P4 P5.** Sy
1aeb0 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d  nopsis: nColumn=
1aec0 50 32 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20  P2.**.** Open a 
1aed0 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20 74 6f  new cursor P1 to
1aee0 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62   a transient tab
1aef0 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f  le..** The curso
1af00 72 20 69 73 20 61 6c 77 61 79 73 20 6f 70 65 6e  r is always open
1af10 65 64 20 72 65 61 64 2f 77 72 69 74 65 20 65 76  ed read/write ev
1af20 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61  en if .** the ma
1af30 69 6e 20 64 61 74 61 62 61 73 65 20 69 73 20 72  in database is r
1af40 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 65  ead-only.  The e
1af50 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 74 61 62 6c  phemeral.** tabl
1af60 65 20 69 73 20 64 65 6c 65 74 65 64 20 61 75 74  e is deleted aut
1af70 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e 20  omatically when 
1af80 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 6c  the cursor is cl
1af90 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69  osed..**.** P2 i
1afa0 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
1afb0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 65  columns in the e
1afc0 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 2e 0a  phemeral table..
1afd0 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 70 6f  ** The cursor po
1afe0 69 6e 74 73 20 74 6f 20 61 20 42 54 72 65 65 20  ints to a BTree 
1aff0 74 61 62 6c 65 20 69 66 20 50 34 3d 3d 30 20 61  table if P4==0 a
1b000 6e 64 20 74 6f 20 61 20 42 54 72 65 65 20 69 6e  nd to a BTree in
1b010 64 65 78 0a 2a 2a 20 69 66 20 50 34 20 69 73 20  dex.** if P4 is 
1b020 6e 6f 74 20 30 2e 20 20 49 66 20 50 34 20 69 73  not 0.  If P4 is
1b030 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f   not NULL, it po
1b040 69 6e 74 73 20 74 6f 20 61 20 4b 65 79 49 6e 66  ints to a KeyInf
1b050 6f 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 74  o structure.** t
1b060 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 20  hat defines the 
1b070 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73 20 69  format of keys i
1b080 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a  n the index..**.
1b090 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d 65  ** The P5 parame
1b0a0 74 65 72 20 63 61 6e 20 62 65 20 61 20 6d 61 73  ter can be a mas
1b0b0 6b 20 6f 66 20 74 68 65 20 42 54 52 45 45 5f 2a  k of the BTREE_*
1b0c0 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 0a 2a   flags defined.*
1b0d0 2a 20 69 6e 20 62 74 72 65 65 2e 68 2e 20 20 54  * in btree.h.  T
1b0e0 68 65 73 65 20 66 6c 61 67 73 20 63 6f 6e 74 72  hese flags contr
1b0f0 6f 6c 20 61 73 70 65 63 74 73 20 6f 66 20 74 68  ol aspects of th
1b100 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 0a 2a  e operation of.*
1b110 2a 20 74 68 65 20 62 74 72 65 65 2e 20 20 54 68  * the btree.  Th
1b120 65 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55  e BTREE_OMIT_JOU
1b130 52 4e 41 4c 20 61 6e 64 20 42 54 52 45 45 5f 53  RNAL and BTREE_S
1b140 49 4e 47 4c 45 20 66 6c 61 67 73 20 61 72 65 0a  INGLE flags are.
1b150 2a 2a 20 61 64 64 65 64 20 61 75 74 6f 6d 61 74  ** added automat
1b160 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70  ically..*/./* Op
1b170 63 6f 64 65 3a 20 4f 70 65 6e 41 75 74 6f 69 6e  code: OpenAutoin
1b180 64 65 78 20 50 31 20 50 32 20 2a 20 50 34 20 2a  dex P1 P2 * P4 *
1b190 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43  .** Synopsis: nC
1b1a0 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 54  olumn=P2.**.** T
1b1b0 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73  his opcode works
1b1c0 20 74 68 65 20 73 61 6d 65 20 61 73 20 4f 50 5f   the same as OP_
1b1d0 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 2e 20 20  OpenEphemeral.  
1b1e0 49 74 20 68 61 73 20 61 0a 2a 2a 20 64 69 66 66  It has a.** diff
1b1f0 65 72 65 6e 74 20 6e 61 6d 65 20 74 6f 20 64 69  erent name to di
1b200 73 74 69 6e 67 75 69 73 68 20 69 74 73 20 75 73  stinguish its us
1b210 65 2e 20 20 54 61 62 6c 65 73 20 63 72 65 61 74  e.  Tables creat
1b220 65 64 20 75 73 69 6e 67 0a 2a 2a 20 62 79 20 74  ed using.** by t
1b230 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20  his opcode will 
1b240 62 65 20 75 73 65 64 20 66 6f 72 20 61 75 74 6f  be used for auto
1b250 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65  matically create
1b260 64 20 74 72 61 6e 73 69 65 6e 74 0a 2a 2a 20 69  d transient.** i
1b270 6e 64 69 63 65 73 20 69 6e 20 6a 6f 69 6e 73 2e  ndices in joins.
1b280 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  .*/.case OP_Open
1b290 41 75 74 6f 69 6e 64 65 78 3a 20 0a 63 61 73 65  Autoindex: .case
1b2a0 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1b2b0 6c 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  l: {.  VdbeCurso
1b2c0 72 20 2a 70 43 78 3b 0a 20 20 4b 65 79 49 6e 66  r *pCx;.  KeyInf
1b2d0 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20  o *pKeyInfo;..  
1b2e0 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74  static const int
1b2f0 20 76 66 73 46 6c 61 67 73 20 3d 20 0a 20 20 20   vfsFlags = .   
1b300 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52     SQLITE_OPEN_R
1b310 45 41 44 57 52 49 54 45 20 7c 0a 20 20 20 20 20  EADWRITE |.     
1b320 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45   SQLITE_OPEN_CRE
1b330 41 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49  ATE |.      SQLI
1b340 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56  TE_OPEN_EXCLUSIV
1b350 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
1b360 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c  _OPEN_DELETEONCL
1b370 4f 53 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49  OSE |.      SQLI
1b380 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e  TE_OPEN_TRANSIEN
1b390 54 5f 44 42 3b 0a 20 20 61 73 73 65 72 74 28 20  T_DB;.  assert( 
1b3a0 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20  pOp->p1>=0 );.  
1b3b0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
1b3c0 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c  =0 );.  pCx = al
1b3d0 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
1b3e0 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32  pOp->p1, pOp->p2
1b3f0 2c 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66 28 20  , -1, 1);.  if( 
1b400 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  pCx==0 ) goto no
1b410 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c  _mem;.  pCx->nul
1b420 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d  lRow = 1;.  pCx-
1b430 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 3d 20 31  >isEphemeral = 1
1b440 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
1b450 42 74 72 65 65 4f 70 65 6e 28 64 62 2d 3e 70 56  BtreeOpen(db->pV
1b460 66 73 2c 20 30 2c 20 64 62 2c 20 26 70 43 78 2d  fs, 0, db, &pCx-
1b470 3e 70 42 74 2c 20 0a 20 20 20 20 20 20 20 20 20  >pBt, .         
1b480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42                 B
1b490 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41  TREE_OMIT_JOURNA
1b4a0 4c 20 7c 20 42 54 52 45 45 5f 53 49 4e 47 4c 45  L | BTREE_SINGLE
1b4b0 20 7c 20 70 4f 70 2d 3e 70 35 2c 20 76 66 73 46   | pOp->p5, vfsF
1b4c0 6c 61 67 73 29 3b 0a 20 20 69 66 28 20 72 63 3d  lags);.  if( rc=
1b4d0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1b4e0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1b4f0 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 43  reeBeginTrans(pC
1b500 78 2d 3e 70 42 74 2c 20 31 29 3b 0a 20 20 7d 0a  x->pBt, 1);.  }.
1b510 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1b520 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  _OK ){.    /* If
1b530 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64   a transient ind
1b540 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2c 20  ex is required, 
1b550 63 72 65 61 74 65 20 69 74 20 62 79 20 63 61 6c  create it by cal
1b560 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c 69  ling.    ** sqli
1b570 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61  te3BtreeCreateTa
1b580 62 6c 65 28 29 20 77 69 74 68 20 74 68 65 20 42  ble() with the B
1b590 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 66 6c 61  TREE_BLOBKEY fla
1b5a0 67 20 62 65 66 6f 72 65 0a 20 20 20 20 2a 2a 20  g before.    ** 
1b5b0 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49 66 20 61  opening it. If a
1b5c0 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65   transient table
1b5d0 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 6a 75   is required, ju
1b5e0 73 74 20 75 73 65 20 74 68 65 0a 20 20 20 20 2a  st use the.    *
1b5f0 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  * automatically 
1b600 63 72 65 61 74 65 64 20 74 61 62 6c 65 20 77 69  created table wi
1b610 74 68 20 72 6f 6f 74 2d 70 61 67 65 20 31 20 28  th root-page 1 (
1b620 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45 59 20 74  an BLOB_INTKEY t
1b630 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20  able)..    */.  
1b640 20 20 69 66 28 20 28 70 4b 65 79 49 6e 66 6f 20    if( (pKeyInfo 
1b650 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  = pOp->p4.pKeyIn
1b660 66 6f 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  fo)!=0 ){.      
1b670 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 20 20 20 20  int pgno;.      
1b680 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
1b690 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20  ype==P4_KEYINFO 
1b6a0 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  );.      rc = sq
1b6b0 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65  lite3BtreeCreate
1b6c0 54 61 62 6c 65 28 70 43 78 2d 3e 70 42 74 2c 20  Table(pCx->pBt, 
1b6d0 26 70 67 6e 6f 2c 20 42 54 52 45 45 5f 42 4c 4f  &pgno, BTREE_BLO
1b6e0 42 4b 45 59 20 7c 20 70 4f 70 2d 3e 70 35 29 3b  BKEY | pOp->p5);
1b6f0 20 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d   .      if( rc==
1b700 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1b710 20 20 20 20 20 61 73 73 65 72 74 28 20 70 67 6e       assert( pgn
1b720 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54 2b 31  o==MASTER_ROOT+1
1b730 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
1b740 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62  rt( pKeyInfo->db
1b750 3d 3d 64 62 20 29 3b 0a 20 20 20 20 20 20 20 20  ==db );.        
1b760 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f  assert( pKeyInfo
1b770 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29  ->enc==ENC(db) )
1b780 3b 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70  ;.        pCx->p
1b790 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e  KeyInfo = pKeyIn
1b7a0 66 6f 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  fo;.        rc =
1b7b0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
1b7c0 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20 70 67  sor(pCx->pBt, pg
1b7d0 6e 6f 2c 20 31 2c 20 70 4b 65 79 49 6e 66 6f 2c  no, 1, pKeyInfo,
1b7e0 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a   pCx->pCursor);.
1b7f0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43        }.      pC
1b800 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 30 3b 0a  x->isTable = 0;.
1b810 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1b820 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1b830 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42  eeCursor(pCx->pB
1b840 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20  t, MASTER_ROOT, 
1b850 31 2c 20 30 2c 20 70 43 78 2d 3e 70 43 75 72 73  1, 0, pCx->pCurs
1b860 6f 72 29 3b 0a 20 20 20 20 20 20 70 43 78 2d 3e  or);.      pCx->
1b870 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 20  isTable = 1;.   
1b880 20 7d 0a 20 20 7d 0a 20 20 70 43 78 2d 3e 69 73   }.  }.  pCx->is
1b890 4f 72 64 65 72 65 64 20 3d 20 28 70 4f 70 2d 3e  Ordered = (pOp->
1b8a0 70 35 21 3d 42 54 52 45 45 5f 55 4e 4f 52 44 45  p5!=BTREE_UNORDE
1b8b0 52 45 44 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  RED);.  break;.}
1b8c0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72  ../* Opcode: Sor
1b8d0 74 65 72 4f 70 65 6e 20 50 31 20 50 32 20 50 33  terOpen P1 P2 P3
1b8e0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73   P4 *.**.** This
1b8f0 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6c 69   opcode works li
1b900 6b 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  ke OP_OpenEpheme
1b910 72 61 6c 20 65 78 63 65 70 74 20 74 68 61 74 20  ral except that 
1b920 69 74 20 6f 70 65 6e 73 0a 2a 2a 20 61 20 74 72  it opens.** a tr
1b930 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 74 68  ansient index th
1b940 61 74 20 69 73 20 73 70 65 63 69 66 69 63 61 6c  at is specifical
1b950 6c 79 20 64 65 73 69 67 6e 65 64 20 74 6f 20 73  ly designed to s
1b960 6f 72 74 20 6c 61 72 67 65 0a 2a 2a 20 74 61 62  ort large.** tab
1b970 6c 65 73 20 75 73 69 6e 67 20 61 6e 20 65 78 74  les using an ext
1b980 65 72 6e 61 6c 20 6d 65 72 67 65 2d 73 6f 72 74  ernal merge-sort
1b990 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 2a 2a 0a 2a   algorithm..**.*
1b9a0 2a 20 49 66 20 61 72 67 75 6d 65 6e 74 20 50 33  * If argument P3
1b9b0 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
1b9c0 65 6e 20 69 74 20 69 6e 64 69 63 61 74 65 73 20  en it indicates 
1b9d0 74 68 61 74 20 74 68 65 20 73 6f 72 74 65 72 20  that the sorter 
1b9e0 6d 61 79 0a 2a 2a 20 61 73 73 75 6d 65 20 74 68  may.** assume th
1b9f0 61 74 20 61 20 73 74 61 62 6c 65 20 73 6f 72 74  at a stable sort
1ba00 20 63 6f 6e 73 69 64 65 72 69 6e 67 20 74 68 65   considering the
1ba10 20 66 69 72 73 74 20 50 33 20 66 69 65 6c 64 73   first P3 fields
1ba20 20 6f 66 20 65 61 63 68 0a 2a 2a 20 6b 65 79 20   of each.** key 
1ba30 69 73 20 73 75 66 66 69 63 69 65 6e 74 20 74 6f  is sufficient to
1ba40 20 70 72 6f 64 75 63 65 20 74 68 65 20 72 65 71   produce the req
1ba50 75 69 72 65 64 20 72 65 73 75 6c 74 73 2e 0a 2a  uired results..*
1ba60 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
1ba70 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75  Open: {.  VdbeCu
1ba80 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73  rsor *pCx;..  as
1ba90 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1baa0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1bab0 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43  p->p2>=0 );.  pC
1bac0 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  x = allocateCurs
1bad0 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  or(p, pOp->p1, p
1bae0 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b 0a  Op->p2, -1, 1);.
1baf0 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67    if( pCx==0 ) g
1bb00 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
1bb10 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f  x->pKeyInfo = pO
1bb20 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a  p->p4.pKeyInfo;.
1bb30 20 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70    assert( pCx->p
1bb40 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20  KeyInfo->db==db 
1bb50 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 78  );.  assert( pCx
1bb60 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d  ->pKeyInfo->enc=
1bb70 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 72 63  =ENC(db) );.  rc
1bb80 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f   = sqlite3VdbeSo
1bb90 72 74 65 72 49 6e 69 74 28 64 62 2c 20 70 4f 70  rterInit(db, pOp
1bba0 2d 3e 70 33 2c 20 70 43 78 29 3b 0a 20 20 62 72  ->p3, pCx);.  br
1bbb0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1bbc0 65 3a 20 53 65 71 75 65 6e 63 65 54 65 73 74 20  e: SequenceTest 
1bbd0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
1bbe0 79 6e 6f 70 73 69 73 3a 20 69 66 28 20 63 75 72  ynopsis: if( cur
1bbf0 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 20 29 20  sor[P1].ctr++ ) 
1bc00 70 63 20 3d 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31  pc = P2.**.** P1
1bc10 20 69 73 20 61 20 73 6f 72 74 65 72 20 63 75 72   is a sorter cur
1bc20 73 6f 72 2e 20 49 66 20 74 68 65 20 73 65 71 75  sor. If the sequ
1bc30 65 6e 63 65 20 63 6f 75 6e 74 65 72 20 69 73 20  ence counter is 
1bc40 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2c 20  currently zero, 
1bc50 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 52  jump.** to P2. R
1bc60 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65  egardless of whe
1bc70 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
1bc80 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 69  jump is taken, i
1bc90 6e 63 72 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20  ncrement the.** 
1bca0 74 68 65 20 73 65 71 75 65 6e 63 65 20 76 61 6c  the sequence val
1bcb0 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ue..*/.case OP_S
1bcc0 65 71 75 65 6e 63 65 54 65 73 74 3a 20 7b 0a 20  equenceTest: {. 
1bcd0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1bce0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1bcf0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1bd00 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1bd10 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
1bd20 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
1bd30 74 28 20 70 43 2d 3e 70 53 6f 72 74 65 72 20 29  t( pC->pSorter )
1bd40 3b 0a 20 20 69 66 28 20 28 70 43 2d 3e 73 65 71  ;.  if( (pC->seq
1bd50 43 6f 75 6e 74 2b 2b 29 3d 3d 30 20 29 7b 0a 20  Count++)==0 ){. 
1bd60 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
1bd70 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
1bd80 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1bd90 4f 70 65 6e 50 73 65 75 64 6f 20 50 31 20 50 32  OpenPseudo P1 P2
1bda0 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
1bdb0 73 69 73 3a 20 50 33 20 63 6f 6c 75 6d 6e 73 20  sis: P3 columns 
1bdc0 69 6e 20 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f  in r[P2].**.** O
1bdd0 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72  pen a new cursor
1bde0 20 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20   that points to 
1bdf0 61 20 66 61 6b 65 20 74 61 62 6c 65 20 74 68 61  a fake table tha
1be00 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e  t contains a sin
1be10 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61  gle.** row of da
1be20 74 61 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74  ta.  The content
1be30 20 6f 66 20 74 68 61 74 20 6f 6e 65 20 72 6f 77   of that one row
1be40 20 69 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   is the content 
1be50 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67  of memory.** reg
1be60 69 73 74 65 72 20 50 32 2e 20 20 49 6e 20 6f 74  ister P2.  In ot
1be70 68 65 72 20 77 6f 72 64 73 2c 20 63 75 72 73 6f  her words, curso
1be80 72 20 50 31 20 62 65 63 6f 6d 65 73 20 61 6e 20  r P1 becomes an 
1be90 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 0a 2a  alias for the .*
1bea0 2a 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65  * MEM_Blob conte
1beb0 6e 74 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  nt contained in 
1bec0 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
1bed0 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74 61 62 6c  ** A pseudo-tabl
1bee0 65 20 63 72 65 61 74 65 64 20 62 79 20 74 68 69  e created by thi
1bef0 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64  s opcode is used
1bf00 20 74 6f 20 68 6f 6c 64 20 61 20 73 69 6e 67 6c   to hold a singl
1bf10 65 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74 20  e.** row output 
1bf20 66 72 6f 6d 20 74 68 65 20 73 6f 72 74 65 72 20  from the sorter 
1bf30 73 6f 20 74 68 61 74 20 74 68 65 20 72 6f 77 20  so that the row 
1bf40 63 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73 65  can be decompose
1bf50 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69  d into.** indivi
1bf60 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69  dual columns usi
1bf70 6e 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e  ng the OP_Column
1bf80 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 4f 50   opcode.  The OP
1bf90 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a  _Column opcode.*
1bfa0 2a 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 63 75  * is the only cu
1bfb0 72 73 6f 72 20 6f 70 63 6f 64 65 20 74 68 61 74  rsor opcode that
1bfc0 20 77 6f 72 6b 73 20 77 69 74 68 20 61 20 70 73   works with a ps
1bfd0 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  eudo-table..**.*
1bfe0 2a 20 50 33 20 69 73 20 74 68 65 20 6e 75 6d 62  * P3 is the numb
1bff0 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20  er of fields in 
1c000 74 68 65 20 72 65 63 6f 72 64 73 20 74 68 61 74  the records that
1c010 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20   will be stored 
1c020 62 79 0a 2a 2a 20 74 68 65 20 70 73 65 75 64 6f  by.** the pseudo
1c030 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20  -table..*/.case 
1c040 4f 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b  OP_OpenPseudo: {
1c050 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1c060 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Cx;..  assert( p
1c070 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61  Op->p1>=0 );.  a
1c080 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d  ssert( pOp->p3>=
1c090 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c  0 );.  pCx = all
1c0a0 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70  ocateCursor(p, p
1c0b0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c  Op->p1, pOp->p3,
1c0c0 20 2d 31 2c 20 30 29 3b 0a 20 20 69 66 28 20 70   -1, 0);.  if( p
1c0d0 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  Cx==0 ) goto no_
1c0e0 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c  mem;.  pCx->null
1c0f0 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e  Row = 1;.  pCx->
1c100 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 20 3d  pseudoTableReg =
1c110 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 78 2d   pOp->p2;.  pCx-
1c120 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20  >isTable = 1;.  
1c130 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d  assert( pOp->p5=
1c140 3d 30 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  =0 );.  break;.}
1c150 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f  ../* Opcode: Clo
1c160 73 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  se P1 * * * *.**
1c170 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75 72 73  .** Close a curs
1c180 6f 72 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70  or previously op
1c190 65 6e 65 64 20 61 73 20 50 31 2e 20 20 49 66 20  ened as P1.  If 
1c1a0 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72  P1 is not.** cur
1c1b0 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69  rently open, thi
1c1c0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
1c1d0 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73   a no-op..*/.cas
1c1e0 65 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20  e OP_Close: {.  
1c1f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1c200 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1c210 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 73 71  >nCursor );.  sq
1c220 6c 69 74 65 33 56 64 62 65 46 72 65 65 43 75 72  lite3VdbeFreeCur
1c230 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b  sor(p, p->apCsr[
1c240 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e  pOp->p1]);.  p->
1c250 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d  apCsr[pOp->p1] =
1c260 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
1c270 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47  /* Opcode: SeekG
1c280 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  e P1 P2 P3 P4 *.
1c290 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
1c2a0 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
1c2b0 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1c2c0 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61  ers to an SQL ta
1c2d0 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74  ble (B-Tree that
1c2e0 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65   uses integer ke
1c2f0 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65  ys), .** use the
1c300 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
1c310 65 72 20 50 33 20 61 73 20 74 68 65 20 6b 65 79  er P3 as the key
1c320 2e 20 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  .  If cursor P1 
1c330 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e  refers .** to an
1c340 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e   SQL index, then
1c350 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
1c360 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
1c370 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a  P4 registers .**
1c380 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
1c390 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  s an unpacked in
1c3a0 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20  dex key. .**.** 
1c3b0 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  Reposition curso
1c3c0 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74  r P1 so that  it
1c3d0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73   points to the s
1c3e0 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68  mallest entry th
1c3f0 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65  at .** is greate
1c400 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
1c410 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
1c420 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
1c430 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72  o records .** gr
1c440 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
1c450 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61  ual to the key a
1c460 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  nd P2 is not zer
1c470 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
1c480 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  P2..**.** See al
1c490 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
1c4a0 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53  und, Distinct, S
1c4b0 65 65 6b 4c 74 2c 20 53 65 65 6b 47 74 2c 20 53  eekLt, SeekGt, S
1c4c0 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  eekLe.*/./* Opco
1c4d0 64 65 3a 20 53 65 65 6b 47 74 20 50 31 20 50 32  de: SeekGt P1 P2
1c4e0 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
1c4f0 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
1c500 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73  4].**.** If curs
1c510 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
1c520 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
1c530 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
1c540 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
1c550 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
1c560 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
1c570 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73  s a key. If curs
1c580 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
1c590 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
1c5a0 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
1c5b0 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
1c5c0 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
1c5d0 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
1c5e0 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
1c5f0 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
1c600 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
1c610 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
1c620 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  at  it points to
1c630 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e   the smallest en
1c640 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
1c650 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
1c660 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74   key value. If t
1c670 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
1c680 72 64 73 20 67 72 65 61 74 65 72 20 74 68 61 6e  rds greater than
1c690 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64   .** the key and
1c6a0 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
1c6b0 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
1c6c0 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1c6d0 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
1c6e0 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65  d, Distinct, See
1c6f0 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65  kLt, SeekGe, See
1c700 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  kLe.*/./* Opcode
1c710 3a 20 53 65 65 6b 4c 74 20 50 31 20 50 32 20 50  : SeekLt P1 P2 P
1c720 33 20 50 34 20 2a 20 0a 2a 2a 20 53 79 6e 6f 70  3 P4 * .** Synop
1c730 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1c740 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  ].**.** If curso
1c750 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
1c760 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
1c770 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
1c780 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
1c790 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
1c7a0 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
1c7b0 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f   a key. If curso
1c7c0 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
1c7d0 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
1c7e0 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
1c7f0 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
1c800 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
1c810 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
1c820 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
1c830 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
1c840 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
1c850 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
1c860 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  t  it points to 
1c870 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72  the largest entr
1c880 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65  y that .** is le
1c890 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  ss than the key 
1c8a0 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
1c8b0 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c  are no records l
1c8c0 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65  ess than .** the
1c8d0 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
1c8e0 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
1c8f0 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
1c900 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
1c910 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69   NotFound, Disti
1c920 6e 63 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65  nct, SeekGt, See
1c930 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f  kGe, SeekLe.*/./
1c940 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 65  * Opcode: SeekLe
1c950 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
1c960 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
1c970 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49  r[P3@P4].**.** I
1c980 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1c990 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62  rs to an SQL tab
1c9a0 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20  le (B-Tree that 
1c9b0 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79  uses integer key
1c9c0 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20  s), .** use the 
1c9d0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
1c9e0 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49  r P3 as a key. I
1c9f0 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1ca00 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
1ca10 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
1ca20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
1ca30 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
1ca40 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
1ca50 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
1ca60 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
1ca70 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
1ca80 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
1ca90 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
1caa0 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73  ts to the larges
1cab0 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  t entry that .**
1cac0 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72   is less than or
1cad0 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
1cae0 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72  y value. If ther
1caf0 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73  e are no records
1cb00 20 0a 2a 2a 20 6c 65 73 73 20 74 68 61 6e 20 6f   .** less than o
1cb10 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
1cb20 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74  ey and P2 is not
1cb30 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70   zero, then jump
1cb40 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65   to P2..**.** Se
1cb50 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
1cb60 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63  otFound, Distinc
1cb70 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47  t, SeekGt, SeekG
1cb80 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73  e, SeekLt.*/.cas
1cb90 65 20 4f 50 5f 53 65 65 6b 4c 54 3a 20 20 20 20  e OP_SeekLT:    
1cba0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1cbb0 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  3 */.case OP_See
1cbc0 6b 4c 45 3a 20 20 20 20 20 20 20 20 20 2f 2a 20  kLE:         /* 
1cbd0 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
1cbe0 65 20 4f 50 5f 53 65 65 6b 47 45 3a 20 20 20 20  e OP_SeekGE:    
1cbf0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1cc00 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  3 */.case OP_See
1cc10 6b 47 54 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20  kGT: {       /* 
1cc20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69  jump, in3 */.  i
1cc30 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6f 63  nt res;.  int oc
1cc40 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
1cc50 70 43 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  pC;.  UnpackedRe
1cc60 63 6f 72 64 20 72 3b 0a 20 20 69 6e 74 20 6e 46  cord r;.  int nF
1cc70 69 65 6c 64 3b 0a 20 20 69 36 34 20 69 4b 65 79  ield;.  i64 iKey
1cc80 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72 6f  ;      /* The ro
1cc90 77 69 64 20 77 65 20 61 72 65 20 74 6f 20 73 65  wid we are to se
1cca0 65 6b 20 74 6f 20 2a 2f 0a 0a 20 20 61 73 73 65  ek to */..  asse
1ccb0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1ccc0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1ccd0 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
1cce0 28 20 70 4f 70 2d 3e 70 32 21 3d 30 20 29 3b 0a  ( pOp->p2!=0 );.
1ccf0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1cd00 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1cd10 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
1cd20 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64  ssert( pC->pseud
1cd30 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a  oTableReg==0 );.
1cd40 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
1cd50 6b 4c 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54  kLE == OP_SeekLT
1cd60 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  +1 );.  assert( 
1cd70 4f 50 5f 53 65 65 6b 47 45 20 3d 3d 20 4f 50 5f  OP_SeekGE == OP_
1cd80 53 65 65 6b 4c 54 2b 32 20 29 3b 0a 20 20 61 73  SeekLT+2 );.  as
1cd90 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 54 20  sert( OP_SeekGT 
1cda0 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 33 20 29  == OP_SeekLT+3 )
1cdb0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1cdc0 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 61  isOrdered );.  a
1cdd0 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
1cde0 6f 72 21 3d 30 20 29 3b 0a 20 20 6f 63 20 3d 20  or!=0 );.  oc = 
1cdf0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 70  pOp->opcode;.  p
1ce00 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  C->nullRow = 0;.
1ce10 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c    if( pC->isTabl
1ce20 65 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  e ){.    /* The 
1ce30 69 6e 70 75 74 20 76 61 6c 75 65 20 69 6e 20 50  input value in P
1ce40 33 20 6d 69 67 68 74 20 62 65 20 6f 66 20 61 6e  3 might be of an
1ce50 79 20 74 79 70 65 3a 20 69 6e 74 65 67 65 72 2c  y type: integer,
1ce60 20 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c 0a 20   real, string,. 
1ce70 20 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e     ** blob, or N
1ce80 55 4c 4c 2e 20 20 42 75 74 20 69 74 20 6e 65 65  ULL.  But it nee
1ce90 64 73 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65  ds to be an inte
1cea0 67 65 72 20 62 65 66 6f 72 65 20 77 65 20 63 61  ger before we ca
1ceb0 6e 20 64 6f 0a 20 20 20 20 2a 2a 20 74 68 65 20  n do.    ** the 
1cec0 73 65 65 6b 2c 20 73 6f 20 63 6f 76 65 72 74 20  seek, so covert 
1ced0 69 74 2e 20 2a 2f 0a 20 20 20 20 70 49 6e 33 20  it. */.    pIn3 
1cee0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
1cef0 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72  ;.    applyNumer
1cf00 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 33 29  icAffinity(pIn3)
1cf10 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 73 71 6c  ;.    iKey = sql
1cf20 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
1cf30 28 70 49 6e 33 29 3b 0a 20 20 20 20 70 43 2d 3e  (pIn3);.    pC->
1cf40 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1cf50 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65  ;..    /* If the
1cf60 20 50 33 20 76 61 6c 75 65 20 63 6f 75 6c 64 20   P3 value could 
1cf70 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64  not be converted
1cf80 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72   into an integer
1cf90 20 77 69 74 68 6f 75 74 0a 20 20 20 20 2a 2a 20   without.    ** 
1cfa0 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74  loss of informat
1cfb0 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63 69 61  ion, then specia
1cfc0 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20  l processing is 
1cfd0 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20  required... */. 
1cfe0 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c     if( (pIn3->fl
1cff0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d  ags & MEM_Int)==
1d000 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28  0 ){.      if( (
1d010 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
1d020 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Real)==0 ){.  
1d030 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20        /* If the 
1d040 50 33 20 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20  P3 value cannot 
1d050 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  be converted int
1d060 6f 20 61 6e 79 20 6b 69 6e 64 20 6f 66 20 61 20  o any kind of a 
1d070 6e 75 6d 62 65 72 2c 0a 20 20 20 20 20 20 20 20  number,.        
1d080 2a 2a 20 74 68 65 6e 20 74 68 65 20 73 65 65 6b  ** then the seek
1d090 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
1d0a0 2c 20 73 6f 20 6a 75 6d 70 20 74 6f 20 50 32 20  , so jump to P2 
1d0b0 2a 2f 0a 20 20 20 20 20 20 20 20 70 63 20 3d 20  */.        pc = 
1d0c0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 20 20 56 64  pOp->p2 - 1;  Vd
1d0d0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c  beBranchTaken(1,
1d0e0 32 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  2);.        brea
1d0f0 6b 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  k;.      }..    
1d100 20 20 2f 2a 20 49 66 20 74 68 65 20 61 70 70 72    /* If the appr
1d110 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69  oximation iKey i
1d120 73 20 6c 61 72 67 65 72 20 74 68 61 6e 20 74 68  s larger than th
1d130 65 20 61 63 74 75 61 6c 20 72 65 61 6c 20 73 65  e actual real se
1d140 61 72 63 68 0a 20 20 20 20 20 20 2a 2a 20 74 65  arch.      ** te
1d150 72 6d 2c 20 73 75 62 73 74 69 74 75 74 65 20 3e  rm, substitute >
1d160 3d 20 66 6f 72 20 3e 20 61 6e 64 20 3c 20 66 6f  = for > and < fo
1d170 72 20 3c 3d 2e 20 65 2e 67 2e 20 69 66 20 74 68  r <=. e.g. if th
1d180 65 20 73 65 61 72 63 68 20 74 65 72 6d 0a 20 20  e search term.  
1d190 20 20 20 20 2a 2a 20 69 73 20 34 2e 39 20 61 6e      ** is 4.9 an
1d1a0 64 20 74 68 65 20 69 6e 74 65 67 65 72 20 61 70  d the integer ap
1d1b0 70 72 6f 78 69 6d 61 74 69 6f 6e 20 35 3a 0a 20  proximation 5:. 
1d1c0 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a       **.      **
1d1d0 20 20 20 20 20 20 20 20 28 78 20 3e 20 20 34 2e          (x >  4.
1d1e0 39 29 20 20 20 20 2d 3e 20 20 20 20 20 28 78 20  9)    ->     (x 
1d1f0 3e 3d 20 35 29 0a 20 20 20 20 20 20 2a 2a 20 20  >= 5).      **  
1d200 20 20 20 20 20 20 28 78 20 3c 3d 20 34 2e 39 29        (x <= 4.9)
1d210 20 20 20 20 2d 3e 20 20 20 20 20 28 78 20 3c 20      ->     (x < 
1d220 20 35 29 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20   5).      */.   
1d230 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 72 3c 28     if( pIn3->r<(
1d240 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20  double)iKey ){. 
1d250 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f         assert( O
1d260 50 5f 53 65 65 6b 47 45 3d 3d 28 4f 50 5f 53 65  P_SeekGE==(OP_Se
1d270 65 6b 47 54 2d 31 29 20 29 3b 0a 20 20 20 20 20  ekGT-1) );.     
1d280 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65     assert( OP_Se
1d290 65 6b 4c 54 3d 3d 28 4f 50 5f 53 65 65 6b 4c 45  ekLT==(OP_SeekLE
1d2a0 2d 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  -1) );.        a
1d2b0 73 73 65 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c  ssert( (OP_SeekL
1d2c0 45 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50  E & 0x0001)==(OP
1d2d0 5f 53 65 65 6b 47 54 20 26 20 30 78 30 30 30 31  _SeekGT & 0x0001
1d2e0 29 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ) );.        if(
1d2f0 20 28 6f 63 20 26 20 30 78 30 30 30 31 29 3d 3d   (oc & 0x0001)==
1d300 28 4f 50 5f 53 65 65 6b 47 54 20 26 20 30 78 30  (OP_SeekGT & 0x0
1d310 30 30 31 29 20 29 20 6f 63 2d 2d 3b 0a 20 20 20  001) ) oc--;.   
1d320 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49     }..      /* I
1d330 66 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74  f the approximat
1d340 69 6f 6e 20 69 4b 65 79 20 69 73 20 73 6d 61 6c  ion iKey is smal
1d350 6c 65 72 20 74 68 61 6e 20 74 68 65 20 61 63 74  ler than the act
1d360 75 61 6c 20 72 65 61 6c 20 73 65 61 72 63 68 0a  ual real search.
1d370 20 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73        ** term, s
1d380 75 62 73 74 69 74 75 74 65 20 3c 3d 20 66 6f 72  ubstitute <= for
1d390 20 3c 20 61 6e 64 20 3e 20 66 6f 72 20 3e 3d 2e   < and > for >=.
1d3a0 20 20 2a 2f 0a 20 20 20 20 20 20 65 6c 73 65 20    */.      else 
1d3b0 69 66 28 20 70 49 6e 33 2d 3e 72 3e 28 64 6f 75  if( pIn3->r>(dou
1d3c0 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20 20 20  ble)iKey ){.    
1d3d0 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53      assert( OP_S
1d3e0 65 65 6b 4c 45 3d 3d 28 4f 50 5f 53 65 65 6b 4c  eekLE==(OP_SeekL
1d3f0 54 2b 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20  T+1) );.        
1d400 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47  assert( OP_SeekG
1d410 54 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 2b 31 29  T==(OP_SeekGE+1)
1d420 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
1d430 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c 54 20 26  rt( (OP_SeekLT &
1d440 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65   0x0001)==(OP_Se
1d450 65 6b 47 45 20 26 20 30 78 30 30 30 31 29 20 29  ekGE & 0x0001) )
1d460 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 6f  ;.        if( (o
1d470 63 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50  c & 0x0001)==(OP
1d480 5f 53 65 65 6b 4c 54 20 26 20 30 78 30 30 30 31  _SeekLT & 0x0001
1d490 29 20 29 20 6f 63 2b 2b 3b 0a 20 20 20 20 20 20  ) ) oc++;.      
1d4a0 7d 0a 20 20 20 20 7d 20 0a 20 20 20 20 72 63 20  }.    } .    rc 
1d4b0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1d4c0 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
1d4d0 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36  >pCursor, 0, (u6
1d4e0 34 29 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29  4)iKey, 0, &res)
1d4f0 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  ;.    if( rc!=SQ
1d500 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1d510 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1d520 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
1d530 20 20 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29      if( res==0 )
1d540 7b 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69  {.      pC->rowi
1d550 64 49 73 56 61 6c 69 64 20 3d 20 31 3b 0a 20 20  dIsValid = 1;.  
1d560 20 20 20 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69      pC->lastRowi
1d570 64 20 3d 20 69 4b 65 79 3b 0a 20 20 20 20 7d 0a  d = iKey;.    }.
1d580 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 46 69    }else{.    nFi
1d590 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  eld = pOp->p4.i;
1d5a0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
1d5b0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
1d5c0 33 32 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  32 );.    assert
1d5d0 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20  ( nField>0 );.  
1d5e0 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
1d5f0 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  C->pKeyInfo;.   
1d600 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36   r.nField = (u16
1d610 29 6e 46 69 65 6c 64 3b 0a 0a 20 20 20 20 2f 2a  )nField;..    /*
1d620 20 54 68 65 20 6e 65 78 74 20 6c 69 6e 65 20 6f   The next line o
1d630 66 20 63 6f 64 65 20 63 6f 6d 70 75 74 65 73 20  f code computes 
1d640 61 73 20 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79  as follows, only
1d650 20 66 61 73 74 65 72 3a 0a 20 20 20 20 2a 2a 20   faster:.    ** 
1d660 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65    if( oc==OP_See
1d670 6b 47 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kGT || oc==OP_Se
1d680 65 6b 4c 45 20 29 7b 0a 20 20 20 20 2a 2a 20 20  ekLE ){.    **  
1d690 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20     r.default_rc 
1d6a0 3d 20 2d 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d  = -1;.    **   }
1d6b0 65 6c 73 65 7b 0a 20 20 20 20 2a 2a 20 20 20 20  else{.    **    
1d6c0 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
1d6d0 2b 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 0a 20  +1;.    **   }. 
1d6e0 20 20 20 2a 2f 0a 20 20 20 20 72 2e 64 65 66 61     */.    r.defa
1d6f0 75 6c 74 5f 72 63 20 3d 20 28 28 31 20 26 20 28  ult_rc = ((1 & (
1d700 6f 63 20 2d 20 4f 50 5f 53 65 65 6b 4c 54 29 29  oc - OP_SeekLT))
1d710 20 3f 20 2d 31 20 3a 20 2b 31 29 3b 0a 20 20 20   ? -1 : +1);.   
1d720 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f   assert( oc!=OP_
1d730 53 65 65 6b 47 54 20 7c 7c 20 72 2e 64 65 66 61  SeekGT || r.defa
1d740 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20  ult_rc==-1 );.  
1d750 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50    assert( oc!=OP
1d760 5f 53 65 65 6b 4c 45 20 7c 7c 20 72 2e 64 65 66  _SeekLE || r.def
1d770 61 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20  ault_rc==-1 );. 
1d780 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f     assert( oc!=O
1d790 50 5f 53 65 65 6b 47 45 20 7c 7c 20 72 2e 64 65  P_SeekGE || r.de
1d7a0 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a  fault_rc==+1 );.
1d7b0 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d      assert( oc!=
1d7c0 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 72 2e 64  OP_SeekLT || r.d
1d7d0 65 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b  efault_rc==+1 );
1d7e0 0a 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26  ..    r.aMem = &
1d7f0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23  aMem[pOp->p3];.#
1d800 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
1d810 55 47 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b 20  UG.    { int i; 
1d820 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69  for(i=0; i<r.nFi
1d830 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74  eld; i++) assert
1d840 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e  ( memIsValid(&r.
1d850 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65  aMem[i]) ); }.#e
1d860 6e 64 69 66 0a 20 20 20 20 45 78 70 61 6e 64 42  ndif.    ExpandB
1d870 6c 6f 62 28 72 2e 61 4d 65 6d 29 3b 0a 20 20 20  lob(r.aMem);.   
1d880 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1d890 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
1d8a0 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
1d8b0 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  , 0, 0, &res);. 
1d8c0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1d8d0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f  E_OK ){.      go
1d8e0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1d8f0 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20  error;.    }.   
1d900 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
1d910 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 70 43 2d  d = 0;.  }.  pC-
1d920 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
1d930 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
1d940 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
1d950 54 41 4c 45 3b 0a 23 69 66 64 65 66 20 53 51 4c  TALE;.#ifdef SQL
1d960 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74  ITE_TEST.  sqlit
1d970 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b  e3_search_count+
1d980 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20  +;.#endif.  if( 
1d990 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 45 20 29 7b  oc>=OP_SeekGE ){
1d9a0 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50    assert( oc==OP
1d9b0 5f 53 65 65 6b 47 45 20 7c 7c 20 6f 63 3d 3d 4f  _SeekGE || oc==O
1d9c0 50 5f 53 65 65 6b 47 54 20 29 3b 0a 20 20 20 20  P_SeekGT );.    
1d9d0 69 66 28 20 72 65 73 3c 30 20 7c 7c 20 28 72 65  if( res<0 || (re
1d9e0 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53  s==0 && oc==OP_S
1d9f0 65 65 6b 47 54 29 20 29 7b 0a 20 20 20 20 20 20  eekGT) ){.      
1da00 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72  res = 0;.      r
1da10 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1da20 4e 65 78 74 28 70 43 2d 3e 70 43 75 72 73 6f 72  Next(pC->pCursor
1da30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69  , &res);.      i
1da40 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1da50 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1da60 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1da70 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
1da80 69 64 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73  id = 0;.    }els
1da90 65 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30  e{.      res = 0
1daa0 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
1dab0 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 3d  .    assert( oc=
1dac0 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 6f 63  =OP_SeekLT || oc
1dad0 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20  ==OP_SeekLE );. 
1dae0 20 20 20 69 66 28 20 72 65 73 3e 30 20 7c 7c 20     if( res>0 || 
1daf0 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f  (res==0 && oc==O
1db00 50 5f 53 65 65 6b 4c 54 29 20 29 7b 0a 20 20 20  P_SeekLT) ){.   
1db10 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20     res = 0;.    
1db20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1db30 72 65 65 50 72 65 76 69 6f 75 73 28 70 43 2d 3e  reePrevious(pC->
1db40 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
1db50 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
1db60 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
1db70 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1db80 72 3b 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f 77  r;.      pC->row
1db90 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
1dba0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1dbb0 2f 2a 20 72 65 73 20 6d 69 67 68 74 20 62 65 20  /* res might be 
1dbc0 6e 65 67 61 74 69 76 65 20 62 65 63 61 75 73 65  negative because
1dbd0 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 65 6d   the table is em
1dbe0 70 74 79 2e 20 20 43 68 65 63 6b 20 74 6f 0a 20  pty.  Check to. 
1dbf0 20 20 20 20 20 2a 2a 20 73 65 65 20 69 66 20 74       ** see if t
1dc00 68 69 73 20 69 73 20 74 68 65 20 63 61 73 65 2e  his is the case.
1dc10 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
1dc20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 42 74 72  res = sqlite3Btr
1dc30 65 65 45 6f 66 28 70 43 2d 3e 70 43 75 72 73 6f  eeEof(pC->pCurso
1dc40 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  r);.    }.  }.  
1dc50 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
1dc60 30 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  0 );.  VdbeBranc
1dc70 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29  hTaken(res!=0,2)
1dc80 3b 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20  ;.  if( res ){. 
1dc90 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
1dca0 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
1dcb0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1dcc0 53 65 65 6b 20 50 31 20 50 32 20 2a 20 2a 20 2a  Seek P1 P2 * * *
1dcd0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69  .** Synopsis:  i
1dce0 6e 74 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a  ntkey=r[P2].**.*
1dcf0 2a 20 50 31 20 69 73 20 61 6e 20 6f 70 65 6e 20  * P1 is an open 
1dd00 74 61 62 6c 65 20 63 75 72 73 6f 72 20 61 6e 64  table cursor and
1dd10 20 50 32 20 69 73 20 61 20 72 6f 77 69 64 20 69   P2 is a rowid i
1dd20 6e 74 65 67 65 72 2e 20 20 41 72 72 61 6e 67 65  nteger.  Arrange
1dd30 0a 2a 2a 20 66 6f 72 20 50 31 20 74 6f 20 6d 6f  .** for P1 to mo
1dd40 76 65 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  ve so that it po
1dd50 69 6e 74 73 20 74 6f 20 74 68 65 20 72 6f 77 69  ints to the rowi
1dd60 64 20 67 69 76 65 6e 20 62 79 20 50 32 2e 0a 2a  d given by P2..*
1dd70 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 63 74  *.** This is act
1dd80 75 61 6c 6c 79 20 61 20 64 65 66 65 72 72 65 64  ually a deferred
1dd90 20 73 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67 20   seek.  Nothing 
1dda0 61 63 74 75 61 6c 6c 79 20 68 61 70 70 65 6e 73  actually happens
1ddb0 20 75 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63 75   until.** the cu
1ddc0 72 73 6f 72 20 69 73 20 75 73 65 64 20 74 6f 20  rsor is used to 
1ddd0 72 65 61 64 20 61 20 72 65 63 6f 72 64 2e 20 20  read a record.  
1dde0 54 68 61 74 20 77 61 79 2c 20 69 66 20 6e 6f 20  That way, if no 
1ddf0 72 65 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c 20  reads.** occur, 
1de00 6e 6f 20 75 6e 6e 65 63 65 73 73 61 72 79 20 49  no unnecessary I
1de10 2f 4f 20 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 63  /O happens..*/.c
1de20 61 73 65 20 4f 50 5f 53 65 65 6b 3a 20 7b 20 20  ase OP_Seek: {  
1de30 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64    /* in2 */.  Vd
1de40 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20  beCursor *pC;.. 
1de50 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1de60 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1de70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
1de80 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
1de90 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1dea0 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
1deb0 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  rt( pC->pCursor!
1dec0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1ded0 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  pC->isTable );. 
1dee0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30   pC->nullRow = 0
1def0 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
1df00 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43 2d  [pOp->p2];.  pC-
1df10 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20  >movetoTarget = 
1df20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
1df30 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 70 43 2d  lue(pIn2);.  pC-
1df40 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
1df50 30 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65  0;.  pC->deferre
1df60 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20 20 62  dMoveto = 1;.  b
1df70 72 65 61 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f  reak;.}.  ../* O
1df80 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20 50 31 20  pcode: Found P1 
1df90 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
1dfa0 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
1dfb0 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  @P4].**.** If P4
1dfc0 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  ==0 then registe
1dfd0 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f  r P3 holds a blo
1dfe0 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  b constructed by
1dff0 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66   MakeRecord.  If
1e000 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65  .** P4>0 then re
1e010 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65  gister P3 is the
1e020 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67   first of P4 reg
1e030 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d  isters that form
1e040 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20   an unpacked.** 
1e050 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75  record..**.** Cu
1e060 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e  rsor P1 is on an
1e070 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49   index btree.  I
1e080 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65  f the record ide
1e090 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e  ntified by P3 an
1e0a0 64 20 50 34 0a 2a 2a 20 69 73 20 61 20 70 72 65  d P4.** is a pre
1e0b0 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79  fix of any entry
1e0c0 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75   in P1 then a ju
1e0d0 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32  mp is made to P2
1e0e0 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 6c 65   and.** P1 is le
1e0f0 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  ft pointing at t
1e100 68 65 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72  he matching entr
1e110 79 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  y..**.** See als
1e120 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43  o: NotFound, NoC
1e130 6f 6e 66 6c 69 63 74 2c 20 4e 6f 74 45 78 69 73  onflict, NotExis
1e140 74 73 2e 20 53 65 65 6b 47 65 0a 2a 2f 0a 2f 2a  ts. SeekGe.*/./*
1e150 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e   Opcode: NotFoun
1e160 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  d P1 P2 P3 P4 *.
1e170 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
1e180 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
1e190 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65  If P4==0 then re
1e1a0 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20  gister P3 holds 
1e1b0 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74  a blob construct
1e1c0 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64  ed by MakeRecord
1e1d0 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68  .  If.** P4>0 th
1e1e0 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69  en register P3 i
1e1f0 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20 50  s the first of P
1e200 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61 74  4 registers that
1e210 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
1e220 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20  d.** record..** 
1e230 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73  .** Cursor P1 is
1e240 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72   on an index btr
1e250 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f  ee.  If the reco
1e260 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  rd identified by
1e270 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73   P3 and P4.** is
1e280 20 6e 6f 74 20 74 68 65 20 70 72 65 66 69 78 20   not the prefix 
1e290 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20  of any entry in 
1e2a0 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69  P1 then a jump i
1e2b0 73 20 6d 61 64 65 20 74 6f 20 50 32 2e 20 20 49  s made to P2.  I
1e2c0 66 20 50 31 20 0a 2a 2a 20 64 6f 65 73 20 63 6f  f P1 .** does co
1e2d0 6e 74 61 69 6e 20 61 6e 20 65 6e 74 72 79 20 77  ntain an entry w
1e2e0 68 6f 73 65 20 70 72 65 66 69 78 20 6d 61 74 63  hose prefix matc
1e2f0 68 65 73 20 74 68 65 20 50 33 2f 50 34 20 72 65  hes the P3/P4 re
1e300 63 6f 72 64 20 74 68 65 6e 20 63 6f 6e 74 72 6f  cord then contro
1e310 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74 68 72 6f 75  l.** falls throu
1e320 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
1e330 6e 73 74 72 75 63 74 69 6f 6e 20 61 6e 64 20 50  nstruction and P
1e340 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69  1 is left pointi
1e350 6e 67 20 61 74 20 74 68 65 0a 2a 2a 20 6d 61 74  ng at the.** mat
1e360 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a  ching entry..**.
1e370 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1e380 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20 4e  nd, NotExists, N
1e390 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 2f 2a 20  oConflict.*/./* 
1e3a0 4f 70 63 6f 64 65 3a 20 4e 6f 43 6f 6e 66 6c 69  Opcode: NoConfli
1e3b0 63 74 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  ct P1 P2 P3 P4 *
1e3c0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
1e3d0 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
1e3e0 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72   If P4==0 then r
1e3f0 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73  egister P3 holds
1e400 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63   a blob construc
1e410 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72  ted by MakeRecor
1e420 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74  d.  If.** P4>0 t
1e430 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
1e440 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20  is the first of 
1e450 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61  P4 registers tha
1e460 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  t form an unpack
1e470 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a  ed.** record..**
1e480 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69   .** Cursor P1 i
1e490 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74  s on an index bt
1e4a0 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63  ree.  If the rec
1e4b0 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62  ord identified b
1e4c0 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 63  y P3 and P4.** c
1e4d0 6f 6e 74 61 69 6e 73 20 61 6e 79 20 4e 55 4c 4c  ontains any NULL
1e4e0 20 76 61 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d   value, jump imm
1e4f0 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20  ediately to P2. 
1e500 20 49 66 20 61 6c 6c 20 74 65 72 6d 73 20 6f 66   If all terms of
1e510 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20 61   the.** record a
1e520 72 65 20 6e 6f 74 2d 4e 55 4c 4c 20 74 68 65 6e  re not-NULL then
1e530 20 61 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65   a check is done
1e540 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66   to determine if
1e550 20 61 6e 79 20 72 6f 77 20 69 6e 20 74 68 65 0a   any row in the.
1e560 2a 2a 20 50 31 20 69 6e 64 65 78 20 62 74 72 65  ** P1 index btre
1e570 65 20 68 61 73 20 61 20 6d 61 74 63 68 69 6e 67  e has a matching
1e580 20 6b 65 79 20 70 72 65 66 69 78 2e 20 20 49 66   key prefix.  If
1e590 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 61   there are no ma
1e5a0 74 63 68 65 73 2c 20 6a 75 6d 70 0a 2a 2a 20 69  tches, jump.** i
1e5b0 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
1e5c0 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20 61  .  If there is a
1e5d0 20 6d 61 74 63 68 2c 20 66 61 6c 6c 20 74 68 72   match, fall thr
1e5e0 6f 75 67 68 20 61 6e 64 20 6c 65 61 76 65 20 74  ough and leave t
1e5f0 68 65 20 50 31 0a 2a 2a 20 63 75 72 73 6f 72 20  he P1.** cursor 
1e600 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20  pointing to the 
1e610 6d 61 74 63 68 69 6e 67 20 72 6f 77 2e 0a 2a 2a  matching row..**
1e620 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
1e630 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 4f 50  is similar to OP
1e640 5f 4e 6f 74 46 6f 75 6e 64 20 77 69 74 68 20 74  _NotFound with t
1e650 68 65 20 65 78 63 65 70 74 69 6f 6e 73 20 74 68  he exceptions th
1e660 61 74 20 74 68 65 0a 2a 2a 20 62 72 61 6e 63 68  at the.** branch
1e670 20 69 73 20 61 6c 77 61 79 73 20 74 61 6b 65 6e   is always taken
1e680 20 69 66 20 61 6e 79 20 70 61 72 74 20 6f 66 20   if any part of 
1e690 74 68 65 20 73 65 61 72 63 68 20 6b 65 79 20 69  the search key i
1e6a0 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a  nput is NULL..**
1e6b0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f  .** See also: No
1e6c0 74 46 6f 75 6e 64 2c 20 46 6f 75 6e 64 2c 20 4e  tFound, Found, N
1e6d0 6f 74 45 78 69 73 74 73 0a 2a 2f 0a 63 61 73 65  otExists.*/.case
1e6e0 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 3a 20   OP_NoConflict: 
1e6f0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1e700 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 46   */.case OP_NotF
1e710 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f 2a 20 6a  ound:       /* j
1e720 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
1e730 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20 20 20 20   OP_Found: {    
1e740 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1e750 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72 65 61 64   */.  int alread
1e760 79 45 78 69 73 74 73 3b 0a 20 20 69 6e 74 20 69  yExists;.  int i
1e770 69 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  i;.  VdbeCursor 
1e780 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  *pC;.  int res;.
1e790 20 20 63 68 61 72 20 2a 70 46 72 65 65 3b 0a 20    char *pFree;. 
1e7a0 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
1e7b0 2a 70 49 64 78 4b 65 79 3b 0a 20 20 55 6e 70 61  *pIdxKey;.  Unpa
1e7c0 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20  ckedRecord r;.  
1e7d0 63 68 61 72 20 61 54 65 6d 70 52 65 63 5b 52 4f  char aTempRec[RO
1e7e0 55 4e 44 38 28 73 69 7a 65 6f 66 28 55 6e 70 61  UND8(sizeof(Unpa
1e7f0 63 6b 65 64 52 65 63 6f 72 64 29 29 20 2b 20 73  ckedRecord)) + s
1e800 69 7a 65 6f 66 28 4d 65 6d 29 2a 34 20 2b 20 37  izeof(Mem)*4 + 7
1e810 5d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  ];..#ifdef SQLIT
1e820 45 5f 54 45 53 54 0a 20 20 69 66 28 20 70 4f 70  E_TEST.  if( pOp
1e830 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 6f 43  ->opcode!=OP_NoC
1e840 6f 6e 66 6c 69 63 74 20 29 20 73 71 6c 69 74 65  onflict ) sqlite
1e850 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b  3_found_count++;
1e860 0a 23 65 6e 64 69 66 0a 0a 20 20 61 73 73 65 72  .#endif..  asser
1e870 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1e880 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
1e890 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
1e8a0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1e8b0 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70 43 20 3d  _INT32 );.  pC =
1e8c0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1e8d0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
1e8e0 21 3d 30 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20  !=0 );.  pIn3 = 
1e8f0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
1e900 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
1e910 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73  ursor!=0 );.  as
1e920 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
1e930 65 3d 3d 30 20 29 3b 0a 20 20 70 46 72 65 65 20  e==0 );.  pFree 
1e940 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65  = 0;  /* Not nee
1e950 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20  ded.  Only used 
1e960 74 6f 20 73 75 70 70 72 65 73 73 20 61 20 63 6f  to suppress a co
1e970 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20  mpiler warning. 
1e980 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  */.  if( pOp->p4
1e990 2e 69 3e 30 20 29 7b 0a 20 20 20 20 72 2e 70 4b  .i>0 ){.    r.pK
1e9a0 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65  eyInfo = pC->pKe
1e9b0 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69  yInfo;.    r.nFi
1e9c0 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e  eld = (u16)pOp->
1e9d0 70 34 2e 69 3b 0a 20 20 20 20 72 2e 61 4d 65 6d  p4.i;.    r.aMem
1e9e0 20 3d 20 70 49 6e 33 3b 0a 20 20 20 20 66 6f 72   = pIn3;.    for
1e9f0 28 69 69 3d 30 3b 20 69 69 3c 72 2e 6e 46 69 65  (ii=0; ii<r.nFie
1ea00 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20  ld; ii++){.     
1ea10 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
1ea20 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 69 5d 29  lid(&r.aMem[ii])
1ea30 20 29 3b 0a 20 20 20 20 20 20 45 78 70 61 6e 64   );.      Expand
1ea40 42 6c 6f 62 28 26 72 2e 61 4d 65 6d 5b 69 69 5d  Blob(&r.aMem[ii]
1ea50 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
1ea60 5f 44 45 42 55 47 0a 20 20 20 20 20 20 69 66 28  _DEBUG.      if(
1ea70 20 69 69 20 29 20 52 45 47 49 53 54 45 52 5f 54   ii ) REGISTER_T
1ea80 52 41 43 45 28 70 4f 70 2d 3e 70 33 2b 69 69 2c  RACE(pOp->p3+ii,
1ea90 20 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 23   &r.aMem[ii]);.#
1eaa0 65 6e 64 69 66 0a 20 20 20 20 7d 0a 20 20 20 20  endif.    }.    
1eab0 70 49 64 78 4b 65 79 20 3d 20 26 72 3b 0a 20 20  pIdxKey = &r;.  
1eac0 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 64 78 4b  }else{.    pIdxK
1ead0 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  ey = sqlite3Vdbe
1eae0 41 6c 6c 6f 63 55 6e 70 61 63 6b 65 64 52 65 63  AllocUnpackedRec
1eaf0 6f 72 64 28 0a 20 20 20 20 20 20 20 20 70 43 2d  ord(.        pC-
1eb00 3e 70 4b 65 79 49 6e 66 6f 2c 20 61 54 65 6d 70  >pKeyInfo, aTemp
1eb10 52 65 63 2c 20 73 69 7a 65 6f 66 28 61 54 65 6d  Rec, sizeof(aTem
1eb20 70 52 65 63 29 2c 20 26 70 46 72 65 65 0a 20 20  pRec), &pFree.  
1eb30 20 20 29 3b 20 0a 20 20 20 20 69 66 28 20 70 49    ); .    if( pI
1eb40 64 78 4b 65 79 3d 3d 30 20 29 20 67 6f 74 6f 20  dxKey==0 ) goto 
1eb50 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73 73 65  no_mem;.    asse
1eb60 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  rt( pIn3->flags 
1eb70 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20  & MEM_Blob );.  
1eb80 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 33 2d    assert( (pIn3-
1eb90 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72  >flags & MEM_Zer
1eba0 6f 29 3d 3d 30 20 29 3b 20 20 2f 2a 20 7a 65 72  o)==0 );  /* zer
1ebb0 6f 62 6c 6f 62 73 20 61 6c 72 65 61 64 79 20 65  oblobs already e
1ebc0 78 70 61 6e 64 65 64 20 2a 2f 0a 20 20 20 20 73  xpanded */.    s
1ebd0 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f 72 64  qlite3VdbeRecord
1ebe0 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65 79 49  Unpack(pC->pKeyI
1ebf0 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70 49  nfo, pIn3->n, pI
1ec00 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b 65 79 29 3b  n3->z, pIdxKey);
1ec10 0a 20 20 7d 0a 20 20 70 49 64 78 4b 65 79 2d 3e  .  }.  pIdxKey->
1ec20 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a  default_rc = 0;.
1ec30 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
1ec40 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74  e==OP_NoConflict
1ec50 20 29 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20 74   ){.    /* For t
1ec60 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74  he OP_NoConflict
1ec70 20 6f 70 63 6f 64 65 2c 20 74 61 6b 65 20 74 68   opcode, take th
1ec80 65 20 6a 75 6d 70 20 69 66 20 61 6e 79 20 6f 66  e jump if any of
1ec90 20 74 68 65 0a 20 20 20 20 2a 2a 20 69 6e 70 75   the.    ** inpu
1eca0 74 20 66 69 65 6c 64 73 20 61 72 65 20 4e 55 4c  t fields are NUL
1ecb0 4c 2c 20 73 69 6e 63 65 20 61 6e 79 20 6b 65 79  L, since any key
1ecc0 20 77 69 74 68 20 61 20 4e 55 4c 4c 20 77 69 6c   with a NULL wil
1ecd0 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a 20 63 6f 6e  l not.    ** con
1ece0 66 6c 69 63 74 20 2a 2f 0a 20 20 20 20 66 6f 72  flict */.    for
1ecf0 28 69 69 3d 30 3b 20 69 69 3c 72 2e 6e 46 69 65  (ii=0; ii<r.nFie
1ed00 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20  ld; ii++){.     
1ed10 20 69 66 28 20 72 2e 61 4d 65 6d 5b 69 69 5d 2e   if( r.aMem[ii].
1ed20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
1ed30 20 29 7b 0a 20 20 20 20 20 20 20 20 70 63 20 3d   ){.        pc =
1ed40 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 20 56 64   pOp->p2 - 1; Vd
1ed50 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c  beBranchTaken(1,
1ed60 32 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  2);.        brea
1ed70 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
1ed80 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
1ed90 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
1eda0 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73  packed(pC->pCurs
1edb0 6f 72 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c 20  or, pIdxKey, 0, 
1edc0 30 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20  0, &res);.  if( 
1edd0 70 4f 70 2d 3e 70 34 2e 69 3d 3d 30 20 29 7b 0a  pOp->p4.i==0 ){.
1ede0 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
1edf0 65 28 64 62 2c 20 70 46 72 65 65 29 3b 0a 20 20  e(db, pFree);.  
1ee00 7d 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  }.  if( rc!=SQLI
1ee10 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 62 72 65  TE_OK ){.    bre
1ee20 61 6b 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65  ak;.  }.  pC->se
1ee30 65 6b 52 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a  ekResult = res;.
1ee40 20 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20    alreadyExists 
1ee50 3d 20 28 72 65 73 3d 3d 30 29 3b 0a 20 20 70 43  = (res==0);.  pC
1ee60 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c  ->nullRow = 1-al
1ee70 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20 70  readyExists;.  p
1ee80 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
1ee90 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63  o = 0;.  pC->cac
1eea0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
1eeb0 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f  _STALE;.  if( pO
1eec0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f  p->opcode==OP_Fo
1eed0 75 6e 64 20 29 7b 0a 20 20 20 20 56 64 62 65 42  und ){.    VdbeB
1eee0 72 61 6e 63 68 54 61 6b 65 6e 28 61 6c 72 65 61  ranchTaken(alrea
1eef0 64 79 45 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a  dyExists!=0,2);.
1ef00 20 20 20 20 69 66 28 20 61 6c 72 65 61 64 79 45      if( alreadyE
1ef10 78 69 73 74 73 20 29 20 70 63 20 3d 20 70 4f 70  xists ) pc = pOp
1ef20 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73  ->p2 - 1;.  }els
1ef30 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  e{.    VdbeBranc
1ef40 68 54 61 6b 65 6e 28 61 6c 72 65 61 64 79 45 78  hTaken(alreadyEx
1ef50 69 73 74 73 3d 3d 30 2c 32 29 3b 0a 20 20 20 20  ists==0,2);.    
1ef60 69 66 28 20 21 61 6c 72 65 61 64 79 45 78 69 73  if( !alreadyExis
1ef70 74 73 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70  ts ) pc = pOp->p
1ef80 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
1ef90 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1efa0 3a 20 4e 6f 74 45 78 69 73 74 73 20 50 31 20 50  : NotExists P1 P
1efb0 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
1efc0 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50  psis: intkey=r[P
1efd0 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  3].**.** P1 is t
1efe0 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20 63 75  he index of a cu
1eff0 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61 6e 20  rsor open on an 
1f000 53 51 4c 20 74 61 62 6c 65 20 62 74 72 65 65 20  SQL table btree 
1f010 28 77 69 74 68 20 69 6e 74 65 67 65 72 0a 2a 2a  (with integer.**
1f020 20 6b 65 79 73 29 2e 20 20 50 33 20 69 73 20 61   keys).  P3 is a
1f030 6e 20 69 6e 74 65 67 65 72 20 72 6f 77 69 64 2e  n integer rowid.
1f040 20 20 49 66 20 50 31 20 64 6f 65 73 20 6e 6f 74    If P1 does not
1f050 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72   contain a recor
1f060 64 20 77 69 74 68 0a 2a 2a 20 72 6f 77 69 64 20  d with.** rowid 
1f070 50 33 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d  P3 then jump imm
1f080 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20  ediately to P2. 
1f090 20 49 66 20 50 31 20 64 6f 65 73 20 63 6f 6e 74   If P1 does cont
1f0a0 61 69 6e 20 61 20 72 65 63 6f 72 64 0a 2a 2a 20  ain a record.** 
1f0b0 77 69 74 68 20 72 6f 77 69 64 20 50 33 20 74 68  with rowid P3 th
1f0c0 65 6e 20 6c 65 61 76 65 20 74 68 65 20 63 75 72  en leave the cur
1f0d0 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  sor pointing at 
1f0e0 74 68 61 74 20 72 65 63 6f 72 64 20 61 6e 64 20  that record and 
1f0f0 66 61 6c 6c 0a 2a 2a 20 74 68 72 6f 75 67 68 20  fall.** through 
1f100 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
1f110 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ruction..**.** T
1f120 68 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f  he OP_NotFound o
1f130 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74  pcode performs t
1f140 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f  he same operatio
1f150 6e 20 6f 6e 20 69 6e 64 65 78 20 62 74 72 65 65  n on index btree
1f160 73 0a 2a 2a 20 28 77 69 74 68 20 61 72 62 69 74  s.** (with arbit
1f170 72 61 72 79 20 6d 75 6c 74 69 2d 76 61 6c 75 65  rary multi-value
1f180 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 53 65   keys)..**.** Se
1f190 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
1f1a0 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c  otFound, NoConfl
1f1b0 69 63 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  ict.*/.case OP_N
1f1c0 6f 74 45 78 69 73 74 73 3a 20 7b 20 20 20 20 20  otExists: {     
1f1d0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1f1e0 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
1f1f0 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
1f200 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65  *pCrsr;.  int re
1f210 73 3b 0a 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a  s;.  u64 iKey;..
1f220 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
1f230 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
1f240 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  t( pIn3->flags &
1f250 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73   MEM_Int );.  as
1f260 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1f270 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1f280 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
1f290 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1f2a0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
1f2b0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
1f2c0 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
1f2d0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73    assert( pC->ps
1f2e0 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20  eudoTableReg==0 
1f2f0 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
1f300 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65  >pCursor;.  asse
1f310 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a  rt( pCrsr!=0 );.
1f320 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 69 4b 65    res = 0;.  iKe
1f330 79 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20  y = pIn3->u.i;. 
1f340 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1f350 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
1f360 28 70 43 72 73 72 2c 20 30 2c 20 69 4b 65 79 2c  (pCrsr, 0, iKey,
1f370 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 70 43 2d   0, &res);.  pC-
1f380 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 70 49 6e  >lastRowid = pIn
1f390 33 2d 3e 75 2e 69 3b 0a 20 20 70 43 2d 3e 72 6f  3->u.i;.  pC->ro
1f3a0 77 69 64 49 73 56 61 6c 69 64 20 3d 20 72 65 73  widIsValid = res
1f3b0 3d 3d 30 20 3f 31 3a 30 3b 0a 20 20 70 43 2d 3e  ==0 ?1:0;.  pC->
1f3c0 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70  nullRow = 0;.  p
1f3d0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
1f3e0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
1f3f0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
1f400 74 6f 20 3d 20 30 3b 0a 20 20 56 64 62 65 42 72  to = 0;.  VdbeBr
1f410 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
1f420 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 21 3d  ,2);.  if( res!=
1f430 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  0 ){.    pc = pO
1f440 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 61  p->p2 - 1;.    a
1f450 73 73 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64  ssert( pC->rowid
1f460 49 73 56 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20  IsValid==0 );.  
1f470 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75  }.  pC->seekResu
1f480 6c 74 20 3d 20 72 65 73 3b 0a 20 20 62 72 65 61  lt = res;.  brea
1f490 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1f4a0 20 53 65 71 75 65 6e 63 65 20 50 31 20 50 32 20   Sequence P1 P2 
1f4b0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
1f4c0 73 3a 20 72 5b 50 32 5d 3d 63 75 72 73 6f 72 5b  s: r[P2]=cursor[
1f4d0 50 31 5d 2e 63 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20  P1].ctr++.**.** 
1f4e0 46 69 6e 64 20 74 68 65 20 6e 65 78 74 20 61 76  Find the next av
1f4f0 61 69 6c 61 62 6c 65 20 73 65 71 75 65 6e 63 65  ailable sequence
1f500 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 75 72 73   number for curs
1f510 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65 20  or P1..** Write 
1f520 74 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  the sequence num
1f530 62 65 72 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ber into registe
1f540 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65 71  r P2..** The seq
1f550 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e 20  uence number on 
1f560 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 69 6e  the cursor is in
1f570 63 72 65 6d 65 6e 74 65 64 20 61 66 74 65 72 20  cremented after 
1f580 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63 74  this.** instruct
1f590 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f  ion.  .*/.case O
1f5a0 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20 20 20  P_Sequence: {   
1f5b0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
1f5c0 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
1f5d0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1f5e0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1f5f0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
1f600 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70  sert( p->apCsr[p
1f610 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20 20  Op->p1]!=0 );.  
1f620 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61  pOut->u.i = p->a
1f630 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 73  pCsr[pOp->p1]->s
1f640 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72 65  eqCount++;.  bre
1f650 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.}.../* Opcod
1f660 65 3a 20 4e 65 77 52 6f 77 69 64 20 50 31 20 50  e: NewRowid P1 P
1f670 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
1f680 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69  psis: r[P2]=rowi
1f690 64 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61 20 6e 65  d.**.** Get a ne
1f6a0 77 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72 64  w integer record
1f6b0 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e 61 20 22   number (a.k.a "
1f6c0 72 6f 77 69 64 22 29 20 75 73 65 64 20 61 73 20  rowid") used as 
1f6d0 74 68 65 20 6b 65 79 20 74 6f 20 61 20 74 61 62  the key to a tab
1f6e0 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65 63 6f 72  le..** The recor
1f6f0 64 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f 74 20  d number is not 
1f700 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64 20  previously used 
1f710 61 73 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20  as a key in the 
1f720 64 61 74 61 62 61 73 65 0a 2a 2a 20 74 61 62 6c  database.** tabl
1f730 65 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31  e that cursor P1
1f740 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68 65   points to.  The
1f750 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62   new record numb
1f760 65 72 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a  er is written.**
1f770 20 77 72 69 74 74 65 6e 20 74 6f 20 72 65 67 69   written to regi
1f780 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49  ster P2..**.** I
1f790 66 20 50 33 3e 30 20 74 68 65 6e 20 50 33 20 69  f P3>0 then P3 i
1f7a0 73 20 61 20 72 65 67 69 73 74 65 72 20 69 6e 20  s a register in 
1f7b0 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f  the root frame o
1f7c0 66 20 74 68 69 73 20 56 44 42 45 20 74 68 61 74  f this VDBE that
1f7d0 20 68 6f 6c 64 73 20 0a 2a 2a 20 74 68 65 20 6c   holds .** the l
1f7e0 61 72 67 65 73 74 20 70 72 65 76 69 6f 75 73 6c  argest previousl
1f7f0 79 20 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f  y generated reco
1f800 72 64 20 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e 65  rd number. No ne
1f810 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 73  w record numbers
1f820 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20   are.** allowed 
1f830 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20  to be less than 
1f840 74 68 69 73 20 76 61 6c 75 65 2e 20 57 68 65 6e  this value. When
1f850 20 74 68 69 73 20 76 61 6c 75 65 20 72 65 61 63   this value reac
1f860 68 65 73 20 69 74 73 20 6d 61 78 69 6d 75 6d 2c  hes its maximum,
1f870 20 0a 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f 46   .** an SQLITE_F
1f880 55 4c 4c 20 65 72 72 6f 72 20 69 73 20 67 65 6e  ULL error is gen
1f890 65 72 61 74 65 64 2e 20 54 68 65 20 50 33 20 72  erated. The P3 r
1f8a0 65 67 69 73 74 65 72 20 69 73 20 75 70 64 61 74  egister is updat
1f8b0 65 64 20 77 69 74 68 20 74 68 65 20 27 0a 2a 2a  ed with the '.**
1f8c0 20 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72   generated recor
1f8d0 64 20 6e 75 6d 62 65 72 2e 20 54 68 69 73 20 50  d number. This P
1f8e0 33 20 6d 65 63 68 61 6e 69 73 6d 20 69 73 20 75  3 mechanism is u
1f8f0 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70 6c  sed to help impl
1f900 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41 55 54  ement the.** AUT
1f910 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65 61 74 75  OINCREMENT featu
1f920 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  re..*/.case OP_N
1f930 65 77 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20  ewRowid: {      
1f940 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
1f950 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 36 34  release */.  i64
1f960 20 76 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   v;             
1f970 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72      /* The new r
1f980 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62 65 43 75  owid */.  VdbeCu
1f990 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20 20 20  rsor *pC;       
1f9a0 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66 20 74 61   /* Cursor of ta
1f9b0 62 6c 65 20 74 6f 20 67 65 74 20 74 68 65 20 6e  ble to get the n
1f9c0 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 6e  ew rowid */.  in
1f9d0 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20 20  t res;          
1f9e0 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f       /* Result o
1f9f0 66 20 61 6e 20 73 71 6c 69 74 65 33 42 74 72 65  f an sqlite3Btre
1fa00 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 69 6e 74  eLast() */.  int
1fa10 20 63 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20   cnt;           
1fa20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 74      /* Counter t
1fa30 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d 62  o limit the numb
1fa40 65 72 20 6f 66 20 73 65 61 72 63 68 65 73 20 2a  er of searches *
1fa50 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20  /.  Mem *pMem;  
1fa60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
1fa70 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 6c  gister holding l
1fa80 61 72 67 65 73 74 20 72 6f 77 69 64 20 66 6f 72  argest rowid for
1fa90 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a   AUTOINCREMENT *
1faa0 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70  /.  VdbeFrame *p
1fab0 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a 20 52 6f  Frame;     /* Ro
1fac0 6f 74 20 66 72 61 6d 65 20 6f 66 20 56 44 42 45  ot frame of VDBE
1fad0 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a 20 20   */..  v = 0;.  
1fae0 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  res = 0;.  asser
1faf0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1fb00 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
1fb10 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
1fb20 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
1fb30 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
1fb40 20 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28   );.  if( NEVER(
1fb50 70 43 2d 3e 70 43 75 72 73 6f 72 3d 3d 30 29 20  pC->pCursor==0) 
1fb60 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 7a 65  ){.    /* The ze
1fb70 72 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ro initializatio
1fb80 6e 20 61 62 6f 76 65 20 69 73 20 61 6c 6c 20 74  n above is all t
1fb90 68 61 74 20 69 73 20 6e 65 65 64 65 64 20 2a 2f  hat is needed */
1fba0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
1fbb0 20 54 68 65 20 6e 65 78 74 20 72 6f 77 69 64 20   The next rowid 
1fbc0 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  or record number
1fbd0 20 28 64 69 66 66 65 72 65 6e 74 20 74 65 72 6d   (different term
1fbe0 73 20 66 6f 72 20 74 68 65 20 73 61 6d 65 0a 20  s for the same. 
1fbf0 20 20 20 2a 2a 20 74 68 69 6e 67 29 20 69 73 20     ** thing) is 
1fc00 6f 62 74 61 69 6e 65 64 20 69 6e 20 61 20 74 77  obtained in a tw
1fc10 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69 74 68 6d  o-step algorithm
1fc20 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
1fc30 46 69 72 73 74 20 77 65 20 61 74 74 65 6d 70 74  First we attempt
1fc40 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 72   to find the lar
1fc50 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f  gest existing ro
1fc60 77 69 64 20 61 6e 64 20 61 64 64 20 6f 6e 65 0a  wid and add one.
1fc70 20 20 20 20 2a 2a 20 74 6f 20 74 68 61 74 2e 20      ** to that. 
1fc80 20 42 75 74 20 69 66 20 74 68 65 20 6c 61 72 67   But if the larg
1fc90 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77  est existing row
1fca0 69 64 20 69 73 20 61 6c 72 65 61 64 79 20 74 68  id is already th
1fcb0 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20 2a 2a  e maximum.    **
1fcc0 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65   positive intege
1fcd0 72 2c 20 77 65 20 68 61 76 65 20 74 6f 20 66 61  r, we have to fa
1fce0 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
1fcf0 65 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a 2a 20  e second.    ** 
1fd00 70 72 6f 62 61 62 69 6c 69 73 74 69 63 20 61 6c  probabilistic al
1fd10 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a 0a 20  gorithm.    **. 
1fd20 20 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64     ** The second
1fd30 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 74 6f   algorithm is to
1fd40 20 73 65 6c 65 63 74 20 61 20 72 6f 77 69 64 20   select a rowid 
1fd50 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 73 65  at random and se
1fd60 65 20 69 66 0a 20 20 20 20 2a 2a 20 69 74 20 61  e if.    ** it a
1fd70 6c 72 65 61 64 79 20 65 78 69 73 74 73 20 69 6e  lready exists in
1fd80 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20   the table.  If 
1fd90 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  it does not exis
1fda0 74 2c 20 77 65 20 68 61 76 65 0a 20 20 20 20 2a  t, we have.    *
1fdb0 2a 20 73 75 63 63 65 65 64 65 64 2e 20 20 49 66  * succeeded.  If
1fdc0 20 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f 77 69   the random rowi
1fdd0 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20 77 65  d does exist, we
1fde0 20 73 65 6c 65 63 74 20 61 20 6e 65 77 20 6f 6e   select a new on
1fdf0 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74 72 79  e.    ** and try
1fe00 20 61 67 61 69 6e 2c 20 75 70 20 74 6f 20 31 30   again, up to 10
1fe10 30 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a  0 times..    */.
1fe20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
1fe30 69 73 54 61 62 6c 65 20 29 3b 0a 0a 23 69 66 64  isTable );..#ifd
1fe40 65 66 20 53 51 4c 49 54 45 5f 33 32 42 49 54 5f  ef SQLITE_32BIT_
1fe50 52 4f 57 49 44 0a 23 20 20 20 64 65 66 69 6e 65  ROWID.#   define
1fe60 20 4d 41 58 5f 52 4f 57 49 44 20 30 78 37 66 66   MAX_ROWID 0x7ff
1fe70 66 66 66 66 66 0a 23 65 6c 73 65 0a 20 20 20 20  fffff.#else.    
1fe80 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72  /* Some compiler
1fe90 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74  s complain about
1fea0 20 63 6f 6e 73 74 61 6e 74 73 20 6f 66 20 74 68   constants of th
1feb0 65 20 66 6f 72 6d 20 30 78 37 66 66 66 66 66 66  e form 0x7ffffff
1fec0 66 66 66 66 66 66 66 66 66 2e 0a 20 20 20 20 2a  fffffffff..    *
1fed0 2a 20 4f 74 68 65 72 73 20 63 6f 6d 70 6c 61 69  * Others complai
1fee0 6e 20 61 62 6f 75 74 20 30 78 37 66 66 66 66 66  n about 0x7fffff
1fef0 66 66 66 66 66 66 66 66 66 66 66 4c 4c 2e 20 20  fffffffffffLL.  
1ff00 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
1ff10 63 72 6f 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a  cro seems.    **
1ff20 20 74 6f 20 70 72 6f 76 69 64 65 20 74 68 65 20   to provide the 
1ff30 63 6f 6e 73 74 61 6e 74 20 77 68 69 6c 65 20 6d  constant while m
1ff40 61 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c  aking all compil
1ff50 65 72 73 20 68 61 70 70 79 2e 0a 20 20 20 20 2a  ers happy..    *
1ff60 2f 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58  /.#   define MAX
1ff70 5f 52 4f 57 49 44 20 20 28 69 36 34 29 28 20 28  _ROWID  (i64)( (
1ff80 28 28 75 36 34 29 30 78 37 66 66 66 66 66 66 66  ((u64)0x7fffffff
1ff90 29 3c 3c 33 32 29 20 7c 20 28 75 36 34 29 30 78  )<<32) | (u64)0x
1ffa0 66 66 66 66 66 66 66 66 20 29 0a 23 65 6e 64 69  ffffffff ).#endi
1ffb0 66 0a 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e  f..    if( !pC->
1ffc0 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29  useRandomRowid )
1ffd0 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
1ffe0 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43  ite3BtreeLast(pC
1fff0 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  ->pCursor, &res)
20000 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
20010 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
20020 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
20030 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
20040 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
20050 72 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20 76  res ){.        v
20060 20 3d 20 31 3b 20 20 20 2f 2a 20 49 4d 50 3a 20   = 1;   /* IMP: 
20070 52 2d 36 31 39 31 34 2d 34 38 30 37 34 20 2a 2f  R-61914-48074 */
20080 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
20090 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
200a0 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
200b0 49 73 56 61 6c 69 64 28 70 43 2d 3e 70 43 75 72  IsValid(pC->pCur
200c0 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20  sor) );.        
200d0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
200e0 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75  eKeySize(pC->pCu
200f0 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 20  rsor, &v);.     
20100 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
20110 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a  QLITE_OK );   /*
20120 20 43 61 6e 6e 6f 74 20 66 61 69 6c 20 66 6f 6c   Cannot fail fol
20130 6c 6f 77 69 6e 67 20 42 74 72 65 65 4c 61 73 74  lowing BtreeLast
20140 28 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  () */.        if
20150 28 20 76 3e 3d 4d 41 58 5f 52 4f 57 49 44 20 29  ( v>=MAX_ROWID )
20160 7b 0a 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e  {.          pC->
20170 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 3d  useRandomRowid =
20180 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73   1;.        }els
20190 65 7b 0a 20 20 20 20 20 20 20 20 20 20 76 2b 2b  e{.          v++
201a0 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 39  ;   /* IMP: R-29
201b0 35 33 38 2d 33 34 39 38 37 20 2a 2f 0a 20 20 20  538-34987 */.   
201c0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
201d0 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51     }..#ifndef SQ
201e0 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
201f0 43 52 45 4d 45 4e 54 0a 20 20 20 20 69 66 28 20  CREMENT.    if( 
20200 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 20  pOp->p3 ){.     
20210 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20   /* Assert that 
20220 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65  P3 is a valid me
20230 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20  mory cell. */.  
20240 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
20250 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 69  >p3>0 );.      i
20260 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a  f( p->pFrame ){.
20270 20 20 20 20 20 20 20 20 66 6f 72 28 70 46 72 61          for(pFra
20280 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46  me=p->pFrame; pF
20290 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70  rame->pParent; p
202a0 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50  Frame=pFrame->pP
202b0 61 72 65 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  arent);.        
202c0 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50  /* Assert that P
202d0 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d  3 is a valid mem
202e0 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20  ory cell. */.   
202f0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
20300 2d 3e 70 33 3c 3d 70 46 72 61 6d 65 2d 3e 6e 4d  ->p3<=pFrame->nM
20310 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20 70 4d  em );.        pM
20320 65 6d 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d  em = &pFrame->aM
20330 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
20340 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
20350 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
20360 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d   P3 is a valid m
20370 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20  emory cell. */. 
20380 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
20390 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
203a0 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
203b0 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26          pMem = &
203c0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
203d0 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54         memAboutT
203e0 6f 43 68 61 6e 67 65 28 70 2c 20 70 4d 65 6d 29  oChange(p, pMem)
203f0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
20400 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
20410 69 64 28 70 4d 65 6d 29 20 29 3b 0a 0a 20 20 20  id(pMem) );..   
20420 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
20430 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d 29  E(pOp->p3, pMem)
20440 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
20450 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
20460 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 61 73  (pMem);.      as
20470 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61  sert( (pMem->fla
20480 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
20490 20 29 3b 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20   );  /* mem(P3) 
204a0 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72  holds an integer
204b0 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4d   */.      if( pM
204c0 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57  em->u.i==MAX_ROW
204d0 49 44 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e  ID || pC->useRan
204e0 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20  domRowid ){.    
204f0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
20500 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20  FULL;   /* IMP: 
20510 52 2d 31 32 32 37 35 2d 36 31 33 33 38 20 2a 2f  R-12275-61338 */
20520 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
20530 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
20540 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
20550 69 66 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b  if( v<pMem->u.i+
20560 31 20 29 7b 0a 20 20 20 20 20 20 20 20 76 20 3d  1 ){.        v =
20570 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a   pMem->u.i + 1;.
20580 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 4d        }.      pM
20590 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20  em->u.i = v;.   
205a0 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66   }.#endif.    if
205b0 28 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52  ( pC->useRandomR
205c0 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 2f 2a  owid ){.      /*
205d0 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d   IMPLEMENTATION-
205e0 4f 46 3a 20 52 2d 30 37 36 37 37 2d 34 31 38 38  OF: R-07677-4188
205f0 31 20 49 66 20 74 68 65 20 6c 61 72 67 65 73 74  1 If the largest
20600 20 52 4f 57 49 44 20 69 73 20 65 71 75 61 6c 20   ROWID is equal 
20610 74 6f 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20  to the.      ** 
20620 6c 61 72 67 65 73 74 20 70 6f 73 73 69 62 6c 65  largest possible
20630 20 69 6e 74 65 67 65 72 20 28 39 32 32 33 33 37   integer (922337
20640 32 30 33 36 38 35 34 37 37 35 38 30 37 29 20 74  2036854775807) t
20650 68 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  hen the database
20660 0a 20 20 20 20 20 20 2a 2a 20 65 6e 67 69 6e 65  .      ** engine
20670 20 73 74 61 72 74 73 20 70 69 63 6b 69 6e 67 20   starts picking 
20680 70 6f 73 69 74 69 76 65 20 63 61 6e 64 69 64 61  positive candida
20690 74 65 20 52 4f 57 49 44 73 20 61 74 20 72 61 6e  te ROWIDs at ran
206a0 64 6f 6d 20 75 6e 74 69 6c 0a 20 20 20 20 20 20  dom until.      
206b0 2a 2a 20 69 74 20 66 69 6e 64 73 20 6f 6e 65 20  ** it finds one 
206c0 74 68 61 74 20 69 73 20 6e 6f 74 20 70 72 65 76  that is not prev
206d0 69 6f 75 73 6c 79 20 75 73 65 64 2e 20 2a 2f 0a  iously used. */.
206e0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
206f0 70 2d 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20  p->p3==0 );  /* 
20700 57 65 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20  We cannot be in 
20710 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 6d 6f 64  random rowid mod
20720 65 20 69 66 20 74 68 69 73 20 69 73 0a 20 20 20  e if this is.   
20730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20740 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 6e 20            ** an 
20750 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61  AUTOINCREMENT ta
20760 62 6c 65 2e 20 2a 2f 0a 20 20 20 20 20 20 2f 2a  ble. */.      /*
20770 20 6f 6e 20 74 68 65 20 66 69 72 73 74 20 61 74   on the first at
20780 74 65 6d 70 74 2c 20 73 69 6d 70 6c 79 20 64 6f  tempt, simply do
20790 20 6f 6e 65 20 6d 6f 72 65 20 74 68 61 6e 20 70   one more than p
207a0 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20  revious */.     
207b0 20 76 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a   v = lastRowid;.
207c0 20 20 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f        v &= (MAX_
207d0 52 4f 57 49 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e  ROWID>>1); /* en
207e0 73 75 72 65 20 64 6f 65 73 6e 27 74 20 67 6f 20  sure doesn't go 
207f0 6e 65 67 61 74 69 76 65 20 2a 2f 0a 20 20 20 20  negative */.    
20800 20 20 76 2b 2b 3b 20 2f 2a 20 65 6e 73 75 72 65    v++; /* ensure
20810 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20   non-zero */.   
20820 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20     cnt = 0;.    
20830 20 20 77 68 69 6c 65 28 20 20 20 28 28 72 63 20    while(   ((rc 
20840 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
20850 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
20860 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36  >pCursor, 0, (u6
20870 34 29 76 2c 0a 20 20 20 20 20 20 20 20 20 20 20  4)v,.           
20880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
208a0 20 20 20 20 20 20 30 2c 20 26 72 65 73 29 29 3d        0, &res))=
208b0 3d 53 51 4c 49 54 45 5f 4f 4b 29 0a 20 20 20 20  =SQLITE_OK).    
208c0 20 20 20 20 20 20 20 20 26 26 20 28 72 65 73 3d          && (res=
208d0 3d 30 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  =0).            
208e0 26 26 20 28 2b 2b 63 6e 74 3c 31 30 30 29 29 7b  && (++cnt<100)){
208f0 0a 20 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c 6c  .        /* coll
20900 69 73 69 6f 6e 20 2d 20 74 72 79 20 61 6e 6f 74  ision - try anot
20910 68 65 72 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64  her random rowid
20920 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 71 6c 69   */.        sqli
20930 74 65 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73  te3_randomness(s
20940 69 7a 65 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20  izeof(v), &v);. 
20950 20 20 20 20 20 20 20 69 66 28 20 63 6e 74 3c 35         if( cnt<5
20960 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a   ){.          /*
20970 20 74 72 79 20 22 73 6d 61 6c 6c 22 20 72 61 6e   try "small" ran
20980 64 6f 6d 20 72 6f 77 69 64 73 20 66 6f 72 20 74  dom rowids for t
20990 68 65 20 69 6e 69 74 69 61 6c 20 61 74 74 65 6d  he initial attem
209a0 70 74 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  pts */.         
209b0 20 76 20 26 3d 20 30 78 66 66 66 66 66 66 3b 0a   v &= 0xffffff;.
209c0 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
209d0 20 20 20 20 20 20 20 20 20 76 20 26 3d 20 28 4d           v &= (M
209e0 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b 20 2f 2a  AX_ROWID>>1); /*
209f0 20 65 6e 73 75 72 65 20 64 6f 65 73 6e 27 74 20   ensure doesn't 
20a00 67 6f 20 6e 65 67 61 74 69 76 65 20 2a 2f 0a 20  go negative */. 
20a10 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
20a20 20 76 2b 2b 3b 20 2f 2a 20 65 6e 73 75 72 65 20   v++; /* ensure 
20a30 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20 20  non-zero */.    
20a40 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72 63    }.      if( rc
20a50 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72  ==SQLITE_OK && r
20a60 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  es==0 ){.       
20a70 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c   rc = SQLITE_FUL
20a80 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33  L;   /* IMP: R-3
20a90 38 32 31 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20  8219-53002 */.  
20aa0 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
20ab0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
20ac0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73       }.      ass
20ad0 65 72 74 28 20 76 3e 30 20 29 3b 20 20 2f 2a 20  ert( v>0 );  /* 
20ae0 45 56 3a 20 52 2d 34 30 38 31 32 2d 30 33 35 37  EV: R-40812-0357
20af0 30 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 70  0 */.    }.    p
20b00 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
20b10 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66  = 0;.    pC->def
20b20 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
20b30 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
20b40 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
20b50 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  LE;.  }.  pOut->
20b60 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b  u.i = v;.  break
20b70 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
20b80 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 20  Insert P1 P2 P3 
20b90 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
20ba0 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 20  s: intkey=r[P3] 
20bb0 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  data=r[P2].**.**
20bc0 20 57 72 69 74 65 20 61 6e 20 65 6e 74 72 79 20   Write an entry 
20bd0 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 6f  into the table o
20be0 66 20 63 75 72 73 6f 72 20 50 31 2e 20 20 41 20  f cursor P1.  A 
20bf0 6e 65 77 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20  new entry is.** 
20c00 63 72 65 61 74 65 64 20 69 66 20 69 74 20 64 6f  created if it do
20c10 65 73 6e 27 74 20 61 6c 72 65 61 64 79 20 65 78  esn't already ex
20c20 69 73 74 20 6f 72 20 74 68 65 20 64 61 74 61 20  ist or the data 
20c30 66 6f 72 20 61 6e 20 65 78 69 73 74 69 6e 67 0a  for an existing.
20c40 2a 2a 20 65 6e 74 72 79 20 69 73 20 6f 76 65 72  ** entry is over
20c50 77 72 69 74 74 65 6e 2e 20 20 54 68 65 20 64 61  written.  The da
20c60 74 61 20 69 73 20 74 68 65 20 76 61 6c 75 65 20  ta is the value 
20c70 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20  MEM_Blob stored 
20c80 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e  in register.** n
20c90 75 6d 62 65 72 20 50 32 2e 20 54 68 65 20 6b 65  umber P2. The ke
20ca0 79 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  y is stored in r
20cb0 65 67 69 73 74 65 72 20 50 33 2e 20 54 68 65 20  egister P3. The 
20cc0 6b 65 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61  key must.** be a
20cd0 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20   MEM_Int..**.** 
20ce0 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  If the OPFLAG_NC
20cf0 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 35  HANGE flag of P5
20d00 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68   is set, then th
20d10 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75  e row change cou
20d20 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65  nt is.** increme
20d30 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20  nted (otherwise 
20d40 6e 6f 74 29 2e 20 20 49 66 20 74 68 65 20 4f 50  not).  If the OP
20d50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 66  FLAG_LASTROWID f
20d60 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
20d70 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64 20  ,.** then rowid 
20d80 69 73 20 73 74 6f 72 65 64 20 66 6f 72 20 73 75  is stored for su
20d90 62 73 65 71 75 65 6e 74 20 72 65 74 75 72 6e 20  bsequent return 
20da0 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  by the.** sqlite
20db0 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  3_last_insert_ro
20dc0 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 28  wid() function (
20dd0 6f 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20  otherwise it is 
20de0 75 6e 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a  unmodified)..**.
20df0 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
20e00 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66  _USESEEKRESULT f
20e10 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
20e20 20 61 6e 64 20 69 66 20 74 68 65 20 72 65 73 75   and if the resu
20e30 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 6c 61 73  lt of.** the las
20e40 74 20 73 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e  t seek operation
20e50 20 28 4f 50 5f 4e 6f 74 45 78 69 73 74 73 29 20   (OP_NotExists) 
20e60 77 61 73 20 61 20 73 75 63 63 65 73 73 2c 20 74  was a success, t
20e70 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72  hen this.** oper
20e80 61 74 69 6f 6e 20 77 69 6c 6c 20 6e 6f 74 20 61  ation will not a
20e90 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74  ttempt to find t
20ea0 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 72  he appropriate r
20eb0 6f 77 20 62 65 66 6f 72 65 20 64 6f 69 6e 67 0a  ow before doing.
20ec0 2a 2a 20 74 68 65 20 69 6e 73 65 72 74 20 62 75  ** the insert bu
20ed0 74 20 77 69 6c 6c 20 69 6e 73 74 65 61 64 20 6f  t will instead o
20ee0 76 65 72 77 72 69 74 65 20 74 68 65 20 72 6f 77  verwrite the row
20ef0 20 74 68 61 74 20 74 68 65 20 63 75 72 73 6f 72   that the cursor
20f00 20 69 73 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79   is.** currently
20f10 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 50   pointing to.  P
20f20 72 65 73 75 6d 61 62 6c 79 2c 20 74 68 65 20 70  resumably, the p
20f30 72 69 6f 72 20 4f 50 5f 4e 6f 74 45 78 69 73 74  rior OP_NotExist
20f40 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 68 61 73 20  s opcode.** has 
20f50 61 6c 72 65 61 64 79 20 70 6f 73 69 74 69 6f 6e  already position
20f60 65 64 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  ed the cursor co
20f70 72 72 65 63 74 6c 79 2e 20 20 54 68 69 73 20 69  rrectly.  This i
20f80 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f  s an optimizatio
20f90 6e 0a 2a 2a 20 74 68 61 74 20 62 6f 6f 73 74 73  n.** that boosts
20fa0 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 62 79 20   performance by 
20fb0 61 76 6f 69 64 69 6e 67 20 72 65 64 75 6e 64 61  avoiding redunda
20fc0 6e 74 20 73 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20  nt seeks..**.** 
20fd0 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53  If the OPFLAG_IS
20fe0 55 50 44 41 54 45 20 66 6c 61 67 20 69 73 20 73  UPDATE flag is s
20ff0 65 74 2c 20 74 68 65 6e 20 74 68 69 73 20 6f 70  et, then this op
21000 63 6f 64 65 20 69 73 20 70 61 72 74 20 6f 66 20  code is part of 
21010 61 6e 0a 2a 2a 20 55 50 44 41 54 45 20 6f 70 65  an.** UPDATE ope
21020 72 61 74 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69  ration.  Otherwi
21030 73 65 20 28 69 66 20 74 68 65 20 66 6c 61 67 20  se (if the flag 
21040 69 73 20 63 6c 65 61 72 29 20 74 68 65 6e 20 74  is clear) then t
21050 68 69 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73  his opcode.** is
21060 20 70 61 72 74 20 6f 66 20 61 6e 20 49 4e 53 45   part of an INSE
21070 52 54 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54  RT operation.  T
21080 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 69 73  he difference is
21090 20 6f 6e 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20   only important 
210a0 74 6f 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65  to.** the update
210b0 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72   hook..**.** Par
210c0 61 6d 65 74 65 72 20 50 34 20 6d 61 79 20 70 6f  ameter P4 may po
210d0 69 6e 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20  int to a string 
210e0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
210f0 61 62 6c 65 2d 6e 61 6d 65 2c 20 6f 72 0a 2a 2a  able-name, or.**
21100 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66   may be NULL. If
21110 20 69 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   it is not NULL,
21120 20 74 68 65 6e 20 74 68 65 20 75 70 64 61 74 65   then the update
21130 2d 68 6f 6f 6b 20 0a 2a 2a 20 28 73 71 6c 69 74  -hook .** (sqlit
21140 65 33 2e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  e3.xUpdateCallba
21150 63 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 66  ck) is invoked f
21160 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63 63 65  ollowing a succe
21170 73 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a  ssful insert..**
21180 0a 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44  .** (WARNING/TOD
21190 4f 3a 20 49 66 20 50 31 20 69 73 20 61 20 70 73  O: If P1 is a ps
211a0 65 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20  eudo-cursor and 
211b0 50 32 20 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c  P2 is dynamicall
211c0 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20  y.** allocated, 
211d0 74 68 65 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f  then ownership o
211e0 66 20 50 32 20 69 73 20 74 72 61 6e 73 66 65 72  f P2 is transfer
211f0 72 65 64 20 74 6f 20 74 68 65 20 70 73 65 75 64  red to the pseud
21200 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20  o-cursor.** and 
21210 72 65 67 69 73 74 65 72 20 50 32 20 62 65 63 6f  register P2 beco
21220 6d 65 73 20 65 70 68 65 6d 65 72 61 6c 2e 20 20  mes ephemeral.  
21230 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  If the cursor is
21240 20 63 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a   changed, the.**
21250 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
21260 65 72 20 50 32 20 77 69 6c 6c 20 74 68 65 6e 20  er P2 will then 
21270 63 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75  change.  Make su
21280 72 65 20 74 68 69 73 20 64 6f 65 73 20 6e 6f 74  re this does not
21290 0a 2a 2a 20 63 61 75 73 65 20 61 6e 79 20 70 72  .** cause any pr
212a0 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54  oblems.).**.** T
212b0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
212c0 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61  only works on ta
212d0 62 6c 65 73 2e 20 20 54 68 65 20 65 71 75 69 76  bles.  The equiv
212e0 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  alent instructio
212f0 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65 73  n.** for indices
21300 20 69 73 20 4f 50 5f 49 64 78 49 6e 73 65 72 74   is OP_IdxInsert
21310 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
21320 49 6e 73 65 72 74 49 6e 74 20 50 31 20 50 32 20  InsertInt P1 P2 
21330 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
21340 70 73 69 73 3a 20 20 69 6e 74 6b 65 79 3d 50 33  psis:  intkey=P3
21350 20 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a   data=r[P2].**.*
21360 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 65 78 61  * This works exa
21370 63 74 6c 79 20 6c 69 6b 65 20 4f 50 5f 49 6e 73  ctly like OP_Ins
21380 65 72 74 20 65 78 63 65 70 74 20 74 68 61 74 20  ert except that 
21390 74 68 65 20 6b 65 79 20 69 73 20 74 68 65 0a 2a  the key is the.*
213a0 2a 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * integer value 
213b0 50 33 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c 75  P3, not the valu
213c0 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72  e of the integer
213d0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
213e0 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20  ter P3..*/.case 
213f0 4f 50 5f 49 6e 73 65 72 74 3a 20 0a 63 61 73 65  OP_Insert: .case
21400 20 4f 50 5f 49 6e 73 65 72 74 49 6e 74 3a 20 7b   OP_InsertInt: {
21410 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 3b 20 20  .  Mem *pData;  
21420 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c       /* MEM cell
21430 20 68 6f 6c 64 69 6e 67 20 64 61 74 61 20 66 6f   holding data fo
21440 72 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  r the record to 
21450 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20  be inserted */. 
21460 20 4d 65 6d 20 2a 70 4b 65 79 3b 20 20 20 20 20   Mem *pKey;     
21470 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68     /* MEM cell h
21480 6f 6c 64 69 6e 67 20 6b 65 79 20 20 66 6f 72 20  olding key  for 
21490 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
214a0 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20 20  i64 iKey;       
214b0 20 20 2f 2a 20 54 68 65 20 69 6e 74 65 67 65 72    /* The integer
214c0 20 52 4f 57 49 44 20 6f 72 20 6b 65 79 20 66 6f   ROWID or key fo
214d0 72 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  r the record to 
214e0 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20  be inserted */. 
214f0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
21500 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 74 6f 20     /* Cursor to 
21510 74 61 62 6c 65 20 69 6e 74 6f 20 77 68 69 63 68  table into which
21520 20 69 6e 73 65 72 74 20 69 73 20 77 72 69 74 74   insert is writt
21530 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72  en */.  int nZer
21540 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  o;        /* Num
21550 62 65 72 20 6f 66 20 7a 65 72 6f 2d 62 79 74 65  ber of zero-byte
21560 73 20 74 6f 20 61 70 70 65 6e 64 20 2a 2f 0a 20  s to append */. 
21570 20 69 6e 74 20 73 65 65 6b 52 65 73 75 6c 74 3b   int seekResult;
21580 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20     /* Result of 
21590 70 72 69 6f 72 20 73 65 65 6b 20 6f 72 20 30 20  prior seek or 0 
215a0 69 66 20 6e 6f 20 55 53 45 53 45 45 4b 52 45 53  if no USESEEKRES
215b0 55 4c 54 20 66 6c 61 67 20 2a 2f 0a 20 20 63 6f  ULT flag */.  co
215c0 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20  nst char *zDb;  
215d0 2f 2a 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  /* database name
215e0 20 2d 20 75 73 65 64 20 62 79 20 74 68 65 20 75   - used by the u
215f0 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20  pdate hook */.  
21600 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 62 6c  const char *zTbl
21610 3b 20 2f 2a 20 54 61 62 6c 65 20 6e 61 6d 65 20  ; /* Table name 
21620 2d 20 75 73 65 64 20 62 79 20 74 68 65 20 6f 70  - used by the op
21630 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 69  date hook */.  i
21640 6e 74 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  nt op;          
21650 20 2f 2a 20 4f 70 63 6f 64 65 20 66 6f 72 20 75   /* Opcode for u
21660 70 64 61 74 65 20 68 6f 6f 6b 3a 20 53 51 4c 49  pdate hook: SQLI
21670 54 45 5f 55 50 44 41 54 45 20 6f 72 20 53 51 4c  TE_UPDATE or SQL
21680 49 54 45 5f 49 4e 53 45 52 54 20 2a 2f 0a 0a 20  ITE_INSERT */.. 
21690 20 70 44 61 74 61 20 3d 20 26 61 4d 65 6d 5b 70   pData = &aMem[p
216a0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
216b0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
216c0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
216d0 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
216e0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 44 61 74   memIsValid(pDat
216f0 61 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  a) );.  pC = p->
21700 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
21710 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
21720 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
21730 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  >pCursor!=0 );. 
21740 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65   assert( pC->pse
21750 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29  udoTableReg==0 )
21760 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
21770 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 52 45 47  isTable );.  REG
21780 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
21790 3e 70 32 2c 20 70 44 61 74 61 29 3b 0a 0a 20 20  >p2, pData);..  
217a0 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
217b0 3d 4f 50 5f 49 6e 73 65 72 74 20 29 7b 0a 20 20  =OP_Insert ){.  
217c0 20 20 70 4b 65 79 20 3d 20 26 61 4d 65 6d 5b 70    pKey = &aMem[p
217d0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73  Op->p3];.    ass
217e0 65 72 74 28 20 70 4b 65 79 2d 3e 66 6c 61 67 73  ert( pKey->flags
217f0 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
21800 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
21810 61 6c 69 64 28 70 4b 65 79 29 20 29 3b 0a 20 20  alid(pKey) );.  
21820 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
21830 28 70 4f 70 2d 3e 70 33 2c 20 70 4b 65 79 29 3b  (pOp->p3, pKey);
21840 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 4b 65 79  .    iKey = pKey
21850 2d 3e 75 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ->u.i;.  }else{.
21860 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
21870 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65  >opcode==OP_Inse
21880 72 74 49 6e 74 20 29 3b 0a 20 20 20 20 69 4b 65  rtInt );.    iKe
21890 79 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d  y = pOp->p3;.  }
218a0 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ..  if( pOp->p5 
218b0 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  & OPFLAG_NCHANGE
218c0 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b   ) p->nChange++;
218d0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
218e0 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49   OPFLAG_LASTROWI
218f0 44 20 29 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  D ) db->lastRowi
21900 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 20 3d 20  d = lastRowid = 
21910 69 4b 65 79 3b 0a 20 20 69 66 28 20 70 44 61 74  iKey;.  if( pDat
21920 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  a->flags & MEM_N
21930 75 6c 6c 20 29 7b 0a 20 20 20 20 70 44 61 74 61  ull ){.    pData
21940 2d 3e 7a 20 3d 20 30 3b 0a 20 20 20 20 70 44 61  ->z = 0;.    pDa
21950 74 61 2d 3e 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c  ta->n = 0;.  }el
21960 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
21970 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 28  pData->flags & (
21980 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72  MEM_Blob|MEM_Str
21990 29 20 29 3b 0a 20 20 7d 0a 20 20 73 65 65 6b 52  ) );.  }.  seekR
219a0 65 73 75 6c 74 20 3d 20 28 28 70 4f 70 2d 3e 70  esult = ((pOp->p
219b0 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  5 & OPFLAG_USESE
219c0 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e  EKRESULT) ? pC->
219d0 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 3b  seekResult : 0);
219e0 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c  .  if( pData->fl
219f0 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29  ags & MEM_Zero )
21a00 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d 20 70 44  {.    nZero = pD
21a10 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20  ata->u.nZero;.  
21a20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 5a 65 72 6f  }else{.    nZero
21a30 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72 63 20 3d   = 0;.  }.  rc =
21a40 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73   sqlite3BtreeIns
21a50 65 72 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ert(pC->pCursor,
21a60 20 30 2c 20 69 4b 65 79 2c 0a 20 20 20 20 20 20   0, iKey,.      
21a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a80 20 20 20 20 70 44 61 74 61 2d 3e 7a 2c 20 70 44      pData->z, pD
21a90 61 74 61 2d 3e 6e 2c 20 6e 5a 65 72 6f 2c 0a 20  ata->n, nZero,. 
21aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ab0 20 20 20 20 20 20 20 20 20 28 70 4f 70 2d 3e 70           (pOp->p
21ac0 35 20 26 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e  5 & OPFLAG_APPEN
21ad0 44 29 21 3d 30 2c 20 73 65 65 6b 52 65 73 75 6c  D)!=0, seekResul
21ae0 74 0a 20 20 29 3b 0a 20 20 70 43 2d 3e 72 6f 77  t.  );.  pC->row
21af0 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
21b00 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
21b10 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  eto = 0;.  pC->c
21b20 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
21b30 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20  HE_STALE;..  /* 
21b40 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74  Invoke the updat
21b50 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72  e-hook if requir
21b60 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d  ed. */.  if( rc=
21b70 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62  =SQLITE_OK && db
21b80 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
21b90 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29  k && pOp->p4.z )
21ba0 7b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e  {.    zDb = db->
21bb0 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61  aDb[pC->iDb].zNa
21bc0 6d 65 3b 0a 20 20 20 20 7a 54 62 6c 20 3d 20 70  me;.    zTbl = p
21bd0 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 6f 70  Op->p4.z;.    op
21be0 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f   = ((pOp->p5 & O
21bf0 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20  PFLAG_ISUPDATE) 
21c00 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20  ? SQLITE_UPDATE 
21c10 3a 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 29  : SQLITE_INSERT)
21c20 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
21c30 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20  ->isTable );.   
21c40 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
21c50 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65  back(db->pUpdate
21c60 41 72 67 2c 20 6f 70 2c 20 7a 44 62 2c 20 7a 54  Arg, op, zDb, zT
21c70 62 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20 61  bl, iKey);.    a
21c80 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d  ssert( pC->iDb>=
21c90 30 20 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  0 );.  }.  break
21ca0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
21cb0 44 65 6c 65 74 65 20 50 31 20 50 32 20 2a 20 50  Delete P1 P2 * P
21cc0 34 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65  4 *.**.** Delete
21cd0 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 20 77   the record at w
21ce0 68 69 63 68 20 74 68 65 20 50 31 20 63 75 72 73  hich the P1 curs
21cf0 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  or is currently 
21d00 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20  pointing..**.** 
21d10 54 68 65 20 63 75 72 73 6f 72 20 77 69 6c 6c 20  The cursor will 
21d20 62 65 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67  be left pointing
21d30 20 61 74 20 65 69 74 68 65 72 20 74 68 65 20 6e   at either the n
21d40 65 78 74 20 6f 72 20 74 68 65 20 70 72 65 76 69  ext or the previ
21d50 6f 75 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e  ous.** record in
21d60 20 74 68 65 20 74 61 62 6c 65 2e 20 49 66 20 69   the table. If i
21d70 74 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69  t is left pointi
21d80 6e 67 20 61 74 20 74 68 65 20 6e 65 78 74 20 72  ng at the next r
21d90 65 63 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74  ecord, then.** t
21da0 68 65 20 6e 65 78 74 20 4e 65 78 74 20 69 6e 73  he next Next ins
21db0 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65  truction will be
21dc0 20 61 20 6e 6f 2d 6f 70 2e 20 20 48 65 6e 63 65   a no-op.  Hence
21dd0 20 69 74 20 69 73 20 4f 4b 20 74 6f 20 64 65 6c   it is OK to del
21de0 65 74 65 0a 2a 2a 20 61 20 72 65 63 6f 72 64 20  ete.** a record 
21df0 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20 4e  from within an N
21e00 65 78 74 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20  ext loop..**.** 
21e10 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  If the OPFLAG_NC
21e20 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 32  HANGE flag of P2
21e30 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68   is set, then th
21e40 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75  e row change cou
21e50 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65  nt is.** increme
21e60 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20  nted (otherwise 
21e70 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d  not)..**.** P1 m
21e80 75 73 74 20 6e 6f 74 20 62 65 20 70 73 65 75 64  ust not be pseud
21e90 6f 2d 74 61 62 6c 65 2e 20 20 49 74 20 68 61 73  o-table.  It has
21ea0 20 74 6f 20 62 65 20 61 20 72 65 61 6c 20 74 61   to be a real ta
21eb0 62 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74  ble with.** mult
21ec0 69 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a  iple rows..**.**
21ed0 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55   If P4 is not NU
21ee0 4c 4c 2c 20 74 68 65 6e 20 69 74 20 69 73 20 74  LL, then it is t
21ef0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
21f00 61 62 6c 65 20 74 68 61 74 20 50 31 20 69 73 0a  able that P1 is.
21f10 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20  ** pointing to. 
21f20 20 54 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b   The update hook
21f30 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64   will be invoked
21f40 2c 20 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a  , if it exists..
21f50 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  ** If P4 is not 
21f60 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 50 31  NULL then the P1
21f70 20 63 75 72 73 6f 72 20 6d 75 73 74 20 68 61 76   cursor must hav
21f80 65 20 62 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65  e been positione
21f90 64 0a 2a 2a 20 75 73 69 6e 67 20 4f 50 5f 4e 6f  d.** using OP_No
21fa0 74 46 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f 20  tFound prior to 
21fb0 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70  invoking this op
21fc0 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  code..*/.case OP
21fd0 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20 69 36 34  _Delete: {.  i64
21fe0 20 69 4b 65 79 3b 0a 20 20 56 64 62 65 43 75 72   iKey;.  VdbeCur
21ff0 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65  sor *pC;..  asse
22000 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
22010 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
22020 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
22030 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
22040 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
22050 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
22060 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  C->pCursor!=0 );
22070 20 20 2f 2a 20 4f 6e 6c 79 20 76 61 6c 69 64 20    /* Only valid 
22080 66 6f 72 20 72 65 61 6c 20 74 61 62 6c 65 73 2c  for real tables,
22090 20 6e 6f 20 70 73 65 75 64 6f 74 61 62 6c 65 73   no pseudotables
220a0 20 2a 2f 0a 20 20 69 4b 65 79 20 3d 20 70 43 2d   */.  iKey = pC-
220b0 3e 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20  >lastRowid;     
220c0 20 2f 2a 20 4f 6e 6c 79 20 75 73 65 64 20 66 6f   /* Only used fo
220d0 72 20 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f  r the update hoo
220e0 6b 20 2a 2f 0a 0a 20 20 2f 2a 20 54 68 65 20 4f  k */..  /* The O
220f0 50 5f 44 65 6c 65 74 65 20 6f 70 63 6f 64 65 20  P_Delete opcode 
22100 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 73 20 61  always follows a
22110 6e 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f  n OP_NotExists o
22120 72 20 4f 50 5f 4c 61 73 74 20 6f 72 0a 20 20 2a  r OP_Last or.  *
22130 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 20 74  * OP_Column on t
22140 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20 77 69  he same table wi
22150 74 68 6f 75 74 20 61 6e 79 20 69 6e 74 65 72 76  thout any interv
22160 65 6e 69 6e 67 20 6f 70 65 72 61 74 69 6f 6e 73  ening operations
22170 20 74 68 61 74 0a 20 20 2a 2a 20 6d 69 67 68 74   that.  ** might
22180 20 6d 6f 76 65 20 6f 72 20 69 6e 76 61 6c 69 64   move or invalid
22190 61 74 65 20 74 68 65 20 63 75 72 73 6f 72 2e 20  ate the cursor. 
221a0 20 48 65 6e 63 65 20 63 75 72 73 6f 72 20 70 43   Hence cursor pC
221b0 20 69 73 20 61 6c 77 61 79 73 20 70 6f 69 6e 74   is always point
221c0 69 6e 67 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20  ing.  ** to the 
221d0 72 6f 77 20 74 6f 20 62 65 20 64 65 6c 65 74 65  row to be delete
221e0 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65  d and the sqlite
221f0 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74  3VdbeCursorMovet
22200 6f 28 29 20 6f 70 65 72 61 74 69 6f 6e 0a 20 20  o() operation.  
22210 2a 2a 20 62 65 6c 6f 77 20 69 73 20 61 6c 77 61  ** below is alwa
22220 79 73 20 61 20 6e 6f 2d 6f 70 20 61 6e 64 20 63  ys a no-op and c
22230 61 6e 6e 6f 74 20 66 61 69 6c 2e 20 20 57 65 20  annot fail.  We 
22240 77 69 6c 6c 20 72 75 6e 20 69 74 20 61 6e 79 68  will run it anyh
22250 6f 77 2c 20 74 68 6f 75 67 68 2c 0a 20 20 2a 2a  ow, though,.  **
22260 20 74 6f 20 67 75 61 72 64 20 61 67 61 69 6e 73   to guard agains
22270 74 20 66 75 74 75 72 65 20 63 68 61 6e 67 65 73  t future changes
22280 20 74 6f 20 74 68 65 20 63 6f 64 65 20 67 65 6e   to the code gen
22290 65 72 61 74 6f 72 2e 0a 20 20 2a 2a 2f 0a 20 20  erator..  **/.  
222a0 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
222b0 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
222c0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
222d0 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
222e0 70 43 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52  pC);.  if( NEVER
222f0 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20  (rc!=SQLITE_OK) 
22300 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
22310 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 72 63  _to_error;..  rc
22320 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
22330 65 6c 65 74 65 28 70 43 2d 3e 70 43 75 72 73 6f  elete(pC->pCurso
22340 72 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53  r);.  pC->cacheS
22350 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
22360 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  ALE;..  /* Invok
22370 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  e the update-hoo
22380 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a  k if required. *
22390 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  /.  if( rc==SQLI
223a0 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70  TE_OK && db->xUp
223b0 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20  dateCallback && 
223c0 70 4f 70 2d 3e 70 34 2e 7a 20 26 26 20 70 43 2d  pOp->p4.z && pC-
223d0 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20  >isTable ){.    
223e0 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
223f0 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41  ack(db->pUpdateA
22400 72 67 2c 20 53 51 4c 49 54 45 5f 44 45 4c 45 54  rg, SQLITE_DELET
22410 45 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  E,.             
22420 20 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61             db->a
22430 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d  Db[pC->iDb].zNam
22440 65 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 69 4b  e, pOp->p4.z, iK
22450 65 79 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ey);.    assert(
22460 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20   pC->iDb>=0 );. 
22470 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32   }.  if( pOp->p2
22480 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47   & OPFLAG_NCHANG
22490 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b  E ) p->nChange++
224a0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 2f 2a 20  ;.  break;.}./* 
224b0 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 43 6f 75  Opcode: ResetCou
224c0 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  nt * * * * *.**.
224d0 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20  ** The value of 
224e0 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  the change count
224f0 65 72 20 69 73 20 63 6f 70 69 65 64 20 74 6f 20  er is copied to 
22500 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
22510 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f  dle.** change co
22520 75 6e 74 65 72 20 28 72 65 74 75 72 6e 65 64 20  unter (returned 
22530 62 79 20 73 75 62 73 65 71 75 65 6e 74 20 63 61  by subsequent ca
22540 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65 33 5f 63  lls to sqlite3_c
22550 68 61 6e 67 65 73 28 29 29 2e 0a 2a 2a 20 54 68  hanges())..** Th
22560 65 6e 20 74 68 65 20 56 4d 73 20 69 6e 74 65 72  en the VMs inter
22570 6e 61 6c 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  nal change count
22580 65 72 20 72 65 73 65 74 73 20 74 6f 20 30 2e 0a  er resets to 0..
22590 2a 2a 20 54 68 69 73 20 69 73 20 75 73 65 64 20  ** This is used 
225a0 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  by trigger progr
225b0 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ams..*/.case OP_
225c0 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b 0a 20 20  ResetCount: {.  
225d0 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68  sqlite3VdbeSetCh
225e0 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68  anges(db, p->nCh
225f0 61 6e 67 65 29 3b 0a 20 20 70 2d 3e 6e 43 68 61  ange);.  p->nCha
22600 6e 67 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b  nge = 0;.  break
22610 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
22620 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 20 50 31  SorterCompare P1
22630 20 50 32 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e   P2 P3 P4.** Syn
22640 6f 70 73 69 73 3a 20 20 69 66 20 6b 65 79 28 50  opsis:  if key(P
22650 31 29 21 3d 72 74 72 69 6d 28 72 5b 50 33 5d 2c  1)!=rtrim(r[P3],
22660 50 34 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P4) goto P2.**.*
22670 2a 20 50 31 20 69 73 20 61 20 73 6f 72 74 65 72  * P1 is a sorter
22680 20 63 75 72 73 6f 72 2e 20 54 68 69 73 20 69 6e   cursor. This in
22690 73 74 72 75 63 74 69 6f 6e 20 63 6f 6d 70 61 72  struction compar
226a0 65 73 20 61 20 70 72 65 66 69 78 20 6f 66 20 74  es a prefix of t
226b0 68 65 0a 2a 2a 20 74 68 65 20 72 65 63 6f 72 64  he.** the record
226c0 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65   blob in registe
226d0 72 20 50 33 20 61 67 61 69 6e 73 74 20 61 20 70  r P3 against a p
226e0 72 65 66 69 78 20 6f 66 20 74 68 65 20 65 6e 74  refix of the ent
226f0 72 79 20 74 68 61 74 20 0a 2a 2a 20 74 68 65 20  ry that .** the 
22700 73 6f 72 74 65 72 20 63 75 72 73 6f 72 20 63 75  sorter cursor cu
22710 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 73 20 74  rrently points t
22720 6f 2e 20 20 54 68 65 20 66 69 6e 61 6c 20 50 34  o.  The final P4
22730 20 66 69 65 6c 64 73 20 6f 66 20 62 6f 74 68 0a   fields of both.
22740 2a 2a 20 74 68 65 20 50 33 20 61 6e 64 20 73 6f  ** the P3 and so
22750 72 74 65 72 20 72 65 63 6f 72 64 20 61 72 65 20  rter record are 
22760 69 67 6e 6f 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49  ignored..**.** I
22770 66 20 65 69 74 68 65 72 20 50 33 20 6f 72 20 74  f either P3 or t
22780 68 65 20 73 6f 72 74 65 72 20 63 6f 6e 74 61 69  he sorter contai
22790 6e 73 20 61 20 4e 55 4c 4c 20 69 6e 20 6f 6e 65  ns a NULL in one
227a0 20 6f 66 20 74 68 65 69 72 20 73 69 67 6e 69 66   of their signif
227b0 69 63 61 6e 74 0a 2a 2a 20 66 69 65 6c 64 73 20  icant.** fields 
227c0 28 6e 6f 74 20 63 6f 75 6e 74 69 6e 67 20 74 68  (not counting th
227d0 65 20 50 34 20 66 69 65 6c 64 73 20 61 74 20 74  e P4 fields at t
227e0 68 65 20 65 6e 64 20 77 68 69 63 68 20 61 72 65  he end which are
227f0 20 69 67 6e 6f 72 65 64 29 20 74 68 65 6e 0a 2a   ignored) then.*
22800 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  * the comparison
22810 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 62   is assumed to b
22820 65 20 65 71 75 61 6c 2e 0a 2a 2a 0a 2a 2a 20 46  e equal..**.** F
22830 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 6e  all through to n
22840 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
22850 69 66 20 74 68 65 20 74 77 6f 20 72 65 63 6f 72  if the two recor
22860 64 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c  ds compare equal
22870 20 74 6f 0a 2a 2a 20 65 61 63 68 20 6f 74 68 65   to.** each othe
22880 72 2e 20 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  r.  Jump to P2 i
22890 66 20 74 68 65 79 20 61 72 65 20 64 69 66 66 65  f they are diffe
228a0 72 65 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  rent..*/.case OP
228b0 5f 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 3a 20  _SorterCompare: 
228c0 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
228d0 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  pC;.  int res;. 
228e0 20 69 6e 74 20 6e 49 67 6e 6f 72 65 3b 0a 0a 20   int nIgnore;.. 
228f0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
22900 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
22910 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  t( isSorter(pC) 
22920 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
22930 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
22940 33 32 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26  32 );.  pIn3 = &
22950 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
22960 20 6e 49 67 6e 6f 72 65 20 3d 20 70 4f 70 2d 3e   nIgnore = pOp->
22970 70 34 2e 69 3b 0a 20 20 72 65 73 20 3d 20 30 3b  p4.i;.  res = 0;
22980 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
22990 64 62 65 53 6f 72 74 65 72 43 6f 6d 70 61 72 65  dbeSorterCompare
229a0 28 70 43 2c 20 70 49 6e 33 2c 20 6e 49 67 6e 6f  (pC, pIn3, nIgno
229b0 72 65 2c 20 26 72 65 73 29 3b 0a 20 20 56 64 62  re, &res);.  Vdb
229c0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
229d0 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65  !=0,2);.  if( re
229e0 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  s ){.    pc = pO
229f0 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62  p->p2-1;.  }.  b
22a00 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63  reak;.};../* Opc
22a10 6f 64 65 3a 20 53 6f 72 74 65 72 44 61 74 61 20  ode: SorterData 
22a20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
22a30 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64  ynopsis: r[P2]=d
22a40 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  ata.**.** Write 
22a50 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
22a60 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 6f 72   the current sor
22a70 74 65 72 20 64 61 74 61 20 66 6f 72 20 73 6f 72  ter data for sor
22a80 74 65 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a  ter cursor P1..*
22a90 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
22aa0 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75  Data: {.  VdbeCu
22ab0 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 4f 75  rsor *pC;..  pOu
22ac0 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
22ad0 32 5d 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70  2];.  pC = p->ap
22ae0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
22af0 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72  assert( isSorter
22b00 28 70 43 29 20 29 3b 0a 20 20 72 63 20 3d 20 73  (pC) );.  rc = s
22b10 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
22b20 52 6f 77 6b 65 79 28 70 43 2c 20 70 4f 75 74 29  Rowkey(pC, pOut)
22b30 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 21 3d  ;.  assert( rc!=
22b40 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 4f  SQLITE_OK || (pO
22b50 75 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ut->flags & MEM_
22b60 42 6c 6f 62 29 20 29 3b 0a 20 20 62 72 65 61 6b  Blob) );.  break
22b70 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
22b80 52 6f 77 44 61 74 61 20 50 31 20 50 32 20 2a 20  RowData P1 P2 * 
22b90 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
22ba0 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a   r[P2]=data.**.*
22bb0 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67  * Write into reg
22bc0 69 73 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d  ister P2 the com
22bd0 70 6c 65 74 65 20 72 6f 77 20 64 61 74 61 20 66  plete row data f
22be0 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a  or cursor P1..**
22bf0 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74   There is no int
22c00 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74  erpretation of t
22c10 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74  he data.  .** It
22c20 20 69 73 20 6a 75 73 74 20 63 6f 70 69 65 64 20   is just copied 
22c30 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67 69  onto the P2 regi
22c40 73 74 65 72 20 65 78 61 63 74 6c 79 20 61 73 20  ster exactly as 
22c50 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20  .** it is found 
22c60 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
22c70 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  file..**.** If t
22c80 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
22c90 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f  t be pointing to
22ca0 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f   a valid row (no
22cb0 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a  t a NULL row).**
22cc0 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65   of a real table
22cd0 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74  , not a pseudo-t
22ce0 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  able..*/./* Opco
22cf0 64 65 3a 20 52 6f 77 4b 65 79 20 50 31 20 50 32  de: RowKey P1 P2
22d00 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
22d10 69 73 3a 20 72 5b 50 32 5d 3d 6b 65 79 0a 2a 2a  is: r[P2]=key.**
22d20 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72  .** Write into r
22d30 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63  egister P2 the c
22d40 6f 6d 70 6c 65 74 65 20 72 6f 77 20 6b 65 79 20  omplete row key 
22d50 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a  for cursor P1..*
22d60 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e  * There is no in
22d70 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20  terpretation of 
22d80 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 54  the data.  .** T
22d90 68 65 20 6b 65 79 20 69 73 20 63 6f 70 69 65 64  he key is copied
22da0 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67   onto the P2 reg
22db0 69 73 74 65 72 20 65 78 61 63 74 6c 79 20 61 73  ister exactly as
22dc0 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64   .** it is found
22dd0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
22de0 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   file..**.** If 
22df0 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75  the P1 cursor mu
22e00 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74  st be pointing t
22e10 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e  o a valid row (n
22e20 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a  ot a NULL row).*
22e30 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c  * of a real tabl
22e40 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d  e, not a pseudo-
22e50 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  table..*/.case O
22e60 50 5f 52 6f 77 4b 65 79 3a 0a 63 61 73 65 20 4f  P_RowKey:.case O
22e70 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a 20 20 56  P_RowData: {.  V
22e80 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
22e90 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
22ea0 3b 0a 20 20 75 33 32 20 6e 3b 0a 20 20 69 36 34  ;.  u32 n;.  i64
22eb0 20 6e 36 34 3b 0a 0a 20 20 70 4f 75 74 20 3d 20   n64;..  pOut = 
22ec0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
22ed0 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
22ee0 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20  ge(p, pOut);..  
22ef0 2f 2a 20 4e 6f 74 65 20 74 68 61 74 20 52 6f 77  /* Note that Row
22f00 4b 65 79 20 61 6e 64 20 52 6f 77 44 61 74 61 20  Key and RowData 
22f10 61 72 65 20 72 65 61 6c 6c 79 20 65 78 61 63 74  are really exact
22f20 6c 79 20 74 68 65 20 73 61 6d 65 20 69 6e 73 74  ly the same inst
22f30 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20 61 73 73  ruction */.  ass
22f40 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
22f50 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
22f60 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
22f70 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
22f80 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  ];.  assert( isS
22f90 6f 72 74 65 72 28 70 43 29 3d 3d 30 20 29 3b 0a  orter(pC)==0 );.
22fa0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
22fb0 54 61 62 6c 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70  Table || pOp->op
22fc0 63 6f 64 65 21 3d 4f 50 5f 52 6f 77 44 61 74 61  code!=OP_RowData
22fd0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
22fe0 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 7c 7c 20  ->isTable==0 || 
22ff0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
23000 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61 73 73  RowData );.  ass
23010 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
23020 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 75 6c 6c  assert( pC->null
23030 52 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  Row==0 );.  asse
23040 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61  rt( pC->pseudoTa
23050 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61  bleReg==0 );.  a
23060 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
23070 6f 72 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  or!=0 );.  pCrsr
23080 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
23090 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
230a0 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61  3BtreeCursorIsVa
230b0 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a 0a 20  lid(pCrsr) );.. 
230c0 20 2f 2a 20 54 68 65 20 4f 50 5f 52 6f 77 4b 65   /* The OP_RowKe
230d0 79 20 61 6e 64 20 4f 50 5f 52 6f 77 44 61 74 61  y and OP_RowData
230e0 20 6f 70 63 6f 64 65 73 20 61 6c 77 61 79 73 20   opcodes always 
230f0 66 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78 69  follow OP_NotExi
23100 73 74 73 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 52  sts or.  ** OP_R
23110 65 77 69 6e 64 2f 4f 70 5f 4e 65 78 74 20 77 69  ewind/Op_Next wi
23120 74 68 20 6e 6f 20 69 6e 74 65 72 76 65 6e 69 6e  th no intervenin
23130 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 74  g instructions t
23140 68 61 74 20 6d 69 67 68 74 20 69 6e 76 61 6c 69  hat might invali
23150 64 61 74 65 0a 20 20 2a 2a 20 74 68 65 20 63 75  date.  ** the cu
23160 72 73 6f 72 2e 20 20 48 65 6e 63 65 20 74 68 65  rsor.  Hence the
23170 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 71 6c 69 74   following sqlit
23180 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
23190 74 6f 28 29 20 63 61 6c 6c 20 69 73 20 61 6c 77  to() call is alw
231a0 61 79 73 0a 20 20 2a 2a 20 61 20 6e 6f 2d 6f 70  ays.  ** a no-op
231b0 20 61 6e 64 20 63 61 6e 20 6e 65 76 65 72 20 66   and can never f
231c0 61 69 6c 2e 20 20 42 75 74 20 77 65 20 6c 65 61  ail.  But we lea
231d0 76 65 20 69 74 20 69 6e 20 70 6c 61 63 65 20 61  ve it in place a
231e0 73 20 61 20 73 61 66 65 74 79 2e 0a 20 20 2a 2f  s a safety..  */
231f0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
23200 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
23210 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
23220 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
23230 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 4e 45  to(pC);.  if( NE
23240 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f  VER(rc!=SQLITE_O
23250 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  K) ) goto abort_
23260 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20  due_to_error;.. 
23270 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65   if( pC->isTable
23280 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72  ==0 ){.    asser
23290 74 28 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 20  t( !pC->isTable 
232a0 29 3b 0a 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28  );.    VVA_ONLY(
232b0 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72  rc =) sqlite3Btr
232c0 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73 72 2c  eeKeySize(pCrsr,
232d0 20 26 6e 36 34 29 3b 0a 20 20 20 20 61 73 73 65   &n64);.    asse
232e0 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
232f0 4b 20 29 3b 20 20 20 20 2f 2a 20 54 72 75 65 20  K );    /* True 
23300 62 65 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f  because of Curso
23310 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 61  rMoveto() call a
23320 62 6f 76 65 20 2a 2f 0a 20 20 20 20 69 66 28 20  bove */.    if( 
23330 6e 36 34 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  n64>db->aLimit[S
23340 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
23350 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  TH] ){.      got
23360 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d  o too_big;.    }
23370 0a 20 20 20 20 6e 20 3d 20 28 75 33 32 29 6e 36  .    n = (u32)n6
23380 34 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  4;.  }else{.    
23390 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73  VVA_ONLY(rc =) s
233a0 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 53  qlite3BtreeDataS
233b0 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 29 3b 0a  ize(pCrsr, &n);.
233c0 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
233d0 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20  SQLITE_OK );    
233e0 2f 2a 20 44 61 74 61 53 69 7a 65 28 29 20 63 61  /* DataSize() ca
233f0 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20 20  nnot fail */.   
23400 20 69 66 28 20 6e 3e 28 75 33 32 29 64 62 2d 3e   if( n>(u32)db->
23410 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
23420 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
23430 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69       goto too_bi
23440 67 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  g;.    }.  }.  i
23450 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
23460 6d 47 72 6f 77 28 70 4f 75 74 2c 20 6e 2c 20 30  mGrow(pOut, n, 0
23470 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  ) ){.    goto no
23480 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  _mem;.  }.  pOut
23490 2d 3e 6e 20 3d 20 6e 3b 0a 20 20 4d 65 6d 53 65  ->n = n;.  MemSe
234a0 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
234b0 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 69 66 28  MEM_Blob);.  if(
234c0 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
234d0 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
234e0 74 65 33 42 74 72 65 65 4b 65 79 28 70 43 72 73  te3BtreeKey(pCrs
234f0 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a  r, 0, n, pOut->z
23500 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
23510 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
23520 65 44 61 74 61 28 70 43 72 73 72 2c 20 30 2c 20  eData(pCrsr, 0, 
23530 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d  n, pOut->z);.  }
23540 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53  .  pOut->enc = S
23550 51 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20  QLITE_UTF8;  /* 
23560 49 6e 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62  In case the blob
23570 20 69 73 20 65 76 65 72 20 63 61 73 74 20 74 6f   is ever cast to
23580 20 74 65 78 74 20 2a 2f 0a 20 20 55 50 44 41 54   text */.  UPDAT
23590 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
235a0 4f 75 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52  Out);.  REGISTER
235b0 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
235c0 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
235d0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  }../* Opcode: Ro
235e0 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  wid P1 P2 * * *.
235f0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
23600 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 53  2]=rowid.**.** S
23610 74 6f 72 65 20 69 6e 20 72 65 67 69 73 74 65 72  tore in register
23620 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77   P2 an integer w
23630 68 69 63 68 20 69 73 20 74 68 65 20 6b 65 79 20  hich is the key 
23640 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74  of the table ent
23650 72 79 20 74 68 61 74 0a 2a 2a 20 50 31 20 69 73  ry that.** P1 is
23660 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
23670 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61   to..**.** P1 ca
23680 6e 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 6f  n be either an o
23690 72 64 69 6e 61 72 79 20 74 61 62 6c 65 20 6f 72  rdinary table or
236a0 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
236b0 2e 20 20 54 68 65 72 65 20 75 73 65 64 20 74 6f  .  There used to
236c0 0a 2a 2a 20 62 65 20 61 20 73 65 70 61 72 61 74  .** be a separat
236d0 65 20 4f 50 5f 56 52 6f 77 69 64 20 6f 70 63 6f  e OP_VRowid opco
236e0 64 65 20 66 6f 72 20 75 73 65 20 77 69 74 68 20  de for use with 
236f0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 2c 20  virtual tables, 
23700 62 75 74 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20  but this.** one 
23710 6f 70 63 6f 64 65 20 6e 6f 77 20 77 6f 72 6b 73  opcode now works
23720 20 66 6f 72 20 62 6f 74 68 20 74 61 62 6c 65 20   for both table 
23730 74 79 70 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  types..*/.case O
23740 50 5f 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20  P_Rowid: {      
23750 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
23760 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
23770 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
23780 43 3b 0a 20 20 69 36 34 20 76 3b 0a 20 20 73 71  C;.  i64 v;.  sq
23790 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
237a0 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74  b;.  const sqlit
237b0 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
237c0 6c 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  le;..  assert( p
237d0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
237e0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
237f0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
23800 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
23810 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
23820 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73    assert( pC->ps
23830 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20  eudoTableReg==0 
23840 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  || pC->nullRow )
23850 3b 0a 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c  ;.  if( pC->null
23860 52 6f 77 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d  Row ){.    pOut-
23870 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  >flags = MEM_Nul
23880 6c 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  l;.    break;.  
23890 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 64 65  }else if( pC->de
238a0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 29 7b 0a  ferredMoveto ){.
238b0 20 20 20 20 76 20 3d 20 70 43 2d 3e 6d 6f 76 65      v = pC->move
238c0 74 6f 54 61 72 67 65 74 3b 0a 23 69 66 6e 64 65  toTarget;.#ifnde
238d0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
238e0 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 7d 65 6c  RTUALTABLE.  }el
238f0 73 65 20 69 66 28 20 70 43 2d 3e 70 56 74 61 62  se if( pC->pVtab
23900 43 75 72 73 6f 72 20 29 7b 0a 20 20 20 20 70 56  Cursor ){.    pV
23910 74 61 62 20 3d 20 70 43 2d 3e 70 56 74 61 62 43  tab = pC->pVtabC
23920 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20  ursor->pVtab;.  
23930 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
23940 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20  b->pModule;.    
23950 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d  assert( pModule-
23960 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20 20 20 72  >xRowid );.    r
23970 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f  c = pModule->xRo
23980 77 69 64 28 70 43 2d 3e 70 56 74 61 62 43 75 72  wid(pC->pVtabCur
23990 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 73 71  sor, &v);.    sq
239a0 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
239b0 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrmsg(p, pVtab);
239c0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
239d0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
239e0 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a  BLE */.  }else{.
239f0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
23a00 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
23a10 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
23a20 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70  beCursorMoveto(p
23a30 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29  C);.    if( rc )
23a40 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
23a50 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66  to_error;.    if
23a60 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c  ( pC->rowidIsVal
23a70 69 64 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20  id ){.      v = 
23a80 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20  pC->lastRowid;. 
23a90 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
23aa0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
23ab0 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75  eKeySize(pC->pCu
23ac0 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 20  rsor, &v);.     
23ad0 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
23ae0 49 54 45 5f 4f 4b 20 29 3b 20 20 2f 2a 20 41 6c  ITE_OK );  /* Al
23af0 77 61 79 73 20 73 6f 20 62 65 63 61 75 73 65 20  ways so because 
23b00 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  of CursorMoveto(
23b10 29 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20 7d  ) above */.    }
23b20 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
23b30 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = v;.  break;.}
23b40 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c  ../* Opcode: Nul
23b50 6c 52 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  lRow P1 * * * *.
23b60 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63  **.** Move the c
23b70 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 6e 75  ursor P1 to a nu
23b80 6c 6c 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f  ll row.  Any OP_
23b90 43 6f 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e  Column operation
23ba0 73 0a 2a 2a 20 74 68 61 74 20 6f 63 63 75 72 20  s.** that occur 
23bb0 77 68 69 6c 65 20 74 68 65 20 63 75 72 73 6f 72  while the cursor
23bc0 20 69 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20   is on the null 
23bd0 72 6f 77 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a  row will always.
23be0 2a 2a 20 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e  ** write a NULL.
23bf0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c  .*/.case OP_Null
23c00 52 6f 77 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  Row: {.  VdbeCur
23c10 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65  sor *pC;..  asse
23c20 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
23c30 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
23c40 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
23c50 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
23c60 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
23c70 30 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  0 );.  pC->nullR
23c80 6f 77 20 3d 20 31 3b 0a 20 20 70 43 2d 3e 72 6f  ow = 1;.  pC->ro
23c90 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
23ca0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
23cb0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
23cc0 0a 20 20 69 66 28 20 70 43 2d 3e 70 43 75 72 73  .  if( pC->pCurs
23cd0 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  or ){.    sqlite
23ce0 33 42 74 72 65 65 43 6c 65 61 72 43 75 72 73 6f  3BtreeClearCurso
23cf0 72 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a  r(pC->pCursor);.
23d00 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
23d10 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 61 73 74 20  /* Opcode: Last 
23d20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
23d30 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f  * The next use o
23d40 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43  f the Rowid or C
23d50 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e  olumn or Next in
23d60 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31  struction for P1
23d70 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20   .** will refer 
23d80 74 6f 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72  to the last entr
23d90 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  y in the databas
23da0 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
23db0 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c  ..** If the tabl
23dc0 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d  e or index is em
23dd0 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20 74 68  pty and P2>0, th
23de0 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  en jump immediat
23df0 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66  ely to P2..** If
23e00 20 50 32 20 69 73 20 30 20 6f 72 20 69 66 20 74   P2 is 0 or if t
23e10 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
23e20 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20  x is not empty, 
23e30 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20  fall through.** 
23e40 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
23e50 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
23e60 0a 63 61 73 65 20 4f 50 5f 4c 61 73 74 3a 20 7b  .case OP_Last: {
23e70 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
23e80 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
23e90 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
23ea0 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65  *pCrsr;.  int re
23eb0 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  s;..  assert( pO
23ec0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
23ed0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
23ee0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
23ef0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
23f00 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
23f10 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75   pCrsr = pC->pCu
23f20 72 73 6f 72 3b 0a 20 20 72 65 73 20 3d 20 30 3b  rsor;.  res = 0;
23f30 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72  .  assert( pCrsr
23f40 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  !=0 );.  rc = sq
23f50 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70  lite3BtreeLast(p
23f60 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 70  Crsr, &res);.  p
23f70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38  C->nullRow = (u8
23f80 29 72 65 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65  )res;.  pC->defe
23f90 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
23fa0 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
23fb0 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  id = 0;.  pC->ca
23fc0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
23fd0 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70  E_STALE;.  if( p
23fe0 4f 70 2d 3e 70 32 3e 30 20 29 7b 0a 20 20 20 20  Op->p2>0 ){.    
23ff0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
24000 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69  res!=0,2);.    i
24010 66 28 20 72 65 73 20 29 20 70 63 20 3d 20 70 4f  f( res ) pc = pO
24020 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
24030 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f   break;.}.../* O
24040 70 63 6f 64 65 3a 20 53 6f 72 74 20 50 31 20 50  pcode: Sort P1 P
24050 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
24060 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 65  is opcode does e
24070 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20  xactly the same 
24080 74 68 69 6e 67 20 61 73 20 4f 50 5f 52 65 77 69  thing as OP_Rewi
24090 6e 64 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a  nd except that.*
240a0 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73 20  * it increments 
240b0 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20  an undocumented 
240c0 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
240d0 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
240e0 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20  ..**.** Sorting 
240f0 69 73 20 61 63 63 6f 6d 70 6c 69 73 68 65 64 20  is accomplished 
24100 62 79 20 77 72 69 74 69 6e 67 20 72 65 63 6f 72  by writing recor
24110 64 73 20 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e  ds into a sortin
24120 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e  g index,.** then
24130 20 72 65 77 69 6e 64 69 6e 67 20 74 68 61 74 20   rewinding that 
24140 69 6e 64 65 78 20 61 6e 64 20 70 6c 61 79 69 6e  index and playin
24150 67 20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20 62  g it back from b
24160 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65  eginning to.** e
24170 6e 64 2e 20 20 57 65 20 75 73 65 20 74 68 65 20  nd.  We use the 
24180 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20 69  OP_Sort opcode i
24190 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f 52 65 77  nstead of OP_Rew
241a0 69 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a  ind to do the.**
241b0 20 72 65 77 69 6e 64 69 6e 67 20 73 6f 20 74 68   rewinding so th
241c0 61 74 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61  at the global va
241d0 72 69 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 69  riable will be i
241e0 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a  ncremented and.*
241f0 2a 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73  * regression tes
24200 74 73 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65  ts can determine
24210 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
24220 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 69 73  the optimizer is
24230 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f 70  .** correctly op
24240 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72  timizing out sor
24250 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ts..*/.case OP_S
24260 6f 72 74 65 72 53 6f 72 74 3a 20 20 20 20 2f 2a  orterSort:    /*
24270 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
24280 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20 20 20 20  _Sort: {        
24290 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65  /* jump */.#ifde
242a0 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
242b0 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75  sqlite3_sort_cou
242c0 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f  nt++;.  sqlite3_
242d0 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a  search_count--;.
242e0 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75  #endif.  p->aCou
242f0 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54  nter[SQLITE_STMT
24300 53 54 41 54 55 53 5f 53 4f 52 54 5d 2b 2b 3b 0a  STATUS_SORT]++;.
24310 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
24320 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64  h into OP_Rewind
24330 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a   */.}./* Opcode:
24340 20 52 65 77 69 6e 64 20 50 31 20 50 32 20 2a 20   Rewind P1 P2 * 
24350 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65  * *.**.** The ne
24360 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f  xt use of the Ro
24370 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72  wid or Column or
24380 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
24390 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c  n for P1 .** wil
243a0 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 66  l refer to the f
243b0 69 72 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  irst entry in th
243c0 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
243d0 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66   or index..** If
243e0 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
243f0 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64  dex is empty and
24400 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70   P2>0, then jump
24410 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
24420 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  P2..** If P2 is 
24430 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c  0 or if the tabl
24440 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f  e or index is no
24450 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68  t empty, fall th
24460 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
24470 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
24480 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
24490 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20 20 20 20  P_Rewind: {     
244a0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
244b0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
244c0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
244d0 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20  r;.  int res;.. 
244e0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
244f0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
24500 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
24510 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
24520 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
24530 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
24540 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
24550 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  ==(pOp->opcode==
24560 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 29 20 29  OP_SorterSort) )
24570 3b 0a 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 69  ;.  res = 1;.  i
24580 66 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  f( isSorter(pC) 
24590 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
245a0 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 65 77  te3VdbeSorterRew
245b0 69 6e 64 28 70 43 2c 20 26 72 65 73 29 3b 0a 20  ind(pC, &res);. 
245c0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 43 72 73   }else{.    pCrs
245d0 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
245e0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 72  .    assert( pCr
245f0 73 72 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  sr );.    rc = s
24600 71 6c 69 74 65 33 42 74 72 65 65 46 69 72 73 74  qlite3BtreeFirst
24610 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20  (pCrsr, &res);. 
24620 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d     pC->deferredM
24630 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70  oveto = 0;.    p
24640 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
24650 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
24660 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
24670 69 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 70 43  id = 0;.  }.  pC
24680 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29  ->nullRow = (u8)
24690 72 65 73 3b 0a 20 20 61 73 73 65 72 74 28 20 70  res;.  assert( p
246a0 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d  Op->p2>0 && pOp-
246b0 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20  >p2<p->nOp );.  
246c0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
246d0 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28  res!=0,2);.  if(
246e0 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d   res ){.    pc =
246f0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
24700 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
24710 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20 50 31   Opcode: Next P1
24720 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
24730 2a 2a 20 41 64 76 61 6e 63 65 20 63 75 72 73 6f  ** Advance curso
24740 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20  r P1 so that it 
24750 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6e 65  points to the ne
24760 78 74 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72  xt key/data pair
24770 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65   in its.** table
24780 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74   or index.  If t
24790 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65  here are no more
247a0 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73   key/value pairs
247b0 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
247c0 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c  gh.** to the fol
247d0 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69  lowing instructi
247e0 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20  on.  But if the 
247f0 63 75 72 73 6f 72 20 61 64 76 61 6e 63 65 20 77  cursor advance w
24800 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a  as successful,.*
24810 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  * jump immediate
24820 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ly to P2..**.** 
24830 54 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75  The P1 cursor mu
24840 73 74 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c  st be for a real
24850 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73   table, not a ps
24860 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 50 31 20  eudo-table.  P1 
24870 6d 75 73 74 20 68 61 76 65 0a 2a 2a 20 62 65 65  must have.** bee
24880 6e 20 6f 70 65 6e 65 64 20 70 72 69 6f 72 20 74  n opened prior t
24890 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20 6f 72  o this opcode or
248a0 20 74 68 65 20 70 72 6f 67 72 61 6d 20 77 69 6c   the program wil
248b0 6c 20 73 65 67 66 61 75 6c 74 2e 0a 2a 2a 0a 2a  l segfault..**.*
248c0 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65 20 69  * The P3 value i
248d0 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20  s a hint to the 
248e0 62 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61  btree implementa
248f0 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20  tion. If P3==1, 
24900 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31  that.** means P1
24910 20 69 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   is an SQL index
24920 20 61 6e 64 20 74 68 61 74 20 74 68 69 73 20 69   and that this i
24930 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64  nstruction could
24940 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d   have been.** om
24950 69 74 74 65 64 20 69 66 20 74 68 61 74 20 69 6e  itted if that in
24960 64 65 78 20 68 61 64 20 62 65 65 6e 20 75 6e 69  dex had been uni
24970 71 75 65 2e 20 20 50 33 20 69 73 20 75 73 75 61  que.  P3 is usua
24980 6c 6c 79 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a  lly 0.  P3 is.**
24990 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 20 30   always either 0
249a0 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20   or 1..**.** P4 
249b0 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70  is always of typ
249c0 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68  e P4_ADVANCE. Th
249d0 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74  e function point
249e0 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20  er points to.** 
249f0 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74  sqlite3BtreeNext
24a00 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  ()..**.** If P5 
24a10 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20  is positive and 
24a20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
24a30 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f  n, then event co
24a40 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20  unter.** number 
24a50 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70  P5-1 in the prep
24a60 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69  ared statement i
24a70 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a  s incremented..*
24a80 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 50  *.** See also: P
24a90 72 65 76 2c 20 4e 65 78 74 49 66 4f 70 65 6e 0a  rev, NextIfOpen.
24aa0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65  */./* Opcode: Ne
24ab0 78 74 49 66 4f 70 65 6e 20 50 31 20 50 32 20 50  xtIfOpen P1 P2 P
24ac0 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68  3 P4 P5.**.** Th
24ad0 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20  is opcode works 
24ae0 6a 75 73 74 20 6c 69 6b 65 20 4f 50 5f 4e 65 78  just like OP_Nex
24af0 74 20 65 78 63 65 70 74 20 74 68 61 74 20 69 66  t except that if
24b00 20 63 75 72 73 6f 72 20 50 31 20 69 73 20 6e 6f   cursor P1 is no
24b10 74 0a 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65 68  t.** open it beh
24b20 61 76 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f  aves a no-op..*/
24b30 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76  ./* Opcode: Prev
24b40 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
24b50 2a 2a 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63 75  **.** Back up cu
24b60 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
24b70 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
24b80 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 64 61   previous key/da
24b90 74 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a  ta pair in its.*
24ba0 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  * table or index
24bb0 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20 6e  .  If there is n
24bc0 6f 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 76  o previous key/v
24bd0 61 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20  alue pairs then 
24be0 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20  fall through.** 
24bf0 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
24c00 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42   instruction.  B
24c10 75 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72  ut if the cursor
24c20 20 62 61 63 6b 75 70 20 77 61 73 20 73 75 63 63   backup was succ
24c30 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20  essful,.** jump 
24c40 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
24c50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20  2..**.** The P1 
24c60 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66  cursor must be f
24c70 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c  or a real table,
24c80 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61   not a pseudo-ta
24c90 62 6c 65 2e 20 20 49 66 20 50 31 20 69 73 0a 2a  ble.  If P1 is.*
24ca0 2a 20 6e 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20  * not open then 
24cb0 74 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20  the behavior is 
24cc0 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a  undefined..**.**
24cd0 20 54 68 65 20 50 33 20 76 61 6c 75 65 20 69 73   The P3 value is
24ce0 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62   a hint to the b
24cf0 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tree implementat
24d00 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74  ion. If P3==1, t
24d10 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20  hat.** means P1 
24d20 69 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20  is an SQL index 
24d30 61 6e 64 20 74 68 61 74 20 74 68 69 73 20 69 6e  and that this in
24d40 73 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20  struction could 
24d50 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69  have been.** omi
24d60 74 74 65 64 20 69 66 20 74 68 61 74 20 69 6e 64  tted if that ind
24d70 65 78 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71  ex had been uniq
24d80 75 65 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c  ue.  P3 is usual
24d90 6c 79 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20  ly 0.  P3 is.** 
24da0 61 6c 77 61 79 73 20 65 69 74 68 65 72 20 30 20  always either 0 
24db0 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  or 1..**.** P4 i
24dc0 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65  s always of type
24dd0 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65   P4_ADVANCE. The
24de0 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65   function pointe
24df0 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73  r points to.** s
24e00 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69  qlite3BtreePrevi
24e10 6f 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ous()..**.** If 
24e20 50 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61  P5 is positive a
24e30 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  nd the jump is t
24e40 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74  aken, then event
24e50 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62   counter.** numb
24e60 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70  er P5-1 in the p
24e70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
24e80 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
24e90 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
24ea0 50 72 65 76 49 66 4f 70 65 6e 20 50 31 20 50 32  PrevIfOpen P1 P2
24eb0 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
24ec0 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b  This opcode work
24ed0 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f 50 5f 50  s just like OP_P
24ee0 72 65 76 20 65 78 63 65 70 74 20 74 68 61 74 20  rev except that 
24ef0 69 66 20 63 75 72 73 6f 72 20 50 31 20 69 73 20  if cursor P1 is 
24f00 6e 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69 74 20 62  not.** open it b
24f10 65 68 61 76 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a  ehaves a no-op..
24f20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
24f30 72 4e 65 78 74 3a 20 7b 20 20 2f 2a 20 6a 75 6d  rNext: {  /* jum
24f40 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  p */.  VdbeCurso
24f50 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73  r *pC;.  int res
24f60 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  ;..  pC = p->apC
24f70 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
24f80 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
24f90 70 43 29 20 29 3b 0a 20 20 72 65 73 20 3d 20 30  pC) );.  res = 0
24fa0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
24fb0 56 64 62 65 53 6f 72 74 65 72 4e 65 78 74 28 64  VdbeSorterNext(d
24fc0 62 2c 20 70 43 2c 20 26 72 65 73 29 3b 0a 20 20  b, pC, &res);.  
24fd0 67 6f 74 6f 20 6e 65 78 74 5f 74 61 69 6c 3b 0a  goto next_tail;.
24fe0 63 61 73 65 20 4f 50 5f 50 72 65 76 49 66 4f 70  case OP_PrevIfOp
24ff0 65 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a  en:    /* jump *
25000 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 49 66  /.case OP_NextIf
25010 4f 70 65 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d 70  Open:    /* jump
25020 20 2a 2f 0a 20 20 69 66 28 20 70 2d 3e 61 70 43   */.  if( p->apC
25030 73 72 5b 70 4f 70 2d 3e 70 31 5d 3d 3d 30 20 29  sr[pOp->p1]==0 )
25040 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c   break;.  /* Fal
25050 6c 20 74 68 72 6f 75 67 68 20 2a 2f 0a 63 61 73  l through */.cas
25060 65 20 4f 50 5f 50 72 65 76 3a 20 20 20 20 20 20  e OP_Prev:      
25070 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63      /* jump */.c
25080 61 73 65 20 4f 50 5f 4e 65 78 74 3a 20 20 20 20  ase OP_Next:    
25090 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
250a0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
250b0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
250c0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
250d0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
250e0 3c 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 61 43  <ArraySize(p->aC
250f0 6f 75 6e 74 65 72 29 20 29 3b 0a 20 20 70 43 20  ounter) );.  pC 
25100 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
25110 70 31 5d 3b 0a 20 20 72 65 73 20 3d 20 70 4f 70  p1];.  res = pOp
25120 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p3;.  assert( 
25130 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
25140 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
25150 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73  oveto==0 );.  as
25160 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f  sert( pC->pCurso
25170 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72  r );.  assert( r
25180 65 73 3d 3d 30 20 7c 7c 20 28 72 65 73 3d 3d 31  es==0 || (res==1
25190 20 26 26 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d   && pC->isTable=
251a0 3d 30 29 20 29 3b 0a 20 20 74 65 73 74 63 61 73  =0) );.  testcas
251b0 65 28 20 72 65 73 3d 3d 31 20 29 3b 0a 20 20 61  e( res==1 );.  a
251c0 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
251d0 64 65 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70  de!=OP_Next || p
251e0 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d  Op->p4.xAdvance=
251f0 3d 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78  =sqlite3BtreeNex
25200 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t );.  assert( p
25210 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50  Op->opcode!=OP_P
25220 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78  rev || pOp->p4.x
25230 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33  Advance==sqlite3
25240 42 74 72 65 65 50 72 65 76 69 6f 75 73 20 29 3b  BtreePrevious );
25250 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
25260 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49  opcode!=OP_NextI
25270 66 4f 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34  fOpen || pOp->p4
25280 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74  .xAdvance==sqlit
25290 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b 0a 20  e3BtreeNext );. 
252a0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
252b0 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f  code!=OP_PrevIfO
252c0 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78  pen || pOp->p4.x
252d0 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33  Advance==sqlite3
252e0 42 74 72 65 65 50 72 65 76 69 6f 75 73 29 3b 0a  BtreePrevious);.
252f0 20 20 72 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 78    rc = pOp->p4.x
25300 41 64 76 61 6e 63 65 28 70 43 2d 3e 70 43 75 72  Advance(pC->pCur
25310 73 6f 72 2c 20 26 72 65 73 29 3b 0a 6e 65 78 74  sor, &res);.next
25320 5f 74 61 69 6c 3a 0a 20 20 70 43 2d 3e 63 61 63  _tail:.  pC->cac
25330 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
25340 5f 53 54 41 4c 45 3b 0a 20 20 56 64 62 65 42 72  _STALE;.  VdbeBr
25350 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 3d 3d 30  anchTaken(res==0
25360 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d  ,2);.  if( res==
25370 30 20 29 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c  0 ){.    pC->nul
25380 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70 63  lRow = 0;.    pc
25390 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
253a0 20 20 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b      p->aCounter[
253b0 70 4f 70 2d 3e 70 35 5d 2b 2b 3b 0a 23 69 66 64  pOp->p5]++;.#ifd
253c0 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
253d0 20 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63     sqlite3_searc
253e0 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69  h_count++;.#endi
253f0 66 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  f.  }else{.    p
25400 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  C->nullRow = 1;.
25410 20 20 7d 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49    }.  pC->rowidI
25420 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 67 6f  sValid = 0;.  go
25430 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  to check_for_int
25440 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70  errupt;.}../* Op
25450 63 6f 64 65 3a 20 49 64 78 49 6e 73 65 72 74 20  code: IdxInsert 
25460 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a  P1 P2 P3 * P5.**
25470 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
25480 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  [P2].**.** Regis
25490 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61 6e 20  ter P2 holds an 
254a0 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d 61  SQL index key ma
254b0 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  de using the.** 
254c0 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72  MakeRecord instr
254d0 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f  uctions.  This o
254e0 70 63 6f 64 65 20 77 72 69 74 65 73 20 74 68 61  pcode writes tha
254f0 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68  t key.** into th
25500 65 20 69 6e 64 65 78 20 50 31 2e 20 20 44 61 74  e index P1.  Dat
25510 61 20 66 6f 72 20 74 68 65 20 65 6e 74 72 79 20  a for the entry 
25520 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33  is nil..**.** P3
25530 20 69 73 20 61 20 66 6c 61 67 20 74 68 61 74 20   is a flag that 
25540 70 72 6f 76 69 64 65 73 20 61 20 68 69 6e 74 20  provides a hint 
25550 74 6f 20 74 68 65 20 62 2d 74 72 65 65 20 6c 61  to the b-tree la
25560 79 65 72 20 74 68 61 74 20 74 68 69 73 0a 2a 2a  yer that this.**
25570 20 69 6e 73 65 72 74 20 69 73 20 6c 69 6b 65 6c   insert is likel
25580 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e  y to be an appen
25590 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68  d..**.** If P5 h
255a0 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  as the OPFLAG_NC
255b0 48 41 4e 47 45 20 62 69 74 20 73 65 74 2c 20 74  HANGE bit set, t
255c0 68 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20 63  hen the change c
255d0 6f 75 6e 74 65 72 20 69 73 0a 2a 2a 20 69 6e 63  ounter is.** inc
255e0 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 69 73  remented by this
255f0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49   instruction.  I
25600 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48  f the OPFLAG_NCH
25610 41 4e 47 45 20 62 69 74 20 69 73 20 63 6c 65 61  ANGE bit is clea
25620 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63  r,.** then the c
25630 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73  hange counter is
25640 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2a 0a 2a   unchanged..**.*
25650 2a 20 49 66 20 50 35 20 68 61 73 20 74 68 65 20  * If P5 has the 
25660 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
25670 53 55 4c 54 20 62 69 74 20 73 65 74 2c 20 74 68  SULT bit set, th
25680 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6d 75  en the cursor mu
25690 73 74 20 68 61 76 65 0a 2a 2a 20 6a 75 73 74 20  st have.** just 
256a0 64 6f 6e 65 20 61 20 73 65 65 6b 20 74 6f 20 74  done a seek to t
256b0 68 65 20 73 70 6f 74 20 77 68 65 72 65 20 74 68  he spot where th
256c0 65 20 6e 65 77 20 65 6e 74 72 79 20 69 73 20 74  e new entry is t
256d0 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 0a 2a  o be inserted..*
256e0 2a 20 54 68 69 73 20 66 6c 61 67 20 61 76 6f 69  * This flag avoi
256f0 64 73 20 64 6f 69 6e 67 20 61 6e 20 65 78 74 72  ds doing an extr
25700 61 20 73 65 65 6b 2e 0a 2a 2a 0a 2a 2a 20 54 68  a seek..**.** Th
25710 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
25720 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e  nly works for in
25730 64 69 63 65 73 2e 20 20 54 68 65 20 65 71 75 69  dices.  The equi
25740 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69  valent instructi
25750 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73  on.** for tables
25760 20 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a   is OP_Insert..*
25770 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
25780 49 6e 73 65 72 74 3a 20 20 20 20 20 20 20 2f 2a  Insert:       /*
25790 20 69 6e 32 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in2 */.case OP_
257a0 49 64 78 49 6e 73 65 72 74 3a 20 7b 20 20 20 20  IdxInsert: {    
257b0 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20      /* in2 */.  
257c0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
257d0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
257e0 72 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20  r;.  int nKey;. 
257f0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65   const char *zKe
25800 79 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  y;..  assert( pO
25810 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
25820 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
25830 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
25840 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
25850 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
25860 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65   assert( isSorte
25870 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63  r(pC)==(pOp->opc
25880 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e  ode==OP_SorterIn
25890 73 65 72 74 29 20 29 3b 0a 20 20 70 49 6e 32 20  sert) );.  pIn2 
258a0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
258b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 32  ;.  assert( pIn2
258c0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
258d0 6f 62 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  ob );.  pCrsr = 
258e0 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69  pC->pCursor;.  i
258f0 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
25900 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d  LAG_NCHANGE ) p-
25910 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 61 73  >nChange++;.  as
25920 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29  sert( pCrsr!=0 )
25930 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
25940 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20  isTable==0 );.  
25950 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28  rc = ExpandBlob(
25960 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 72 63 3d  pIn2);.  if( rc=
25970 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
25980 20 20 69 66 28 20 69 73 53 6f 72 74 65 72 28 70    if( isSorter(p
25990 43 29 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  C) ){.      rc =
259a0 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
259b0 65 72 57 72 69 74 65 28 70 43 2c 20 70 49 6e 32  erWrite(pC, pIn2
259c0 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
259d0 20 20 20 20 6e 4b 65 79 20 3d 20 70 49 6e 32 2d      nKey = pIn2-
259e0 3e 6e 3b 0a 20 20 20 20 20 20 7a 4b 65 79 20 3d  >n;.      zKey =
259f0 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20 20   pIn2->z;.      
25a00 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
25a10 65 49 6e 73 65 72 74 28 70 43 72 73 72 2c 20 7a  eInsert(pCrsr, z
25a20 4b 65 79 2c 20 6e 4b 65 79 2c 20 22 22 2c 20 30  Key, nKey, "", 0
25a30 2c 20 30 2c 20 70 4f 70 2d 3e 70 33 2c 20 0a 20  , 0, pOp->p3, . 
25a40 20 20 20 20 20 20 20 20 20 28 28 70 4f 70 2d 3e           ((pOp->
25a50 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53  p5 & OPFLAG_USES
25a60 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d  EEKRESULT) ? pC-
25a70 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29  >seekResult : 0)
25a80 0a 20 20 20 20 20 20 20 20 20 20 29 3b 0a 20 20  .          );.  
25a90 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
25aa0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
25ab0 30 20 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 63  0 );.      pC->c
25ac0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
25ad0 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 7d 0a  HE_STALE;.    }.
25ae0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
25af0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 44 65  /* Opcode: IdxDe
25b00 6c 65 74 65 20 50 31 20 50 32 20 50 33 20 2a 20  lete P1 P2 P3 * 
25b10 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
25b20 65 79 3d 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a  ey=r[P2@P3].**.*
25b30 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * The content of
25b40 20 50 33 20 72 65 67 69 73 74 65 72 73 20 73 74   P3 registers st
25b50 61 72 74 69 6e 67 20 61 74 20 72 65 67 69 73 74  arting at regist
25b60 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e  er P2 form.** an
25b70 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
25b80 6b 65 79 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  key. This opcode
25b90 20 72 65 6d 6f 76 65 73 20 74 68 61 74 20 65 6e   removes that en
25ba0 74 72 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a  try from the .**
25bb0 20 69 6e 64 65 78 20 6f 70 65 6e 65 64 20 62 79   index opened by
25bc0 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63   cursor P1..*/.c
25bd0 61 73 65 20 4f 50 5f 49 64 78 44 65 6c 65 74 65  ase OP_IdxDelete
25be0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
25bf0 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
25c00 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
25c10 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  es;.  UnpackedRe
25c20 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72  cord r;..  asser
25c30 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
25c40 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
25c50 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70  2>0 && pOp->p2+p
25c60 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
25c70 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29  -p->nCursor)+1 )
25c80 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
25c90 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
25ca0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
25cb0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
25cc0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
25cd0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70  rt( pC!=0 );.  p
25ce0 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
25cf0 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  or;.  assert( pC
25d00 72 73 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  rsr!=0 );.  asse
25d10 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29  rt( pOp->p5==0 )
25d20 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d  ;.  r.pKeyInfo =
25d30 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20   pC->pKeyInfo;. 
25d40 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36   r.nField = (u16
25d50 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 72 2e 64 65  )pOp->p3;.  r.de
25d60 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20  fault_rc = 0;.  
25d70 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  r.aMem = &aMem[p
25d80 4f 70 2d 3e 70 32 5d 3b 0a 23 69 66 64 65 66 20  Op->p2];.#ifdef 
25d90 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 7b  SQLITE_DEBUG.  {
25da0 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b   int i; for(i=0;
25db0 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b   i<r.nField; i++
25dc0 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56  ) assert( memIsV
25dd0 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29  alid(&r.aMem[i])
25de0 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72   ); }.#endif.  r
25df0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
25e00 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
25e10 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20  Crsr, &r, 0, 0, 
25e20 26 72 65 73 29 3b 0a 20 20 69 66 28 20 72 63 3d  &res);.  if( rc=
25e30 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65  =SQLITE_OK && re
25e40 73 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d  s==0 ){.    rc =
25e50 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c   sqlite3BtreeDel
25e60 65 74 65 28 70 43 72 73 72 29 3b 0a 20 20 7d 0a  ete(pCrsr);.  }.
25e70 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
25e80 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
25e90 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  );.  pC->cacheSt
25ea0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
25eb0 4c 45 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  LE;.  break;.}..
25ec0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f  /* Opcode: IdxRo
25ed0 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  wid P1 P2 * * *.
25ee0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
25ef0 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 57  2]=rowid.**.** W
25f00 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74  rite into regist
25f10 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72  er P2 an integer
25f20 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6c 61   which is the la
25f30 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20  st entry in the 
25f40 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65  record at.** the
25f50 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 64 65   end of the inde
25f60 78 20 6b 65 79 20 70 6f 69 6e 74 65 64 20 74 6f  x key pointed to
25f70 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 20 20   by cursor P1.  
25f80 54 68 69 73 20 69 6e 74 65 67 65 72 20 73 68 6f  This integer sho
25f90 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f  uld be.** the ro
25fa0 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65  wid of the table
25fb0 20 65 6e 74 72 79 20 74 6f 20 77 68 69 63 68 20   entry to which 
25fc0 74 68 69 73 20 69 6e 64 65 78 20 65 6e 74 72 79  this index entry
25fd0 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53   points..**.** S
25fe0 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20  ee also: Rowid, 
25ff0 4d 61 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63  MakeRecord..*/.c
26000 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a  ase OP_IdxRowid:
26010 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
26020 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
26030 73 65 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72  se */.  BtCursor
26040 20 2a 70 43 72 73 72 3b 0a 20 20 56 64 62 65 43   *pCrsr;.  VdbeC
26050 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34  ursor *pC;.  i64
26060 20 72 6f 77 69 64 3b 0a 0a 20 20 61 73 73 65 72   rowid;..  asser
26070 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
26080 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
26090 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
260a0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
260b0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
260c0 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
260d0 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73  ->pCursor;.  ass
260e0 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b  ert( pCrsr!=0 );
260f0 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
26100 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 72 63 20   MEM_Null;.  rc 
26110 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
26120 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20  sorMoveto(pC);. 
26130 20 69 66 28 20 4e 45 56 45 52 28 72 63 29 20 29   if( NEVER(rc) )
26140 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
26150 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 61 73 73 65  to_error;.  asse
26160 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
26170 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61  Moveto==0 );.  a
26180 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
26190 6c 65 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 21  le==0 );.  if( !
261a0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
261b0 20 20 20 72 6f 77 69 64 20 3d 20 30 3b 20 20 2f     rowid = 0;  /
261c0 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f  * Not needed.  O
261d0 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65  nly used to sile
261e0 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a  nce a warning. *
261f0 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  /.    rc = sqlit
26200 65 33 56 64 62 65 49 64 78 52 6f 77 69 64 28 64  e3VdbeIdxRowid(d
26210 62 2c 20 70 43 72 73 72 2c 20 26 72 6f 77 69 64  b, pCrsr, &rowid
26220 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53  );.    if( rc!=S
26230 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
26240 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
26250 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
26260 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
26270 20 72 6f 77 69 64 3b 0a 20 20 20 20 70 4f 75 74   rowid;.    pOut
26280 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
26290 74 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  t;.  }.  break;.
262a0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  }../* Opcode: Id
262b0 78 47 45 20 50 31 20 50 32 20 50 33 20 50 34 20  xGE P1 P2 P3 P4 
262c0 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
262d0 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
262e0 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74  ** The P4 regist
262f0 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e  er values beginn
26300 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d  ing with P3 form
26310 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
26320 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20  ex .** key that 
26330 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52  omits the PRIMAR
26340 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65 20  Y KEY.  Compare 
26350 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61  this key value a
26360 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78  gainst the index
26370 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20   .** that P1 is 
26380 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
26390 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20  ng to, ignoring 
263a0 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
263b0 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65  or ROWID .** fie
263c0 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e 0a  lds at the end..
263d0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
263e0 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 67  index entry is g
263f0 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
26400 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
26410 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75  value.** then ju
26420 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72  mp to P2.  Other
26430 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67  wise fall throug
26440 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
26450 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  struction..*/./*
26460 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 54 20 50   Opcode: IdxGT P
26470 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
26480 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
26490 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68  [P3@P4].**.** Th
264a0 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61  e P4 register va
264b0 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  lues beginning w
264c0 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75  ith P3 form an u
264d0 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a  npacked index .*
264e0 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73  * key that omits
264f0 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
26500 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20  .  Compare this 
26510 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73  key value agains
26520 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20  t the index .** 
26530 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65  that P1 is curre
26540 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f  ntly pointing to
26550 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50  , ignoring the P
26560 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f  RIMARY KEY or RO
26570 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20 61  WID .** fields a
26580 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a  t the end..**.**
26590 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
265a0 20 65 6e 74 72 79 20 69 73 20 67 72 65 61 74 65   entry is greate
265b0 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76  r than the key v
265c0 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d  alue.** then jum
265d0 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77  p to P2.  Otherw
265e0 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ise fall through
265f0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
26600 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  truction..*/./* 
26610 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54 20 50 31  Opcode: IdxLT P1
26620 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
26630 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
26640 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  P3@P4].**.** The
26650 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c   P4 register val
26660 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ues beginning wi
26670 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e  th P3 form an un
26680 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a  packed index .**
26690 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20   key that omits 
266a0 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
266b0 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61  or ROWID.  Compa
266c0 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75  re this key valu
266d0 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68 65  e against.** the
266e0 20 69 6e 64 65 78 20 74 68 61 74 20 50 31 20 69   index that P1 i
266f0 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
26700 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
26710 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  g the PRIMARY KE
26720 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e  Y or.** ROWID on
26730 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a   the P1 index..*
26740 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69  *.** If the P1 i
26750 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65  ndex entry is le
26760 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  ss than the key 
26770 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 20  value then jump 
26780 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68 65 72 77  to P2..** Otherw
26790 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ise fall through
267a0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
267b0 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  truction..*/./* 
267c0 4f 70 63 6f 64 65 3a 20 49 64 78 4c 45 20 50 31  Opcode: IdxLE P1
267d0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
267e0 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
267f0 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  P3@P4].**.** The
26800 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c   P4 register val
26810 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ues beginning wi
26820 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e  th P3 form an un
26830 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a  packed index .**
26840 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20   key that omits 
26850 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
26860 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61  or ROWID.  Compa
26870 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75  re this key valu
26880 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68 65  e against.** the
26890 20 69 6e 64 65 78 20 74 68 61 74 20 50 31 20 69   index that P1 i
268a0 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
268b0 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
268c0 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  g the PRIMARY KE
268d0 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e  Y or.** ROWID on
268e0 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a   the P1 index..*
268f0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69  *.** If the P1 i
26900 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65  ndex entry is le
26910 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
26920 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75   to the key valu
26930 65 20 74 68 65 6e 20 6a 75 6d 70 0a 2a 2a 20 74  e then jump.** t
26940 6f 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 20  o P2. Otherwise 
26950 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
26960 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
26970 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
26980 5f 49 64 78 4c 45 3a 20 20 20 20 20 20 20 20 20  _IdxLE:         
26990 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
269a0 20 4f 50 5f 49 64 78 47 54 3a 20 20 20 20 20 20   OP_IdxGT:      
269b0 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63      /* jump */.c
269c0 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20 20  ase OP_IdxLT:   
269d0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
269e0 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 45 3a  /.case OP_IdxGE:
269f0 20 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d    {       /* jum
26a00 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  p */.  VdbeCurso
26a10 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73  r *pC;.  int res
26a20 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
26a30 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28  rd r;..  assert(
26a40 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
26a50 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
26a60 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
26a70 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
26a80 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
26a90 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
26aa0 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 61  isOrdered );.  a
26ab0 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
26ac0 6f 72 21 3d 30 29 3b 0a 20 20 61 73 73 65 72 74  or!=0);.  assert
26ad0 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
26ae0 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73  veto==0 );.  ass
26af0 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  ert( pOp->p5==0 
26b00 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b  || pOp->p5==1 );
26b10 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
26b20 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
26b30 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f   );.  r.pKeyInfo
26b40 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b   = pC->pKeyInfo;
26b50 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75  .  r.nField = (u
26b60 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20  16)pOp->p4.i;.  
26b70 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3c  if( pOp->opcode<
26b80 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20 20  OP_IdxLT ){.    
26b90 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
26ba0 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c  ode==OP_IdxLE ||
26bb0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
26bc0 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20 72 2e  _IdxGT );.    r.
26bd0 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b  default_rc = -1;
26be0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
26bf0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
26c00 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70  e==OP_IdxGE || p
26c10 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
26c20 64 78 4c 54 20 29 3b 0a 20 20 20 20 72 2e 64 65  dxLT );.    r.de
26c30 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20  fault_rc = 0;.  
26c40 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d  }.  r.aMem = &aM
26c50 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66  em[pOp->p3];.#if
26c60 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
26c70 0a 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28  .  { int i; for(
26c80 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b  i=0; i<r.nField;
26c90 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65   i++) assert( me
26ca0 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
26cb0 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66  [i]) ); }.#endif
26cc0 0a 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20  .  res = 0;  /* 
26cd0 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c  Not needed.  Onl
26ce0 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63  y used to silenc
26cf0 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  e a warning. */.
26d00 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
26d10 62 65 49 64 78 4b 65 79 43 6f 6d 70 61 72 65 28  beIdxKeyCompare(
26d20 70 43 2c 20 26 72 2c 20 26 72 65 73 29 3b 0a 20  pC, &r, &res);. 
26d30 20 61 73 73 65 72 74 28 20 28 4f 50 5f 49 64 78   assert( (OP_Idx
26d40 4c 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c 54  LE&1)==(OP_IdxLT
26d50 26 31 29 20 26 26 20 28 4f 50 5f 49 64 78 47 45  &1) && (OP_IdxGE
26d60 26 31 29 3d 3d 28 4f 50 5f 49 64 78 47 54 26 31  &1)==(OP_IdxGT&1
26d70 29 20 29 3b 0a 20 20 69 66 28 20 28 70 4f 70 2d  ) );.  if( (pOp-
26d80 3e 6f 70 63 6f 64 65 26 31 29 3d 3d 28 4f 50 5f  >opcode&1)==(OP_
26d90 49 64 78 4c 54 26 31 29 20 29 7b 0a 20 20 20 20  IdxLT&1) ){.    
26da0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
26db0 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c  ode==OP_IdxLE ||
26dc0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
26dd0 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72 65  _IdxLT );.    re
26de0 73 20 3d 20 2d 72 65 73 3b 0a 20 20 7d 65 6c 73  s = -res;.  }els
26df0 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
26e00 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
26e10 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  dxGE || pOp->opc
26e20 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b  ode==OP_IdxGT );
26e30 0a 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20 7d 0a  .    res++;.  }.
26e40 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
26e50 6e 28 72 65 73 3e 30 2c 32 29 3b 0a 20 20 69 66  n(res>0,2);.  if
26e60 28 20 72 65 73 3e 30 20 29 7b 0a 20 20 20 20 70  ( res>0 ){.    p
26e70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 20  c = pOp->p2 - 1 
26e80 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
26e90 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73  ../* Opcode: Des
26ea0 74 72 6f 79 20 50 31 20 50 32 20 50 33 20 2a 20  troy P1 P2 P3 * 
26eb0 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61  *.**.** Delete a
26ec0 6e 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73  n entire databas
26ed0 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
26ee0 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65   whose root page
26ef0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
26f00 0a 2a 2a 20 66 69 6c 65 20 69 73 20 67 69 76 65  .** file is give
26f10 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54  n by P1..**.** T
26f20 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64  he table being d
26f30 65 73 74 72 6f 79 65 64 20 69 73 20 69 6e 20 74  estroyed is in t
26f40 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
26f50 20 66 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20   file if P3==0. 
26f60 20 49 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65   If.** P3==1 the
26f70 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62  n the table to b
26f80 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68  e clear is in th
26f90 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  e auxiliary data
26fa0 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61  base file.** tha
26fb0 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  t is used to sto
26fc0 72 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65  re tables create
26fd0 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45   using CREATE TE
26fe0 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a  MPORARY TABLE..*
26ff0 2a 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55  *.** If AUTOVACU
27000 55 4d 20 69 73 20 65 6e 61 62 6c 65 64 20 74 68  UM is enabled th
27010 65 6e 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c  en it is possibl
27020 65 20 74 68 61 74 20 61 6e 6f 74 68 65 72 20 72  e that another r
27030 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68  oot page.** migh
27040 74 20 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20  t be moved into 
27050 74 68 65 20 6e 65 77 6c 79 20 64 65 6c 65 74 65  the newly delete
27060 64 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f  d root page in o
27070 72 64 65 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c  rder to keep all
27080 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 73 20 63  .** root pages c
27090 6f 6e 74 69 67 75 6f 75 73 20 61 74 20 74 68 65  ontiguous at the
270a0 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
270b0 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65  e database.  The
270c0 20 66 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65   former.** value
270d0 20 6f 66 20 74 68 65 20 72 6f 6f 74 20 70 61 67   of the root pag
270e0 65 20 74 68 61 74 20 6d 6f 76 65 64 20 2d 20 69  e that moved - i
270f0 74 73 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20  ts value before 
27100 74 68 65 20 6d 6f 76 65 20 6f 63 63 75 72 72 65  the move occurre
27110 64 20 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64  d -.** is stored
27120 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
27130 20 20 49 66 20 6e 6f 20 70 61 67 65 20 0a 2a 2a    If no page .**
27140 20 6d 6f 76 65 6d 65 6e 74 20 77 61 73 20 72 65   movement was re
27150 71 75 69 72 65 64 20 28 62 65 63 61 75 73 65 20  quired (because 
27160 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
27170 64 72 6f 70 70 65 64 20 77 61 73 20 61 6c 72 65  dropped was alre
27180 61 64 79 20 0a 2a 2a 20 74 68 65 20 6c 61 73 74  ady .** the last
27190 20 6f 6e 65 20 69 6e 20 74 68 65 20 64 61 74 61   one in the data
271a0 62 61 73 65 29 20 74 68 65 6e 20 61 20 7a 65 72  base) then a zer
271b0 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  o is stored in r
271c0 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 49  egister P2..** I
271d0 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20  f AUTOVACUUM is 
271e0 64 69 73 61 62 6c 65 64 20 74 68 65 6e 20 61 20  disabled then a 
271f0 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69  zero is stored i
27200 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
27210 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43  *.** See also: C
27220 6c 65 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lear.*/.case OP_
27230 44 65 73 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f  Destroy: {     /
27240 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
27250 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f 76 65  e */.  int iMove
27260 64 3b 0a 20 20 69 6e 74 20 69 43 6e 74 3b 0a 20  d;.  int iCnt;. 
27270 20 56 64 62 65 20 2a 70 56 64 62 65 3b 0a 20 20   Vdbe *pVdbe;.  
27280 69 6e 74 20 69 44 62 3b 0a 0a 20 20 61 73 73 65  int iDb;..  asse
27290 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
272a0 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  =0 );.#ifndef SQ
272b0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
272c0 4c 54 41 42 4c 45 0a 20 20 69 43 6e 74 20 3d 20  LTABLE.  iCnt = 
272d0 30 3b 0a 20 20 66 6f 72 28 70 56 64 62 65 3d 64  0;.  for(pVdbe=d
272e0 62 2d 3e 70 56 64 62 65 3b 20 70 56 64 62 65 3b  b->pVdbe; pVdbe;
272f0 20 70 56 64 62 65 20 3d 20 70 56 64 62 65 2d 3e   pVdbe = pVdbe->
27300 70 4e 65 78 74 29 7b 0a 20 20 20 20 69 66 28 20  pNext){.    if( 
27310 70 56 64 62 65 2d 3e 6d 61 67 69 63 3d 3d 56 44  pVdbe->magic==VD
27320 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 26 26 20  BE_MAGIC_RUN && 
27330 70 56 64 62 65 2d 3e 62 49 73 52 65 61 64 65 72  pVdbe->bIsReader
27340 20 0a 20 20 20 20 20 26 26 20 70 56 64 62 65 2d   .     && pVdbe-
27350 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 3c 32 20  >inVtabMethod<2 
27360 26 26 20 70 56 64 62 65 2d 3e 70 63 3e 3d 30 20  && pVdbe->pc>=0 
27370 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 69 43  .    ){.      iC
27380 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  nt++;.    }.  }.
27390 23 65 6c 73 65 0a 20 20 69 43 6e 74 20 3d 20 64  #else.  iCnt = d
273a0 62 2d 3e 6e 56 64 62 65 52 65 61 64 3b 0a 23 65  b->nVdbeRead;.#e
273b0 6e 64 69 66 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  ndif.  pOut->fla
273c0 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
273d0 20 69 66 28 20 69 43 6e 74 3e 31 20 29 7b 0a 20   if( iCnt>1 ){. 
273e0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c     rc = SQLITE_L
273f0 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d 3e 65 72  OCKED;.    p->er
27400 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f 45 5f 41  rorAction = OE_A
27410 62 6f 72 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  bort;.  }else{. 
27420 20 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33     iDb = pOp->p3
27430 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 43  ;.    assert( iC
27440 6e 74 3d 3d 31 20 29 3b 0a 20 20 20 20 61 73 73  nt==1 );.    ass
27450 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
27460 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29  sk & (((yDbMask)
27470 31 29 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a  1)<<iDb))!=0 );.
27480 20 20 20 20 69 4d 6f 76 65 64 20 3d 20 30 3b 20      iMoved = 0; 
27490 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20   /* Not needed. 
274a0 20 4f 6e 6c 79 20 74 6f 20 73 69 6c 65 6e 63 65   Only to silence
274b0 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20   a warning. */. 
274c0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
274d0 74 72 65 65 44 72 6f 70 54 61 62 6c 65 28 64 62  treeDropTable(db
274e0 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20  ->aDb[iDb].pBt, 
274f0 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f 76 65 64  pOp->p1, &iMoved
27500 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  );.    pOut->fla
27510 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
27520 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d    pOut->u.i = iM
27530 6f 76 65 64 3b 0a 23 69 66 6e 64 65 66 20 53 51  oved;.#ifndef SQ
27540 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41  LITE_OMIT_AUTOVA
27550 43 55 55 4d 0a 20 20 20 20 69 66 28 20 72 63 3d  CUUM.    if( rc=
27560 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69 4d  =SQLITE_OK && iM
27570 6f 76 65 64 21 3d 30 20 29 7b 0a 20 20 20 20 20  oved!=0 ){.     
27580 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65   sqlite3RootPage
27590 4d 6f 76 65 64 28 64 62 2c 20 69 44 62 2c 20 69  Moved(db, iDb, i
275a0 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31 29 3b  Moved, pOp->p1);
275b0 0a 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 4f 50  .      /* All OP
275c0 5f 44 65 73 74 72 6f 79 20 6f 70 65 72 61 74 69  _Destroy operati
275d0 6f 6e 73 20 6f 63 63 75 72 20 6f 6e 20 74 68 65  ons occur on the
275e0 20 73 61 6d 65 20 62 74 72 65 65 20 2a 2f 0a 20   same btree */. 
275f0 20 20 20 20 20 61 73 73 65 72 74 28 20 72 65 73       assert( res
27600 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d  etSchemaOnFault=
27610 3d 30 20 7c 7c 20 72 65 73 65 74 53 63 68 65 6d  =0 || resetSchem
27620 61 4f 6e 46 61 75 6c 74 3d 3d 69 44 62 2b 31 20  aOnFault==iDb+1 
27630 29 3b 0a 20 20 20 20 20 20 72 65 73 65 74 53 63  );.      resetSc
27640 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 69 44  hemaOnFault = iD
27650 62 2b 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  b+1;.    }.#endi
27660 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  f.  }.  break;.}
27670 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 65  ../* Opcode: Cle
27680 61 72 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a  ar P1 P2 P3.**.*
27690 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e  * Delete all con
276a0 74 65 6e 74 73 20 6f 66 20 74 68 65 20 64 61 74  tents of the dat
276b0 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69  abase table or i
276c0 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20  ndex whose root 
276d0 70 61 67 65 0a 2a 2a 20 69 6e 20 74 68 65 20 64  page.** in the d
276e0 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20  atabase file is 
276f0 67 69 76 65 6e 20 62 79 20 50 31 2e 20 20 42 75  given by P1.  Bu
27700 74 2c 20 75 6e 6c 69 6b 65 20 44 65 73 74 72 6f  t, unlike Destro
27710 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65 6d  y, do not.** rem
27720 6f 76 65 20 74 68 65 20 74 61 62 6c 65 20 6f 72  ove the table or
27730 20 69 6e 64 65 78 20 66 72 6f 6d 20 74 68 65 20   index from the 
27740 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
27750 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62  *.** The table b
27760 65 69 6e 67 20 63 6c 65 61 72 20 69 73 20 69 6e  eing clear is in
27770 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
27780 73 65 20 66 69 6c 65 20 69 66 20 50 32 3d 3d 30  se file if P2==0
27790 2e 20 20 49 66 0a 2a 2a 20 50 32 3d 3d 31 20 74  .  If.** P2==1 t
277a0 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f  hen the table to
277b0 20 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20   be clear is in 
277c0 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61  the auxiliary da
277d0 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74  tabase file.** t
277e0 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 73  hat is used to s
277f0 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65 61  tore tables crea
27800 74 65 20 75 73 69 6e 67 20 43 52 45 41 54 45 20  te using CREATE 
27810 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e  TEMPORARY TABLE.
27820 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 33  .**.** If the P3
27830 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65   value is non-ze
27840 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62  ro, then the tab
27850 6c 65 20 72 65 66 65 72 72 65 64 20 74 6f 20 6d  le referred to m
27860 75 73 74 20 62 65 20 61 6e 0a 2a 2a 20 69 6e 74  ust be an.** int
27870 6b 65 79 20 74 61 62 6c 65 20 28 61 6e 20 53 51  key table (an SQ
27880 4c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 6e 20  L table, not an 
27890 69 6e 64 65 78 29 2e 20 49 6e 20 74 68 69 73 20  index). In this 
278a0 63 61 73 65 20 74 68 65 20 72 6f 77 20 63 68 61  case the row cha
278b0 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e 74 20 69 73  nge .** count is
278c0 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20   incremented by 
278d0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
278e0 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ws in the table 
278f0 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 20 0a  being cleared. .
27900 2a 2a 20 49 66 20 50 33 20 69 73 20 67 72 65 61  ** If P3 is grea
27910 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74  ter than zero, t
27920 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 73 74  hen the value st
27930 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
27940 20 50 33 20 69 73 0a 2a 2a 20 61 6c 73 6f 20 69   P3 is.** also i
27950 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68  ncremented by th
27960 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
27970 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65   in the table be
27980 69 6e 67 20 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a  ing cleared..**.
27990 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 44 65 73  ** See also: Des
279a0 74 72 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  troy.*/.case OP_
279b0 43 6c 65 61 72 3a 20 7b 0a 20 20 69 6e 74 20 6e  Clear: {.  int n
279c0 43 68 61 6e 67 65 3b 0a 20 0a 20 20 6e 43 68 61  Change;. .  nCha
279d0 6e 67 65 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  nge = 0;.  asser
279e0 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
279f0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  0 );.  assert( (
27a00 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
27a10 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f  ((yDbMask)1)<<pO
27a20 70 2d 3e 70 32 29 29 21 3d 30 20 29 3b 0a 20 20  p->p2))!=0 );.  
27a30 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
27a40 65 43 6c 65 61 72 54 61 62 6c 65 28 0a 20 20 20  eClearTable(.   
27a50 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e     db->aDb[pOp->
27a60 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31  p2].pBt, pOp->p1
27a70 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43  , (pOp->p3 ? &nC
27a80 68 61 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a  hange : 0).  );.
27a90 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b    if( pOp->p3 ){
27aa0 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20  .    p->nChange 
27ab0 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20  += nChange;.    
27ac0 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b  if( pOp->p3>0 ){
27ad0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
27ae0 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
27af0 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20  pOp->p3]) );.   
27b00 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
27b10 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70  nge(p, &aMem[pOp
27b20 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d  ->p3]);.      aM
27b30 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20  em[pOp->p3].u.i 
27b40 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20  += nChange;.    
27b50 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
27b60 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73  ../* Opcode: Res
27b70 65 74 53 6f 72 74 65 72 20 50 31 20 2a 20 2a 20  etSorter P1 * * 
27b80 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65  * *.**.** Delete
27b90 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 66 72   all contents fr
27ba0 6f 6d 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c  om the ephemeral
27bb0 20 74 61 62 6c 65 20 6f 72 20 73 6f 72 74 65 72   table or sorter
27bc0 0a 2a 2a 20 74 68 61 74 20 69 73 20 6f 70 65 6e  .** that is open
27bd0 20 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a   on cursor P1..*
27be0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
27bf0 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20   only works for 
27c00 63 75 72 73 6f 72 73 20 75 73 65 64 20 66 6f 72  cursors used for
27c10 20 73 6f 72 74 69 6e 67 20 61 6e 64 0a 2a 2a 20   sorting and.** 
27c20 6f 70 65 6e 65 64 20 77 69 74 68 20 4f 50 5f 4f  opened with OP_O
27c30 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 72 20  penEphemeral or 
27c40 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 2e 0a 2a  OP_SorterOpen..*
27c50 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74 53  /.case OP_ResetS
27c60 6f 72 74 65 72 3a 20 7b 0a 20 20 56 64 62 65 43  orter: {.  VdbeC
27c70 75 72 73 6f 72 20 2a 70 43 3b 0a 20 0a 20 20 61  ursor *pC;. .  a
27c80 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
27c90 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
27ca0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
27cb0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
27cc0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
27cd0 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 43  C!=0 );.  if( pC
27ce0 2d 3e 70 53 6f 72 74 65 72 20 29 7b 0a 20 20 20  ->pSorter ){.   
27cf0 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
27d00 65 72 52 65 73 65 74 28 64 62 2c 20 70 43 2d 3e  erReset(db, pC->
27d10 70 53 6f 72 74 65 72 29 3b 0a 20 20 7d 65 6c 73  pSorter);.  }els
27d20 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
27d30 43 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 29  C->isEphemeral )
27d40 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
27d50 65 33 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c  e3BtreeClearTabl
27d60 65 4f 66 43 75 72 73 6f 72 28 70 43 2d 3e 70 43  eOfCursor(pC->pC
27d70 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72  ursor);.  }.  br
27d80 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
27d90 65 3a 20 43 72 65 61 74 65 54 61 62 6c 65 20 50  e: CreateTable P
27da0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
27db0 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f  nopsis: r[P2]=ro
27dc0 6f 74 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20  ot iDb=P1.**.** 
27dd0 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 74  Allocate a new t
27de0 61 62 6c 65 20 69 6e 20 74 68 65 20 6d 61 69 6e  able in the main
27df0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
27e00 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68  f P1==0 or in th
27e10 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64  e.** auxiliary d
27e20 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
27e30 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61  P1==1 or in an a
27e40 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
27e50 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72   if.** P1>1.  Wr
27e60 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67  ite the root pag
27e70 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  e number of the 
27e80 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a  new table into.*
27e90 2a 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  * register P2.**
27ea0 0a 2a 2a 20 54 68 65 20 64 69 66 66 65 72 65 6e  .** The differen
27eb0 63 65 20 62 65 74 77 65 65 6e 20 61 20 74 61 62  ce between a tab
27ec0 6c 65 20 61 6e 64 20 61 6e 20 69 6e 64 65 78 20  le and an index 
27ed0 69 73 20 74 68 69 73 3a 20 20 41 20 74 61 62 6c  is this:  A tabl
27ee0 65 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20 61  e must.** have a
27ef0 20 34 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20   4-byte integer 
27f00 6b 65 79 20 61 6e 64 20 63 61 6e 20 68 61 76 65  key and can have
27f10 20 61 72 62 69 74 72 61 72 79 20 64 61 74 61 2e   arbitrary data.
27f20 20 20 41 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 61    An index.** ha
27f30 73 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 6b  s an arbitrary k
27f40 65 79 20 62 75 74 20 6e 6f 20 64 61 74 61 2e 0a  ey but no data..
27f50 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
27f60 43 72 65 61 74 65 49 6e 64 65 78 0a 2a 2f 0a 2f  CreateIndex.*/./
27f70 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65  * Opcode: Create
27f80 49 6e 64 65 78 20 50 31 20 50 32 20 2a 20 2a 20  Index P1 P2 * * 
27f90 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
27fa0 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31  [P2]=root iDb=P1
27fb0 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20  .**.** Allocate 
27fc0 61 20 6e 65 77 20 69 6e 64 65 78 20 69 6e 20 74  a new index in t
27fd0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
27fe0 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f   file if P1==0 o
27ff0 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69  r in the.** auxi
28000 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66  liary database f
28010 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20  ile if P1==1 or 
28020 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64  in an attached d
28030 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31  atabase if.** P1
28040 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65 20 72  >1.  Write the r
28050 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20  oot page number 
28060 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65  of the new table
28070 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65   into.** registe
28080 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  r P2..**.** See 
28090 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e  documentation on
280a0 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20   OP_CreateTable 
280b0 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
280c0 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63  nformation..*/.c
280d0 61 73 65 20 4f 50 5f 43 72 65 61 74 65 49 6e 64  ase OP_CreateInd
280e0 65 78 3a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ex:            /
280f0 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
28100 65 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65  e */.case OP_Cre
28110 61 74 65 54 61 62 6c 65 3a 20 7b 20 20 20 20 20  ateTable: {     
28120 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
28130 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74  release */.  int
28140 20 70 67 6e 6f 3b 0a 20 20 69 6e 74 20 66 6c 61   pgno;.  int fla
28150 67 73 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a  gs;.  Db *pDb;..
28160 20 20 70 67 6e 6f 20 3d 20 30 3b 0a 20 20 61 73    pgno = 0;.  as
28170 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
28180 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
28190 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
281a0 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
281b0 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c   (((yDbMask)1)<<
281c0 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a  pOp->p1))!=0 );.
281d0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
281e0 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44  dOnly==0 );.  pD
281f0 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70  b = &db->aDb[pOp
28200 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
28210 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a   pDb->pBt!=0 );.
28220 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
28230 65 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  e==OP_CreateTabl
28240 65 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67  e ){.    /* flag
28250 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59  s = BTREE_INTKEY
28260 3b 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d  ; */.    flags =
28270 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20   BTREE_INTKEY;. 
28280 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67   }else{.    flag
28290 73 20 3d 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45  s = BTREE_BLOBKE
282a0 59 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  Y;.  }.  rc = sq
282b0 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65  lite3BtreeCreate
282c0 54 61 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20  Table(pDb->pBt, 
282d0 26 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20  &pgno, flags);. 
282e0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e   pOut->u.i = pgn
282f0 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  o;.  break;.}../
28300 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 73 65 53  * Opcode: ParseS
28310 63 68 65 6d 61 20 50 31 20 2a 20 2a 20 50 34 20  chema P1 * * P4 
28320 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64  *.**.** Read and
28330 20 70 61 72 73 65 20 61 6c 6c 20 65 6e 74 72 69   parse all entri
28340 65 73 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49  es from the SQLI
28350 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20  TE_MASTER table 
28360 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 0a 2a  of database P1.*
28370 2a 20 74 68 61 74 20 6d 61 74 63 68 20 74 68 65  * that match the
28380 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 50 34   WHERE clause P4
28390 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  . .**.** This op
283a0 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65  code invokes the
283b0 20 70 61 72 73 65 72 20 74 6f 20 63 72 65 61 74   parser to creat
283c0 65 20 61 20 6e 65 77 20 76 69 72 74 75 61 6c 20  e a new virtual 
283d0 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e  machine,.** then
283e0 20 72 75 6e 73 20 74 68 65 20 6e 65 77 20 76 69   runs the new vi
283f0 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20  rtual machine.  
28400 49 74 20 69 73 20 74 68 75 73 20 61 20 72 65 2d  It is thus a re-
28410 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a  entrant opcode..
28420 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 73 65  */.case OP_Parse
28430 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20  Schema: {.  int 
28440 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  iDb;.  const cha
28450 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68  r *zMaster;.  ch
28460 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74  ar *zSql;.  Init
28470 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a  Data initData;..
28480 20 20 2f 2a 20 41 6e 79 20 70 72 65 70 61 72 65    /* Any prepare
28490 64 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74  d statement that
284a0 20 69 6e 76 6f 6b 65 73 20 74 68 69 73 20 6f 70   invokes this op
284b0 63 6f 64 65 20 77 69 6c 6c 20 68 6f 6c 64 20 6d  code will hold m
284c0 75 74 65 78 65 73 0a 20 20 2a 2a 20 6f 6e 20 65  utexes.  ** on e
284d0 76 65 72 79 20 62 74 72 65 65 2e 20 20 54 68 69  very btree.  Thi
284e0 73 20 69 73 20 61 20 70 72 65 72 65 71 75 69 73  s is a prerequis
284f0 69 74 65 20 66 6f 72 20 69 6e 76 6f 6b 69 6e 67  ite for invoking
28500 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 49 6e   .  ** sqlite3In
28510 69 74 43 61 6c 6c 62 61 63 6b 28 29 2e 0a 20 20  itCallback()..  
28520 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
28530 5f 44 45 42 55 47 0a 20 20 66 6f 72 28 69 44 62  _DEBUG.  for(iDb
28540 3d 30 3b 20 69 44 62 3c 64 62 2d 3e 6e 44 62 3b  =0; iDb<db->nDb;
28550 20 69 44 62 2b 2b 29 7b 0a 20 20 20 20 61 73 73   iDb++){.    ass
28560 65 72 74 28 20 69 44 62 3d 3d 31 20 7c 7c 20 73  ert( iDb==1 || s
28570 71 6c 69 74 65 33 42 74 72 65 65 48 6f 6c 64 73  qlite3BtreeHolds
28580 4d 75 74 65 78 28 64 62 2d 3e 61 44 62 5b 69 44  Mutex(db->aDb[iD
28590 62 5d 2e 70 42 74 29 20 29 3b 0a 20 20 7d 0a 23  b].pBt) );.  }.#
285a0 65 6e 64 69 66 0a 0a 20 20 69 44 62 20 3d 20 70  endif..  iDb = p
285b0 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74  Op->p1;.  assert
285c0 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c  ( iDb>=0 && iDb<
285d0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
285e0 65 72 74 28 20 44 62 48 61 73 50 72 6f 70 65 72  ert( DbHasProper
285f0 74 79 28 64 62 2c 20 69 44 62 2c 20 44 42 5f 53  ty(db, iDb, DB_S
28600 63 68 65 6d 61 4c 6f 61 64 65 64 29 20 29 3b 0a  chemaLoaded) );.
28610 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 62 65 20    /* Used to be 
28620 61 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 2a 2f  a conditional */
28630 20 7b 0a 20 20 20 20 7a 4d 61 73 74 65 72 20 3d   {.    zMaster =
28640 20 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 69 44   SCHEMA_TABLE(iD
28650 62 29 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61  b);.    initData
28660 2e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 69 6e  .db = db;.    in
28670 69 74 44 61 74 61 2e 69 44 62 20 3d 20 70 4f 70  itData.iDb = pOp
28680 2d 3e 70 31 3b 0a 20 20 20 20 69 6e 69 74 44 61  ->p1;.    initDa
28690 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d 20 26 70  ta.pzErrMsg = &p
286a0 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 7a  ->zErrMsg;.    z
286b0 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50 72  Sql = sqlite3MPr
286c0 69 6e 74 66 28 64 62 2c 0a 20 20 20 20 20 20 20  intf(db,.       
286d0 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 72 6f  "SELECT name, ro
286e0 6f 74 70 61 67 65 2c 20 73 71 6c 20 46 52 4f 4d  otpage, sql FROM
286f0 20 27 25 71 27 2e 25 73 20 57 48 45 52 45 20 25   '%q'.%s WHERE %
28700 73 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64  s ORDER BY rowid
28710 22 2c 0a 20 20 20 20 20 20 20 64 62 2d 3e 61 44  ",.       db->aD
28720 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d  b[iDb].zName, zM
28730 61 73 74 65 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a  aster, pOp->p4.z
28740 29 3b 0a 20 20 20 20 69 66 28 20 7a 53 71 6c 3d  );.    if( zSql=
28750 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  =0 ){.      rc =
28760 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20   SQLITE_NOMEM;. 
28770 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
28780 61 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74  assert( db->init
28790 2e 62 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20  .busy==0 );.    
287a0 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20    db->init.busy 
287b0 3d 20 31 3b 0a 20 20 20 20 20 20 69 6e 69 74 44  = 1;.      initD
287c0 61 74 61 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f  ata.rc = SQLITE_
287d0 4f 4b 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  OK;.      assert
287e0 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  ( !db->mallocFai
287f0 6c 65 64 20 29 3b 0a 20 20 20 20 20 20 72 63 20  led );.      rc 
28800 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64  = sqlite3_exec(d
28810 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33  b, zSql, sqlite3
28820 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69  InitCallback, &i
28830 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 20  nitData, 0);.   
28840 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
28850 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69 74  E_OK ) rc = init
28860 44 61 74 61 2e 72 63 3b 0a 20 20 20 20 20 20 73  Data.rc;.      s
28870 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
28880 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 64 62   zSql);.      db
28890 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b  ->init.busy = 0;
288a0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28  .    }.  }.  if(
288b0 20 72 63 20 29 20 73 71 6c 69 74 65 33 52 65 73   rc ) sqlite3Res
288c0 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f  etAllSchemasOfCo
288d0 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20  nnection(db);.  
288e0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e  if( rc==SQLITE_N
288f0 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  OMEM ){.    goto
28900 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 62   no_mem;.  }.  b
28910 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20 21  reak;  .}..#if !
28920 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
28930 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20  MIT_ANALYZE)./* 
28940 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e 61 6c  Opcode: LoadAnal
28950 79 73 69 73 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  ysis P1 * * * *.
28960 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65 20 73  **.** Read the s
28970 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c  qlite_stat1 tabl
28980 65 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 50  e for database P
28990 31 20 61 6e 64 20 6c 6f 61 64 20 74 68 65 20 63  1 and load the c
289a0 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68 61  ontent.** of tha
289b0 74 20 74 61 62 6c 65 20 69 6e 74 6f 20 74 68 65  t table into the
289c0 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 20   internal index 
289d0 68 61 73 68 20 74 61 62 6c 65 2e 20 20 54 68 69  hash table.  Thi
289e0 73 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a 20  s will cause.** 
289f0 74 68 65 20 61 6e 61 6c 79 73 69 73 20 74 6f 20  the analysis to 
28a00 62 65 20 75 73 65 64 20 77 68 65 6e 20 70 72 65  be used when pre
28a10 70 61 72 69 6e 67 20 61 6c 6c 20 73 75 62 73 65  paring all subse
28a20 71 75 65 6e 74 20 71 75 65 72 69 65 73 2e 0a 2a  quent queries..*
28a30 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41 6e  /.case OP_LoadAn
28a40 61 6c 79 73 69 73 3a 20 7b 0a 20 20 61 73 73 65  alysis: {.  asse
28a50 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
28a60 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
28a70 62 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  b );.  rc = sqli
28a80 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28  te3AnalysisLoad(
28a90 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  db, pOp->p1);.  
28aa0 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69  break;  .}.#endi
28ab0 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51  f /* !defined(SQ
28ac0 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a  LITE_OMIT_ANALYZ
28ad0 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  E) */../* Opcode
28ae0 3a 20 44 72 6f 70 54 61 62 6c 65 20 50 31 20 2a  : DropTable P1 *
28af0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
28b00 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61  move the interna
28b10 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61  l (in-memory) da
28b20 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ta structures th
28b30 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74  at describe.** t
28b40 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 50  he table named P
28b50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  4 in database P1
28b60 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65  .  This is calle
28b70 64 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 0a  d after a table.
28b80 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 69 6e  ** is dropped in
28b90 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74   order to keep t
28ba0 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72  he internal repr
28bb0 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
28bc0 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73  e.** schema cons
28bd0 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74  istent with what
28be0 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a   is on disk..*/.
28bf0 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 61 62 6c  case OP_DropTabl
28c00 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e  e: {.  sqlite3Un
28c10 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62  linkAndDeleteTab
28c20 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  le(db, pOp->p1, 
28c30 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72  pOp->p4.z);.  br
28c40 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
28c50 65 3a 20 44 72 6f 70 49 6e 64 65 78 20 50 31 20  e: DropIndex P1 
28c60 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
28c70 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e  emove the intern
28c80 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64  al (in-memory) d
28c90 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74  ata structures t
28ca0 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20  hat describe.** 
28cb0 74 68 65 20 69 6e 64 65 78 20 6e 61 6d 65 64 20  the index named 
28cc0 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  P4 in database P
28cd0 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c  1.  This is call
28ce0 65 64 20 61 66 74 65 72 20 61 6e 20 69 6e 64 65  ed after an inde
28cf0 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20  x.** is dropped 
28d00 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
28d10 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65   the internal re
28d20 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
28d30 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f  the.** schema co
28d40 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68  nsistent with wh
28d50 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a  at is on disk..*
28d60 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 49 6e  /.case OP_DropIn
28d70 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  dex: {.  sqlite3
28d80 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49  UnlinkAndDeleteI
28d90 6e 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e 70 31  ndex(db, pOp->p1
28da0 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
28db0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
28dc0 6f 64 65 3a 20 44 72 6f 70 54 72 69 67 67 65 72  ode: DropTrigger
28dd0 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
28de0 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e  ** Remove the in
28df0 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72  ternal (in-memor
28e00 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72  y) data structur
28e10 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65  es that describe
28e20 0a 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20  .** the trigger 
28e30 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61  named P4 in data
28e40 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69  base P1.  This i
28e50 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61  s called after a
28e60 20 74 72 69 67 67 65 72 0a 2a 2a 20 69 73 20 64   trigger.** is d
28e70 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20  ropped in order 
28e80 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65  to keep the inte
28e90 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74  rnal representat
28ea0 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63  ion of the.** sc
28eb0 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20  hema consistent 
28ec0 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20  with what is on 
28ed0 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  disk..*/.case OP
28ee0 5f 44 72 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a  _DropTrigger: {.
28ef0 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41    sqlite3UnlinkA
28f00 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  ndDeleteTrigger(
28f10 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
28f20 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b  ->p4.z);.  break
28f30 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51  ;.}...#ifndef SQ
28f40 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52  LITE_OMIT_INTEGR
28f50 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70 63  ITY_CHECK./* Opc
28f60 6f 64 65 3a 20 49 6e 74 65 67 72 69 74 79 43 6b  ode: IntegrityCk
28f70 20 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a   P1 P2 P3 * P5.*
28f80 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c 79  *.** Do an analy
28f90 73 69 73 20 6f 66 20 74 68 65 20 63 75 72 72 65  sis of the curre
28fa0 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74 61 62 61  ntly open databa
28fb0 73 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a 2a 2a  se.  Store in.**
28fc0 20 72 65 67 69 73 74 65 72 20 50 31 20 74 68 65   register P1 the
28fd0 20 74 65 78 74 20 6f 66 20 61 6e 20 65 72 72 6f   text of an erro
28fe0 72 20 6d 65 73 73 61 67 65 20 64 65 73 63 72 69  r message descri
28ff0 62 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65 6d  bing any problem
29000 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f 62  s..** If no prob
29010 6c 65 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c 20  lems are found, 
29020 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20  store a NULL in 
29030 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a  register P1..**.
29040 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 20  ** The register 
29050 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  P3 contains the 
29060 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f  maximum number o
29070 66 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72 73  f allowed errors
29080 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65 67  ..** At most reg
29090 28 50 33 29 20 65 72 72 6f 72 73 20 77 69 6c 6c  (P3) errors will
290a0 20 62 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a   be reported..**
290b0 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
290c0 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20 73 74   the analysis st
290d0 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61 73 20 72  ops as soon as r
290e0 65 67 28 50 31 29 20 65 72 72 6f 72 73 20 61 72  eg(P1) errors ar
290f0 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65 67  e .** seen.  Reg
29100 28 50 31 29 20 69 73 20 75 70 64 61 74 65 64 20  (P1) is updated 
29110 77 69 74 68 20 74 68 65 20 6e 75 6d 62 65 72 20  with the number 
29120 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e  of errors remain
29130 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72  ing..**.** The r
29140 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 73  oot page numbers
29150 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20 69   of all tables i
29160 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  n the database a
29170 72 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 73 74  re integer.** st
29180 6f 72 65 64 20 69 6e 20 72 65 67 28 50 31 29 2c  ored in reg(P1),
29190 20 72 65 67 28 50 31 2b 31 29 2c 20 72 65 67 28   reg(P1+1), reg(
291a0 50 31 2b 32 29 2c 20 2e 2e 2e 2e 20 20 54 68 65  P1+2), ....  The
291b0 72 65 20 61 72 65 20 50 32 20 74 61 62 6c 65 73  re are P2 tables
291c0 0a 2a 2a 20 74 6f 74 61 6c 2e 0a 2a 2a 0a 2a 2a  .** total..**.**
291d0 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20 7a 65   If P5 is not ze
291e0 72 6f 2c 20 74 68 65 20 63 68 65 63 6b 20 69 73  ro, the check is
291f0 20 64 6f 6e 65 20 6f 6e 20 74 68 65 20 61 75 78   done on the aux
29200 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 0a  iliary database.
29210 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65  ** file, not the
29220 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
29230 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ile..**.** This 
29240 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 74  opcode is used t
29250 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20  o implement the 
29260 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20  integrity_check 
29270 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20  pragma..*/.case 
29280 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b 3a 20  OP_IntegrityCk: 
29290 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20  {.  int nRoot;  
292a0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
292b0 20 74 61 62 6c 65 73 20 74 6f 20 63 68 65 63 6b   tables to check
292c0 2e 20 20 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f  .  (Number of ro
292d0 6f 74 20 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20  ot pages.) */.  
292e0 69 6e 74 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20  int *aRoot;     
292f0 2f 2a 20 41 72 72 61 79 20 6f 66 20 72 6f 6f 74  /* Array of root
29300 70 61 67 65 20 6e 75 6d 62 65 72 73 20 66 6f 72  page numbers for
29310 20 74 61 62 6c 65 73 20 74 6f 20 62 65 20 63 68   tables to be ch
29320 65 63 6b 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6a  ecked */.  int j
29330 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f  ;          /* Lo
29340 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20  op counter */.  
29350 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20  int nErr;       
29360 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
29370 6f 72 73 20 72 65 70 6f 72 74 65 64 20 2a 2f 0a  ors reported */.
29380 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 20    char *z;      
29390 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65    /* Text of the
293a0 20 65 72 72 6f 72 20 72 65 70 6f 72 74 20 2a 2f   error report */
293b0 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20 20  .  Mem *pnErr;  
293c0 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 6b     /* Register k
293d0 65 65 70 69 6e 67 20 74 72 61 63 6b 20 6f 66 20  eeping track of 
293e0 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67  errors remaining
293f0 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70   */..  assert( p
29400 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20  ->bIsReader );. 
29410 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32   nRoot = pOp->p2
29420 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 52 6f 6f  ;.  assert( nRoo
29430 74 3e 30 20 29 3b 0a 20 20 61 52 6f 6f 74 20 3d  t>0 );.  aRoot =
29440 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
29450 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 69  Raw(db, sizeof(i
29460 6e 74 29 2a 28 6e 52 6f 6f 74 2b 31 29 20 29 3b  nt)*(nRoot+1) );
29470 0a 20 20 69 66 28 20 61 52 6f 6f 74 3d 3d 30 20  .  if( aRoot==0 
29480 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
29490 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
294a0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28  >0 && pOp->p3<=(
294b0 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
294c0 6f 72 29 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d  or) );.  pnErr =
294d0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
294e0 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72  .  assert( (pnEr
294f0 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  r->flags & MEM_I
29500 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  nt)!=0 );.  asse
29510 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67  rt( (pnErr->flag
29520 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
29530 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20  _Blob))==0 );.  
29540 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
29550 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 6a 3d 30  ->p1];.  for(j=0
29560 3b 20 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b 29 7b  ; j<nRoot; j++){
29570 0a 20 20 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20  .    aRoot[j] = 
29580 28 69 6e 74 29 73 71 6c 69 74 65 33 56 64 62 65  (int)sqlite3Vdbe
29590 49 6e 74 56 61 6c 75 65 28 26 70 49 6e 31 5b 6a  IntValue(&pIn1[j
295a0 5d 29 3b 0a 20 20 7d 0a 20 20 61 52 6f 6f 74 5b  ]);.  }.  aRoot[
295b0 6a 5d 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  j] = 0;.  assert
295c0 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44  ( pOp->p5<db->nD
295d0 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  b );.  assert( (
295e0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
295f0 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f  ((yDbMask)1)<<pO
29600 70 2d 3e 70 35 29 29 21 3d 30 20 29 3b 0a 20 20  p->p5))!=0 );.  
29610 7a 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  z = sqlite3Btree
29620 49 6e 74 65 67 72 69 74 79 43 68 65 63 6b 28 64  IntegrityCheck(d
29630 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e  b->aDb[pOp->p5].
29640 70 42 74 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f 6f  pBt, aRoot, nRoo
29650 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t,.             
29660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29670 20 20 20 20 28 69 6e 74 29 70 6e 45 72 72 2d 3e      (int)pnErr->
29680 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a 20 20 73  u.i, &nErr);.  s
29690 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
296a0 20 61 52 6f 6f 74 29 3b 0a 20 20 70 6e 45 72 72   aRoot);.  pnErr
296b0 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a 20  ->u.i -= nErr;. 
296c0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
296d0 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20  etNull(pIn1);.  
296e0 69 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20  if( nErr==0 ){. 
296f0 20 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30 20     assert( z==0 
29700 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 7a  );.  }else if( z
29710 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ==0 ){.    goto 
29720 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b  no_mem;.  }else{
29730 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
29740 4d 65 6d 53 65 74 53 74 72 28 70 49 6e 31 2c 20  MemSetStr(pIn1, 
29750 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54  z, -1, SQLITE_UT
29760 46 38 2c 20 73 71 6c 69 74 65 33 5f 66 72 65 65  F8, sqlite3_free
29770 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f  );.  }.  UPDATE_
29780 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e  MAX_BLOBSIZE(pIn
29790 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1);.  sqlite3Vdb
297a0 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
297b0 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pIn1, encoding);
297c0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
297d0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
297e0 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  T_INTEGRITY_CHEC
297f0 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  K */../* Opcode:
29800 20 52 6f 77 53 65 74 41 64 64 20 50 31 20 50 32   RowSetAdd P1 P2
29810 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
29820 69 73 3a 20 20 72 6f 77 73 65 74 28 50 31 29 3d  is:  rowset(P1)=
29830 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 49 6e 73 65  r[P2].**.** Inse
29840 72 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  rt the integer v
29850 61 6c 75 65 20 68 65 6c 64 20 62 79 20 72 65 67  alue held by reg
29860 69 73 74 65 72 20 50 32 20 69 6e 74 6f 20 61 20  ister P2 into a 
29870 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 0a 2a 2a  boolean index.**
29880 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65   held in registe
29890 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 61  r P1..**.** An a
298a0 73 73 65 72 74 69 6f 6e 20 66 61 69 6c 73 20 69  ssertion fails i
298b0 66 20 50 32 20 69 73 20 6e 6f 74 20 61 6e 20 69  f P2 is not an i
298c0 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20  nteger..*/.case 
298d0 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a 20 7b 20  OP_RowSetAdd: { 
298e0 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e        /* in1, in
298f0 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
29900 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
29910 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
29920 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
29930 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20   (pIn2->flags & 
29940 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20  MEM_Int)!=0 );. 
29950 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
29960 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
29970 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
29980 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65  3VdbeMemSetRowSe
29990 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28  t(pIn1);.    if(
299a0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
299b0 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
299c0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
299d0 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65  }.  sqlite3RowSe
299e0 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e  tInsert(pIn1->u.
299f0 70 52 6f 77 53 65 74 2c 20 70 49 6e 32 2d 3e 75  pRowSet, pIn2->u
29a00 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .i);.  break;.}.
29a10 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53  ./* Opcode: RowS
29a20 65 74 52 65 61 64 20 50 31 20 50 32 20 50 33 20  etRead P1 P2 P3 
29a30 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
29a40 20 20 72 5b 50 33 5d 3d 72 6f 77 73 65 74 28 50    r[P3]=rowset(P
29a50 31 29 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61 63 74  1).**.** Extract
29a60 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61   the smallest va
29a70 6c 75 65 20 66 72 6f 6d 20 62 6f 6f 6c 65 61 6e  lue from boolean
29a80 20 69 6e 64 65 78 20 50 31 20 61 6e 64 20 70 75   index P1 and pu
29a90 74 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74  t that value int
29aa0 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 33  o.** register P3
29ab0 2e 20 20 4f 72 2c 20 69 66 20 62 6f 6f 6c 65 61  .  Or, if boolea
29ac0 6e 20 69 6e 64 65 78 20 50 31 20 69 73 20 69 6e  n index P1 is in
29ad0 69 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20 6c  itially empty, l
29ae0 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63 68 61  eave P3.** uncha
29af0 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70 20 74 6f  nged and jump to
29b00 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e   instruction P2.
29b10 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53  .*/.case OP_RowS
29b20 65 74 52 65 61 64 3a 20 7b 20 20 20 20 20 20 20  etRead: {       
29b30 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f 75  /* jump, in1, ou
29b40 74 33 20 2a 2f 0a 20 20 69 36 34 20 76 61 6c 3b  t3 */.  i64 val;
29b50 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
29b60 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
29b70 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
29b80 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 0a  MEM_RowSet)==0 .
29b90 20 20 20 7c 7c 20 73 71 6c 69 74 65 33 52 6f 77     || sqlite3Row
29ba0 53 65 74 4e 65 78 74 28 70 49 6e 31 2d 3e 75 2e  SetNext(pIn1->u.
29bb0 70 52 6f 77 53 65 74 2c 20 26 76 61 6c 29 3d 3d  pRowSet, &val)==
29bc0 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  0.  ){.    /* Th
29bd0 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20  e boolean index 
29be0 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20  is empty */.    
29bf0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
29c00 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 20  tNull(pIn1);.   
29c10 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
29c20 31 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  1;.    VdbeBranc
29c30 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 7d  hTaken(1,2);.  }
29c40 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76  else{.    /* A v
29c50 61 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64 20  alue was pulled 
29c60 66 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20 2a  from the index *
29c70 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  /.    sqlite3Vdb
29c80 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d  eMemSetInt64(&aM
29c90 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c  em[pOp->p3], val
29ca0 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  );.    VdbeBranc
29cb0 68 54 61 6b 65 6e 28 30 2c 32 29 3b 0a 20 20 7d  hTaken(0,2);.  }
29cc0 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f  .  goto check_fo
29cd0 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a  r_interrupt;.}..
29ce0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65  /* Opcode: RowSe
29cf0 74 54 65 73 74 20 50 31 20 50 32 20 50 33 20 50  tTest P1 P2 P3 P
29d00 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  4.** Synopsis: i
29d10 66 20 72 5b 50 33 5d 20 69 6e 20 72 6f 77 73 65  f r[P3] in rowse
29d20 74 28 50 31 29 20 67 6f 74 6f 20 50 32 0a 2a 2a  t(P1) goto P2.**
29d30 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33 20  .** Register P3 
29d40 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 68 6f  is assumed to ho
29d50 6c 64 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65  ld a 64-bit inte
29d60 67 65 72 20 76 61 6c 75 65 2e 20 49 66 20 72 65  ger value. If re
29d70 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 63 6f 6e  gister P1.** con
29d80 74 61 69 6e 73 20 61 20 52 6f 77 53 65 74 20 6f  tains a RowSet o
29d90 62 6a 65 63 74 20 61 6e 64 20 74 68 61 74 20 52  bject and that R
29da0 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 63 6f 6e  owSet object con
29db0 74 61 69 6e 73 0a 2a 2a 20 74 68 65 20 76 61 6c  tains.** the val
29dc0 75 65 20 68 65 6c 64 20 69 6e 20 50 33 2c 20 6a  ue held in P3, j
29dd0 75 6d 70 20 74 6f 20 72 65 67 69 73 74 65 72 20  ump to register 
29de0 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  P2. Otherwise, i
29df0 6e 73 65 72 74 20 74 68 65 0a 2a 2a 20 69 6e 74  nsert the.** int
29e00 65 67 65 72 20 69 6e 20 50 33 20 69 6e 74 6f 20  eger in P3 into 
29e10 74 68 65 20 52 6f 77 53 65 74 20 61 6e 64 20 63  the RowSet and c
29e20 6f 6e 74 69 6e 75 65 20 6f 6e 20 74 6f 20 74 68  ontinue on to th
29e30 65 0a 2a 2a 20 6e 65 78 74 20 6f 70 63 6f 64 65  e.** next opcode
29e40 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f 77 53  ..**.** The RowS
29e50 65 74 20 6f 62 6a 65 63 74 20 69 73 20 6f 70 74  et object is opt
29e60 69 6d 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63  imized for the c
29e70 61 73 65 20 77 68 65 72 65 20 73 75 63 63 65 73  ase where succes
29e80 73 69 76 65 20 73 65 74 73 0a 2a 2a 20 6f 66 20  sive sets.** of 
29e90 69 6e 74 65 67 65 72 73 2c 20 77 68 65 72 65 20  integers, where 
29ea0 65 61 63 68 20 73 65 74 20 63 6f 6e 74 61 69 6e  each set contain
29eb0 73 20 6e 6f 20 64 75 70 6c 69 63 61 74 65 73 2e  s no duplicates.
29ec0 20 45 61 63 68 20 73 65 74 0a 2a 2a 20 6f 66 20   Each set.** of 
29ed0 76 61 6c 75 65 73 20 69 73 20 69 64 65 6e 74 69  values is identi
29ee0 66 69 65 64 20 62 79 20 61 20 75 6e 69 71 75 65  fied by a unique
29ef0 20 50 34 20 76 61 6c 75 65 2e 20 54 68 65 20 66   P4 value. The f
29f00 69 72 73 74 20 73 65 74 0a 2a 2a 20 6d 75 73 74  irst set.** must
29f10 20 68 61 76 65 20 50 34 3d 3d 30 2c 20 74 68 65   have P4==0, the
29f20 20 66 69 6e 61 6c 20 73 65 74 20 50 34 3d 2d 31   final set P4=-1
29f30 2e 20 20 50 34 20 6d 75 73 74 20 62 65 20 65 69  .  P4 must be ei
29f40 74 68 65 72 20 2d 31 20 6f 72 0a 2a 2a 20 6e 6f  ther -1 or.** no
29f50 6e 2d 6e 65 67 61 74 69 76 65 2e 20 20 46 6f 72  n-negative.  For
29f60 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76 61   non-negative va
29f70 6c 75 65 73 20 6f 66 20 50 34 20 6f 6e 6c 79 20  lues of P4 only 
29f80 74 68 65 20 6c 6f 77 65 72 20 34 0a 2a 2a 20 62  the lower 4.** b
29f90 69 74 73 20 61 72 65 20 73 69 67 6e 69 66 69 63  its are signific
29fa0 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ant..**.** This 
29fb0 61 6c 6c 6f 77 73 20 6f 70 74 69 6d 69 7a 61 74  allows optimizat
29fc0 69 6f 6e 73 3a 20 28 61 29 20 77 68 65 6e 20 50  ions: (a) when P
29fd0 34 3d 3d 30 20 74 68 65 72 65 20 69 73 20 6e 6f  4==0 there is no
29fe0 20 6e 65 65 64 20 74 6f 20 74 65 73 74 0a 2a 2a   need to test.**
29ff0 20 74 68 65 20 72 6f 77 73 65 74 20 6f 62 6a 65   the rowset obje
2a000 63 74 20 66 6f 72 20 50 33 2c 20 61 73 20 69 74  ct for P3, as it
2a010 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 20 6e   is guaranteed n
2a020 6f 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20 69 74  ot to contain it
2a030 2c 0a 2a 2a 20 28 62 29 20 77 68 65 6e 20 50 34  ,.** (b) when P4
2a040 3d 3d 2d 31 20 74 68 65 72 65 20 69 73 20 6e 6f  ==-1 there is no
2a050 20 6e 65 65 64 20 74 6f 20 69 6e 73 65 72 74 20   need to insert 
2a060 74 68 65 20 76 61 6c 75 65 2c 20 61 73 20 69 74  the value, as it
2a070 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20 62   will.** never b
2a080 65 20 74 65 73 74 65 64 20 66 6f 72 2c 20 61 6e  e tested for, an
2a090 64 20 28 63 29 20 77 68 65 6e 20 61 20 76 61 6c  d (c) when a val
2a0a0 75 65 20 74 68 61 74 20 69 73 20 70 61 72 74 20  ue that is part 
2a0b0 6f 66 20 73 65 74 20 58 20 69 73 0a 2a 2a 20 69  of set X is.** i
2a0c0 6e 73 65 72 74 65 64 2c 20 74 68 65 72 65 20 69  nserted, there i
2a0d0 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 73 65 61  s no need to sea
2a0e0 72 63 68 20 74 6f 20 73 65 65 20 69 66 20 74 68  rch to see if th
2a0f0 65 20 73 61 6d 65 20 76 61 6c 75 65 20 77 61 73  e same value was
2a100 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 69  .** previously i
2a110 6e 73 65 72 74 65 64 20 61 73 20 70 61 72 74 20  nserted as part 
2a120 6f 66 20 73 65 74 20 58 20 28 6f 6e 6c 79 20 69  of set X (only i
2a130 66 20 69 74 20 77 61 73 20 70 72 65 76 69 6f 75  f it was previou
2a140 73 6c 79 0a 2a 2a 20 69 6e 73 65 72 74 65 64 20  sly.** inserted 
2a150 61 73 20 70 61 72 74 20 6f 66 20 73 6f 6d 65 20  as part of some 
2a160 6f 74 68 65 72 20 73 65 74 29 2e 0a 2a 2f 0a 63  other set)..*/.c
2a170 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 54 65 73  ase OP_RowSetTes
2a180 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
2a190 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
2a1a0 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20  , in1, in3 */.  
2a1b0 69 6e 74 20 69 53 65 74 3b 0a 20 20 69 6e 74 20  int iSet;.  int 
2a1c0 65 78 69 73 74 73 3b 0a 0a 20 20 70 49 6e 31 20  exists;..  pIn1 
2a1d0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2a1e0 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ;.  pIn3 = &aMem
2a1f0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 53 65  [pOp->p3];.  iSe
2a200 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  t = pOp->p4.i;. 
2a210 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
2a220 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
2a230 0a 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69  .  /* If there i
2a240 73 20 61 6e 79 74 68 69 6e 67 20 6f 74 68 65 72  s anything other
2a250 20 74 68 61 6e 20 61 20 72 6f 77 73 65 74 20 6f   than a rowset o
2a260 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f 72 79 20  bject in memory 
2a270 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20 64 65  cell P1,.  ** de
2a280 6c 65 74 65 20 69 74 20 6e 6f 77 20 61 6e 64 20  lete it now and 
2a290 69 6e 69 74 69 61 6c 69 7a 65 20 50 31 20 77 69  initialize P1 wi
2a2a0 74 68 20 61 6e 20 65 6d 70 74 79 20 72 6f 77 73  th an empty rows
2a2b0 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28 20 28 70  et.  */.  if( (p
2a2c0 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
2a2d0 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20  _RowSet)==0 ){. 
2a2e0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2a2f0 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29  mSetRowSet(pIn1)
2a300 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d  ;.    if( (pIn1-
2a310 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
2a320 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  Set)==0 ) goto n
2a330 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61 73  o_mem;.  }..  as
2a340 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
2a350 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
2a360 20 61 73 73 65 72 74 28 20 69 53 65 74 3d 3d 2d   assert( iSet==-
2a370 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20 29 3b 0a  1 || iSet>=0 );.
2a380 20 20 69 66 28 20 69 53 65 74 20 29 7b 0a 20 20    if( iSet ){.  
2a390 20 20 65 78 69 73 74 73 20 3d 20 73 71 6c 69 74    exists = sqlit
2a3a0 65 33 52 6f 77 53 65 74 54 65 73 74 28 70 49 6e  e3RowSetTest(pIn
2a3b0 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 69 53  1->u.pRowSet, iS
2a3c0 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a  et, pIn3->u.i);.
2a3d0 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
2a3e0 6b 65 6e 28 65 78 69 73 74 73 21 3d 30 2c 32 29  ken(exists!=0,2)
2a3f0 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73 74 73  ;.    if( exists
2a400 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
2a410 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
2a420 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
2a430 20 7d 0a 20 20 69 66 28 20 69 53 65 74 3e 3d 30   }.  if( iSet>=0
2a440 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52   ){.    sqlite3R
2a450 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31  owSetInsert(pIn1
2a460 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e  ->u.pRowSet, pIn
2a470 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62  3->u.i);.  }.  b
2a480 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65  reak;.}...#ifnde
2a490 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
2a4a0 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65  IGGER../* Opcode
2a4b0 3a 20 50 72 6f 67 72 61 6d 20 50 31 20 50 32 20  : Program P1 P2 
2a4c0 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45  P3 P4 P5.**.** E
2a4d0 78 65 63 75 74 65 20 74 68 65 20 74 72 69 67 67  xecute the trigg
2a4e0 65 72 20 70 72 6f 67 72 61 6d 20 70 61 73 73 65  er program passe
2a4f0 64 20 61 73 20 50 34 20 28 74 79 70 65 20 50 34  d as P4 (type P4
2a500 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a  _SUBPROGRAM). .*
2a510 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73  *.** P1 contains
2a520 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   the address of 
2a530 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  the memory cell 
2a540 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
2a550 65 20 66 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a  e first memory .
2a560 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72  ** cell in an ar
2a570 72 61 79 20 6f 66 20 76 61 6c 75 65 73 20 75 73  ray of values us
2a580 65 64 20 61 73 20 61 72 67 75 6d 65 6e 74 73 20  ed as arguments 
2a590 74 6f 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  to the sub-progr
2a5a0 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61  am. P2 .** conta
2a5b0 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20  ins the address 
2a5c0 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20 74 68  to jump to if th
2a5d0 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68  e sub-program th
2a5e0 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a  rows an IGNORE .
2a5f0 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20 75 73 69  ** exception usi
2a600 6e 67 20 74 68 65 20 52 41 49 53 45 28 29 20 66  ng the RAISE() f
2a610 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73 74 65  unction. Registe
2a620 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68  r P3 contains th
2a630 65 20 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66  e address .** of
2a640 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69   a memory cell i
2a650 6e 20 74 68 69 73 20 28 74 68 65 20 70 61 72 65  n this (the pare
2a660 6e 74 29 20 56 4d 20 74 68 61 74 20 69 73 20 75  nt) VM that is u
2a670 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20  sed to allocate 
2a680 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72  the .** memory r
2a690 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73  equired by the s
2a6a0 75 62 2d 76 64 62 65 20 61 74 20 72 75 6e 74 69  ub-vdbe at runti
2a6b0 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  me..**.** P4 is 
2a6c0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
2a6d0 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74   VM containing t
2a6e0 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
2a6f0 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  am..**.** If P5 
2a700 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
2a710 6e 20 72 65 63 75 72 73 69 76 65 20 70 72 6f 67  n recursive prog
2a720 72 61 6d 20 69 6e 76 6f 63 61 74 69 6f 6e 20 69  ram invocation i
2a730 73 20 65 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 63 61  s enabled..*/.ca
2a740 73 65 20 4f 50 5f 50 72 6f 67 72 61 6d 3a 20 7b  se OP_Program: {
2a750 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
2a760 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20  */.  int nMem;  
2a770 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2a780 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79  Number of memory
2a790 20 72 65 67 69 73 74 65 72 73 20 66 6f 72 20 73   registers for s
2a7a0 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20  ub-program */.  
2a7b0 69 6e 74 20 6e 42 79 74 65 3b 20 20 20 20 20 20  int nByte;      
2a7c0 20 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73          /* Bytes
2a7d0 20 6f 66 20 72 75 6e 74 69 6d 65 20 73 70 61 63   of runtime spac
2a7e0 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 73  e required for s
2a7f0 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20  ub-program */.  
2a800 4d 65 6d 20 2a 70 52 74 3b 20 20 20 20 20 20 20  Mem *pRt;       
2a810 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
2a820 74 65 72 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20  ter to allocate 
2a830 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20 2a 2f  runtime space */
2a840 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20  .  Mem *pMem;   
2a850 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
2a860 65 64 20 74 6f 20 69 74 65 72 61 74 65 20 74 68  ed to iterate th
2a870 72 6f 75 67 68 20 6d 65 6d 6f 72 79 20 63 65 6c  rough memory cel
2a880 6c 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e  ls */.  Mem *pEn
2a890 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
2a8a0 2f 2a 20 4c 61 73 74 20 6d 65 6d 6f 72 79 20 63  /* Last memory c
2a8b0 65 6c 6c 20 69 6e 20 6e 65 77 20 61 72 72 61 79  ell in new array
2a8c0 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20   */.  VdbeFrame 
2a8d0 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 20 2f 2a  *pFrame;      /*
2a8e0 20 4e 65 77 20 76 64 62 65 20 66 72 61 6d 65 20   New vdbe frame 
2a8f0 74 6f 20 65 78 65 63 75 74 65 20 69 6e 20 2a 2f  to execute in */
2a900 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70  .  SubProgram *p
2a910 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 53 75  Program;   /* Su
2a920 62 2d 70 72 6f 67 72 61 6d 20 74 6f 20 65 78 65  b-program to exe
2a930 63 75 74 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  cute */.  void *
2a940 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
2a950 20 20 2f 2a 20 54 6f 6b 65 6e 20 69 64 65 6e 74    /* Token ident
2a960 69 66 79 69 6e 67 20 74 72 69 67 67 65 72 20 2a  ifying trigger *
2a970 2f 0a 0a 20 20 70 50 72 6f 67 72 61 6d 20 3d 20  /..  pProgram = 
2a980 70 4f 70 2d 3e 70 34 2e 70 50 72 6f 67 72 61 6d  pOp->p4.pProgram
2a990 3b 0a 20 20 70 52 74 20 3d 20 26 61 4d 65 6d 5b  ;.  pRt = &aMem[
2a9a0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65  pOp->p3];.  asse
2a9b0 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f  rt( pProgram->nO
2a9c0 70 3e 30 20 29 3b 0a 20 20 0a 20 20 2f 2a 20 49  p>0 );.  .  /* I
2a9d0 66 20 74 68 65 20 70 35 20 66 6c 61 67 20 69 73  f the p5 flag is
2a9e0 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 63   clear, then rec
2a9f0 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f  ursive invocatio
2aa00 6e 20 6f 66 20 74 72 69 67 67 65 72 73 20 69 73  n of triggers is
2aa10 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 20   .  ** disabled 
2aa20 66 6f 72 20 62 61 63 6b 77 61 72 64 73 20 63 6f  for backwards co
2aa30 6d 70 61 74 69 62 69 6c 69 74 79 20 28 70 35 20  mpatibility (p5 
2aa40 69 73 20 73 65 74 20 69 66 20 74 68 69 73 20 73  is set if this s
2aa50 75 62 2d 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20  ub-program.  ** 
2aa60 69 73 20 72 65 61 6c 6c 79 20 61 20 74 72 69 67  is really a trig
2aa70 67 65 72 2c 20 6e 6f 74 20 61 20 66 6f 72 65 69  ger, not a forei
2aa80 67 6e 20 6b 65 79 20 61 63 74 69 6f 6e 2c 20 61  gn key action, a
2aa90 6e 64 20 74 68 65 20 66 6c 61 67 20 73 65 74 0a  nd the flag set.
2aaa0 20 20 2a 2a 20 61 6e 64 20 63 6c 65 61 72 65 64    ** and cleared
2aab0 20 62 79 20 74 68 65 20 22 50 52 41 47 4d 41 20   by the "PRAGMA 
2aac0 72 65 63 75 72 73 69 76 65 5f 74 72 69 67 67 65  recursive_trigge
2aad0 72 73 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 63  rs" command is c
2aae0 6c 65 61 72 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a  lear)..  ** .  *
2aaf0 2a 20 49 74 20 69 73 20 72 65 63 75 72 73 69 76  * It is recursiv
2ab00 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20  e invocation of 
2ab10 74 72 69 67 67 65 72 73 2c 20 61 74 20 74 68 65  triggers, at the
2ab20 20 53 51 4c 20 6c 65 76 65 6c 2c 20 74 68 61 74   SQL level, that
2ab30 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c   is .  ** disabl
2ab40 65 64 2e 20 49 6e 20 73 6f 6d 65 20 63 61 73 65  ed. In some case
2ab50 73 20 61 20 73 69 6e 67 6c 65 20 74 72 69 67 67  s a single trigg
2ab60 65 72 20 6d 61 79 20 67 65 6e 65 72 61 74 65 20  er may generate 
2ab70 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 0a 20  more than one . 
2ab80 20 2a 2a 20 53 75 62 50 72 6f 67 72 61 6d 20 28   ** SubProgram (
2ab90 69 66 20 74 68 65 20 74 72 69 67 67 65 72 20 6d  if the trigger m
2aba0 61 79 20 62 65 20 65 78 65 63 75 74 65 64 20 77  ay be executed w
2abb0 69 74 68 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  ith more than on
2abc0 65 20 64 69 66 66 65 72 65 6e 74 20 0a 20 20 2a  e different .  *
2abd0 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c  * ON CONFLICT al
2abe0 67 6f 72 69 74 68 6d 29 2e 20 53 75 62 50 72 6f  gorithm). SubPro
2abf0 67 72 61 6d 20 73 74 72 75 63 74 75 72 65 73 20  gram structures 
2ac00 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
2ac10 61 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20 74 72  a.  ** single tr
2ac20 69 67 67 65 72 20 61 6c 6c 20 68 61 76 65 20 74  igger all have t
2ac30 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f  he same value fo
2ac40 72 20 74 68 65 20 53 75 62 50 72 6f 67 72 61 6d  r the SubProgram
2ac50 2e 74 6f 6b 65 6e 20 0a 20 20 2a 2a 20 76 61 72  .token .  ** var
2ac60 69 61 62 6c 65 2e 20 20 2a 2f 0a 20 20 69 66 28  iable.  */.  if(
2ac70 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20   pOp->p5 ){.    
2ac80 74 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f  t = pProgram->to
2ac90 6b 65 6e 3b 0a 20 20 20 20 66 6f 72 28 70 46 72  ken;.    for(pFr
2aca0 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70  ame=p->pFrame; p
2acb0 46 72 61 6d 65 20 26 26 20 70 46 72 61 6d 65 2d  Frame && pFrame-
2acc0 3e 74 6f 6b 65 6e 21 3d 74 3b 20 70 46 72 61 6d  >token!=t; pFram
2acd0 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  e=pFrame->pParen
2ace0 74 29 3b 0a 20 20 20 20 69 66 28 20 70 46 72 61  t);.    if( pFra
2acf0 6d 65 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  me ) break;.  }.
2ad00 0a 20 20 69 66 28 20 70 2d 3e 6e 46 72 61 6d 65  .  if( p->nFrame
2ad10 3e 3d 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  >=db->aLimit[SQL
2ad20 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45  ITE_LIMIT_TRIGGE
2ad30 52 5f 44 45 50 54 48 5d 20 29 7b 0a 20 20 20 20  R_DEPTH] ){.    
2ad40 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
2ad50 52 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  R;.    sqlite3Se
2ad60 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
2ad70 4d 73 67 2c 20 64 62 2c 20 22 74 6f 6f 20 6d 61  Msg, db, "too ma
2ad80 6e 79 20 6c 65 76 65 6c 73 20 6f 66 20 74 72 69  ny levels of tri
2ad90 67 67 65 72 20 72 65 63 75 72 73 69 6f 6e 22 29  gger recursion")
2ada0 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
2adb0 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20  ..  /* Register 
2adc0 70 52 74 20 69 73 20 75 73 65 64 20 74 6f 20 73  pRt is used to s
2add0 74 6f 72 65 20 74 68 65 20 6d 65 6d 6f 72 79 20  tore the memory 
2ade0 72 65 71 75 69 72 65 64 20 74 6f 20 73 61 76 65  required to save
2adf0 20 74 68 65 20 73 74 61 74 65 0a 20 20 2a 2a 20   the state.  ** 
2ae00 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  of the current p
2ae10 72 6f 67 72 61 6d 2c 20 61 6e 64 20 74 68 65 20  rogram, and the 
2ae20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20  memory required 
2ae30 61 74 20 72 75 6e 74 69 6d 65 20 74 6f 20 65 78  at runtime to ex
2ae40 65 63 75 74 65 0a 20 20 2a 2a 20 74 68 65 20 74  ecute.  ** the t
2ae50 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 20  rigger program. 
2ae60 49 66 20 74 68 69 73 20 74 72 69 67 67 65 72 20  If this trigger 
2ae70 68 61 73 20 62 65 65 6e 20 66 69 72 65 64 20 62  has been fired b
2ae80 65 66 6f 72 65 2c 20 74 68 65 6e 20 70 52 74 20  efore, then pRt 
2ae90 0a 20 20 2a 2a 20 69 73 20 61 6c 72 65 61 64 79  .  ** is already
2aea0 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4f 74 68 65   allocated. Othe
2aeb0 72 77 69 73 65 2c 20 69 74 20 6d 75 73 74 20 62  rwise, it must b
2aec0 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 20  e initialized.  
2aed0 2a 2f 0a 20 20 69 66 28 20 28 70 52 74 2d 3e 66  */.  if( (pRt->f
2aee0 6c 61 67 73 26 4d 45 4d 5f 46 72 61 6d 65 29 3d  lags&MEM_Frame)=
2aef0 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 53 75 62  =0 ){.    /* Sub
2af00 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69 73 20  Program.nMem is 
2af10 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65  set to the numbe
2af20 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  r of memory cell
2af30 73 20 75 73 65 64 20 62 79 20 74 68 65 20 0a 20  s used by the . 
2af40 20 20 20 2a 2a 20 70 72 6f 67 72 61 6d 20 73 74     ** program st
2af50 6f 72 65 64 20 69 6e 20 53 75 62 50 72 6f 67 72  ored in SubProgr
2af60 61 6d 2e 61 4f 70 2e 20 41 73 20 77 65 6c 6c 20  am.aOp. As well 
2af70 61 73 20 74 68 65 73 65 2c 20 6f 6e 65 20 6d 65  as these, one me
2af80 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 63 65 6c 6c  mory.    ** cell
2af90 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72   is required for
2afa0 20 65 61 63 68 20 63 75 72 73 6f 72 20 75 73 65   each cursor use
2afb0 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d  d by the program
2afc0 2e 20 53 65 74 20 6c 6f 63 61 6c 0a 20 20 20 20  . Set local.    
2afd0 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 4d 65 6d  ** variable nMem
2afe0 20 28 61 6e 64 20 6c 61 74 65 72 2c 20 56 64 62   (and later, Vdb
2aff0 65 46 72 61 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d  eFrame.nChildMem
2b000 29 20 74 6f 20 74 68 69 73 20 76 61 6c 75 65 2e  ) to this value.
2b010 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d  .    */.    nMem
2b020 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65   = pProgram->nMe
2b030 6d 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  m + pProgram->nC
2b040 73 72 3b 0a 20 20 20 20 6e 42 79 74 65 20 3d 20  sr;.    nByte = 
2b050 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56 64  ROUND8(sizeof(Vd
2b060 62 65 46 72 61 6d 65 29 29 0a 20 20 20 20 20 20  beFrame)).      
2b070 20 20 20 20 20 20 20 20 2b 20 6e 4d 65 6d 20 2a          + nMem *
2b080 20 73 69 7a 65 6f 66 28 4d 65 6d 29 0a 20 20 20   sizeof(Mem).   
2b090 20 20 20 20 20 20 20 20 20 20 20 2b 20 70 50 72             + pPr
2b0a0 6f 67 72 61 6d 2d 3e 6e 43 73 72 20 2a 20 73 69  ogram->nCsr * si
2b0b0 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72 20  zeof(VdbeCursor 
2b0c0 2a 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *).             
2b0d0 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 6e   + pProgram->nOn
2b0e0 63 65 20 2a 20 73 69 7a 65 6f 66 28 75 38 29 3b  ce * sizeof(u8);
2b0f0 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 73 71  .    pFrame = sq
2b100 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
2b110 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20 20  o(db, nByte);.  
2b120 20 20 69 66 28 20 21 70 46 72 61 6d 65 20 29 7b    if( !pFrame ){
2b130 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  .      goto no_m
2b140 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  em;.    }.    sq
2b150 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
2b160 61 73 65 28 70 52 74 29 3b 0a 20 20 20 20 70 52  ase(pRt);.    pR
2b170 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 46  t->flags = MEM_F
2b180 72 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e 75  rame;.    pRt->u
2b190 2e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65  .pFrame = pFrame
2b1a0 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 76  ;..    pFrame->v
2b1b0 20 3d 20 70 3b 0a 20 20 20 20 70 46 72 61 6d 65   = p;.    pFrame
2b1c0 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d  ->nChildMem = nM
2b1d0 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  em;.    pFrame->
2b1e0 6e 43 68 69 6c 64 43 73 72 20 3d 20 70 50 72 6f  nChildCsr = pPro
2b1f0 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20  gram->nCsr;.    
2b200 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20 70 63 3b  pFrame->pc = pc;
2b210 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65  .    pFrame->aMe
2b220 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20  m = p->aMem;.   
2b230 20 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20   pFrame->nMem = 
2b240 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72  p->nMem;.    pFr
2b250 61 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e  ame->apCsr = p->
2b260 61 70 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d  apCsr;.    pFram
2b270 65 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e  e->nCursor = p->
2b280 6e 43 75 72 73 6f 72 3b 0a 20 20 20 20 70 46 72  nCursor;.    pFr
2b290 61 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f  ame->aOp = p->aO
2b2a0 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  p;.    pFrame->n
2b2b0 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20  Op = p->nOp;.   
2b2c0 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d   pFrame->token =
2b2d0 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e   pProgram->token
2b2e0 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f  ;.    pFrame->aO
2b2f0 6e 63 65 46 6c 61 67 20 3d 20 70 2d 3e 61 4f 6e  nceFlag = p->aOn
2b300 63 65 46 6c 61 67 3b 0a 20 20 20 20 70 46 72 61  ceFlag;.    pFra
2b310 6d 65 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d 20  me->nOnceFlag = 
2b320 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 3b 0a 0a 20  p->nOnceFlag;.. 
2b330 20 20 20 70 45 6e 64 20 3d 20 26 56 64 62 65 46     pEnd = &VdbeF
2b340 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b  rameMem(pFrame)[
2b350 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65  pFrame->nChildMe
2b360 6d 5d 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d  m];.    for(pMem
2b370 3d 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46  =VdbeFrameMem(pF
2b380 72 61 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e  rame); pMem!=pEn
2b390 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20  d; pMem++){.    
2b3a0 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20    pMem->flags = 
2b3b0 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20  MEM_Undefined;. 
2b3c0 20 20 20 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20       pMem->db = 
2b3d0 64 62 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  db;.    }.  }els
2b3e0 65 7b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20  e{.    pFrame = 
2b3f0 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a 20  pRt->u.pFrame;. 
2b400 20 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67     assert( pProg
2b410 72 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72  ram->nMem+pProgr
2b420 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65  am->nCsr==pFrame
2b430 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 29 3b 0a 20  ->nChildMem );. 
2b440 20 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67     assert( pProg
2b450 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d  ram->nCsr==pFram
2b460 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 29 3b 0a  e->nChildCsr );.
2b470 20 20 20 20 61 73 73 65 72 74 28 20 70 63 3d 3d      assert( pc==
2b480 70 46 72 61 6d 65 2d 3e 70 63 20 29 3b 0a 20 20  pFrame->pc );.  
2b490 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b  }..  p->nFrame++
2b4a0 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70 50 61 72  ;.  pFrame->pPar
2b4b0 65 6e 74 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b  ent = p->pFrame;
2b4c0 0a 20 20 70 46 72 61 6d 65 2d 3e 6c 61 73 74 52  .  pFrame->lastR
2b4d0 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64  owid = lastRowid
2b4e0 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 61  ;.  pFrame->nCha
2b4f0 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61 6e 67 65  nge = p->nChange
2b500 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d  ;.  p->nChange =
2b510 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20   0;.  p->pFrame 
2b520 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61  = pFrame;.  p->a
2b530 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 26 56 64  Mem = aMem = &Vd
2b540 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d  beFrameMem(pFram
2b550 65 29 5b 2d 31 5d 3b 0a 20 20 70 2d 3e 6e 4d 65  e)[-1];.  p->nMe
2b560 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69  m = pFrame->nChi
2b570 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72  ldMem;.  p->nCur
2b580 73 6f 72 20 3d 20 28 75 31 36 29 70 46 72 61 6d  sor = (u16)pFram
2b590 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20  e->nChildCsr;.  
2b5a0 70 2d 3e 61 70 43 73 72 20 3d 20 28 56 64 62 65  p->apCsr = (Vdbe
2b5b0 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b  Cursor **)&aMem[
2b5c0 70 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20 20 70 2d  p->nMem+1];.  p-
2b5d0 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50 72  >aOp = aOp = pPr
2b5e0 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d  ogram->aOp;.  p-
2b5f0 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d  >nOp = pProgram-
2b600 3e 6e 4f 70 3b 0a 20 20 70 2d 3e 61 4f 6e 63 65  >nOp;.  p->aOnce
2b610 46 6c 61 67 20 3d 20 28 75 38 20 2a 29 26 70 2d  Flag = (u8 *)&p-
2b620 3e 61 70 43 73 72 5b 70 2d 3e 6e 43 75 72 73 6f  >apCsr[p->nCurso
2b630 72 5d 3b 0a 20 20 70 2d 3e 6e 4f 6e 63 65 46 6c  r];.  p->nOnceFl
2b640 61 67 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  ag = pProgram->n
2b650 4f 6e 63 65 3b 0a 20 20 70 63 20 3d 20 2d 31 3b  Once;.  pc = -1;
2b660 0a 20 20 6d 65 6d 73 65 74 28 70 2d 3e 61 4f 6e  .  memset(p->aOn
2b670 63 65 46 6c 61 67 2c 20 30 2c 20 70 2d 3e 6e 4f  ceFlag, 0, p->nO
2b680 6e 63 65 46 6c 61 67 29 3b 0a 0a 20 20 62 72 65  nceFlag);..  bre
2b690 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2b6a0 3a 20 50 61 72 61 6d 20 50 31 20 50 32 20 2a 20  : Param P1 P2 * 
2b6b0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  * *.**.** This o
2b6c0 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 65 76  pcode is only ev
2b6d0 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 73 75  er present in su
2b6e0 62 2d 70 72 6f 67 72 61 6d 73 20 63 61 6c 6c 65  b-programs calle
2b6f0 64 20 76 69 61 20 74 68 65 20 0a 2a 2a 20 4f 50  d via the .** OP
2b700 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63  _Program instruc
2b710 74 69 6f 6e 2e 20 43 6f 70 79 20 61 20 76 61 6c  tion. Copy a val
2b720 75 65 20 63 75 72 72 65 6e 74 6c 79 20 73 74 6f  ue currently sto
2b730 72 65 64 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20  red in a memory 
2b740 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20 74 68 65 20  .** cell of the 
2b750 63 61 6c 6c 69 6e 67 20 28 70 61 72 65 6e 74 29  calling (parent)
2b760 20 66 72 61 6d 65 20 74 6f 20 63 65 6c 6c 20 50   frame to cell P
2b770 32 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74  2 in the current
2b780 20 66 72 61 6d 65 73 20 0a 2a 2a 20 61 64 64 72   frames .** addr
2b790 65 73 73 20 73 70 61 63 65 2e 20 54 68 69 73 20  ess space. This 
2b7a0 69 73 20 75 73 65 64 20 62 79 20 74 72 69 67 67  is used by trigg
2b7b0 65 72 20 70 72 6f 67 72 61 6d 73 20 74 6f 20 61  er programs to a
2b7c0 63 63 65 73 73 20 74 68 65 20 6e 65 77 2e 2a 20  ccess the new.* 
2b7d0 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a 20 76 61  .** and old.* va
2b7e0 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  lues..**.** The 
2b7f0 61 64 64 72 65 73 73 20 6f 66 20 74 68 65 20 63  address of the c
2b800 65 6c 6c 20 69 6e 20 74 68 65 20 70 61 72 65 6e  ell in the paren
2b810 74 20 66 72 61 6d 65 20 69 73 20 64 65 74 65 72  t frame is deter
2b820 6d 69 6e 65 64 20 62 79 20 61 64 64 69 6e 67 0a  mined by adding.
2b830 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ** the value of 
2b840 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20  the P1 argument 
2b850 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  to the value of 
2b860 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20  the P1 argument 
2b870 74 6f 20 74 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e  to the.** callin
2b880 67 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73  g OP_Program ins
2b890 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
2b8a0 65 20 4f 50 5f 50 61 72 61 6d 3a 20 7b 20 20 20  e OP_Param: {   
2b8b0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
2b8c0 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
2b8d0 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
2b8e0 65 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20  e;.  Mem *pIn;. 
2b8f0 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72   pFrame = p->pFr
2b900 61 6d 65 3b 0a 20 20 70 49 6e 20 3d 20 26 70 46  ame;.  pIn = &pF
2b910 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  rame->aMem[pOp->
2b920 70 31 20 2b 20 70 46 72 61 6d 65 2d 3e 61 4f 70  p1 + pFrame->aOp
2b930 5b 70 46 72 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d  [pFrame->pc].p1]
2b940 3b 20 20 20 0a 20 20 73 71 6c 69 74 65 33 56 64  ;   .  sqlite3Vd
2b950 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
2b960 28 70 4f 75 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f  (pOut, pIn, MEM_
2b970 45 70 68 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b  Ephem);.  break;
2b980 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69  .}..#endif /* #i
2b990 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2b9a0 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69  T_TRIGGER */..#i
2b9b0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2b9c0 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a  T_FOREIGN_KEY./*
2b9d0 20 4f 70 63 6f 64 65 3a 20 46 6b 43 6f 75 6e 74   Opcode: FkCount
2b9e0 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  er P1 P2 * * *.*
2b9f0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 66 6b 63 74  * Synopsis: fkct
2ba00 72 5b 50 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20  r[P1]+=P2.**.** 
2ba10 49 6e 63 72 65 6d 65 6e 74 20 61 20 22 63 6f 6e  Increment a "con
2ba20 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 22  straint counter"
2ba30 20 62 79 20 50 32 20 28 50 32 20 6d 61 79 20 62   by P2 (P2 may b
2ba40 65 20 6e 65 67 61 74 69 76 65 20 6f 72 20 70 6f  e negative or po
2ba50 73 69 74 69 76 65 29 2e 0a 2a 2a 20 49 66 20 50  sitive)..** If P
2ba60 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  1 is non-zero, t
2ba70 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73  he database cons
2ba80 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 20 69  traint counter i
2ba90 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 0a 2a  s incremented .*
2baa0 2a 20 28 64 65 66 65 72 72 65 64 20 66 6f 72 65  * (deferred fore
2bab0 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
2bac0 6e 74 73 29 2e 20 4f 74 68 65 72 77 69 73 65 2c  nts). Otherwise,
2bad0 20 69 66 20 50 31 20 69 73 20 7a 65 72 6f 2c 20   if P1 is zero, 
2bae0 74 68 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  the .** statemen
2baf0 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63  t counter is inc
2bb00 72 65 6d 65 6e 74 65 64 20 28 69 6d 6d 65 64 69  remented (immedi
2bb10 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ate foreign key 
2bb20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a 2a 2f  constraints)..*/
2bb30 0a 63 61 73 65 20 4f 50 5f 46 6b 43 6f 75 6e 74  .case OP_FkCount
2bb40 65 72 3a 20 7b 0a 20 20 69 66 28 20 64 62 2d 3e  er: {.  if( db->
2bb50 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 44  flags & SQLITE_D
2bb60 65 66 65 72 46 4b 73 20 29 7b 0a 20 20 20 20 64  eferFKs ){.    d
2bb70 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
2bb80 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a  ons += pOp->p2;.
2bb90 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d    }else if( pOp-
2bba0 3e 70 31 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e  >p1 ){.    db->n
2bbb0 44 65 66 65 72 72 65 64 43 6f 6e 73 20 2b 3d 20  DeferredCons += 
2bbc0 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65  pOp->p2;.  }else
2bbd0 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73  {.    p->nFkCons
2bbe0 74 72 61 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70  traint += pOp->p
2bbf0 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
2bc00 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b  }../* Opcode: Fk
2bc10 49 66 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a  IfZero P1 P2 * *
2bc20 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2bc30 69 66 20 66 6b 63 74 72 5b 50 31 5d 3d 3d 30 20  if fkctr[P1]==0 
2bc40 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  goto P2.**.** Th
2bc50 69 73 20 6f 70 63 6f 64 65 20 74 65 73 74 73 20  is opcode tests 
2bc60 69 66 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79  if a foreign key
2bc70 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e   constraint-coun
2bc80 74 65 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79  ter is currently
2bc90 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c   zero..** If so,
2bca0 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
2bcb0 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69  tion P2. Otherwi
2bcc0 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  se, fall through
2bcd0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 0a 2a 2a   to the next .**
2bce0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
2bcf0 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e  .** If P1 is non
2bd00 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20  -zero, then the 
2bd10 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
2bd20 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
2bd30 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72  nstraint-counter
2bd40 0a 2a 2a 20 69 73 20 7a 65 72 6f 20 28 74 68 65  .** is zero (the
2bd50 20 6f 6e 65 20 74 68 61 74 20 63 6f 75 6e 74 73   one that counts
2bd60 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72   deferred constr
2bd70 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29  aint violations)
2bd80 2e 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 7a 65  . If P1 is.** ze
2bd90 72 6f 2c 20 74 68 65 20 6a 75 6d 70 20 69 73 20  ro, the jump is 
2bda0 74 61 6b 65 6e 20 69 66 20 74 68 65 20 73 74 61  taken if the sta
2bdb0 74 65 6d 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e  tement constrain
2bdc0 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 7a 65 72  t-counter is zer
2bdd0 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69 61 74 65 20  o.** (immediate 
2bde0 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
2bdf0 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
2be00 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  s)..*/.case OP_F
2be10 6b 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20  kIfZero: {      
2be20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
2be30 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  if( pOp->p1 ){. 
2be40 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
2be50 65 6e 28 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  en(db->nDeferred
2be60 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e  Cons==0 && db->n
2be70 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d  DeferredImmCons=
2be80 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20  =0, 2);.    if( 
2be90 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
2bea0 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66  s==0 && db->nDef
2beb0 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20  erredImmCons==0 
2bec0 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31  ) pc = pOp->p2-1
2bed0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56  ;.  }else{.    V
2bee0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70  dbeBranchTaken(p
2bef0 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d  ->nFkConstraint=
2bf00 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72  =0 && db->nDefer
2bf10 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32  redImmCons==0, 2
2bf20 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e 46  );.    if( p->nF
2bf30 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26  kConstraint==0 &
2bf40 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  & db->nDeferredI
2bf50 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 70 63 20 3d  mmCons==0 ) pc =
2bf60 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a   pOp->p2-1;.  }.
2bf70 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2bf80 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c  f /* #ifndef SQL
2bf90 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
2bfa0 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  _KEY */..#ifndef
2bfb0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
2bfc0 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70  OINCREMENT./* Op
2bfd0 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20  code: MemMax P1 
2bfe0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
2bff0 70 73 69 73 3a 20 72 5b 50 31 5d 3d 6d 61 78 28  psis: r[P1]=max(
2c000 72 5b 50 31 5d 2c 72 5b 50 32 5d 29 0a 2a 2a 0a  r[P1],r[P2]).**.
2c010 2a 2a 20 50 31 20 69 73 20 61 20 72 65 67 69 73  ** P1 is a regis
2c020 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20  ter in the root 
2c030 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56 4d  frame of this VM
2c040 20 28 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65   (the root frame
2c050 20 69 73 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74   is.** different
2c060 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e   from the curren
2c070 74 20 66 72 61 6d 65 20 69 66 20 74 68 69 73 20  t frame if this 
2c080 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 62  instruction is b
2c090 65 69 6e 67 20 65 78 65 63 75 74 65 64 0a 2a 2a  eing executed.**
2c0a0 20 77 69 74 68 69 6e 20 61 20 73 75 62 2d 70 72   within a sub-pr
2c0b0 6f 67 72 61 6d 29 2e 20 53 65 74 20 74 68 65 20  ogram). Set the 
2c0c0 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
2c0d0 72 20 50 31 20 74 6f 20 74 68 65 20 6d 61 78 69  r P1 to the maxi
2c0e0 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63  mum of .** its c
2c0f0 75 72 72 65 6e 74 20 76 61 6c 75 65 20 61 6e 64  urrent value and
2c100 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
2c110 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
2c120 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
2c130 6e 20 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f  n throws an erro
2c140 72 20 69 66 20 74 68 65 20 6d 65 6d 6f 72 79 20  r if the memory 
2c150 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74  cell is not init
2c160 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65  ially.** an inte
2c170 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ger..*/.case OP_
2c180 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20 20  MemMax: {       
2c190 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62   /* in2 */.  Vdb
2c1a0 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a  eFrame *pFrame;.
2c1b0 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20    if( p->pFrame 
2c1c0 29 7b 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d  ){.    for(pFram
2c1d0 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72  e=p->pFrame; pFr
2c1e0 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46  ame->pParent; pF
2c1f0 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61  rame=pFrame->pPa
2c200 72 65 6e 74 29 3b 0a 20 20 20 20 70 49 6e 31 20  rent);.    pIn1 
2c210 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b  = &pFrame->aMem[
2c220 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73  pOp->p1];.  }els
2c230 65 7b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 61  e{.    pIn1 = &a
2c240 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2c250 7d 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49  }.  assert( memI
2c260 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a  sValid(pIn1) );.
2c270 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2c280 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29  Integerify(pIn1)
2c290 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
2c2a0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c  [pOp->p2];.  sql
2c2b0 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
2c2c0 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 69  erify(pIn2);.  i
2c2d0 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e  f( pIn1->u.i<pIn
2c2e0 32 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e  2->u.i){.    pIn
2c2f0 31 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75  1->u.i = pIn2->u
2c300 2e 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  .i;.  }.  break;
2c310 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2c320 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43  ITE_OMIT_AUTOINC
2c330 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70  REMENT */../* Op
2c340 63 6f 64 65 3a 20 49 66 50 6f 73 20 50 31 20 50  code: IfPos P1 P
2c350 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
2c360 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20  sis: if r[P1]>0 
2c370 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66  goto P2.**.** If
2c380 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65   the value of re
2c390 67 69 73 74 65 72 20 50 31 20 69 73 20 31 20 6f  gister P1 is 1 o
2c3a0 72 20 67 72 65 61 74 65 72 2c 20 6a 75 6d 70 20  r greater, jump 
2c3b0 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 74 20  to P2..**.** It 
2c3c0 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73  is illegal to us
2c3d0 65 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  e this instructi
2c3e0 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65 72  on on a register
2c3f0 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f   that does.** no
2c400 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
2c410 65 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72 74  eger.  An assert
2c420 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20 72  ion fault will r
2c430 65 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72 79  esult if you try
2c440 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50  ..*/.case OP_IfP
2c450 6f 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  os: {        /* 
2c460 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  jump, in1 */.  p
2c470 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
2c480 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2c490 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
2c4a0 49 6e 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61  Int );.  VdbeBra
2c4b0 6e 63 68 54 61 6b 65 6e 28 20 70 49 6e 31 2d 3e  nchTaken( pIn1->
2c4c0 75 2e 69 3e 30 2c 20 32 29 3b 0a 20 20 69 66 28  u.i>0, 2);.  if(
2c4d0 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a   pIn1->u.i>0 ){.
2c4e0 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
2c4f0 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
2c500 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2c510 3a 20 49 66 4e 65 67 20 50 31 20 50 32 20 2a 20  : IfNeg P1 P2 * 
2c520 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2c530 20 69 66 20 72 5b 50 31 5d 3c 30 20 67 6f 74 6f   if r[P1]<0 goto
2c540 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65   P2.**.** If the
2c550 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
2c560 65 72 20 50 31 20 69 73 20 6c 65 73 73 20 74 68  er P1 is less th
2c570 61 6e 20 7a 65 72 6f 2c 20 6a 75 6d 70 20 74 6f  an zero, jump to
2c580 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69   P2. .**.** It i
2c590 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65  s illegal to use
2c5a0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
2c5b0 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65 72 20  n on a register 
2c5c0 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74  that does.** not
2c5d0 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
2c5e0 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72 74 69  ger.  An asserti
2c5f0 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20 72 65  on fault will re
2c600 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72 79 2e  sult if you try.
2c610 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 65  .*/.case OP_IfNe
2c620 67 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  g: {        /* j
2c630 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
2c640 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
2c650 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2c660 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
2c670 6e 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  nt );.  VdbeBran
2c680 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e  chTaken(pIn1->u.
2c690 69 3c 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70  i<0, 2);.  if( p
2c6a0 49 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b 0a 20 20  In1->u.i<0 ){.  
2c6b0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
2c6c0 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
2c6d0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2c6e0 49 66 5a 65 72 6f 20 50 31 20 50 32 20 50 33 20  IfZero P1 P2 P3 
2c6f0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2c700 20 72 5b 50 31 5d 2b 3d 50 33 2c 20 69 66 20 72   r[P1]+=P3, if r
2c710 5b 50 31 5d 3d 3d 30 20 67 6f 74 6f 20 50 32 0a  [P1]==0 goto P2.
2c720 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74  **.** The regist
2c730 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61  er P1 must conta
2c740 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  in an integer.  
2c750 41 64 64 20 6c 69 74 65 72 61 6c 20 50 33 20 74  Add literal P3 t
2c760 6f 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69  o the.** value i
2c770 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  n register P1.  
2c780 49 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  If the result is
2c790 20 65 78 61 63 74 6c 79 20 30 2c 20 6a 75 6d 70   exactly 0, jump
2c7a0 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 49   to P2. .**.** I
2c7b0 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20  t is illegal to 
2c7c0 75 73 65 20 74 68 69 73 20 69 6e 73 74 72 75 63  use this instruc
2c7d0 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73 74  tion on a regist
2c7e0 65 72 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20  er that does.** 
2c7f0 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69  not contain an i
2c800 6e 74 65 67 65 72 2e 20 20 41 6e 20 61 73 73 65  nteger.  An asse
2c810 72 74 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c  rtion fault will
2c820 20 72 65 73 75 6c 74 20 69 66 20 79 6f 75 20 74   result if you t
2c830 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ry..*/.case OP_I
2c840 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20  fZero: {        
2c850 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
2c860 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
2c870 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2c880 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d  t( pIn1->flags&M
2c890 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 49 6e 31  EM_Int );.  pIn1
2c8a0 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 33  ->u.i += pOp->p3
2c8b0 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
2c8c0 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30  ken(pIn1->u.i==0
2c8d0 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  , 2);.  if( pIn1
2c8e0 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20 20 20 20  ->u.i==0 ){.    
2c8f0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
2c900 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
2c910 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67  }../* Opcode: Ag
2c920 67 53 74 65 70 20 2a 20 50 32 20 50 33 20 50 34  gStep * P2 P3 P4
2c930 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
2c940 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73 74 65   accum=r[P3] ste
2c950 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a  p(r[P2@P5]).**.*
2c960 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 73 74  * Execute the st
2c970 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20  ep function for 
2c980 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 54  an aggregate.  T
2c990 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 68  he.** function h
2c9a0 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e  as P5 arguments.
2c9b0 20 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74     P4 is a point
2c9c0 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65  er to the FuncDe
2c9d0 66 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74  f.** structure t
2c9e0 68 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68  hat specifies th
2c9f0 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 55 73 65  e function.  Use
2ca00 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 20   register.** P3 
2ca10 61 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74  as the accumulat
2ca20 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35  or..**.** The P5
2ca30 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74   arguments are t
2ca40 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74  aken from regist
2ca50 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a  er P2 and its.**
2ca60 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a   successors..*/.
2ca70 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65 70 3a  case OP_AggStep:
2ca80 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e   {.  int n;.  in
2ca90 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  t i;.  Mem *pMem
2caa0 3b 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 0a 20  ;.  Mem *pRec;. 
2cab0 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
2cac0 20 63 74 78 3b 0a 20 20 73 71 6c 69 74 65 33 5f   ctx;.  sqlite3_
2cad0 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a 0a  value **apVal;..
2cae0 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20    n = pOp->p5;. 
2caf0 20 61 73 73 65 72 74 28 20 6e 3e 3d 30 20 29 3b   assert( n>=0 );
2cb00 0a 20 20 70 52 65 63 20 3d 20 26 61 4d 65 6d 5b  .  pRec = &aMem[
2cb10 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 70 56 61  pOp->p2];.  apVa
2cb20 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20  l = p->apArg;.  
2cb30 61 73 73 65 72 74 28 20 61 70 56 61 6c 20 7c 7c  assert( apVal ||
2cb40 20 6e 3d 3d 30 20 29 3b 0a 20 20 66 6f 72 28 69   n==0 );.  for(i
2cb50 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 52  =0; i<n; i++, pR
2cb60 65 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72  ec++){.    asser
2cb70 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52  t( memIsValid(pR
2cb80 65 63 29 20 29 3b 0a 20 20 20 20 61 70 56 61 6c  ec) );.    apVal
2cb90 5b 69 5d 20 3d 20 70 52 65 63 3b 0a 20 20 20 20  [i] = pRec;.    
2cba0 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
2cbb0 28 70 2c 20 70 52 65 63 29 3b 0a 20 20 7d 0a 20  (p, pRec);.  }. 
2cbc0 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70   ctx.pFunc = pOp
2cbd0 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 61 73  ->p4.pFunc;.  as
2cbe0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
2cbf0 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  && pOp->p3<=(p->
2cc00 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
2cc10 20 29 3b 0a 20 20 63 74 78 2e 70 4d 65 6d 20 3d   );.  ctx.pMem =
2cc20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f   pMem = &aMem[pO
2cc30 70 2d 3e 70 33 5d 3b 0a 20 20 70 4d 65 6d 2d 3e  p->p3];.  pMem->
2cc40 6e 2b 2b 3b 0a 20 20 63 74 78 2e 73 2e 66 6c 61  n++;.  ctx.s.fla
2cc50 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
2cc60 20 63 74 78 2e 73 2e 7a 20 3d 20 30 3b 0a 20 20   ctx.s.z = 0;.  
2cc70 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20  ctx.s.zMalloc = 
2cc80 30 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65 6c 20  0;.  ctx.s.xDel 
2cc90 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 64 62 20  = 0;.  ctx.s.db 
2cca0 3d 20 64 62 3b 0a 20 20 63 74 78 2e 69 73 45 72  = db;.  ctx.isEr
2ccb0 72 6f 72 20 3d 20 30 3b 0a 20 20 63 74 78 2e 70  ror = 0;.  ctx.p
2ccc0 43 6f 6c 6c 20 3d 20 30 3b 0a 20 20 63 74 78 2e  Coll = 0;.  ctx.
2ccd0 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a 20 20  skipFlag = 0;.  
2cce0 69 66 28 20 63 74 78 2e 70 46 75 6e 63 2d 3e 66  if( ctx.pFunc->f
2ccf0 75 6e 63 46 6c 61 67 73 20 26 20 53 51 4c 49 54  uncFlags & SQLIT
2cd00 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20  E_FUNC_NEEDCOLL 
2cd10 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
2cd20 4f 70 3e 70 2d 3e 61 4f 70 20 29 3b 0a 20 20 20  Op>p->aOp );.   
2cd30 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d   assert( pOp[-1]
2cd40 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c  .p4type==P4_COLL
2cd50 53 45 51 20 29 3b 0a 20 20 20 20 61 73 73 65 72  SEQ );.    asser
2cd60 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64  t( pOp[-1].opcod
2cd70 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b  e==OP_CollSeq );
2cd80 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d  .    ctx.pColl =
2cd90 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c   pOp[-1].p4.pCol
2cda0 6c 3b 0a 20 20 7d 0a 20 20 28 63 74 78 2e 70 46  l;.  }.  (ctx.pF
2cdb0 75 6e 63 2d 3e 78 53 74 65 70 29 28 26 63 74 78  unc->xStep)(&ctx
2cdc0 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 20 2f 2a 20  , n, apVal); /* 
2cdd0 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32  IMP: R-24505-232
2cde0 33 30 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e  30 */.  if( ctx.
2cdf0 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 73  isError ){.    s
2ce00 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
2ce10 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
2ce20 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76   "%s", sqlite3_v
2ce30 61 6c 75 65 5f 74 65 78 74 28 26 63 74 78 2e 73  alue_text(&ctx.s
2ce40 29 29 3b 0a 20 20 20 20 72 63 20 3d 20 63 74 78  ));.    rc = ctx
2ce50 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20  .isError;.  }.  
2ce60 69 66 28 20 63 74 78 2e 73 6b 69 70 46 6c 61 67  if( ctx.skipFlag
2ce70 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
2ce80 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d  pOp[-1].opcode==
2ce90 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20  OP_CollSeq );.  
2cea0 20 20 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 31    i = pOp[-1].p1
2ceb0 3b 0a 20 20 20 20 69 66 28 20 69 20 29 20 73 71  ;.    if( i ) sq
2cec0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
2ced0 6e 74 36 34 28 26 61 4d 65 6d 5b 69 5d 2c 20 31  nt64(&aMem[i], 1
2cee0 29 3b 0a 20 20 7d 0a 0a 20 20 73 71 6c 69 74 65  );.  }..  sqlite
2cef0 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28  3VdbeMemRelease(
2cf00 26 63 74 78 2e 73 29 3b 0a 0a 20 20 62 72 65 61  &ctx.s);..  brea
2cf10 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2cf20 20 41 67 67 46 69 6e 61 6c 20 50 31 20 50 32 20   AggFinal P1 P2 
2cf30 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
2cf40 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 31 5d 20  is: accum=r[P1] 
2cf50 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75  N=P2.**.** Execu
2cf60 74 65 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 72  te the finalizer
2cf70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e   function for an
2cf80 20 61 67 67 72 65 67 61 74 65 2e 20 20 50 31 20   aggregate.  P1 
2cf90 69 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79  is.** the memory
2cfa0 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 69   location that i
2cfb0 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f  s the accumulato
2cfc0 72 20 66 6f 72 20 74 68 65 20 61 67 67 72 65 67  r for the aggreg
2cfd0 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73  ate..**.** P2 is
2cfe0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61   the number of a
2cff0 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 74 68  rguments that th
2d000 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20  e step function 
2d010 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20  takes and.** P4 
2d020 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
2d030 74 68 65 20 46 75 6e 63 44 65 66 20 66 6f 72 20  the FuncDef for 
2d040 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20  this function.  
2d050 54 68 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65  The P2.** argume
2d060 6e 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62  nt is not used b
2d070 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20  y this opcode.  
2d080 49 74 20 69 73 20 6f 6e 6c 79 20 74 68 65 72 65  It is only there
2d090 20 74 6f 20 64 69 73 61 6d 62 69 67 75 61 74 65   to disambiguate
2d0a0 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74 68  .** functions th
2d0b0 61 74 20 63 61 6e 20 74 61 6b 65 20 76 61 72 79  at can take vary
2d0c0 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66 20 61  ing numbers of a
2d0d0 72 67 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a  rguments.  The.*
2d0e0 2a 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73  * P4 argument is
2d0f0 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f 72   only needed for
2d100 20 74 68 65 20 64 65 67 65 6e 65 72 61 74 65 20   the degenerate 
2d110 63 61 73 65 20 77 68 65 72 65 0a 2a 2a 20 74 68  case where.** th
2d120 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20  e step function 
2d130 77 61 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73  was not previous
2d140 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61  ly called..*/.ca
2d150 73 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20  se OP_AggFinal: 
2d160 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20  {.  Mem *pMem;. 
2d170 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2d180 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28  >0 && pOp->p1<=(
2d190 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
2d1a0 6f 72 29 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20  or) );.  pMem = 
2d1b0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2d1c0 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d    assert( (pMem-
2d1d0 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e  >flags & ~(MEM_N
2d1e0 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30  ull|MEM_Agg))==0
2d1f0 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
2d200 65 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a  e3VdbeMemFinaliz
2d210 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e  e(pMem, pOp->p4.
2d220 70 46 75 6e 63 29 3b 0a 20 20 69 66 28 20 72 63  pFunc);.  if( rc
2d230 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53   ){.    sqlite3S
2d240 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
2d250 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20  rMsg, db, "%s", 
2d260 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
2d270 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20 7d 0a 20  xt(pMem));.  }. 
2d280 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
2d290 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c  geEncoding(pMem,
2d2a0 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50   encoding);.  UP
2d2b0 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
2d2c0 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20 73  E(pMem);.  if( s
2d2d0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f  qlite3VdbeMemToo
2d2e0 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20  Big(pMem) ){.   
2d2f0 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
2d300 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23   }.  break;.}..#
2d310 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2d320 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65  IT_WAL./* Opcode
2d330 3a 20 43 68 65 63 6b 70 6f 69 6e 74 20 50 31 20  : Checkpoint P1 
2d340 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
2d350 43 68 65 63 6b 70 6f 69 6e 74 20 64 61 74 61 62  Checkpoint datab
2d360 61 73 65 20 50 31 2e 20 54 68 69 73 20 69 73 20  ase P1. This is 
2d370 61 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69 73  a no-op if P1 is
2d380 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 69   not currently i
2d390 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20 50  n.** WAL mode. P
2d3a0 61 72 61 6d 65 74 65 72 20 50 32 20 69 73 20 6f  arameter P2 is o
2d3b0 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 48 45  ne of SQLITE_CHE
2d3c0 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 2c  CKPOINT_PASSIVE,
2d3d0 20 46 55 4c 4c 0a 2a 2a 20 6f 72 20 52 45 53 54   FULL.** or REST
2d3e0 41 52 54 2e 20 20 57 72 69 74 65 20 31 20 6f 72  ART.  Write 1 or
2d3f0 20 30 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 5d 20   0 into mem[P3] 
2d400 69 66 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e  if the checkpoin
2d410 74 20 72 65 74 75 72 6e 73 0a 2a 2a 20 53 51 4c  t returns.** SQL
2d420 49 54 45 5f 42 55 53 59 20 6f 72 20 6e 6f 74 2c  ITE_BUSY or not,
2d430 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20   respectively.  
2d440 57 72 69 74 65 20 74 68 65 20 6e 75 6d 62 65 72  Write the number
2d450 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65   of pages in the
2d460 0a 2a 2a 20 57 41 4c 20 61 66 74 65 72 20 74 68  .** WAL after th
2d470 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 69 6e 74  e checkpoint int
2d480 6f 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 20  o mem[P3+1] and 
2d490 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  the number of pa
2d4a0 67 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 57 41  ges.** in the WA
2d4b0 4c 20 74 68 61 74 20 68 61 76 65 20 62 65 65 6e  L that have been
2d4c0 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20 61 66   checkpointed af
2d4d0 74 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f 69  ter the checkpoi
2d4e0 6e 74 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 73 20  nt.** completes 
2d4f0 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 32 5d 2e 20  into mem[P3+2]. 
2d500 20 48 6f 77 65 76 65 72 20 6f 6e 20 61 6e 20 65   However on an e
2d510 72 72 6f 72 2c 20 6d 65 6d 5b 50 33 2b 31 5d 20  rror, mem[P3+1] 
2d520 61 6e 64 0a 2a 2a 20 6d 65 6d 5b 50 33 2b 32 5d  and.** mem[P3+2]
2d530 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64   are initialized
2d540 20 74 6f 20 2d 31 2e 0a 2a 2f 0a 63 61 73 65 20   to -1..*/.case 
2d550 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 3a 20 7b  OP_Checkpoint: {
2d560 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20  .  int i;       
2d570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d580 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
2d590 65 72 20 2a 2f 0a 20 20 69 6e 74 20 61 52 65 73  er */.  int aRes
2d5a0 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [3];            
2d5b0 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c          /* Resul
2d5c0 74 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  ts */.  Mem *pMe
2d5d0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
2d5e0 20 20 20 20 20 20 20 20 2f 2a 20 57 72 69 74 65          /* Write
2d5f0 20 72 65 73 75 6c 74 73 20 68 65 72 65 20 2a 2f   results here */
2d600 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ..  assert( p->r
2d610 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
2d620 61 52 65 73 5b 30 5d 20 3d 20 30 3b 0a 20 20 61  aRes[0] = 0;.  a
2d630 52 65 73 5b 31 5d 20 3d 20 61 52 65 73 5b 32 5d  Res[1] = aRes[2]
2d640 20 3d 20 2d 31 3b 0a 20 20 61 73 73 65 72 74 28   = -1;.  assert(
2d650 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
2d660 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53  _CHECKPOINT_PASS
2d670 49 56 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f  IVE.       || pO
2d680 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48  p->p2==SQLITE_CH
2d690 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 0a 20 20  ECKPOINT_FULL.  
2d6a0 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d       || pOp->p2=
2d6b0 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49  =SQLITE_CHECKPOI
2d6c0 4e 54 5f 52 45 53 54 41 52 54 0a 20 20 29 3b 0a  NT_RESTART.  );.
2d6d0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 43 68    rc = sqlite3Ch
2d6e0 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20 70 4f 70  eckpoint(db, pOp
2d6f0 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 26  ->p1, pOp->p2, &
2d700 61 52 65 73 5b 31 5d 2c 20 26 61 52 65 73 5b 32  aRes[1], &aRes[2
2d710 5d 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  ]);.  if( rc==SQ
2d720 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
2d730 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
2d740 0a 20 20 20 20 61 52 65 73 5b 30 5d 20 3d 20 31  .    aRes[0] = 1
2d750 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 2c  ;.  }.  for(i=0,
2d760 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f   pMem = &aMem[pO
2d770 70 2d 3e 70 33 5d 3b 20 69 3c 33 3b 20 69 2b 2b  p->p3]; i<3; i++
2d780 2c 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 73  , pMem++){.    s
2d790 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
2d7a0 49 6e 74 36 34 28 70 4d 65 6d 2c 20 28 69 36 34  Int64(pMem, (i64
2d7b0 29 61 52 65 73 5b 69 5d 29 3b 0a 20 20 7d 20 20  )aRes[i]);.  }  
2d7c0 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 20 20    .  break;.};  
2d7d0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
2d7e0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41   SQLITE_OMIT_PRA
2d7f0 47 4d 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a  GMA./* Opcode: J
2d800 6f 75 72 6e 61 6c 4d 6f 64 65 20 50 31 20 50 32  ournalMode P1 P2
2d810 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68   P3 * *.**.** Ch
2d820 61 6e 67 65 20 74 68 65 20 6a 6f 75 72 6e 61 6c  ange the journal
2d830 20 6d 6f 64 65 20 6f 66 20 64 61 74 61 62 61 73   mode of databas
2d840 65 20 50 31 20 74 6f 20 50 33 2e 20 50 33 20 6d  e P1 to P3. P3 m
2d850 75 73 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68  ust be one of th
2d860 65 0a 2a 2a 20 50 41 47 45 52 5f 4a 4f 55 52 4e  e.** PAGER_JOURN
2d870 41 4c 4d 4f 44 45 5f 58 58 58 20 76 61 6c 75 65  ALMODE_XXX value
2d880 73 2e 20 49 66 20 63 68 61 6e 67 69 6e 67 20 62  s. If changing b
2d890 65 74 77 65 65 6e 20 74 68 65 20 76 61 72 69 6f  etween the vario
2d8a0 75 73 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6d  us rollback.** m
2d8b0 6f 64 65 73 20 28 64 65 6c 65 74 65 2c 20 74 72  odes (delete, tr
2d8c0 75 6e 63 61 74 65 2c 20 70 65 72 73 69 73 74 2c  uncate, persist,
2d8d0 20 6f 66 66 20 61 6e 64 20 6d 65 6d 6f 72 79 29   off and memory)
2d8e0 2c 20 74 68 69 73 20 69 73 20 61 20 73 69 6d 70  , this is a simp
2d8f0 6c 65 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e  le.** operation.
2d900 20 4e 6f 20 49 4f 20 69 73 20 72 65 71 75 69 72   No IO is requir
2d910 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 68 61  ed..**.** If cha
2d920 6e 67 69 6e 67 20 69 6e 74 6f 20 6f 72 20 6f 75  nging into or ou
2d930 74 20 6f 66 20 57 41 4c 20 6d 6f 64 65 20 74 68  t of WAL mode th
2d940 65 20 70 72 6f 63 65 64 75 72 65 20 69 73 20 6d  e procedure is m
2d950 6f 72 65 20 63 6f 6d 70 6c 69 63 61 74 65 64 2e  ore complicated.
2d960 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 73  .**.** Write a s
2d970 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67  tring containing
2d980 20 74 68 65 20 66 69 6e 61 6c 20 6a 6f 75 72 6e   the final journ
2d990 61 6c 2d 6d 6f 64 65 20 74 6f 20 72 65 67 69 73  al-mode to regis
2d9a0 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
2d9b0 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 3a 20  OP_JournalMode: 
2d9c0 7b 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65  {    /* out2-pre
2d9d0 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 42 74 72  release */.  Btr
2d9e0 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20  ee *pBt;        
2d9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2da00 42 74 72 65 65 20 74 6f 20 63 68 61 6e 67 65 20  Btree to change 
2da10 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20  journal mode of 
2da20 2a 2f 0a 20 20 50 61 67 65 72 20 2a 70 50 61 67  */.  Pager *pPag
2da30 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  er;             
2da40 20 20 20 20 20 2f 2a 20 50 61 67 65 72 20 61 73       /* Pager as
2da50 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 70 42  sociated with pB
2da60 74 20 2a 2f 0a 20 20 69 6e 74 20 65 4e 65 77 3b  t */.  int eNew;
2da70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2da80 20 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 6a 6f         /* New jo
2da90 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20  urnal mode */.  
2daa0 69 6e 74 20 65 4f 6c 64 3b 20 20 20 20 20 20 20  int eOld;       
2dab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dac0 2f 2a 20 54 68 65 20 6f 6c 64 20 6a 6f 75 72 6e  /* The old journ
2dad0 61 6c 20 6d 6f 64 65 20 2a 2f 0a 23 69 66 6e 64  al mode */.#ifnd
2dae0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
2daf0 41 4c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  AL.  const char 
2db00 2a 7a 46 69 6c 65 6e 61 6d 65 3b 20 20 20 20 20  *zFilename;     
2db10 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
2db20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 66 6f  database file fo
2db30 72 20 70 50 61 67 65 72 20 2a 2f 0a 23 65 6e 64  r pPager */.#end
2db40 69 66 0a 0a 20 20 65 4e 65 77 20 3d 20 70 4f 70  if..  eNew = pOp
2db50 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p3;.  assert( 
2db60 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2db70 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45 20 0a  NALMODE_DELETE .
2db80 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
2db90 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2dba0 45 5f 54 52 55 4e 43 41 54 45 20 0a 20 20 20 20  E_TRUNCATE .    
2dbb0 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
2dbc0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45  R_JOURNALMODE_PE
2dbd0 52 53 49 53 54 20 0a 20 20 20 20 20 20 20 7c 7c  RSIST .       ||
2dbe0 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2dbf0 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20 20 20  RNALMODE_OFF.   
2dc00 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
2dc10 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d  ER_JOURNALMODE_M
2dc20 45 4d 4f 52 59 0a 20 20 20 20 20 20 20 7c 7c 20  EMORY.       || 
2dc30 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2dc40 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 20  NALMODE_WAL.    
2dc50 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
2dc60 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55  R_JOURNALMODE_QU
2dc70 45 52 59 0a 20 20 29 3b 0a 20 20 61 73 73 65 72  ERY.  );.  asser
2dc80 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
2dc90 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
2dca0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
2dcb0 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
2dcc0 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62  .  pBt = db->aDb
2dcd0 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20  [pOp->p1].pBt;. 
2dce0 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65   pPager = sqlite
2dcf0 33 42 74 72 65 65 50 61 67 65 72 28 70 42 74 29  3BtreePager(pBt)
2dd00 3b 0a 20 20 65 4f 6c 64 20 3d 20 73 71 6c 69 74  ;.  eOld = sqlit
2dd10 65 33 50 61 67 65 72 47 65 74 4a 6f 75 72 6e 61  e3PagerGetJourna
2dd20 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 3b 0a 20  lMode(pPager);. 
2dd30 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52   if( eNew==PAGER
2dd40 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45  _JOURNALMODE_QUE
2dd50 52 59 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64  RY ) eNew = eOld
2dd60 3b 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65 33  ;.  if( !sqlite3
2dd70 50 61 67 65 72 4f 6b 54 6f 43 68 61 6e 67 65 4a  PagerOkToChangeJ
2dd80 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65  ournalMode(pPage
2dd90 72 29 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64  r) ) eNew = eOld
2dda0 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
2ddb0 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a 46 69  E_OMIT_WAL.  zFi
2ddc0 6c 65 6e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33  lename = sqlite3
2ddd0 50 61 67 65 72 46 69 6c 65 6e 61 6d 65 28 70 50  PagerFilename(pP
2dde0 61 67 65 72 2c 20 31 29 3b 0a 0a 20 20 2f 2a 20  ager, 1);..  /* 
2ddf0 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 61 20 74  Do not allow a t
2de00 72 61 6e 73 69 74 69 6f 6e 20 74 6f 20 6a 6f 75  ransition to jou
2de10 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20 66 6f  rnal_mode=WAL fo
2de20 72 20 61 20 64 61 74 61 62 61 73 65 0a 20 20 2a  r a database.  *
2de30 2a 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 73  * in temporary s
2de40 74 6f 72 61 67 65 20 6f 72 20 69 66 20 74 68 65  torage or if the
2de50 20 56 46 53 20 64 6f 65 73 20 6e 6f 74 20 73 75   VFS does not su
2de60 70 70 6f 72 74 20 73 68 61 72 65 64 20 6d 65 6d  pport shared mem
2de70 6f 72 79 20 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ory .  */.  if( 
2de80 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2de90 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 26  NALMODE_WAL.   &
2dea0 26 20 28 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  & (sqlite3Strlen
2deb0 33 30 28 7a 46 69 6c 65 6e 61 6d 65 29 3d 3d 30  30(zFilename)==0
2dec0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
2ded0 6d 70 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20 20  mp file */.     
2dee0 20 20 7c 7c 20 21 73 71 6c 69 74 65 33 50 61 67    || !sqlite3Pag
2def0 65 72 57 61 6c 53 75 70 70 6f 72 74 65 64 28 70  erWalSupported(p
2df00 50 61 67 65 72 29 29 20 20 20 2f 2a 20 4e 6f 20  Pager))   /* No 
2df10 73 68 61 72 65 64 2d 6d 65 6d 6f 72 79 20 73 75  shared-memory su
2df20 70 70 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a 20 20  pport */.  ){.  
2df30 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20    eNew = eOld;. 
2df40 20 7d 0a 0a 20 20 69 66 28 20 28 65 4e 65 77 21   }..  if( (eNew!
2df50 3d 65 4f 6c 64 29 0a 20 20 20 26 26 20 28 65 4f  =eOld).   && (eO
2df60 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ld==PAGER_JOURNA
2df70 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20 65 4e 65  LMODE_WAL || eNe
2df80 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2df90 4d 4f 44 45 5f 57 41 4c 29 0a 20 20 29 7b 0a 20  MODE_WAL).  ){. 
2dfa0 20 20 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f     if( !db->auto
2dfb0 43 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e 6e 56  Commit || db->nV
2dfc0 64 62 65 52 65 61 64 3e 31 20 29 7b 0a 20 20 20  dbeRead>1 ){.   
2dfd0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
2dfe0 52 52 4f 52 3b 0a 20 20 20 20 20 20 73 71 6c 69  RROR;.      sqli
2dff0 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
2e000 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20  >zErrMsg, db, . 
2e010 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74           "cannot
2e020 20 63 68 61 6e 67 65 20 25 73 20 77 61 6c 20 6d   change %s wal m
2e030 6f 64 65 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  ode from within 
2e040 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 2c 0a  a transaction",.
2e050 20 20 20 20 20 20 20 20 20 20 28 65 4e 65 77 3d            (eNew=
2e060 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2e070 44 45 5f 57 41 4c 20 3f 20 22 69 6e 74 6f 22 20  DE_WAL ? "into" 
2e080 3a 20 22 6f 75 74 20 6f 66 22 29 0a 20 20 20 20  : "out of").    
2e090 20 20 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b    );.      break
2e0a0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 0a 20  ;.    }else{. . 
2e0b0 20 20 20 20 20 69 66 28 20 65 4f 6c 64 3d 3d 50       if( eOld==P
2e0c0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2e0d0 5f 57 41 4c 20 29 7b 0a 20 20 20 20 20 20 20 20  _WAL ){.        
2e0e0 2f 2a 20 49 66 20 6c 65 61 76 69 6e 67 20 57 41  /* If leaving WA
2e0f0 4c 20 6d 6f 64 65 2c 20 63 6c 6f 73 65 20 74 68  L mode, close th
2e100 65 20 6c 6f 67 20 66 69 6c 65 2e 20 49 66 20 73  e log file. If s
2e110 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65 20 63  uccessful, the c
2e120 61 6c 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74  all.        ** t
2e130 6f 20 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28  o PagerCloseWal(
2e140 29 20 63 68 65 63 6b 70 6f 69 6e 74 73 20 61 6e  ) checkpoints an
2e150 64 20 64 65 6c 65 74 65 73 20 74 68 65 20 77 72  d deletes the wr
2e160 69 74 65 2d 61 68 65 61 64 2d 6c 6f 67 20 0a 20  ite-ahead-log . 
2e170 20 20 20 20 20 20 20 2a 2a 20 66 69 6c 65 2e 20         ** file. 
2e180 41 6e 20 45 58 43 4c 55 53 49 56 45 20 6c 6f 63  An EXCLUSIVE loc
2e190 6b 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 68  k may still be h
2e1a0 65 6c 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62  eld on the datab
2e1b0 61 73 65 20 66 69 6c 65 20 0a 20 20 20 20 20 20  ase file .      
2e1c0 20 20 2a 2a 20 61 66 74 65 72 20 61 20 73 75 63    ** after a suc
2e1d0 63 65 73 73 66 75 6c 20 72 65 74 75 72 6e 2e 20  cessful return. 
2e1e0 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  .        */.    
2e1f0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2e200 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 70 50  PagerCloseWal(pP
2e210 61 67 65 72 29 3b 0a 20 20 20 20 20 20 20 20 69  ager);.        i
2e220 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
2e230 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71   ){.          sq
2e240 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75  lite3PagerSetJou
2e250 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c  rnalMode(pPager,
2e260 20 65 4e 65 77 29 3b 0a 20 20 20 20 20 20 20 20   eNew);.        
2e270 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  }.      }else if
2e280 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f  ( eOld==PAGER_JO
2e290 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59  URNALMODE_MEMORY
2e2a0 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 43   ){.        /* C
2e2b0 61 6e 6e 6f 74 20 74 72 61 6e 73 69 74 69 6f 6e  annot transition
2e2c0 20 64 69 72 65 63 74 6c 79 20 66 72 6f 6d 20 4d   directly from M
2e2d0 45 4d 4f 52 59 20 74 6f 20 57 41 4c 2e 20 20 55  EMORY to WAL.  U
2e2e0 73 65 20 6d 6f 64 65 20 4f 46 46 0a 20 20 20 20  se mode OFF.    
2e2f0 20 20 20 20 2a 2a 20 61 73 20 61 6e 20 69 6e 74      ** as an int
2e300 65 72 6d 65 64 69 61 74 65 20 2a 2f 0a 20 20 20  ermediate */.   
2e310 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 67 65       sqlite3Page
2e320 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28  rSetJournalMode(
2e330 70 50 61 67 65 72 2c 20 50 41 47 45 52 5f 4a 4f  pPager, PAGER_JO
2e340 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b 0a  URNALMODE_OFF);.
2e350 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20        }.  .     
2e360 20 2f 2a 20 4f 70 65 6e 20 61 20 74 72 61 6e 73   /* Open a trans
2e370 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20 64 61  action on the da
2e380 74 61 62 61 73 65 20 66 69 6c 65 2e 20 52 65 67  tabase file. Reg
2e390 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 6a  ardless of the j
2e3a0 6f 75 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20  ournal.      ** 
2e3b0 6d 6f 64 65 2c 20 74 68 69 73 20 74 72 61 6e 73  mode, this trans
2e3c0 61 63 74 69 6f 6e 20 61 6c 77 61 79 73 20 75 73  action always us
2e3d0 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f  es a rollback jo
2e3e0 75 72 6e 61 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a  urnal..      */.
2e3f0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
2e400 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e 54 72  lite3BtreeIsInTr
2e410 61 6e 73 28 70 42 74 29 3d 3d 30 20 29 3b 0a 20  ans(pBt)==0 );. 
2e420 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
2e430 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
2e440 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
2e450 72 65 65 53 65 74 56 65 72 73 69 6f 6e 28 70 42  reeSetVersion(pB
2e460 74 2c 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f  t, (eNew==PAGER_
2e470 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20  JOURNALMODE_WAL 
2e480 3f 20 32 20 3a 20 31 29 29 3b 0a 20 20 20 20 20  ? 2 : 1));.     
2e490 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e   }.    }.  }.#en
2e4a0 64 69 66 20 2f 2a 20 69 66 6e 64 65 66 20 53 51  dif /* ifndef SQ
2e4b0 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f  LITE_OMIT_WAL */
2e4c0 0a 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20  ..  if( rc ){.  
2e4d0 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20    eNew = eOld;. 
2e4e0 20 7d 0a 20 20 65 4e 65 77 20 3d 20 73 71 6c 69   }.  eNew = sqli
2e4f0 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e  te3PagerSetJourn
2e500 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65  alMode(pPager, e
2e510 4e 65 77 29 3b 0a 0a 20 20 70 4f 75 74 20 3d 20  New);..  pOut = 
2e520 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
2e530 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
2e540 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74  MEM_Str|MEM_Stat
2e550 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70  ic|MEM_Term;.  p
2e560 4f 75 74 2d 3e 7a 20 3d 20 28 63 68 61 72 20 2a  Out->z = (char *
2e570 29 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d  )sqlite3JournalM
2e580 6f 64 65 6e 61 6d 65 28 65 4e 65 77 29 3b 0a 20  odename(eNew);. 
2e590 20 70 4f 75 74 2d 3e 6e 20 3d 20 73 71 6c 69 74   pOut->n = sqlit
2e5a0 65 33 53 74 72 6c 65 6e 33 30 28 70 4f 75 74 2d  e3Strlen30(pOut-
2e5b0 3e 7a 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63  >z);.  pOut->enc
2e5c0 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 0a   = SQLITE_UTF8;.
2e5d0 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
2e5e0 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74  ngeEncoding(pOut
2e5f0 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62  , encoding);.  b
2e600 72 65 61 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66 20  reak;.};.#endif 
2e610 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  /* SQLITE_OMIT_P
2e620 52 41 47 4d 41 20 2a 2f 0a 0a 23 69 66 20 21 64  RAGMA */..#if !d
2e630 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
2e640 49 54 5f 56 41 43 55 55 4d 29 20 26 26 20 21 64  IT_VACUUM) && !d
2e650 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
2e660 49 54 5f 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70  IT_ATTACH)./* Op
2e670 63 6f 64 65 3a 20 56 61 63 75 75 6d 20 2a 20 2a  code: Vacuum * *
2e680 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63   * * *.**.** Vac
2e690 75 75 6d 20 74 68 65 20 65 6e 74 69 72 65 20 64  uum the entire d
2e6a0 61 74 61 62 61 73 65 2e 20 20 54 68 69 73 20 6f  atabase.  This o
2e6b0 70 63 6f 64 65 20 77 69 6c 6c 20 63 61 75 73 65  pcode will cause
2e6c0 20 6f 74 68 65 72 20 76 69 72 74 75 61 6c 0a 2a   other virtual.*
2e6d0 2a 20 6d 61 63 68 69 6e 65 73 20 74 6f 20 62 65  * machines to be
2e6e0 20 63 72 65 61 74 65 64 20 61 6e 64 20 72 75 6e   created and run
2e6f0 2e 20 20 49 74 20 6d 61 79 20 6e 6f 74 20 62 65  .  It may not be
2e700 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74   called from wit
2e710 68 69 6e 0a 2a 2a 20 61 20 74 72 61 6e 73 61 63  hin.** a transac
2e720 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
2e730 5f 56 61 63 75 75 6d 3a 20 7b 0a 20 20 61 73 73  _Vacuum: {.  ass
2e740 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
2e750 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  ==0 );.  rc = sq
2e760 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28 26  lite3RunVacuum(&
2e770 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 29 3b  p->zErrMsg, db);
2e780 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2e790 69 66 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  if..#if !defined
2e7a0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54  (SQLITE_OMIT_AUT
2e7b0 4f 56 41 43 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f  OVACUUM)./* Opco
2e7c0 64 65 3a 20 49 6e 63 72 56 61 63 75 75 6d 20 50  de: IncrVacuum P
2e7d0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
2e7e0 20 50 65 72 66 6f 72 6d 20 61 20 73 69 6e 67 6c   Perform a singl
2e7f0 65 20 73 74 65 70 20 6f 66 20 74 68 65 20 69 6e  e step of the in
2e800 63 72 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d  cremental vacuum
2e810 20 70 72 6f 63 65 64 75 72 65 20 6f 6e 0a 2a 2a   procedure on.**
2e820 20 74 68 65 20 50 31 20 64 61 74 61 62 61 73 65   the P1 database
2e830 2e 20 49 66 20 74 68 65 20 76 61 63 75 75 6d 20  . If the vacuum 
2e840 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20 6a 75  has finished, ju
2e850 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
2e860 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68 65 72 77 69  n.** P2. Otherwi
2e870 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  se, fall through
2e880 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
2e890 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
2e8a0 65 20 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d 3a  e OP_IncrVacuum:
2e8b0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
2e8c0 70 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42  p */.  Btree *pB
2e8d0 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  t;..  assert( pO
2e8e0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
2e8f0 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
2e900 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
2e910 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d  eeMask & (((yDbM
2e920 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29  ask)1)<<pOp->p1)
2e930 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )!=0 );.  assert
2e940 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
2e950 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e   );.  pBt = db->
2e960 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74  aDb[pOp->p1].pBt
2e970 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2e980 42 74 72 65 65 49 6e 63 72 56 61 63 75 75 6d 28  BtreeIncrVacuum(
2e990 70 42 74 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  pBt);.  VdbeBran
2e9a0 63 68 54 61 6b 65 6e 28 72 63 3d 3d 53 51 4c 49  chTaken(rc==SQLI
2e9b0 54 45 5f 44 4f 4e 45 2c 32 29 3b 0a 20 20 69 66  TE_DONE,2);.  if
2e9c0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e  ( rc==SQLITE_DON
2e9d0 45 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  E ){.    pc = pO
2e9e0 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 72  p->p2 - 1;.    r
2e9f0 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
2ea00 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
2ea10 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ndif../* Opcode:
2ea20 20 45 78 70 69 72 65 20 50 31 20 2a 20 2a 20 2a   Expire P1 * * *
2ea30 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20 70   *.**.** Cause p
2ea40 72 65 63 6f 6d 70 69 6c 65 64 20 73 74 61 74 65  recompiled state
2ea50 6d 65 6e 74 73 20 74 6f 20 62 65 63 6f 6d 65 20  ments to become 
2ea60 65 78 70 69 72 65 64 2e 20 41 6e 20 65 78 70 69  expired. An expi
2ea70 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a  red statement.**
2ea80 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e 20 65   fails with an e
2ea90 72 72 6f 72 20 63 6f 64 65 20 6f 66 20 53 51 4c  rror code of SQL
2eaa0 49 54 45 5f 53 43 48 45 4d 41 20 69 66 20 69 74  ITE_SCHEMA if it
2eab0 20 69 73 20 65 76 65 72 20 65 78 65 63 75 74 65   is ever execute
2eac0 64 20 0a 2a 2a 20 28 76 69 61 20 73 71 6c 69 74  d .** (via sqlit
2ead0 65 33 5f 73 74 65 70 28 29 29 2e 0a 2a 2a 20 0a  e3_step())..** .
2eae0 2a 2a 20 49 66 20 50 31 20 69 73 20 30 2c 20 74  ** If P1 is 0, t
2eaf0 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61 74  hen all SQL stat
2eb00 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20 65 78  ements become ex
2eb10 70 69 72 65 64 2e 20 49 66 20 50 31 20 69 73 20  pired. If P1 is 
2eb20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65  non-zero,.** the
2eb30 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75 72 72 65  n only the curre
2eb40 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20 73  ntly executing s
2eb50 74 61 74 65 6d 65 6e 74 20 69 73 20 61 66 66 65  tatement is affe
2eb60 63 74 65 64 2e 20 0a 2a 2f 0a 63 61 73 65 20 4f  cted. .*/.case O
2eb70 50 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20 69 66  P_Expire: {.  if
2eb80 28 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  ( !pOp->p1 ){.  
2eb90 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50    sqlite3ExpireP
2eba0 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
2ebb0 73 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  s(db);.  }else{.
2ebc0 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d      p->expired =
2ebd0 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
2ebe0 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
2ebf0 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
2ec00 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ACHE./* Opcode: 
2ec10 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32 20  TableLock P1 P2 
2ec20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
2ec30 73 69 73 3a 20 69 44 62 3d 50 31 20 72 6f 6f 74  sis: iDb=P1 root
2ec40 3d 50 32 20 77 72 69 74 65 3d 50 33 0a 2a 2a 0a  =P2 write=P3.**.
2ec50 2a 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63 6b  ** Obtain a lock
2ec60 20 6f 6e 20 61 20 70 61 72 74 69 63 75 6c 61 72   on a particular
2ec70 20 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e 73   table. This ins
2ec80 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79  truction is only
2ec90 20 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74 68   used when.** th
2eca0 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 66  e shared-cache f
2ecb0 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65  eature is enable
2ecc0 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  d. .**.** P1 is 
2ecd0 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  the index of the
2ece0 20 64 61 74 61 62 61 73 65 20 69 6e 20 73 71 6c   database in sql
2ecf0 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74 68  ite3.aDb[] of th
2ed00 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f 6e  e database.** on
2ed10 20 77 68 69 63 68 20 74 68 65 20 6c 6f 63 6b 20   which the lock 
2ed20 69 73 20 61 63 71 75 69 72 65 64 2e 20 20 41 20  is acquired.  A 
2ed30 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74 61  readlock is obta
2ed40 69 6e 65 64 20 69 66 20 50 33 3d 3d 30 20 6f 72  ined if P3==0 or
2ed50 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f 63 6b  .** a write lock
2ed60 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a   if P3==1..**.**
2ed70 20 50 32 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P2 contains the
2ed80 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68   root-page of th
2ed90 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e  e table to lock.
2eda0 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61 69  .**.** P4 contai
2edb0 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ns a pointer to 
2edc0 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
2edd0 74 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63 6b  table being lock
2ede0 65 64 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79  ed. This is only
2edf0 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67 65 6e 65  .** used to gene
2ee00 72 61 74 65 20 61 6e 20 65 72 72 6f 72 20 6d 65  rate an error me
2ee10 73 73 61 67 65 20 69 66 20 74 68 65 20 6c 6f 63  ssage if the loc
2ee20 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61  k cannot be obta
2ee30 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ined..*/.case OP
2ee40 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20  _TableLock: {.  
2ee50 75 38 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 3d  u8 isWriteLock =
2ee60 20 28 75 38 29 70 4f 70 2d 3e 70 33 3b 0a 20 20   (u8)pOp->p3;.  
2ee70 69 66 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 20  if( isWriteLock 
2ee80 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c 61 67 73  || 0==(db->flags
2ee90 26 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f  &SQLITE_ReadUnco
2eea0 6d 6d 69 74 74 65 64 29 20 29 7b 0a 20 20 20 20  mmitted) ){.    
2eeb0 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  int p1 = pOp->p1
2eec0 3b 20 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ; .    assert( p
2eed0 31 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e 6e  1>=0 && p1<db->n
2eee0 44 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  Db );.    assert
2eef0 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
2ef00 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  & (((yDbMask)1)<
2ef10 3c 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 20 20  <p1))!=0 );.    
2ef20 61 73 73 65 72 74 28 20 69 73 57 72 69 74 65 4c  assert( isWriteL
2ef30 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69 74  ock==0 || isWrit
2ef40 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 20 20  eLock==1 );.    
2ef50 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2ef60 65 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61  eLockTable(db->a
2ef70 44 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d  Db[p1].pBt, pOp-
2ef80 3e 70 32 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b  >p2, isWriteLock
2ef90 29 3b 0a 20 20 20 20 69 66 28 20 28 72 63 26 30  );.    if( (rc&0
2efa0 78 46 46 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43  xFF)==SQLITE_LOC
2efb0 4b 45 44 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e  KED ){.      con
2efc0 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 70 4f 70  st char *z = pOp
2efd0 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 20 20 73 71  ->p4.z;.      sq
2efe0 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
2eff0 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
2f000 22 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20  "database table 
2f010 69 73 20 6c 6f 63 6b 65 64 3a 20 25 73 22 2c 20  is locked: %s", 
2f020 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  z);.    }.  }.  
2f030 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
2f040 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  /* SQLITE_OMIT_S
2f050 48 41 52 45 44 5f 43 41 43 48 45 20 2a 2f 0a 0a  HARED_CACHE */..
2f060 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2f070 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2f080 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 42 65 67  ./* Opcode: VBeg
2f090 69 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  in * * * P4 *.**
2f0a0 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20  .** P4 may be a 
2f0b0 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71  pointer to an sq
2f0c0 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63  lite3_vtab struc
2f0d0 74 75 72 65 2e 20 49 66 20 73 6f 2c 20 63 61 6c  ture. If so, cal
2f0e0 6c 20 74 68 65 20 0a 2a 2a 20 78 42 65 67 69 6e  l the .** xBegin
2f0f0 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 61 74   method for that
2f100 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c   table..**.** Al
2f110 73 6f 2c 20 77 68 65 74 68 65 72 20 6f 72 20 6e  so, whether or n
2f120 6f 74 20 50 34 20 69 73 20 73 65 74 2c 20 63 68  ot P4 is set, ch
2f130 65 63 6b 20 74 68 61 74 20 74 68 69 73 20 69 73  eck that this is
2f140 20 6e 6f 74 20 62 65 69 6e 67 20 63 61 6c 6c 65   not being calle
2f150 64 20 66 72 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e  d from.** within
2f160 20 61 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20 61   a callback to a
2f170 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 78   virtual table x
2f180 53 79 6e 63 28 29 20 6d 65 74 68 6f 64 2e 20 49  Sync() method. I
2f190 66 20 69 74 20 69 73 2c 20 74 68 65 20 65 72 72  f it is, the err
2f1a0 6f 72 0a 2a 2a 20 63 6f 64 65 20 77 69 6c 6c 20  or.** code will 
2f1b0 62 65 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45  be set to SQLITE
2f1c0 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65  _LOCKED..*/.case
2f1d0 20 4f 50 5f 56 42 65 67 69 6e 3a 20 7b 0a 20 20   OP_VBegin: {.  
2f1e0 56 54 61 62 6c 65 20 2a 70 56 54 61 62 3b 0a 20  VTable *pVTab;. 
2f1f0 20 70 56 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34   pVTab = pOp->p4
2f200 2e 70 56 74 61 62 3b 0a 20 20 72 63 20 3d 20 73  .pVtab;.  rc = s
2f210 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28  qlite3VtabBegin(
2f220 64 62 2c 20 70 56 54 61 62 29 3b 0a 20 20 69 66  db, pVTab);.  if
2f230 28 20 70 56 54 61 62 20 29 20 73 71 6c 69 74 65  ( pVTab ) sqlite
2f240 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
2f250 67 28 70 2c 20 70 56 54 61 62 2d 3e 70 56 74 61  g(p, pVTab->pVta
2f260 62 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  b);.  break;.}.#
2f270 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2f280 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2f290 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
2f2a0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2f2b0 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
2f2c0 3a 20 56 43 72 65 61 74 65 20 50 31 20 2a 20 2a  : VCreate P1 * *
2f2d0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69   P4 *.**.** P4 i
2f2e0 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  s the name of a 
2f2f0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e  virtual table in
2f300 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 43 61   database P1. Ca
2f310 6c 6c 20 74 68 65 20 78 43 72 65 61 74 65 20 6d  ll the xCreate m
2f320 65 74 68 6f 64 0a 2a 2a 20 66 6f 72 20 74 68 61  ethod.** for tha
2f330 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65  t table..*/.case
2f340 20 4f 50 5f 56 43 72 65 61 74 65 3a 20 7b 0a 20   OP_VCreate: {. 
2f350 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
2f360 62 43 61 6c 6c 43 72 65 61 74 65 28 64 62 2c 20  bCallCreate(db, 
2f370 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
2f380 2e 7a 2c 20 26 70 2d 3e 7a 45 72 72 4d 73 67 29  .z, &p->zErrMsg)
2f390 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
2f3a0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2f3b0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
2f3c0 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
2f3d0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2f3e0 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
2f3f0 56 44 65 73 74 72 6f 79 20 50 31 20 2a 20 2a 20  VDestroy P1 * * 
2f400 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  P4 *.**.** P4 is
2f410 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76   the name of a v
2f420 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20  irtual table in 
2f430 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 43 61  database P1.  Ca
2f440 6c 6c 20 74 68 65 20 78 44 65 73 74 72 6f 79 20  ll the xDestroy 
2f450 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20 74 68 61  method.** of tha
2f460 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65  t table..*/.case
2f470 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a 20 7b 0a   OP_VDestroy: {.
2f480 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f    p->inVtabMetho
2f490 64 20 3d 20 32 3b 0a 20 20 72 63 20 3d 20 73 71  d = 2;.  rc = sq
2f4a0 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73  lite3VtabCallDes
2f4b0 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e 70 31  troy(db, pOp->p1
2f4c0 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
2f4d0 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20  p->inVtabMethod 
2f4e0 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
2f4f0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2f500 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2f510 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
2f520 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2f530 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
2f540 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a 20 2a 20  e: VOpen P1 * * 
2f550 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  P4 *.**.** P4 is
2f560 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
2f570 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62  virtual table ob
2f580 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33  ject, an sqlite3
2f590 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e  _vtab structure.
2f5a0 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72 73  .** P1 is a curs
2f5b0 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73  or number.  This
2f5c0 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73 20 61 20   opcode opens a 
2f5d0 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20 76 69  cursor to the vi
2f5e0 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 61  rtual.** table a
2f5f0 6e 64 20 73 74 6f 72 65 73 20 74 68 61 74 20 63  nd stores that c
2f600 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a  ursor in P1..*/.
2f610 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b  case OP_VOpen: {
2f620 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2f630 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  Cur;.  sqlite3_v
2f640 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74 61  tab_cursor *pVta
2f650 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74  bCursor;.  sqlit
2f660 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
2f670 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65    sqlite3_module
2f680 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73   *pModule;..  as
2f690 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
2f6a0 65 72 20 29 3b 0a 20 20 70 43 75 72 20 3d 20 30  er );.  pCur = 0
2f6b0 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f 72 20  ;.  pVtabCursor 
2f6c0 3d 20 30 3b 0a 20 20 70 56 74 61 62 20 3d 20 70  = 0;.  pVtab = p
2f6d0 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56  Op->p4.pVtab->pV
2f6e0 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
2f6f0 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65   (sqlite3_module
2f700 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   *)pVtab->pModul
2f710 65 3b 0a 20 20 61 73 73 65 72 74 28 70 56 74 61  e;.  assert(pVta
2f720 62 20 26 26 20 70 4d 6f 64 75 6c 65 29 3b 0a 20  b && pModule);. 
2f730 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
2f740 4f 70 65 6e 28 70 56 74 61 62 2c 20 26 70 56 74  Open(pVtab, &pVt
2f750 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 73 71 6c  abCursor);.  sql
2f760 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
2f770 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rmsg(p, pVtab);.
2f780 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d    if( SQLITE_OK=
2f790 3d 72 63 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e  =rc ){.    /* In
2f7a0 69 74 69 61 6c 69 7a 65 20 73 71 6c 69 74 65 33  itialize sqlite3
2f7b0 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 62 61 73  _vtab_cursor bas
2f7c0 65 20 63 6c 61 73 73 20 2a 2f 0a 20 20 20 20 70  e class */.    p
2f7d0 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61  VtabCursor->pVta
2f7e0 62 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20 20 20  b = pVtab;..    
2f7f0 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 76 64  /* Initialize vd
2f800 62 65 20 63 75 72 73 6f 72 20 6f 62 6a 65 63 74  be cursor object
2f810 20 2a 2f 0a 20 20 20 20 70 43 75 72 20 3d 20 61   */.    pCur = a
2f820 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c  llocateCursor(p,
2f830 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d 31 2c   pOp->p1, 0, -1,
2f840 20 30 29 3b 0a 20 20 20 20 69 66 28 20 70 43 75   0);.    if( pCu
2f850 72 20 29 7b 0a 20 20 20 20 20 20 70 43 75 72 2d  r ){.      pCur-
2f860 3e 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20 70  >pVtabCursor = p
2f870 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 20 20  VtabCursor;.    
2f880 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d  }else{.      db-
2f890 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20  >mallocFailed = 
2f8a0 31 3b 0a 20 20 20 20 20 20 70 4d 6f 64 75 6c 65  1;.      pModule
2f8b0 2d 3e 78 43 6c 6f 73 65 28 70 56 74 61 62 43 75  ->xClose(pVtabCu
2f8c0 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  rsor);.    }.  }
2f8d0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2f8e0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
2f8f0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
2f900 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
2f910 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2f920 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
2f930 46 69 6c 74 65 72 20 50 31 20 50 32 20 50 33 20  Filter P1 P2 P3 
2f940 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
2f950 3a 20 69 70 6c 61 6e 3d 72 5b 50 33 5d 20 7a 70  : iplan=r[P3] zp
2f960 6c 61 6e 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50  lan='P4'.**.** P
2f970 31 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f 70  1 is a cursor op
2f980 65 6e 65 64 20 75 73 69 6e 67 20 56 4f 70 65 6e  ened using VOpen
2f990 2e 20 20 50 32 20 69 73 20 61 6e 20 61 64 64 72  .  P2 is an addr
2f9a0 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69  ess to jump to i
2f9b0 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65 72 65  f.** the filtere
2f9c0 64 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20  d result set is 
2f9d0 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  empty..**.** P4 
2f9e0 69 73 20 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f  is either NULL o
2f9f0 72 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20  r a string that 
2fa00 77 61 73 20 67 65 6e 65 72 61 74 65 64 20 62 79  was generated by
2fa10 20 74 68 65 20 78 42 65 73 74 49 6e 64 65 78 0a   the xBestIndex.
2fa20 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65  ** method of the
2fa30 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20 69 6e   module.  The in
2fa40 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20  terpretation of 
2fa50 74 68 65 20 50 34 20 73 74 72 69 6e 67 20 69 73  the P4 string is
2fa60 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68 65 20   left.** to the 
2fa70 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74  module implement
2fa80 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ation..**.** Thi
2fa90 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73  s opcode invokes
2faa0 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74   the xFilter met
2fab0 68 6f 64 20 6f 6e 20 74 68 65 20 76 69 72 74 75  hod on the virtu
2fac0 61 6c 20 74 61 62 6c 65 20 73 70 65 63 69 66 69  al table specifi
2fad0 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20 54 68  ed.** by P1.  Th
2fae0 65 20 69 6e 74 65 67 65 72 20 71 75 65 72 79 20  e integer query 
2faf0 70 6c 61 6e 20 70 61 72 61 6d 65 74 65 72 20 74  plan parameter t
2fb00 6f 20 78 46 69 6c 74 65 72 20 69 73 20 73 74 6f  o xFilter is sto
2fb10 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a  red in register.
2fb20 2a 2a 20 50 33 2e 20 52 65 67 69 73 74 65 72 20  ** P3. Register 
2fb30 50 33 2b 31 20 73 74 6f 72 65 73 20 74 68 65 20  P3+1 stores the 
2fb40 61 72 67 63 20 70 61 72 61 6d 65 74 65 72 20 74  argc parameter t
2fb50 6f 20 62 65 20 70 61 73 73 65 64 20 74 6f 20 74  o be passed to t
2fb60 68 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20 6d 65  he.** xFilter me
2fb70 74 68 6f 64 2e 20 52 65 67 69 73 74 65 72 73 20  thod. Registers 
2fb80 50 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67 63 20  P3+2..P3+1+argc 
2fb90 61 72 65 20 74 68 65 20 61 72 67 63 0a 2a 2a 20  are the argc.** 
2fba0 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 72 61 6d  additional param
2fbb0 65 74 65 72 73 20 77 68 69 63 68 20 61 72 65 20  eters which are 
2fbc0 70 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78 46 69  passed to.** xFi
2fbd0 6c 74 65 72 20 61 73 20 61 72 67 76 2e 20 52 65  lter as argv. Re
2fbe0 67 69 73 74 65 72 20 50 33 2b 32 20 62 65 63 6f  gister P3+2 beco
2fbf0 6d 65 73 20 61 72 67 76 5b 30 5d 20 77 68 65 6e  mes argv[0] when
2fc00 20 70 61 73 73 65 64 20 74 6f 20 78 46 69 6c 74   passed to xFilt
2fc10 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d 70  er..**.** A jump
2fc20 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20 69   is made to P2 i
2fc30 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  f the result set
2fc40 20 61 66 74 65 72 20 66 69 6c 74 65 72 69 6e 67   after filtering
2fc50 20 77 6f 75 6c 64 20 62 65 20 65 6d 70 74 79 2e   would be empty.
2fc60 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46 69 6c  .*/.case OP_VFil
2fc70 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70  ter: {   /* jump
2fc80 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a   */.  int nArg;.
2fc90 20 20 69 6e 74 20 69 51 75 65 72 79 3b 0a 20 20    int iQuery;.  
2fca0 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
2fcb0 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20  dule *pModule;. 
2fcc0 20 4d 65 6d 20 2a 70 51 75 65 72 79 3b 0a 20 20   Mem *pQuery;.  
2fcd0 4d 65 6d 20 2a 70 41 72 67 63 3b 0a 20 20 73 71  Mem *pArgc;.  sq
2fce0 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
2fcf0 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b 0a  r *pVtabCursor;.
2fd00 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
2fd10 70 56 74 61 62 3b 0a 20 20 56 64 62 65 43 75 72  pVtab;.  VdbeCur
2fd20 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 69 6e 74  sor *pCur;.  int
2fd30 20 72 65 73 3b 0a 20 20 69 6e 74 20 69 3b 0a 20   res;.  int i;. 
2fd40 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a 20   Mem **apArg;.. 
2fd50 20 70 51 75 65 72 79 20 3d 20 26 61 4d 65 6d 5b   pQuery = &aMem[
2fd60 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 41 72 67  pOp->p3];.  pArg
2fd70 63 20 3d 20 26 70 51 75 65 72 79 5b 31 5d 3b 0a  c = &pQuery[1];.
2fd80 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73    pCur = p->apCs
2fd90 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
2fda0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
2fdb0 28 70 51 75 65 72 79 29 20 29 3b 0a 20 20 52 45  (pQuery) );.  RE
2fdc0 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
2fdd0 2d 3e 70 33 2c 20 70 51 75 65 72 79 29 3b 0a 20  ->p3, pQuery);. 
2fde0 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70   assert( pCur->p
2fdf0 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20  VtabCursor );.  
2fe00 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20 70 43  pVtabCursor = pC
2fe10 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 3b  ur->pVtabCursor;
2fe20 0a 20 20 70 56 74 61 62 20 3d 20 70 56 74 61 62  .  pVtab = pVtab
2fe30 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20  Cursor->pVtab;. 
2fe40 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
2fe50 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f 2a  ->pModule;..  /*
2fe60 20 47 72 61 62 20 74 68 65 20 69 6e 64 65 78 20   Grab the index 
2fe70 6e 75 6d 62 65 72 20 61 6e 64 20 61 72 67 63 20  number and argc 
2fe80 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20  parameters */.  
2fe90 61 73 73 65 72 74 28 20 28 70 51 75 65 72 79 2d  assert( (pQuery-
2fea0 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 21  >flags&MEM_Int)!
2feb0 3d 30 20 26 26 20 70 41 72 67 63 2d 3e 66 6c 61  =0 && pArgc->fla
2fec0 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  gs==MEM_Int );. 
2fed0 20 6e 41 72 67 20 3d 20 28 69 6e 74 29 70 41 72   nArg = (int)pAr
2fee0 67 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65 72  gc->u.i;.  iQuer
2fef0 79 20 3d 20 28 69 6e 74 29 70 51 75 65 72 79 2d  y = (int)pQuery-
2ff00 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f  >u.i;..  /* Invo
2ff10 6b 65 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d  ke the xFilter m
2ff20 65 74 68 6f 64 20 2a 2f 0a 20 20 7b 0a 20 20 20  ethod */.  {.   
2ff30 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 61 70   res = 0;.    ap
2ff40 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a  Arg = p->apArg;.
2ff50 20 20 20 20 66 6f 72 28 69 20 3d 20 30 3b 20 69      for(i = 0; i
2ff60 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
2ff70 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 26 70     apArg[i] = &p
2ff80 41 72 67 63 5b 69 2b 31 5d 3b 0a 20 20 20 20 7d  Argc[i+1];.    }
2ff90 0a 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61 62 4d  ..    p->inVtabM
2ffa0 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 20 20 72  ethod = 1;.    r
2ffb0 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 46 69  c = pModule->xFi
2ffc0 6c 74 65 72 28 70 56 74 61 62 43 75 72 73 6f 72  lter(pVtabCursor
2ffd0 2c 20 69 51 75 65 72 79 2c 20 70 4f 70 2d 3e 70  , iQuery, pOp->p
2ffe0 34 2e 7a 2c 20 6e 41 72 67 2c 20 61 70 41 72 67  4.z, nArg, apArg
2fff0 29 3b 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61 62  );.    p->inVtab
30000 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 20 20  Method = 0;.    
30010 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
30020 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62  tErrmsg(p, pVtab
30030 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  );.    if( rc==S
30040 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
30050 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d    res = pModule-
30060 3e 78 45 6f 66 28 70 56 74 61 62 43 75 72 73 6f  >xEof(pVtabCurso
30070 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 56 64  r);.    }.    Vd
30080 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
30090 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28  s!=0,2);.    if(
300a0 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 70 63   res ){.      pc
300b0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
300c0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 75 72      }.  }.  pCur
300d0 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 0a  ->nullRow = 0;..
300e0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
300f0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
30100 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
30110 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
30120 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
30130 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43  LE./* Opcode: VC
30140 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20 2a  olumn P1 P2 P3 *
30150 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
30160 72 5b 50 33 5d 3d 76 63 6f 6c 75 6d 6e 28 50 32  r[P3]=vcolumn(P2
30170 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68  ).**.** Store th
30180 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50  e value of the P
30190 32 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a  2-th column of.*
301a0 2a 20 74 68 65 20 72 6f 77 20 6f 66 20 74 68 65  * the row of the
301b0 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20 74   virtual-table t
301c0 68 61 74 20 74 68 65 20 0a 2a 2a 20 50 31 20 63  hat the .** P1 c
301d0 75 72 73 6f 72 20 69 73 20 70 6f 69 6e 74 69 6e  ursor is pointin
301e0 67 20 74 6f 20 69 6e 74 6f 20 72 65 67 69 73 74  g to into regist
301f0 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P3..*/.case O
30200 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73  P_VColumn: {.  s
30210 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
30220 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ab;.  const sqli
30230 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
30240 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 44 65 73  ule;.  Mem *pDes
30250 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  t;.  sqlite3_con
30260 74 65 78 74 20 73 43 6f 6e 74 65 78 74 3b 0a 0a  text sContext;..
30270 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
30280 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ur = p->apCsr[pO
30290 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
302a0 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  ( pCur->pVtabCur
302b0 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
302c0 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
302d0 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p3<=(p->nMem-
302e0 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
302f0 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70   pDest = &aMem[p
30300 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p3];.  memAb
30310 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
30320 44 65 73 74 29 3b 0a 20 20 69 66 28 20 70 43 75  Dest);.  if( pCu
30330 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  r->nullRow ){.  
30340 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
30350 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
30360 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
30370 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 70   pVtab = pCur->p
30380 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61  VtabCursor->pVta
30390 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70  b;.  pModule = p
303a0 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
303b0 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65   assert( pModule
303c0 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d  ->xColumn );.  m
303d0 65 6d 73 65 74 28 26 73 43 6f 6e 74 65 78 74 2c  emset(&sContext,
303e0 20 30 2c 20 73 69 7a 65 6f 66 28 73 43 6f 6e 74   0, sizeof(sCont
303f0 65 78 74 29 29 3b 0a 0a 20 20 2f 2a 20 54 68 65  ext));..  /* The
30400 20 6f 75 74 70 75 74 20 63 65 6c 6c 20 6d 61 79   output cell may
30410 20 61 6c 72 65 61 64 79 20 68 61 76 65 20 61 20   already have a 
30420 62 75 66 66 65 72 20 61 6c 6c 6f 63 61 74 65 64  buffer allocated
30430 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20 74 68 65 20  . Move.  ** the 
30440 63 75 72 72 65 6e 74 20 63 6f 6e 74 65 6e 74 73  current contents
30450 20 74 6f 20 73 43 6f 6e 74 65 78 74 2e 73 20 73   to sContext.s s
30460 6f 20 69 6e 20 63 61 73 65 20 74 68 65 20 75 73  o in case the us
30470 65 72 2d 66 75 6e 63 74 69 6f 6e 20 0a 20 20 2a  er-function .  *
30480 2a 20 63 61 6e 20 75 73 65 20 74 68 65 20 61 6c  * can use the al
30490 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 20  ready allocated 
304a0 62 75 66 66 65 72 20 69 6e 73 74 65 61 64 20 6f  buffer instead o
304b0 66 20 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20 0a  f allocating a .
304c0 20 20 2a 2a 20 6e 65 77 20 6f 6e 65 2e 0a 20 20    ** new one..  
304d0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
304e0 4d 65 6d 4d 6f 76 65 28 26 73 43 6f 6e 74 65 78  MemMove(&sContex
304f0 74 2e 73 2c 20 70 44 65 73 74 29 3b 0a 20 20 4d  t.s, pDest);.  M
30500 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 26 73  emSetTypeFlag(&s
30510 43 6f 6e 74 65 78 74 2e 73 2c 20 4d 45 4d 5f 4e  Context.s, MEM_N
30520 75 6c 6c 29 3b 0a 0a 20 20 72 63 20 3d 20 70 4d  ull);..  rc = pM
30530 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70  odule->xColumn(p
30540 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
30550 2c 20 26 73 43 6f 6e 74 65 78 74 2c 20 70 4f 70  , &sContext, pOp
30560 2d 3e 70 32 29 3b 0a 20 20 73 71 6c 69 74 65 33  ->p2);.  sqlite3
30570 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
30580 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66  (p, pVtab);.  if
30590 28 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72 72  ( sContext.isErr
305a0 6f 72 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  or ){.    rc = s
305b0 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f 72 3b  Context.isError;
305c0 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79 20  .  }..  /* Copy 
305d0 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
305e0 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 74 68  e function to th
305f0 65 20 50 33 20 72 65 67 69 73 74 65 72 2e 20 57  e P3 register. W
30600 65 0a 20 20 2a 2a 20 64 6f 20 74 68 69 73 20 72  e.  ** do this r
30610 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65  egardless of whe
30620 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65  ther or not an e
30630 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 74 6f  rror occurred to
30640 20 65 6e 73 75 72 65 20 61 6e 79 0a 20 20 2a 2a   ensure any.  **
30650 20 64 79 6e 61 6d 69 63 20 61 6c 6c 6f 63 61 74   dynamic allocat
30660 69 6f 6e 20 69 6e 20 73 43 6f 6e 74 65 78 74 2e  ion in sContext.
30670 73 20 28 61 20 4d 65 6d 20 73 74 72 75 63 74 29  s (a Mem struct)
30680 20 69 73 20 20 72 65 6c 65 61 73 65 64 2e 0a 20   is  released.. 
30690 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62   */.  sqlite3Vdb
306a0 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
306b0 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 65 6e 63  &sContext.s, enc
306c0 6f 64 69 6e 67 29 3b 0a 20 20 73 71 6c 69 74 65  oding);.  sqlite
306d0 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 44 65  3VdbeMemMove(pDe
306e0 73 74 2c 20 26 73 43 6f 6e 74 65 78 74 2e 73 29  st, &sContext.s)
306f0 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
30700 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73  CE(pOp->p3, pDes
30710 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  t);.  UPDATE_MAX
30720 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29  _BLOBSIZE(pDest)
30730 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ;..  if( sqlite3
30740 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 44  VdbeMemTooBig(pD
30750 65 73 74 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  est) ){.    goto
30760 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
30770 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
30780 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
30790 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
307a0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
307b0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
307c0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4e 65 78  ./* Opcode: VNex
307d0 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
307e0 0a 2a 2a 20 41 64 76 61 6e 63 65 20 76 69 72 74  .** Advance virt
307f0 75 61 6c 20 74 61 62 6c 65 20 50 31 20 74 6f 20  ual table P1 to 
30800 74 68 65 20 6e 65 78 74 20 72 6f 77 20 69 6e 20  the next row in 
30810 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 20 61  its result set a
30820 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 69 6e  nd.** jump to in
30830 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 20 4f  struction P2.  O
30840 72 2c 20 69 66 20 74 68 65 20 76 69 72 74 75 61  r, if the virtua
30850 6c 20 74 61 62 6c 65 20 68 61 73 20 72 65 61 63  l table has reac
30860 68 65 64 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f  hed.** the end o
30870 66 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74  f its result set
30880 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  , then fall thro
30890 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
308a0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
308b0 63 61 73 65 20 4f 50 5f 56 4e 65 78 74 3a 20 7b  case OP_VNext: {
308c0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
308d0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
308e0 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  tab;.  const sql
308f0 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
30900 64 75 6c 65 3b 0a 20 20 69 6e 74 20 72 65 73 3b  dule;.  int res;
30910 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
30920 43 75 72 3b 0a 0a 20 20 72 65 73 20 3d 20 30 3b  Cur;..  res = 0;
30930 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43  .  pCur = p->apC
30940 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
30950 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74  ssert( pCur->pVt
30960 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66  abCursor );.  if
30970 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20  ( pCur->nullRow 
30980 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ){.    break;.  
30990 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75 72  }.  pVtab = pCur
309a0 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70  ->pVtabCursor->p
309b0 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20  Vtab;.  pModule 
309c0 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
309d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64  ;.  assert( pMod
309e0 75 6c 65 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a 20  ule->xNext );.. 
309f0 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78   /* Invoke the x
30a00 4e 65 78 74 28 29 20 6d 65 74 68 6f 64 20 6f 66  Next() method of
30a10 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 54 68 65   the module. The
30a20 72 65 20 69 73 20 6e 6f 20 77 61 79 20 66 6f 72  re is no way for
30a30 20 74 68 65 0a 20 20 2a 2a 20 75 6e 64 65 72 6c   the.  ** underl
30a40 79 69 6e 67 20 69 6d 70 6c 65 6d 65 6e 74 61 74  ying implementat
30a50 69 6f 6e 20 74 6f 20 72 65 74 75 72 6e 20 61 6e  ion to return an
30a60 20 65 72 72 6f 72 20 69 66 20 6f 6e 65 20 6f 63   error if one oc
30a70 63 75 72 73 20 64 75 72 69 6e 67 0a 20 20 2a 2a  curs during.  **
30a80 20 78 4e 65 78 74 28 29 2e 20 49 6e 73 74 65 61   xNext(). Instea
30a90 64 2c 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f  d, if an error o
30aa0 63 63 75 72 73 2c 20 74 72 75 65 20 69 73 20 72  ccurs, true is r
30ab0 65 74 75 72 6e 65 64 20 28 69 6e 64 69 63 61 74  eturned (indicat
30ac0 69 6e 67 20 74 68 61 74 20 0a 20 20 2a 2a 20 64  ing that .  ** d
30ad0 61 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ata is available
30ae0 29 20 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20  ) and the error 
30af0 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20 77 68  code returned wh
30b00 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20  en xColumn or.  
30b10 2a 2a 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65  ** some other me
30b20 74 68 6f 64 20 69 73 20 6e 65 78 74 20 69 6e 76  thod is next inv
30b30 6f 6b 65 64 20 6f 6e 20 74 68 65 20 73 61 76 65  oked on the save
30b40 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63   virtual table c
30b50 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 70 2d  ursor..  */.  p-
30b60 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20  >inVtabMethod = 
30b70 31 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  1;.  rc = pModul
30b80 65 2d 3e 78 4e 65 78 74 28 70 43 75 72 2d 3e 70  e->xNext(pCur->p
30b90 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 70  VtabCursor);.  p
30ba0 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d  ->inVtabMethod =
30bb0 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61   0;.  sqlite3Vta
30bc0 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c  bImportErrmsg(p,
30bd0 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72   pVtab);.  if( r
30be0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
30bf0 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c      res = pModul
30c00 65 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e 70 56  e->xEof(pCur->pV
30c10 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a  tabCursor);.  }.
30c20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
30c30 6e 28 21 72 65 73 2c 32 29 3b 0a 20 20 69 66 28  n(!res,2);.  if(
30c40 20 21 72 65 73 20 29 7b 0a 20 20 20 20 2f 2a 20   !res ){.    /* 
30c50 49 66 20 74 68 65 72 65 20 69 73 20 64 61 74 61  If there is data
30c60 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a  , jump to P2 */.
30c70 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
30c80 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f   - 1;.  }.  goto
30c90 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72   check_for_inter
30ca0 72 75 70 74 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  rupt;.}.#endif /
30cb0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
30cc0 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
30cd0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
30ce0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
30cf0 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61  /* Opcode: VRena
30d00 6d 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  me P1 * * P4 *.*
30d10 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
30d20 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61  nter to a virtua
30d30 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  l table object, 
30d40 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
30d50 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68  structure..** Th
30d60 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
30d70 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  s the correspond
30d80 69 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65 74 68  ing xRename meth
30d90 6f 64 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a  od. The value.**
30da0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
30db0 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65  is passed as the
30dc0 20 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20   zName argument 
30dd0 74 6f 20 74 68 65 20 78 52 65 6e 61 6d 65 20 6d  to the xRename m
30de0 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ethod..*/.case O
30df0 50 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73  P_VRename: {.  s
30e00 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
30e10 61 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65  ab;.  Mem *pName
30e20 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70  ;..  pVtab = pOp
30e30 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61  ->p4.pVtab->pVta
30e40 62 3b 0a 20 20 70 4e 61 6d 65 20 3d 20 26 61 4d  b;.  pName = &aM
30e50 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
30e60 73 73 65 72 74 28 20 70 56 74 61 62 2d 3e 70 4d  ssert( pVtab->pM
30e70 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 20 29  odule->xRename )
30e80 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ;.  assert( memI
30e90 73 56 61 6c 69 64 28 70 4e 61 6d 65 29 20 29 3b  sValid(pName) );
30ea0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
30eb0 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 52  adOnly==0 );.  R
30ec0 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
30ed0 70 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b 0a 20  p->p1, pName);. 
30ee0 20 61 73 73 65 72 74 28 20 70 4e 61 6d 65 2d 3e   assert( pName->
30ef0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20  flags & MEM_Str 
30f00 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
30f10 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54  Name->enc==SQLIT
30f20 45 5f 55 54 46 38 20 29 3b 0a 20 20 74 65 73 74  E_UTF8 );.  test
30f30 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63  case( pName->enc
30f40 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  ==SQLITE_UTF16BE
30f50 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
30f60 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49  pName->enc==SQLI
30f70 54 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20 20  TE_UTF16LE );.  
30f80 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
30f90 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
30fa0 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 55 54 46  Name, SQLITE_UTF
30fb0 38 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  8);.  if( rc==SQ
30fc0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
30fd0 63 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  c = pVtab->pModu
30fe0 6c 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56 74 61  le->xRename(pVta
30ff0 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20  b, pName->z);.  
31000 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70    sqlite3VtabImp
31010 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74  ortErrmsg(p, pVt
31020 61 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69  ab);.    p->expi
31030 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62  red = 0;.  }.  b
31040 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
31050 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
31060 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
31070 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70 64  ./* Opcode: VUpd
31080 61 74 65 20 50 31 20 50 32 20 50 33 20 50 34 20  ate P1 P2 P3 P4 
31090 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
310a0 64 61 74 61 3d 72 5b 50 33 40 50 32 5d 0a 2a 2a  data=r[P3@P2].**
310b0 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
310c0 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c  ter to a virtual
310d0 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61   table object, a
310e0 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  n sqlite3_vtab s
310f0 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69  tructure..** Thi
31100 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73  s opcode invokes
31110 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
31120 6e 67 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f  ng xUpdate metho
31130 64 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a 20  d. P2 values.** 
31140 61 72 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 6d  are contiguous m
31150 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74 61 72  emory cells star
31160 74 69 6e 67 20 61 74 20 50 33 20 74 6f 20 70 61  ting at P3 to pa
31170 73 73 20 74 6f 20 74 68 65 20 78 55 70 64 61 74  ss to the xUpdat
31180 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e  e .** invocation
31190 2e 20 54 68 65 20 76 61 6c 75 65 20 69 6e 20 72  . The value in r
311a0 65 67 69 73 74 65 72 20 28 50 33 2b 50 32 2d 31  egister (P3+P2-1
311b0 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  ) corresponds to
311c0 20 74 68 65 20 0a 2a 2a 20 70 32 74 68 20 65 6c   the .** p2th el
311d0 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61 72 67  ement of the arg
311e0 76 20 61 72 72 61 79 20 70 61 73 73 65 64 20 74  v array passed t
311f0 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a 2a  o xUpdate..**.**
31200 20 54 68 65 20 78 55 70 64 61 74 65 20 6d 65 74   The xUpdate met
31210 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20 44 45  hod will do a DE
31220 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e 53 45 52  LETE or an INSER
31230 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20 54 68  T or both..** Th
31240 65 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d 65 6e  e argv[0] elemen
31250 74 20 28 77 68 69 63 68 20 63 6f 72 72 65 73 70  t (which corresp
31260 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79 20 63  onds to memory c
31270 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20 74 68  ell P3).** is th
31280 65 20 72 6f 77 69 64 20 6f 66 20 61 20 72 6f 77  e rowid of a row
31290 20 74 6f 20 64 65 6c 65 74 65 2e 20 20 49 66 20   to delete.  If 
312a0 61 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c 4c 20  argv[0] is NULL 
312b0 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c 65  then no .** dele
312c0 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20 54 68  tion occurs.  Th
312d0 65 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d 65 6e  e argv[1] elemen
312e0 74 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f  t is the rowid o
312f0 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f  f the new .** ro
31300 77 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 20  w.  This can be 
31310 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20 74 68 65  NULL to have the
31320 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73   virtual table s
31330 65 6c 65 63 74 20 74 68 65 20 6e 65 77 20 0a 2a  elect the new .*
31340 2a 20 72 6f 77 69 64 20 66 6f 72 20 69 74 73 65  * rowid for itse
31350 6c 66 2e 20 20 54 68 65 20 73 75 62 73 65 71 75  lf.  The subsequ
31360 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20  ent elements in 
31370 74 68 65 20 61 72 72 61 79 20 61 72 65 20 0a 2a  the array are .*
31380 2a 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20  * the values of 
31390 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 6e  columns in the n
313a0 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49 66  ew row..**.** If
313b0 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f 20 69   P2==1 then no i
313c0 6e 73 65 72 74 20 69 73 20 70 65 72 66 6f 72 6d  nsert is perform
313d0 65 64 2e 20 20 61 72 67 76 5b 30 5d 20 69 73 20  ed.  argv[0] is 
313e0 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a 20  the rowid of.** 
313f0 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e  a row to delete.
31400 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 62  .**.** P1 is a b
31410 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49 66 20  oolean flag. If 
31420 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 72 75  it is set to tru
31430 65 20 61 6e 64 20 74 68 65 20 78 55 70 64 61 74  e and the xUpdat
31440 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73 75 63  e call.** is suc
31450 63 65 73 73 66 75 6c 2c 20 74 68 65 6e 20 74 68  cessful, then th
31460 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64  e value returned
31470 20 62 79 20 73 71 6c 69 74 65 33 5f 6c 61 73 74   by sqlite3_last
31480 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20  _insert_rowid() 
31490 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f 20 74 68  .** is set to th
314a0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72  e value of the r
314b0 6f 77 69 64 20 66 6f 72 20 74 68 65 20 72 6f 77  owid for the row
314c0 20 6a 75 73 74 20 69 6e 73 65 72 74 65 64 2e 0a   just inserted..
314d0 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 74 68 65 20  **.** P5 is the 
314e0 65 72 72 6f 72 20 61 63 74 69 6f 6e 73 20 28 4f  error actions (O
314f0 45 5f 52 65 70 6c 61 63 65 2c 20 4f 45 5f 46 61  E_Replace, OE_Fa
31500 69 6c 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 65  il, OE_Ignore, e
31510 74 63 29 20 74 6f 0a 2a 2a 20 61 70 70 6c 79 20  tc) to.** apply 
31520 69 6e 20 74 68 65 20 63 61 73 65 20 6f 66 20 61  in the case of a
31530 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c   constraint fail
31540 75 72 65 20 6f 6e 20 61 6e 20 69 6e 73 65 72 74  ure on an insert
31550 20 6f 72 20 75 70 64 61 74 65 2e 0a 2a 2f 0a 63   or update..*/.c
31560 61 73 65 20 4f 50 5f 56 55 70 64 61 74 65 3a 20  ase OP_VUpdate: 
31570 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  {.  sqlite3_vtab
31580 20 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c 69 74   *pVtab;.  sqlit
31590 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
315a0 6c 65 3b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a  le;.  int nArg;.
315b0 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74    int i;.  sqlit
315c0 65 5f 69 6e 74 36 34 20 72 6f 77 69 64 3b 0a 20  e_int64 rowid;. 
315d0 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 20 20   Mem **apArg;.  
315e0 4d 65 6d 20 2a 70 58 3b 0a 0a 20 20 61 73 73 65  Mem *pX;..  asse
315f0 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 31 20 20  rt( pOp->p2==1  
31600 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35        || pOp->p5
31610 3d 3d 4f 45 5f 46 61 69 6c 20 20 20 7c 7c 20 70  ==OE_Fail   || p
31620 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 6f 6c 6c 62  Op->p5==OE_Rollb
31630 61 63 6b 20 0a 20 20 20 20 20 20 20 7c 7c 20 70  ack .       || p
31640 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 41 62 6f 72 74  Op->p5==OE_Abort
31650 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f   || pOp->p5==OE_
31660 49 67 6e 6f 72 65 20 7c 7c 20 70 4f 70 2d 3e 70  Ignore || pOp->p
31670 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 0a 20 20  5==OE_Replace.  
31680 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
31690 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
316a0 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34   pVtab = pOp->p4
316b0 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20  .pVtab->pVtab;. 
316c0 20 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69   pModule = (sqli
316d0 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74  te3_module *)pVt
316e0 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 6e  ab->pModule;.  n
316f0 41 72 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  Arg = pOp->p2;. 
31700 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
31710 74 79 70 65 3d 3d 50 34 5f 56 54 41 42 20 29 3b  type==P4_VTAB );
31720 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 4d  .  if( ALWAYS(pM
31730 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 29 20  odule->xUpdate) 
31740 29 7b 0a 20 20 20 20 75 38 20 76 74 61 62 4f 6e  ){.    u8 vtabOn
31750 43 6f 6e 66 6c 69 63 74 20 3d 20 64 62 2d 3e 76  Conflict = db->v
31760 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20  tabOnConflict;. 
31770 20 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61 70     apArg = p->ap
31780 41 72 67 3b 0a 20 20 20 20 70 58 20 3d 20 26 61  Arg;.    pX = &a
31790 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
317a0 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72    for(i=0; i<nAr
317b0 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61  g; i++){.      a
317c0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
317d0 64 28 70 58 29 20 29 3b 0a 20 20 20 20 20 20 6d  d(pX) );.      m
317e0 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
317f0 70 2c 20 70 58 29 3b 0a 20 20 20 20 20 20 61 70  p, pX);.      ap
31800 41 72 67 5b 69 5d 20 3d 20 70 58 3b 0a 20 20 20  Arg[i] = pX;.   
31810 20 20 20 70 58 2b 2b 3b 0a 20 20 20 20 7d 0a 20     pX++;.    }. 
31820 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e     db->vtabOnCon
31830 66 6c 69 63 74 20 3d 20 70 4f 70 2d 3e 70 35 3b  flict = pOp->p5;
31840 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  .    rc = pModul
31850 65 2d 3e 78 55 70 64 61 74 65 28 70 56 74 61 62  e->xUpdate(pVtab
31860 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 2c 20 26  , nArg, apArg, &
31870 72 6f 77 69 64 29 3b 0a 20 20 20 20 64 62 2d 3e  rowid);.    db->
31880 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d  vtabOnConflict =
31890 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b   vtabOnConflict;
318a0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62  .    sqlite3Vtab
318b0 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
318c0 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66 28 20  pVtab);.    if( 
318d0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
318e0 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20   pOp->p1 ){.    
318f0 20 20 61 73 73 65 72 74 28 20 6e 41 72 67 3e 31    assert( nArg>1
31900 20 26 26 20 61 70 41 72 67 5b 30 5d 20 26 26 20   && apArg[0] && 
31910 28 61 70 41 72 67 5b 30 5d 2d 3e 66 6c 61 67 73  (apArg[0]->flags
31920 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29 3b 0a 20 20  &MEM_Null) );.  
31930 20 20 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69      db->lastRowi
31940 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 20 3d 20  d = lastRowid = 
31950 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 20  rowid;.    }.   
31960 20 69 66 28 20 28 72 63 26 30 78 66 66 29 3d 3d   if( (rc&0xff)==
31970 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
31980 54 20 26 26 20 70 4f 70 2d 3e 70 34 2e 70 56 74  T && pOp->p4.pVt
31990 61 62 2d 3e 62 43 6f 6e 73 74 72 61 69 6e 74 20  ab->bConstraint 
319a0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70  ){.      if( pOp
319b0 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20  ->p5==OE_Ignore 
319c0 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
319d0 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20  SQLITE_OK;.     
319e0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
319f0 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d  p->errorAction =
31a00 20 28 28 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52   ((pOp->p5==OE_R
31a10 65 70 6c 61 63 65 29 20 3f 20 4f 45 5f 41 62 6f  eplace) ? OE_Abo
31a20 72 74 20 3a 20 70 4f 70 2d 3e 70 35 29 3b 0a 20  rt : pOp->p5);. 
31a30 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
31a40 7b 0a 20 20 20 20 20 20 70 2d 3e 6e 43 68 61 6e  {.      p->nChan
31a50 67 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  ge++;.    }.  }.
31a60 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
31a70 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
31a80 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
31a90 0a 0a 23 69 66 6e 64 65 66 20 20 53 51 4c 49 54  ..#ifndef  SQLIT
31aa0 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41  E_OMIT_PAGER_PRA
31ab0 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  GMAS./* Opcode: 
31ac0 50 61 67 65 63 6f 75 6e 74 20 50 31 20 50 32 20  Pagecount P1 P2 
31ad0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74  * * *.**.** Writ
31ae0 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 6e 75  e the current nu
31af0 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
31b00 20 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20   database P1 to 
31b10 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 32 2e 0a  memory cell P2..
31b20 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 67 65 63  */.case OP_Pagec
31b30 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ount: {         
31b40 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
31b50 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d  lease */.  pOut-
31b60 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33 42 74  >u.i = sqlite3Bt
31b70 72 65 65 4c 61 73 74 50 61 67 65 28 64 62 2d 3e  reeLastPage(db->
31b80 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74  aDb[pOp->p1].pBt
31b90 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  );.  break;.}.#e
31ba0 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 20  ndif...#ifndef  
31bb0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
31bc0 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63  R_PRAGMAS./* Opc
31bd0 6f 64 65 3a 20 4d 61 78 50 67 63 6e 74 20 50 31  ode: MaxPgcnt P1
31be0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
31bf0 20 54 72 79 20 74 6f 20 73 65 74 20 74 68 65 20   Try to set the 
31c00 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75  maximum page cou
31c10 6e 74 20 66 6f 72 20 64 61 74 61 62 61 73 65 20  nt for database 
31c20 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  P1 to the value 
31c30 69 6e 20 50 33 2e 0a 2a 2a 20 44 6f 20 6e 6f 74  in P3..** Do not
31c40 20 6c 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d   let the maximum
31c50 20 70 61 67 65 20 63 6f 75 6e 74 20 66 61 6c 6c   page count fall
31c60 20 62 65 6c 6f 77 20 74 68 65 20 63 75 72 72 65   below the curre
31c70 6e 74 20 70 61 67 65 20 63 6f 75 6e 74 20 61 6e  nt page count an
31c80 64 0a 2a 2a 20 64 6f 20 6e 6f 74 20 63 68 61 6e  d.** do not chan
31c90 67 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70  ge the maximum p
31ca0 61 67 65 20 63 6f 75 6e 74 20 76 61 6c 75 65 20  age count value 
31cb0 69 66 20 50 33 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20  if P3==0..**.** 
31cc0 53 74 6f 72 65 20 74 68 65 20 6d 61 78 69 6d 75  Store the maximu
31cd0 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 61 66 74  m page count aft
31ce0 65 72 20 74 68 65 20 63 68 61 6e 67 65 20 69 6e  er the change in
31cf0 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
31d00 0a 63 61 73 65 20 4f 50 5f 4d 61 78 50 67 63 6e  .case OP_MaxPgcn
31d10 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
31d20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
31d30 73 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  se */.  unsigned
31d40 20 69 6e 74 20 6e 65 77 4d 61 78 3b 0a 20 20 42   int newMax;.  B
31d50 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 70 42  tree *pBt;..  pB
31d60 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
31d70 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 6e 65 77 4d  >p1].pBt;.  newM
31d80 61 78 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f  ax = 0;.  if( pO
31d90 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 6e 65 77  p->p3 ){.    new
31da0 4d 61 78 20 3d 20 73 71 6c 69 74 65 33 42 74 72  Max = sqlite3Btr
31db0 65 65 4c 61 73 74 50 61 67 65 28 70 42 74 29 3b  eeLastPage(pBt);
31dc0 0a 20 20 20 20 69 66 28 20 6e 65 77 4d 61 78 20  .    if( newMax 
31dd0 3c 20 28 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d  < (unsigned)pOp-
31de0 3e 70 33 20 29 20 6e 65 77 4d 61 78 20 3d 20 28  >p3 ) newMax = (
31df0 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70 33  unsigned)pOp->p3
31e00 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e  ;.  }.  pOut->u.
31e10 69 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  i = sqlite3Btree
31e20 4d 61 78 50 61 67 65 43 6f 75 6e 74 28 70 42 74  MaxPageCount(pBt
31e30 2c 20 6e 65 77 4d 61 78 29 3b 0a 20 20 62 72 65  , newMax);.  bre
31e40 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f  ak;.}.#endif.../
31e50 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 69 74 20 2a  * Opcode: Init *
31e60 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
31e70 6e 6f 70 73 69 73 3a 20 20 53 74 61 72 74 20 61  nopsis:  Start a
31e80 74 20 50 32 0a 2a 2a 0a 2a 2a 20 50 72 6f 67 72  t P2.**.** Progr
31e90 61 6d 73 20 63 6f 6e 74 61 69 6e 20 61 20 73 69  ams contain a si
31ea0 6e 67 6c 65 20 69 6e 73 74 61 6e 63 65 20 6f 66  ngle instance of
31eb0 20 74 68 69 73 20 6f 70 63 6f 64 65 20 61 73 20   this opcode as 
31ec0 74 68 65 20 76 65 72 79 20 66 69 72 73 74 0a 2a  the very first.*
31ed0 2a 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  * opcode..**.** 
31ee0 49 66 20 74 72 61 63 69 6e 67 20 69 73 20 65 6e  If tracing is en
31ef0 61 62 6c 65 64 20 28 62 79 20 74 68 65 20 73 71  abled (by the sq
31f00 6c 69 74 65 33 5f 74 72 61 63 65 28 29 29 20 69  lite3_trace()) i
31f10 6e 74 65 72 66 61 63 65 2c 20 74 68 65 6e 0a 2a  nterface, then.*
31f20 2a 20 74 68 65 20 55 54 46 2d 38 20 73 74 72 69  * the UTF-8 stri
31f30 6e 67 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  ng contained in 
31f40 50 34 20 69 73 20 65 6d 69 74 74 65 64 20 6f 6e  P4 is emitted on
31f50 20 74 68 65 20 74 72 61 63 65 20 63 61 6c 6c 62   the trace callb
31f60 61 63 6b 2e 0a 2a 2a 20 4f 72 20 69 66 20 50 34  ack..** Or if P4
31f70 20 69 73 20 62 6c 61 6e 6b 2c 20 75 73 65 20 74   is blank, use t
31f80 68 65 20 73 74 72 69 6e 67 20 72 65 74 75 72 6e  he string return
31f90 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 73 71  ed by sqlite3_sq
31fa0 6c 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32  l()..**.** If P2
31fb0 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 6a 75   is not zero, ju
31fc0 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
31fd0 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
31fe0 5f 49 6e 69 74 3a 20 7b 20 20 20 20 20 20 20 20  _Init: {        
31ff0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 63    /* jump */.  c
32000 68 61 72 20 2a 7a 54 72 61 63 65 3b 0a 20 20 63  har *zTrace;.  c
32010 68 61 72 20 2a 7a 3b 0a 0a 20 20 69 66 28 20 70  har *z;..  if( p
32020 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20 20 70 63  Op->p2 ){.    pc
32030 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
32040 20 20 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49    }.#ifndef SQLI
32050 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 20 20  TE_OMIT_TRACE.  
32060 69 66 28 20 64 62 2d 3e 78 54 72 61 63 65 0a 20  if( db->xTrace. 
32070 20 20 26 26 20 21 70 2d 3e 64 6f 69 6e 67 52 65    && !p->doingRe
32080 72 75 6e 0a 20 20 20 26 26 20 28 7a 54 72 61 63  run.   && (zTrac
32090 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f  e = (pOp->p4.z ?
320a0 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e   pOp->p4.z : p->
320b0 7a 53 71 6c 29 29 21 3d 30 0a 20 20 29 7b 0a 20  zSql))!=0.  ){. 
320c0 20 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 56 64     z = sqlite3Vd
320d0 62 65 45 78 70 61 6e 64 53 71 6c 28 70 2c 20 7a  beExpandSql(p, z
320e0 54 72 61 63 65 29 3b 0a 20 20 20 20 64 62 2d 3e  Trace);.    db->
320f0 78 54 72 61 63 65 28 64 62 2d 3e 70 54 72 61 63  xTrace(db->pTrac
32100 65 41 72 67 2c 20 7a 29 3b 0a 20 20 20 20 73 71  eArg, z);.    sq
32110 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
32120 7a 29 3b 0a 20 20 7d 0a 23 69 66 64 65 66 20 53  z);.  }.#ifdef S
32130 51 4c 49 54 45 5f 55 53 45 5f 46 43 4e 54 4c 5f  QLITE_USE_FCNTL_
32140 54 52 41 43 45 0a 20 20 7a 54 72 61 63 65 20 3d  TRACE.  zTrace =
32150 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f   (pOp->p4.z ? pO
32160 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71  p->p4.z : p->zSq
32170 6c 29 3b 0a 20 20 69 66 28 20 7a 54 72 61 63 65  l);.  if( zTrace
32180 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   ){.    int i;. 
32190 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62     for(i=0; i<db
321a0 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20  ->nDb; i++){.   
321b0 20 20 20 69 66 28 20 4d 41 53 4b 42 49 54 28 69     if( MASKBIT(i
321c0 29 20 26 20 70 2d 3e 62 74 72 65 65 4d 61 73 6b  ) & p->btreeMask
321d0 29 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b  )==0 ) continue;
321e0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66  .      sqlite3_f
321f0 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20  ile_control(db, 
32200 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65  db->aDb[i].zName
32210 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 54  , SQLITE_FCNTL_T
32220 52 41 43 45 2c 20 7a 54 72 61 63 65 29 3b 0a 20  RACE, zTrace);. 
32230 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20     }.  }.#endif 
32240 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45 5f 46 43  /* SQLITE_USE_FC
32250 4e 54 4c 5f 54 52 41 43 45 20 2a 2f 0a 23 69 66  NTL_TRACE */.#if
32260 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
32270 0a 20 20 69 66 28 20 28 64 62 2d 3e 66 6c 61 67  .  if( (db->flag
32280 73 20 26 20 53 51 4c 49 54 45 5f 53 71 6c 54 72  s & SQLITE_SqlTr
32290 61 63 65 29 21 3d 30 0a 20 20 20 26 26 20 28 7a  ace)!=0.   && (z
322a0 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34  Trace = (pOp->p4
322b0 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a  .z ? pOp->p4.z :
322c0 20 70 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a 20 20   p->zSql))!=0.  
322d0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 65  ){.    sqlite3De
322e0 62 75 67 50 72 69 6e 74 66 28 22 53 51 4c 2d 74  bugPrintf("SQL-t
322f0 72 61 63 65 3a 20 25 73 5c 6e 22 2c 20 7a 54 72  race: %s\n", zTr
32300 61 63 65 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  ace);.  }.#endif
32310 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47   /* SQLITE_DEBUG
32320 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51   */.#endif /* SQ
32330 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20  LITE_OMIT_TRACE 
32340 2a 2f 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a  */.  break;.}...
32350 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70 20  /* Opcode: Noop 
32360 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  * * * * *.**.** 
32370 44 6f 20 6e 6f 74 68 69 6e 67 2e 20 20 54 68 69  Do nothing.  Thi
32380 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
32390 20 6f 66 74 65 6e 20 75 73 65 66 75 6c 20 61 73   often useful as
323a0 20 61 20 6a 75 6d 70 0a 2a 2a 20 64 65 73 74 69   a jump.** desti
323b0 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a  nation..*/./*.**
323c0 20 54 68 65 20 6d 61 67 69 63 20 45 78 70 6c 61   The magic Expla
323d0 69 6e 20 6f 70 63 6f 64 65 20 61 72 65 20 6f 6e  in opcode are on
323e0 6c 79 20 69 6e 73 65 72 74 65 64 20 77 68 65 6e  ly inserted when
323f0 20 65 78 70 6c 61 69 6e 3d 3d 32 20 28 77 68 69   explain==2 (whi
32400 63 68 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79 20  ch.** is to say 
32410 77 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e  when the EXPLAIN
32420 20 51 55 45 52 59 20 50 4c 41 4e 20 73 79 6e 74   QUERY PLAN synt
32430 61 78 20 69 73 20 75 73 65 64 2e 29 0a 2a 2a 20  ax is used.).** 
32440 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 63 6f  This opcode reco
32450 72 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  rds information 
32460 66 72 6f 6d 20 74 68 65 20 6f 70 74 69 6d 69 7a  from the optimiz
32470 65 72 2e 20 20 49 74 20 69 73 20 74 68 65 0a 2a  er.  It is the.*
32480 2a 20 74 68 65 20 73 61 6d 65 20 61 73 20 61 20  * the same as a 
32490 6e 6f 2d 6f 70 2e 20 20 54 68 69 73 20 6f 70 63  no-op.  This opc
324a0 6f 64 65 73 6e 65 76 65 72 20 61 70 70 65 61 72  odesnever appear
324b0 73 20 69 6e 20 61 20 72 65 61 6c 20 56 4d 20 70  s in a real VM p
324c0 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61 75  rogram..*/.defau
324d0 6c 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f  lt: {          /
324e0 2a 20 54 68 69 73 20 69 73 20 72 65 61 6c 6c 79  * This is really
324f0 20 4f 50 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50 5f   OP_Noop and OP_
32500 45 78 70 6c 61 69 6e 20 2a 2f 0a 20 20 61 73 73  Explain */.  ass
32510 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
32520 3d 3d 4f 50 5f 4e 6f 6f 70 20 7c 7c 20 70 4f 70  ==OP_Noop || pOp
32530 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70  ->opcode==OP_Exp
32540 6c 61 69 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b  lain );.  break;
32550 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .}../***********
32560 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32570 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32580 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32590 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
325a0 2a 2a 0a 2a 2a 20 54 68 65 20 63 61 73 65 73 20  **.** The cases 
325b0 6f 66 20 74 68 65 20 73 77 69 74 63 68 20 73 74  of the switch st
325c0 61 74 65 6d 65 6e 74 20 61 62 6f 76 65 20 74 68  atement above th
325d0 69 73 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 61  is line should a
325e0 6c 6c 20 62 65 20 69 6e 64 65 6e 74 65 64 0a 2a  ll be indented.*
325f0 2a 20 62 79 20 36 20 73 70 61 63 65 73 2e 20 20  * by 6 spaces.  
32600 42 75 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73  But the left-mos
32610 74 20 36 20 73 70 61 63 65 73 20 68 61 76 65 20  t 6 spaces have 
32620 62 65 65 6e 20 72 65 6d 6f 76 65 64 20 74 6f 20  been removed to 
32630 69 6d 70 72 6f 76 65 20 74 68 65 0a 2a 2a 20 72  improve the.** r
32640 65 61 64 61 62 69 6c 69 74 79 2e 20 20 46 72 6f  eadability.  Fro
32650 6d 20 74 68 69 73 20 70 6f 69 6e 74 20 6f 6e 20  m this point on 
32660 64 6f 77 6e 2c 20 74 68 65 20 6e 6f 72 6d 61 6c  down, the normal
32670 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 72 75 6c   indentation rul
32680 65 73 20 61 72 65 0a 2a 2a 20 72 65 73 74 6f 72  es are.** restor
32690 65 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ed..************
326a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
326b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
326c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
326d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
326e0 2a 2f 0a 20 20 20 20 7d 0a 0a 23 69 66 64 65 66  */.    }..#ifdef
326f0 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20   VDBE_PROFILE.  
32700 20 20 7b 0a 20 20 20 20 20 20 75 36 34 20 65 6e    {.      u64 en
32710 64 54 69 6d 65 20 3d 20 73 71 6c 69 74 65 33 48  dTime = sqlite3H
32720 77 74 69 6d 65 28 29 3b 0a 20 20 20 20 20 20 69  wtime();.      i
32730 66 28 20 65 6e 64 54 69 6d 65 3e 73 74 61 72 74  f( endTime>start
32740 20 29 20 70 4f 70 2d 3e 63 79 63 6c 65 73 20 2b   ) pOp->cycles +
32750 3d 20 65 6e 64 54 69 6d 65 20 2d 20 73 74 61 72  = endTime - star
32760 74 3b 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63 6e  t;.      pOp->cn
32770 74 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  t++;.    }.#endi
32780 66 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f  f..    /* The fo
32790 6c 6c 6f 77 69 6e 67 20 63 6f 64 65 20 61 64 64  llowing code add
327a0 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68 65  s nothing to the
327b0 20 61 63 74 75 61 6c 20 66 75 6e 63 74 69 6f 6e   actual function
327c0 61 6c 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20  ality.    ** of 
327d0 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 20 49 74  the program.  It
327e0 20 69 73 20 6f 6e 6c 79 20 68 65 72 65 20 66 6f   is only here fo
327f0 72 20 74 65 73 74 69 6e 67 20 61 6e 64 20 64 65  r testing and de
32800 62 75 67 67 69 6e 67 2e 0a 20 20 20 20 2a 2a 20  bugging..    ** 
32810 4f 6e 20 74 68 65 20 6f 74 68 65 72 20 68 61 6e  On the other han
32820 64 2c 20 69 74 20 64 6f 65 73 20 62 75 72 6e 20  d, it does burn 
32830 43 50 55 20 63 79 63 6c 65 73 20 65 76 65 72 79  CPU cycles every
32840 20 74 69 6d 65 20 74 68 72 6f 75 67 68 0a 20 20   time through.  
32850 20 20 2a 2a 20 74 68 65 20 65 76 61 6c 75 61 74    ** the evaluat
32860 6f 72 20 6c 6f 6f 70 2e 20 20 53 6f 20 77 65 20  or loop.  So we 
32870 63 61 6e 20 6c 65 61 76 65 20 69 74 20 6f 75 74  can leave it out
32880 20 77 68 65 6e 20 4e 44 45 42 55 47 20 69 73 20   when NDEBUG is 
32890 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a  defined..    */.
328a0 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20  #ifndef NDEBUG. 
328b0 20 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d 2d     assert( pc>=-
328c0 31 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29  1 && pc<p->nOp )
328d0 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
328e0 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 64  _DEBUG.    if( d
328f0 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
32900 45 5f 56 64 62 65 54 72 61 63 65 20 29 7b 0a 20  E_VdbeTrace ){. 
32910 20 20 20 20 20 69 66 28 20 72 63 21 3d 30 20 29       if( rc!=0 )
32920 20 70 72 69 6e 74 66 28 22 72 63 3d 25 64 5c 6e   printf("rc=%d\n
32930 22 2c 72 63 29 3b 0a 20 20 20 20 20 20 69 66 28  ",rc);.      if(
32940 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20   pOp->opflags & 
32950 28 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52  (OPFLG_OUT2_PRER
32960 45 4c 45 41 53 45 7c 4f 50 46 4c 47 5f 4f 55 54  ELEASE|OPFLG_OUT
32970 32 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65  2) ){.        re
32980 67 69 73 74 65 72 54 72 61 63 65 28 70 4f 70 2d  gisterTrace(pOp-
32990 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  >p2, &aMem[pOp->
329a0 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  p2]);.      }.  
329b0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66      if( pOp->opf
329c0 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54  lags & OPFLG_OUT
329d0 33 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67  3 ){.        reg
329e0 69 73 74 65 72 54 72 61 63 65 28 70 4f 70 2d 3e  isterTrace(pOp->
329f0 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  p3, &aMem[pOp->p
32a00 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  3]);.      }.   
32a10 20 7d 0a 23 65 6e 64 69 66 20 20 2f 2a 20 53 51   }.#endif  /* SQ
32a20 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23 65  LITE_DEBUG */.#e
32a30 6e 64 69 66 20 20 2f 2a 20 4e 44 45 42 55 47 20  ndif  /* NDEBUG 
32a40 2a 2f 0a 20 20 7d 20 20 2f 2a 20 54 68 65 20 65  */.  }  /* The e
32a50 6e 64 20 6f 66 20 74 68 65 20 66 6f 72 28 3b 3b  nd of the for(;;
32a60 29 20 6c 6f 6f 70 20 74 68 65 20 6c 6f 6f 70 73  ) loop the loops
32a70 20 74 68 72 6f 75 67 68 20 6f 70 63 6f 64 65 73   through opcodes
32a80 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20   */..  /* If we 
32a90 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74  reach this point
32aa0 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20  , it means that 
32ab0 65 78 65 63 75 74 69 6f 6e 20 69 73 20 66 69 6e  execution is fin
32ac0 69 73 68 65 64 20 77 69 74 68 0a 20 20 2a 2a 20  ished with.  ** 
32ad0 61 6e 20 65 72 72 6f 72 20 6f 66 20 73 6f 6d 65  an error of some
32ae0 20 6b 69 6e 64 2e 0a 20 20 2a 2f 0a 76 64 62 65   kind..  */.vdbe
32af0 5f 65 72 72 6f 72 5f 68 61 6c 74 3a 0a 20 20 61  _error_halt:.  a
32b00 73 73 65 72 74 28 20 72 63 20 29 3b 0a 20 20 70  ssert( rc );.  p
32b10 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 74 65 73  ->rc = rc;.  tes
32b20 74 63 61 73 65 28 20 73 71 6c 69 74 65 33 47 6c  tcase( sqlite3Gl
32b30 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 21  obalConfig.xLog!
32b40 3d 30 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  =0 );.  sqlite3_
32b50 6c 6f 67 28 72 63 2c 20 22 73 74 61 74 65 6d 65  log(rc, "stateme
32b60 6e 74 20 61 62 6f 72 74 73 20 61 74 20 25 64 3a  nt aborts at %d:
32b70 20 5b 25 73 5d 20 25 73 22 2c 20 0a 20 20 20 20   [%s] %s", .    
32b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
32b90 63 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a  c, p->zSql, p->z
32ba0 45 72 72 4d 73 67 29 3b 0a 20 20 73 71 6c 69 74  ErrMsg);.  sqlit
32bb0 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20  e3VdbeHalt(p);. 
32bc0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
32bd0 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 20 64 62  IOERR_NOMEM ) db
32be0 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d  ->mallocFailed =
32bf0 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54   1;.  rc = SQLIT
32c00 45 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72  E_ERROR;.  if( r
32c10 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
32c20 74 3e 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  t>0 ){.    sqlit
32c30 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61  e3ResetOneSchema
32c40 28 64 62 2c 20 72 65 73 65 74 53 63 68 65 6d 61  (db, resetSchema
32c50 4f 6e 46 61 75 6c 74 2d 31 29 3b 0a 20 20 7d 0a  OnFault-1);.  }.
32c60 0a 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68  .  /* This is th
32c70 65 20 6f 6e 6c 79 20 77 61 79 20 6f 75 74 20 6f  e only way out o
32c80 66 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65  f this procedure
32c90 2e 20 20 57 65 20 68 61 76 65 20 74 6f 0a 20 20  .  We have to.  
32ca0 2a 2a 20 72 65 6c 65 61 73 65 20 74 68 65 20 6d  ** release the m
32cb0 75 74 65 78 65 73 20 6f 6e 20 62 74 72 65 65 73  utexes on btrees
32cc0 20 74 68 61 74 20 77 65 72 65 20 61 63 71 75 69   that were acqui
32cd0 72 65 64 20 61 74 20 74 68 65 0a 20 20 2a 2a 20  red at the.  ** 
32ce0 74 6f 70 2e 20 2a 2f 0a 76 64 62 65 5f 72 65 74  top. */.vdbe_ret
32cf0 75 72 6e 3a 0a 20 20 64 62 2d 3e 6c 61 73 74 52  urn:.  db->lastR
32d00 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64  owid = lastRowid
32d10 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 56  ;.  testcase( nV
32d20 6d 53 74 65 70 3e 30 20 29 3b 0a 20 20 70 2d 3e  mStep>0 );.  p->
32d30 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f  aCounter[SQLITE_
32d40 53 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f 53 54  STMTSTATUS_VM_ST
32d50 45 50 5d 20 2b 3d 20 28 69 6e 74 29 6e 56 6d 53  EP] += (int)nVmS
32d60 74 65 70 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  tep;.  sqlite3Vd
32d70 62 65 4c 65 61 76 65 28 70 29 3b 0a 20 20 72 65  beLeave(p);.  re
32d80 74 75 72 6e 20 72 63 3b 0a 0a 20 20 2f 2a 20 4a  turn rc;..  /* J
32d90 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 61  ump to here if a
32da0 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20   string or blob 
32db0 6c 61 72 67 65 72 20 74 68 61 6e 20 53 51 4c 49  larger than SQLI
32dc0 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 0a 20 20  TE_MAX_LENGTH.  
32dd0 2a 2a 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65  ** is encountere
32de0 64 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f 62 69 67 3a  d..  */.too_big:
32df0 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72  .  sqlite3SetStr
32e00 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
32e10 20 64 62 2c 20 22 73 74 72 69 6e 67 20 6f 72 20   db, "string or 
32e20 62 6c 6f 62 20 74 6f 6f 20 62 69 67 22 29 3b 0a  blob too big");.
32e30 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 54 4f    rc = SQLITE_TO
32e40 4f 42 49 47 3b 0a 20 20 67 6f 74 6f 20 76 64 62  OBIG;.  goto vdb
32e50 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20  e_error_halt;.. 
32e60 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
32e70 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   if a malloc() f
32e80 61 69 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65  ails..  */.no_me
32e90 6d 3a 0a 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46  m:.  db->mallocF
32ea0 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 73 71 6c  ailed = 1;.  sql
32eb0 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
32ec0 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
32ed0 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 29 3b  out of memory");
32ee0 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e  .  rc = SQLITE_N
32ef0 4f 4d 45 4d 3b 0a 20 20 67 6f 74 6f 20 76 64 62  OMEM;.  goto vdb
32f00 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20  e_error_halt;.. 
32f10 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
32f20 20 66 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 6b   for any other k
32f30 69 6e 64 20 6f 66 20 66 61 74 61 6c 20 65 72 72  ind of fatal err
32f40 6f 72 2e 20 20 54 68 65 20 22 72 63 22 20 76 61  or.  The "rc" va
32f50 72 69 61 62 6c 65 0a 20 20 2a 2a 20 73 68 6f 75  riable.  ** shou
32f60 6c 64 20 68 6f 6c 64 20 74 68 65 20 65 72 72 6f  ld hold the erro
32f70 72 20 6e 75 6d 62 65 72 2e 0a 20 20 2a 2f 0a 61  r number..  */.a
32f80 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
32f90 72 3a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  r:.  assert( p->
32fa0 7a 45 72 72 4d 73 67 3d 3d 30 20 29 3b 0a 20 20  zErrMsg==0 );.  
32fb0 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  if( db->mallocFa
32fc0 69 6c 65 64 20 29 20 72 63 20 3d 20 53 51 4c 49  iled ) rc = SQLI
32fd0 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 69 66 28 20  TE_NOMEM;.  if( 
32fe0 72 63 21 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52  rc!=SQLITE_IOERR
32ff0 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 73 71  _NOMEM ){.    sq
33000 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
33010 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
33020 22 25 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72  "%s", sqlite3Err
33030 53 74 72 28 72 63 29 29 3b 0a 20 20 7d 0a 20 20  Str(rc));.  }.  
33040 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
33050 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70  halt;..  /* Jump
33060 20 74 6f 20 68 65 72 65 20 69 66 20 74 68 65 20   to here if the 
33070 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
33080 74 28 29 20 41 50 49 20 73 65 74 73 20 74 68 65  t() API sets the
33090 20 69 6e 74 65 72 72 75 70 74 0a 20 20 2a 2a 20   interrupt.  ** 
330a0 66 6c 61 67 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74  flag..  */.abort
330b0 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70  _due_to_interrup
330c0 74 3a 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  t:.  assert( db-
330d0 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65  >u1.isInterrupte
330e0 64 20 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  d );.  rc = SQLI
330f0 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  TE_INTERRUPT;.  
33100 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 73 71  p->rc = rc;.  sq
33110 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
33120 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
33130 22 25 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72  "%s", sqlite3Err
33140 53 74 72 28 72 63 29 29 3b 0a 20 20 67 6f 74 6f  Str(rc));.  goto
33150 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74   vdbe_error_halt
33160 3b 0a 7d 0a                                      ;.}.