/ Hex Artifact Content
Login

Artifact d631e04a53401ab4ceeac38dd95f57cc96f654ec:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
05c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
05d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
05e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
05f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0600: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53  ther by the OP_S
0610: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, OP_Next, 
0620: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0630: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0640: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0650: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0660: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0670: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0680: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0690: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
06a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
06b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
06c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
06d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
06e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
06f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0700: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0710: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0720: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0730: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0740: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0750: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0760: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0770: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0780: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0790: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
07a0: 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65    When it reache
07b0: 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69  s zero, the u1.i
07c0: 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20  sInterrupted.** 
07d0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
07e0: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69  ite3 structure i
07f0: 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74  s set in order t
0800: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
0810: 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54  terrupt..**.** T
0820: 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20  his facility is 
0830: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
0840: 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20   purposes only. 
0850: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e   It does not fun
0860: 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f  ction.** in an o
0870: 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a  rdinary build..*
0880: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0890: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
08a0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
08b0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
08c0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f  .** The next glo
08d0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20  bal variable is 
08e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68  incremented each
08f0: 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72   type the OP_Sor
0900: 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  t opcode.** is e
0910: 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65  xecuted.  The te
0920: 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  st procedures us
0930: 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
0940: 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  on to make sure 
0950: 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20  that.** sorting 
0960: 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20  is occurring or 
0970: 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74  not occurring at
0980: 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d   appropriate tim
0990: 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  es.   This varia
09a0: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
09b0: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
09c0: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
09f0: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
0a00: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  int sqlite3_sort
0a20: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0a40: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0a50: 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73  le records the s
0a60: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
0a70: 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f  st MEM_Blob.** o
0a80: 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68  r MEM_Str that h
0a90: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
0aa0: 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20  a VDBE opcode.  
0ab0: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0ac0: 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20  res.** use this 
0ad0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0ae0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
0af0: 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63  e zero-blob func
0b00: 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20  tionality.** is 
0b10: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
0b20: 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  y.   This variab
0b30: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0b40: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0b50: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0b60: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0b80: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0b90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ba0: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0bb0: 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63  size = 0;.static
0bc0: 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42   void updateMaxB
0bd0: 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b  lobsize(Mem *p){
0be0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0bf0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c00: 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e  Blob))!=0 && p->
0c10: 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  n>sqlite3_max_bl
0c20: 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71  obsize ){.    sq
0c30: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0c40: 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d  ze = p->n;.  }.}
0c50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0c60: 68 69 73 20 6d 61 63 72 6f 20 65 76 61 6c 75 61  his macro evalua
0c70: 74 65 73 20 74 6f 20 74 72 75 65 20 69 66 20 65  tes to true if e
0c80: 69 74 68 65 72 20 74 68 65 20 75 70 64 61 74 65  ither the update
0c90: 20 68 6f 6f 6b 20 6f 72 20 74 68 65 20 70 72 65   hook or the pre
0ca0: 75 70 64 61 74 65 0a 2a 2a 20 68 6f 6f 6b 20 61  update.** hook a
0cb0: 72 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 64  re enabled for d
0cc0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 20  atabase connect 
0cd0: 44 42 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  DB..*/.#ifdef SQ
0ce0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
0cf0: 50 44 41 54 45 5f 48 4f 4f 4b 0a 23 20 64 65 66  PDATE_HOOK.# def
0d00: 69 6e 65 20 48 41 53 5f 55 50 44 41 54 45 5f 48  ine HAS_UPDATE_H
0d10: 4f 4f 4b 28 44 42 29 20 28 28 44 42 29 2d 3e 78  OOK(DB) ((DB)->x
0d20: 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
0d30: 6b 7c 7c 28 44 42 29 2d 3e 78 55 70 64 61 74 65  k||(DB)->xUpdate
0d40: 43 61 6c 6c 62 61 63 6b 29 0a 23 65 6c 73 65 0a  Callback).#else.
0d50: 23 20 64 65 66 69 6e 65 20 48 41 53 5f 55 50 44  # define HAS_UPD
0d60: 41 54 45 5f 48 4f 4f 4b 28 44 42 29 20 28 28 44  ATE_HOOK(DB) ((D
0d70: 42 29 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  B)->xUpdateCallb
0d80: 61 63 6b 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ack).#endif../*.
0d90: 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62  ** The next glob
0da0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
0db0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20  ncremented each 
0dc0: 74 69 6d 65 20 74 68 65 20 4f 50 5f 46 6f 75 6e  time the OP_Foun
0dd0: 64 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  d opcode.** is e
0de0: 78 65 63 75 74 65 64 2e 20 54 68 69 73 20 69 73  xecuted. This is
0df0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 77 68   used to test wh
0e00: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
0e10: 20 66 6f 72 65 69 67 6e 20 6b 65 79 0a 2a 2a 20   foreign key.** 
0e20: 6f 70 65 72 61 74 69 6f 6e 20 69 6d 70 6c 65 6d  operation implem
0e30: 65 6e 74 65 64 20 75 73 69 6e 67 20 4f 50 5f 46  ented using OP_F
0e40: 6b 49 73 5a 65 72 6f 20 69 73 20 77 6f 72 6b 69  kIsZero is worki
0e50: 6e 67 2e 20 54 68 69 73 20 76 61 72 69 61 62 6c  ng. This variabl
0e60: 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63  e.** has no func
0e70: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
0e80: 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  to help verify t
0e90: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0ea0: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c  tion of the.** l
0eb0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0ec0: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0ed0: 74 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f  t sqlite3_found_
0ee0: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0ef0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 61 20  f../*.** Test a 
0f00: 72 65 67 69 73 74 65 72 20 74 6f 20 73 65 65 20  register to see 
0f10: 69 66 20 69 74 20 65 78 63 65 65 64 73 20 74 68  if it exceeds th
0f20: 65 20 63 75 72 72 65 6e 74 20 6d 61 78 69 6d 75  e current maximu
0f30: 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20  m blob size..** 
0f40: 49 66 20 69 74 20 64 6f 65 73 2c 20 72 65 63 6f  If it does, reco
0f50: 72 64 20 74 68 65 20 6e 65 77 20 6d 61 78 69 6d  rd the new maxim
0f60: 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f  um blob size..*/
0f70: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
0f80: 49 54 45 5f 54 45 53 54 29 20 26 26 20 21 64 65  ITE_TEST) && !de
0f90: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 55 4e 54  fined(SQLITE_UNT
0fa0: 45 53 54 41 42 4c 45 29 0a 23 20 64 65 66 69 6e  ESTABLE).# defin
0fb0: 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f  e UPDATE_MAX_BLO
0fc0: 42 53 49 5a 45 28 50 29 20 20 75 70 64 61 74 65  BSIZE(P)  update
0fd0: 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29 0a 23  MaxBlobsize(P).#
0fe0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 55 50  else.# define UP
0ff0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
1000: 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E(P).#endif../*.
1010: 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 56 44  ** Invoke the VD
1020: 42 45 20 63 6f 76 65 72 61 67 65 20 63 61 6c 6c  BE coverage call
1030: 62 61 63 6b 2c 20 69 66 20 74 68 61 74 20 63 61  back, if that ca
1040: 6c 6c 62 61 63 6b 20 69 73 20 64 65 66 69 6e 65  llback is define
1050: 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66 65 61 74  d.  This.** feat
1060: 75 72 65 20 69 73 20 75 73 65 64 20 66 6f 72 20  ure is used for 
1070: 74 65 73 74 20 73 75 69 74 65 20 76 61 6c 69 64  test suite valid
1080: 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e 64 20 64  ation only and d
1090: 6f 65 73 20 6e 6f 74 20 61 70 70 65 61 72 20 61  oes not appear a
10a0: 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69 6f 6e 20  n.** production 
10b0: 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 4d 20  builds..**.** M 
10c0: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 32  is an integer, 2
10d0: 20 6f 72 20 33 2c 20 74 68 61 74 20 69 6e 64 69   or 3, that indi
10e0: 63 65 73 20 68 6f 77 20 6d 61 6e 79 20 64 69 66  ces how many dif
10f0: 66 65 72 65 6e 74 20 77 61 79 73 20 74 68 65 0a  ferent ways the.
1100: 2a 2a 20 62 72 61 6e 63 68 20 63 61 6e 20 67 6f  ** branch can go
1110: 2e 20 20 49 74 20 69 73 20 75 73 75 61 6c 6c 79  .  It is usually
1120: 20 32 2e 20 20 22 49 22 20 69 73 20 74 68 65 20   2.  "I" is the 
1130: 64 69 72 65 63 74 69 6f 6e 20 74 68 65 20 62 72  direction the br
1140: 61 6e 63 68 0a 2a 2a 20 67 6f 65 73 2e 20 20 30  anch.** goes.  0
1150: 20 6d 65 61 6e 73 20 66 61 6c 6c 73 20 74 68 72   means falls thr
1160: 6f 75 67 68 2e 20 20 31 20 6d 65 61 6e 73 20 62  ough.  1 means b
1170: 72 61 6e 63 68 20 69 73 20 74 61 6b 65 6e 2e 20  ranch is taken. 
1180: 20 32 20 6d 65 61 6e 73 20 74 68 65 0a 2a 2a 20   2 means the.** 
1190: 73 65 63 6f 6e 64 20 61 6c 74 65 72 6e 61 74 69  second alternati
11a0: 76 65 20 62 72 61 6e 63 68 20 69 73 20 74 61 6b  ve branch is tak
11b0: 65 6e 2e 0a 2a 2a 0a 2a 2a 20 69 53 72 63 4c 69  en..**.** iSrcLi
11c0: 6e 65 20 69 73 20 74 68 65 20 73 6f 75 72 63 65  ne is the source
11d0: 20 63 6f 64 65 20 6c 69 6e 65 20 28 66 72 6f 6d   code line (from
11e0: 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f 20 6d 61   the __LINE__ ma
11f0: 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20 67 65 6e  cro) that.** gen
1200: 65 72 61 74 65 64 20 74 68 65 20 56 44 42 45 20  erated the VDBE 
1210: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 54 68  instruction.  Th
1220: 69 73 20 69 6e 73 74 72 75 6d 65 6e 74 61 74 69  is instrumentati
1230: 6f 6e 20 61 73 73 75 6d 65 73 20 74 68 61 74 20  on assumes that 
1240: 61 6c 6c 0a 2a 2a 20 73 6f 75 72 63 65 20 63 6f  all.** source co
1250: 64 65 20 69 73 20 69 6e 20 61 20 73 69 6e 67 6c  de is in a singl
1260: 65 20 66 69 6c 65 20 28 74 68 65 20 61 6d 61 6c  e file (the amal
1270: 67 61 6d 61 74 69 6f 6e 29 2e 20 20 53 70 65 63  gamation).  Spec
1280: 69 61 6c 20 76 61 6c 75 65 73 20 31 0a 2a 2a 20  ial values 1.** 
1290: 61 6e 64 20 32 20 66 6f 72 20 74 68 65 20 69 53  and 2 for the iS
12a0: 72 63 4c 69 6e 65 20 70 61 72 61 6d 65 74 65 72  rcLine parameter
12b0: 20 6d 65 61 6e 20 74 68 61 74 20 74 68 69 73 20   mean that this 
12c0: 70 61 72 74 69 63 75 6c 61 72 20 62 72 61 6e 63  particular branc
12d0: 68 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 74  h is.** always t
12e0: 61 6b 65 6e 20 6f 72 20 6e 65 76 65 72 20 74 61  aken or never ta
12f0: 6b 65 6e 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ken, respectivel
1300: 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  y..*/.#if !defin
1310: 65 64 28 53 51 4c 49 54 45 5f 56 44 42 45 5f 43  ed(SQLITE_VDBE_C
1320: 4f 56 45 52 41 47 45 29 0a 23 20 64 65 66 69 6e  OVERAGE).# defin
1330: 65 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65  e VdbeBranchTake
1340: 6e 28 49 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 64  n(I,M).#else.# d
1350: 65 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68  efine VdbeBranch
1360: 54 61 6b 65 6e 28 49 2c 4d 29 20 76 64 62 65 54  Taken(I,M) vdbeT
1370: 61 6b 65 42 72 61 6e 63 68 28 70 4f 70 2d 3e 69  akeBranch(pOp->i
1380: 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 0a 20 20 73  SrcLine,I,M).  s
1390: 74 61 74 69 63 20 76 6f 69 64 20 76 64 62 65 54  tatic void vdbeT
13a0: 61 6b 65 42 72 61 6e 63 68 28 69 6e 74 20 69 53  akeBranch(int iS
13b0: 72 63 4c 69 6e 65 2c 20 75 38 20 49 2c 20 75 38  rcLine, u8 I, u8
13c0: 20 4d 29 7b 0a 20 20 20 20 69 66 28 20 69 53 72   M){.    if( iSr
13d0: 63 4c 69 6e 65 3c 3d 32 20 26 26 20 41 4c 57 41  cLine<=2 && ALWA
13e0: 59 53 28 69 53 72 63 4c 69 6e 65 3e 30 29 20 29  YS(iSrcLine>0) )
13f0: 7b 0a 20 20 20 20 20 20 4d 20 3d 20 69 53 72 63  {.      M = iSrc
1400: 4c 69 6e 65 3b 0a 20 20 20 20 20 20 2f 2a 20 41  Line;.      /* A
1410: 73 73 65 72 74 20 74 68 65 20 74 72 75 74 68 20  ssert the truth 
1420: 6f 66 20 56 64 62 65 43 6f 76 65 72 61 67 65 41  of VdbeCoverageA
1430: 6c 77 61 79 73 54 61 6b 65 6e 28 29 20 61 6e 64  lwaysTaken() and
1440: 20 0a 20 20 20 20 20 20 2a 2a 20 56 64 62 65 43   .      ** VdbeC
1450: 6f 76 65 72 61 67 65 4e 65 76 65 72 54 61 6b 65  overageNeverTake
1460: 6e 28 29 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  n() */.      ass
1470: 65 72 74 28 20 28 4d 20 26 20 49 29 3d 3d 49 20  ert( (M & I)==I 
1480: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
1490: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47      if( sqlite3G
14a0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62  lobalConfig.xVdb
14b0: 65 42 72 61 6e 63 68 3d 3d 30 20 29 20 72 65 74  eBranch==0 ) ret
14c0: 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54 45 53 54 2a  urn;  /*NO_TEST*
14d0: 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 47  /.      sqlite3G
14e0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62  lobalConfig.xVdb
14f0: 65 42 72 61 6e 63 68 28 73 71 6c 69 74 65 33 47  eBranch(sqlite3G
1500: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70 56 64 62  lobalConfig.pVdb
1510: 65 42 72 61 6e 63 68 41 72 67 2c 0a 20 20 20 20  eBranchArg,.    
1520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1540: 20 20 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 3b    iSrcLine,I,M);
1550: 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69  .    }.  }.#endi
1560: 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74  f../*.** Convert
1570: 20 74 68 65 20 67 69 76 65 6e 20 72 65 67 69 73   the given regis
1580: 74 65 72 20 69 6e 74 6f 20 61 20 73 74 72 69 6e  ter into a strin
1590: 67 20 69 66 20 69 74 20 69 73 6e 27 74 20 6f 6e  g if it isn't on
15a0: 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e 20 52 65  e.** already. Re
15b0: 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  turn non-zero if
15c0: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c   a malloc() fail
15d0: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 74  s..*/.#define St
15e0: 72 69 6e 67 69 66 79 28 50 2c 20 65 6e 63 29 20  ringify(P, enc) 
15f0: 5c 0a 20 20 20 69 66 28 28 28 50 29 2d 3e 66 6c  \.   if(((P)->fl
1600: 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  ags&(MEM_Str|MEM
1610: 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26 20 73 71  _Blob))==0 && sq
1620: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
1630: 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30 29 29 20  ngify(P,enc,0)) 
1640: 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f 20 6e 6f  \.     { goto no
1650: 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 41  _mem; }../*.** A
1660: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
1670: 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e 69 66  ng value (signif
1680: 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d 5f 45  ied by the MEM_E
1690: 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74 61  phem flag) conta
16a0: 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72  ins.** a pointer
16b0: 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c   to a dynamicall
16c0: 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74 72 69  y allocated stri
16d0: 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20 6f 74  ng where some ot
16e0: 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69 73  her entity.** is
16f0: 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72   responsible for
1700: 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68   deallocating th
1710: 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65 63 61  at string.  Beca
1720: 75 73 65 20 74 68 65 20 72 65 67 69 73 74 65 72  use the register
1730: 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e  .** does not con
1740: 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e 67 2c  trol the string,
1750: 20 69 74 20 6d 69 67 68 74 20 62 65 20 64 65 6c   it might be del
1760: 65 74 65 64 20 77 69 74 68 6f 75 74 20 74 68 65  eted without the
1770: 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e 6f   register.** kno
1780: 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54  wing it..**.** T
1790: 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e 76  his routine conv
17a0: 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65 72 61  erts an ephemera
17b0: 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20  l string into a 
17c0: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
17d0: 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67 20  cated.** string 
17e0: 74 68 61 74 20 74 68 65 20 72 65 67 69 73 74 65  that the registe
17f0: 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f 6c  r itself control
1800: 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  s.  In other wor
1810: 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65 72  ds, it.** conver
1820: 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d 20  ts an MEM_Ephem 
1830: 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 73 74  string into a st
1840: 72 69 6e 67 20 77 69 74 68 20 50 2e 7a 3d 3d 50  ring with P.z==P
1850: 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a 23 64 65  .zMalloc..*/.#de
1860: 66 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61 6c  fine Deephemeral
1870: 69 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28 20  ize(P) \.   if( 
1880: 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  ((P)->flags&MEM_
1890: 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20  Ephem)!=0 \.    
18a0: 20 20 20 26 26 20 73 71 6c 69 74 65 33 56 64 62     && sqlite3Vdb
18b0: 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c  eMemMakeWriteabl
18c0: 65 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f  e(P) ){ goto no_
18d0: 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e  mem;}../* Return
18e0: 20 74 72 75 65 20 69 66 20 74 68 65 20 63 75 72   true if the cur
18f0: 73 6f 72 20 77 61 73 20 6f 70 65 6e 65 64 20 75  sor was opened u
1900: 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70 65 6e  sing the OP_Open
1910: 53 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e 20 2a  Sorter opcode. *
1920: 2f 0a 23 64 65 66 69 6e 65 20 69 73 53 6f 72 74  /.#define isSort
1930: 65 72 28 78 29 20 28 28 78 29 2d 3e 65 43 75 72  er(x) ((x)->eCur
1940: 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 53 4f  Type==CURTYPE_SO
1950: 52 54 45 52 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  RTER)../*.** All
1960: 6f 63 61 74 65 20 56 64 62 65 43 75 72 73 6f 72  ocate VdbeCursor
1970: 20 6e 75 6d 62 65 72 20 69 43 75 72 2e 20 20 52   number iCur.  R
1980: 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72 20  eturn a pointer 
1990: 74 6f 20 69 74 2e 20 20 52 65 74 75 72 6e 20 4e  to it.  Return N
19a0: 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20 72 75 6e  ULL.** if we run
19b0: 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a   out of memory..
19c0: 2a 2f 0a 73 74 61 74 69 63 20 56 64 62 65 43 75  */.static VdbeCu
19d0: 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43 75  rsor *allocateCu
19e0: 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70 2c  rsor(.  Vdbe *p,
19f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a00: 20 54 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   The virtual mac
1a10: 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 69 43  hine */.  int iC
1a20: 75 72 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ur,             
1a30: 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65 20  /* Index of the 
1a40: 6e 65 77 20 56 64 62 65 43 75 72 73 6f 72 20 2a  new VdbeCursor *
1a50: 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 2c 20  /.  int nField, 
1a60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1a70: 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e  ber of fields in
1a80: 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
1a90: 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62  dex */.  int iDb
1aa0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
1ab0: 2a 20 44 61 74 61 62 61 73 65 20 74 68 65 20 63  * Database the c
1ac0: 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73 20 74 6f  ursor belongs to
1ad0: 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20 75 38 20  , or -1 */.  u8 
1ae0: 65 43 75 72 54 79 70 65 20 20 20 20 20 20 20 20  eCurType        
1af0: 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68     /* Type of th
1b00: 65 20 6e 65 77 20 63 75 72 73 6f 72 20 2a 2f 0a  e new cursor */.
1b10: 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65  ){.  /* Find the
1b20: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
1b30: 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74  t will be used t
1b40: 6f 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62  o store the blob
1b50: 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20   of memory.  ** 
1b60: 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69  required for thi
1b70: 73 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72  s VdbeCursor str
1b80: 75 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f  ucture. It is co
1b90: 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20  nvenient to use 
1ba0: 61 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d  a .  ** vdbe mem
1bb0: 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61  ory cell to mana
1bc0: 67 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c  ge the memory al
1bd0: 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65  location require
1be0: 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62  d for a.  ** Vdb
1bf0: 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72  eCursor structur
1c00: 65 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77  e for the follow
1c10: 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a  ing reasons:.  *
1c20: 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74  *.  **   * Somet
1c30: 69 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62  imes cursor numb
1c40: 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72  ers are used for
1c50: 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66   a couple of dif
1c60: 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20  ferent.  **     
1c70: 70 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64  purposes in a vd
1c80: 62 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20  be program. The 
1c90: 64 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d  different uses m
1ca0: 69 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a  ight require.  *
1cb0: 2a 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20  *     different 
1cc0: 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e  sized allocation
1cd0: 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  s. Memory cells 
1ce0: 70 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65  provide growable
1cf0: 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61  .  **     alloca
1d00: 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tions..  **.  **
1d10: 20 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20     * When using 
1d20: 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41  ENABLE_MEMORY_MA
1d30: 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79  NAGEMENT, memory
1d40: 20 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61   cell buffers ca
1d50: 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72  n.  **     be fr
1d60: 65 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74  eed lazily via t
1d70: 68 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61  he sqlite3_relea
1d80: 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e  se_memory() API.
1d90: 20 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d   This.  **     m
1da0: 69 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d  inimizes the num
1db0: 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61  ber of malloc ca
1dc0: 6c 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20  lls made by the 
1dd0: 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a  system..  **.  *
1de0: 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  * The memory cel
1df0: 6c 20 66 6f 72 20 63 75 72 73 6f 72 20 30 20 69  l for cursor 0 i
1e00: 73 20 61 4d 65 6d 5b 30 5d 2e 20 54 68 65 20 72  s aMem[0]. The r
1e10: 65 73 74 20 61 72 65 20 61 6c 6c 6f 63 61 74 65  est are allocate
1e20: 64 20 66 72 6f 6d 0a 20 20 2a 2a 20 74 68 65 20  d from.  ** the 
1e30: 74 6f 70 20 6f 66 20 74 68 65 20 72 65 67 69 73  top of the regis
1e40: 74 65 72 20 73 70 61 63 65 2e 20 20 43 75 72 73  ter space.  Curs
1e50: 6f 72 20 31 20 69 73 20 61 74 20 4d 65 6d 5b 70  or 1 is at Mem[p
1e60: 2d 3e 6e 4d 65 6d 2d 31 5d 2e 0a 20 20 2a 2a 20  ->nMem-1]..  ** 
1e70: 43 75 72 73 6f 72 20 32 20 69 73 20 61 74 20 4d  Cursor 2 is at M
1e80: 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 32 5d 2e 20 41  em[p->nMem-2]. A
1e90: 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a  nd so forth..  *
1ea0: 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20  /.  Mem *pMem = 
1eb0: 69 43 75 72 3e 30 20 3f 20 26 70 2d 3e 61 4d 65  iCur>0 ? &p->aMe
1ec0: 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 20  m[p->nMem-iCur] 
1ed0: 3a 20 70 2d 3e 61 4d 65 6d 3b 0a 0a 20 20 69 6e  : p->aMem;..  in
1ee0: 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65 43  t nByte;.  VdbeC
1ef0: 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b 0a  ursor *pCx = 0;.
1f00: 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20 20    nByte = .     
1f10: 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56   ROUND8(sizeof(V
1f20: 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32 2a  dbeCursor)) + 2*
1f30: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
1f40: 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 65 43 75  ld + .      (eCu
1f50: 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
1f60: 54 52 45 45 3f 73 71 6c 69 74 65 33 42 74 72 65  TREE?sqlite3Btre
1f70: 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a 30 29  eCursorSize():0)
1f80: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43 75  ;..  assert( iCu
1f90: 72 3e 3d 30 20 26 26 20 69 43 75 72 3c 70 2d 3e  r>=0 && iCur<p->
1fa0: 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28  nCursor );.  if(
1fb0: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20   p->apCsr[iCur] 
1fc0: 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f  ){ /*OPTIMIZATIO
1fd0: 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20  N-IF-FALSE*/.   
1fe0: 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65   sqlite3VdbeFree
1ff0: 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43  Cursor(p, p->apC
2000: 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20 70  sr[iCur]);.    p
2010: 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20  ->apCsr[iCur] = 
2020: 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51 4c  0;.  }.  if( SQL
2030: 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56  ITE_OK==sqlite3V
2040: 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65  dbeMemClearAndRe
2050: 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79 74 65  size(pMem, nByte
2060: 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70 43 73  ) ){.    p->apCs
2070: 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20 3d 20  r[iCur] = pCx = 
2080: 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70 4d 65  (VdbeCursor*)pMe
2090: 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73 65 74  m->z;.    memset
20a0: 28 70 43 78 2c 20 30 2c 20 6f 66 66 73 65 74 6f  (pCx, 0, offseto
20b0: 66 28 56 64 62 65 43 75 72 73 6f 72 2c 70 41 6c  f(VdbeCursor,pAl
20c0: 74 43 75 72 73 6f 72 29 29 3b 0a 20 20 20 20 70  tCursor));.    p
20d0: 43 78 2d 3e 65 43 75 72 54 79 70 65 20 3d 20 65  Cx->eCurType = e
20e0: 43 75 72 54 79 70 65 3b 0a 20 20 20 20 70 43 78  CurType;.    pCx
20f0: 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20  ->iDb = iDb;.   
2100: 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e   pCx->nField = n
2110: 46 69 65 6c 64 3b 0a 20 20 20 20 70 43 78 2d 3e  Field;.    pCx->
2120: 61 4f 66 66 73 65 74 20 3d 20 26 70 43 78 2d 3e  aOffset = &pCx->
2130: 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d 3b 0a 20  aType[nField];. 
2140: 20 20 20 69 66 28 20 65 43 75 72 54 79 70 65 3d     if( eCurType=
2150: 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
2160: 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e 75 63 2e  {.      pCx->uc.
2170: 70 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75 72  pCursor = (BtCur
2180: 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20 20  sor*).          
2190: 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38 28  &pMem->z[ROUND8(
21a0: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
21b0: 72 29 29 2b 32 2a 73 69 7a 65 6f 66 28 75 33 32  r))+2*sizeof(u32
21c0: 29 2a 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20 20  )*nField];.     
21d0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
21e0: 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 75 63 2e  sorZero(pCx->uc.
21f0: 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a  pCursor);.    }.
2200: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 43 78    }.  return pCx
2210: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74  ;.}../*.** Try t
2220: 6f 20 63 6f 6e 76 65 72 74 20 61 20 76 61 6c 75  o convert a valu
2230: 65 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63  e into a numeric
2240: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2250: 69 66 20 77 65 20 63 61 6e 0a 2a 2a 20 64 6f 20  if we can.** do 
2260: 73 6f 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20  so without loss 
2270: 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20  of information. 
2280: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
2290: 20 69 66 20 74 68 65 20 73 74 72 69 6e 67 0a 2a   if the string.*
22a0: 2a 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 20 6e  * looks like a n
22b0: 75 6d 62 65 72 2c 20 63 6f 6e 76 65 72 74 20 69  umber, convert i
22c0: 74 20 69 6e 74 6f 20 61 20 6e 75 6d 62 65 72 2e  t into a number.
22d0: 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74    If it does not
22e0: 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20  .** look like a 
22f0: 6e 75 6d 62 65 72 2c 20 6c 65 61 76 65 20 69 74  number, leave it
2300: 20 61 6c 6f 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66   alone..**.** If
2310: 20 74 68 65 20 62 54 72 79 46 6f 72 49 6e 74 20   the bTryForInt 
2320: 66 6c 61 67 20 69 73 20 74 72 75 65 2c 20 74 68  flag is true, th
2330: 65 6e 20 65 78 74 72 61 20 65 66 66 6f 72 74 20  en extra effort 
2340: 69 73 20 6d 61 64 65 20 74 6f 20 67 69 76 65 0a  is made to give.
2350: 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  ** an integer re
2360: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 53  presentation.  S
2370: 74 72 69 6e 67 73 20 74 68 61 74 20 6c 6f 6f 6b  trings that look
2380: 20 6c 69 6b 65 20 66 6c 6f 61 74 69 6e 67 20 70   like floating p
2390: 6f 69 6e 74 0a 2a 2a 20 76 61 6c 75 65 73 20 62  oint.** values b
23a0: 75 74 20 77 68 69 63 68 20 68 61 76 65 20 6e 6f  ut which have no
23b0: 20 66 72 61 63 74 69 6f 6e 61 6c 20 63 6f 6d 70   fractional comp
23c0: 6f 6e 65 6e 74 20 28 65 78 61 6d 70 6c 65 3a 20  onent (example: 
23d0: 27 34 38 2e 30 30 27 29 0a 2a 2a 20 77 69 6c 6c  '48.00').** will
23e0: 20 68 61 76 65 20 61 20 4d 45 4d 5f 49 6e 74 20   have a MEM_Int 
23f0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 77  representation w
2400: 68 65 6e 20 62 54 72 79 46 6f 72 49 6e 74 20 69  hen bTryForInt i
2410: 73 20 74 72 75 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  s true..**.** If
2420: 20 62 54 72 79 46 6f 72 49 6e 74 20 69 73 20 66   bTryForInt is f
2430: 61 6c 73 65 2c 20 74 68 65 6e 20 69 66 20 74 68  alse, then if th
2440: 65 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20 63  e input string c
2450: 6f 6e 74 61 69 6e 73 20 61 20 64 65 63 69 6d 61  ontains a decima
2460: 6c 0a 2a 2a 20 70 6f 69 6e 74 20 6f 72 20 65 78  l.** point or ex
2470: 70 6f 6e 65 6e 74 69 61 6c 20 6e 6f 74 61 74 69  ponential notati
2480: 6f 6e 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  on, the result i
2490: 73 20 6f 6e 6c 79 20 4d 45 4d 5f 52 65 61 6c 2c  s only MEM_Real,
24a0: 20 65 76 65 6e 0a 2a 2a 20 69 66 20 74 68 65 72   even.** if ther
24b0: 65 20 69 73 20 61 6e 20 65 78 61 63 74 20 69 6e  e is an exact in
24c0: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
24d0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 71 75 61 6e  tion of the quan
24e0: 74 69 74 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  tity..*/.static 
24f0: 76 6f 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69  void applyNumeri
2500: 63 41 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70  cAffinity(Mem *p
2510: 52 65 63 2c 20 69 6e 74 20 62 54 72 79 46 6f 72  Rec, int bTryFor
2520: 49 6e 74 29 7b 0a 20 20 64 6f 75 62 6c 65 20 72  Int){.  double r
2530: 56 61 6c 75 65 3b 0a 20 20 69 36 34 20 69 56 61  Value;.  i64 iVa
2540: 6c 75 65 3b 0a 20 20 75 38 20 65 6e 63 20 3d 20  lue;.  u8 enc = 
2550: 70 52 65 63 2d 3e 65 6e 63 3b 0a 20 20 61 73 73  pRec->enc;.  ass
2560: 65 72 74 28 20 28 70 52 65 63 2d 3e 66 6c 61 67  ert( (pRec->flag
2570: 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
2580: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d  _Int|MEM_Real))=
2590: 3d 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 69 66  =MEM_Str );.  if
25a0: 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 52  ( sqlite3AtoF(pR
25b0: 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c 20  ec->z, &rValue, 
25c0: 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d 30  pRec->n, enc)==0
25d0: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28   ) return;.  if(
25e0: 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f 69 36   0==sqlite3Atoi6
25f0: 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69 56 61 6c  4(pRec->z, &iVal
2600: 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63  ue, pRec->n, enc
2610: 29 20 29 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75  ) ){.    pRec->u
2620: 2e 69 20 3d 20 69 56 61 6c 75 65 3b 0a 20 20 20  .i = iValue;.   
2630: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20   pRec->flags |= 
2640: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 65 6c 73 65  MEM_Int;.  }else
2650: 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75 2e 72 20  {.    pRec->u.r 
2660: 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20 20 70 52  = rValue;.    pR
2670: 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ec->flags |= MEM
2680: 5f 52 65 61 6c 3b 0a 20 20 20 20 69 66 28 20 62  _Real;.    if( b
2690: 54 72 79 46 6f 72 49 6e 74 20 29 20 73 71 6c 69  TryForInt ) sqli
26a0: 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66  te3VdbeIntegerAf
26b0: 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20  finity(pRec);.  
26c0: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65  }.}../*.** Proce
26d0: 73 73 69 6e 67 20 69 73 20 64 65 74 65 72 6d 69  ssing is determi
26e0: 6e 65 20 62 79 20 74 68 65 20 61 66 66 69 6e 69  ne by the affini
26f0: 74 79 20 70 61 72 61 6d 65 74 65 72 3a 0a 2a 2a  ty parameter:.**
2700: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  .** SQLITE_AFF_I
2710: 4e 54 45 47 45 52 3a 0a 2a 2a 20 53 51 4c 49 54  NTEGER:.** SQLIT
2720: 45 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a 2a 20 53  E_AFF_REAL:.** S
2730: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
2740: 43 3a 0a 2a 2a 20 20 20 20 54 72 79 20 74 6f 20  C:.**    Try to 
2750: 63 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20  convert pRec to 
2760: 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65  an integer repre
2770: 73 65 6e 74 61 74 69 6f 6e 20 6f 72 20 61 20 0a  sentation or a .
2780: 2a 2a 20 20 20 20 66 6c 6f 61 74 69 6e 67 2d 70  **    floating-p
2790: 6f 69 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74  oint representat
27a0: 69 6f 6e 20 69 66 20 61 6e 20 69 6e 74 65 67 65  ion if an intege
27b0: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
27c0: 0a 2a 2a 20 20 20 20 69 73 20 6e 6f 74 20 70 6f  .**    is not po
27d0: 73 73 69 62 6c 65 2e 20 20 4e 6f 74 65 20 74 68  ssible.  Note th
27e0: 61 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 72  at the integer r
27f0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73  epresentation is
2800: 0a 2a 2a 20 20 20 20 61 6c 77 61 79 73 20 70 72  .**    always pr
2810: 65 66 65 72 72 65 64 2c 20 65 76 65 6e 20 69 66  eferred, even if
2820: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 69 73   the affinity is
2830: 20 52 45 41 4c 2c 20 62 65 63 61 75 73 65 0a 2a   REAL, because.*
2840: 2a 20 20 20 20 61 6e 20 69 6e 74 65 67 65 72 20  *    an integer 
2850: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69  representation i
2860: 73 20 6d 6f 72 65 20 73 70 61 63 65 20 65 66 66  s more space eff
2870: 69 63 69 65 6e 74 20 6f 6e 20 64 69 73 6b 2e 0a  icient on disk..
2880: 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  **.** SQLITE_AFF
2890: 5f 54 45 58 54 3a 0a 2a 2a 20 20 20 20 43 6f 6e  _TEXT:.**    Con
28a0: 76 65 72 74 20 70 52 65 63 20 74 6f 20 61 20 74  vert pRec to a t
28b0: 65 78 74 20 72 65 70 72 65 73 65 6e 74 61 74 69  ext representati
28c0: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45  on..**.** SQLITE
28d0: 5f 41 46 46 5f 42 4c 4f 42 3a 0a 2a 2a 20 20 20  _AFF_BLOB:.**   
28e0: 20 4e 6f 2d 6f 70 2e 20 20 70 52 65 63 20 69 73   No-op.  pRec is
28f0: 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 73   unchanged..*/.s
2900: 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79  tatic void apply
2910: 41 66 66 69 6e 69 74 79 28 0a 20 20 4d 65 6d 20  Affinity(.  Mem 
2920: 2a 70 52 65 63 2c 20 20 20 20 20 20 20 20 20 20  *pRec,          
2930: 2f 2a 20 54 68 65 20 76 61 6c 75 65 20 74 6f 20  /* The value to 
2940: 61 70 70 6c 79 20 61 66 66 69 6e 69 74 79 20 74  apply affinity t
2950: 6f 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  o */.  char affi
2960: 6e 69 74 79 2c 20 20 20 20 20 20 2f 2a 20 54 68  nity,      /* Th
2970: 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65  e affinity to be
2980: 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 75 38   applied */.  u8
2990: 20 65 6e 63 20 20 20 20 20 20 20 20 20 20 20 20   enc            
29a0: 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 74 65    /* Use this te
29b0: 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 29  xt encoding */.)
29c0: 7b 0a 20 20 69 66 28 20 61 66 66 69 6e 69 74 79  {.  if( affinity
29d0: 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  >=SQLITE_AFF_NUM
29e0: 45 52 49 43 20 29 7b 0a 20 20 20 20 61 73 73 65  ERIC ){.    asse
29f0: 72 74 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51  rt( affinity==SQ
2a00: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
2a10: 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51   || affinity==SQ
2a20: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 0a 20 20  LITE_AFF_REAL.  
2a30: 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 61 66             || af
2a40: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2a50: 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20  FF_NUMERIC );.  
2a60: 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61    if( (pRec->fla
2a70: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
2a80: 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49   ){ /*OPTIMIZATI
2a90: 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20  ON-IF-FALSE*/.  
2aa0: 20 20 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66      if( (pRec->f
2ab0: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29  lags & MEM_Real)
2ac0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69  ==0 ){.        i
2ad0: 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  f( pRec->flags &
2ae0: 20 4d 45 4d 5f 53 74 72 20 29 20 61 70 70 6c 79   MEM_Str ) apply
2af0: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
2b00: 70 52 65 63 2c 31 29 3b 0a 20 20 20 20 20 20 7d  pRec,1);.      }
2b10: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
2b20: 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72  lite3VdbeInteger
2b30: 41 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a  Affinity(pRec);.
2b40: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
2b50: 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e 69  }else if( affini
2b60: 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54  ty==SQLITE_AFF_T
2b70: 45 58 54 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e  EXT ){.    /* On
2b80: 6c 79 20 61 74 74 65 6d 70 74 20 74 68 65 20 63  ly attempt the c
2b90: 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20 54 45 58  onversion to TEX
2ba0: 54 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e  T if there is an
2bb0: 20 69 6e 74 65 67 65 72 20 6f 72 20 72 65 61 6c   integer or real
2bc0: 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e  .    ** represen
2bd0: 74 61 74 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64  tation (blob and
2be0: 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74   NULL do not get
2bf0: 20 63 6f 6e 76 65 72 74 65 64 29 20 62 75 74 20   converted) but 
2c00: 6e 6f 20 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a  no string.    **
2c10: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e   representation.
2c20: 20 20 49 74 20 77 6f 75 6c 64 20 62 65 20 68 61    It would be ha
2c30: 72 6d 6c 65 73 73 20 74 6f 20 72 65 70 65 61 74  rmless to repeat
2c40: 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20   the conversion 
2c50: 69 66 20 0a 20 20 20 20 2a 2a 20 74 68 65 72 65  if .    ** there
2c60: 20 69 73 20 61 6c 72 65 61 64 79 20 61 20 73 74   is already a st
2c70: 72 69 6e 67 20 72 65 70 2c 20 62 75 74 20 69 74  ring rep, but it
2c80: 20 69 73 20 70 6f 69 6e 74 6c 65 73 73 20 74 6f   is pointless to
2c90: 20 77 61 73 74 65 20 74 68 6f 73 65 0a 20 20 20   waste those.   
2ca0: 20 2a 2a 20 43 50 55 20 63 79 63 6c 65 73 2e 20   ** CPU cycles. 
2cb0: 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d 28 70  */.    if( 0==(p
2cc0: 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53  Rec->flags&MEM_S
2cd0: 74 72 29 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a  tr) ){ /*OPTIMIZ
2ce0: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f  ATION-IF-FALSE*/
2cf0: 0a 20 20 20 20 20 20 69 66 28 20 28 70 52 65 63  .      if( (pRec
2d00: 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61  ->flags&(MEM_Rea
2d10: 6c 7c 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20  l|MEM_Int)) ){. 
2d20: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
2d30: 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70  beMemStringify(p
2d40: 52 65 63 2c 20 65 6e 63 2c 20 31 29 3b 0a 20 20  Rec, enc, 1);.  
2d50: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
2d60: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pRec->flags &= ~
2d70: 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e  (MEM_Real|MEM_In
2d80: 74 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a  t);.  }.}../*.**
2d90: 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   Try to convert 
2da0: 74 68 65 20 74 79 70 65 20 6f 66 20 61 20 66 75  the type of a fu
2db0: 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20  nction argument 
2dc0: 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75  or a result colu
2dd0: 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e 75 6d  mn.** into a num
2de0: 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74  eric representat
2df0: 69 6f 6e 2e 20 20 55 73 65 20 65 69 74 68 65 72  ion.  Use either
2e00: 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c   INTEGER or REAL
2e10: 20 77 68 69 63 68 65 76 65 72 0a 2a 2a 20 69 73   whichever.** is
2e20: 20 61 70 70 72 6f 70 72 69 61 74 65 2e 20 20 42   appropriate.  B
2e30: 75 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65 20 63  ut only do the c
2e40: 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 69 74 20  onversion if it 
2e50: 69 73 20 70 6f 73 73 69 62 6c 65 20 77 69 74 68  is possible with
2e60: 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20 69  out.** loss of i
2e70: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 72  nformation and r
2e80: 65 74 75 72 6e 20 74 68 65 20 72 65 76 69 73 65  eturn the revise
2e90: 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 61 72  d type of the ar
2ea0: 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73  gument..*/.int s
2eb0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e 75 6d  qlite3_value_num
2ec0: 65 72 69 63 5f 74 79 70 65 28 73 71 6c 69 74 65  eric_type(sqlite
2ed0: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a  3_value *pVal){.
2ee0: 20 20 69 6e 74 20 65 54 79 70 65 20 3d 20 73 71    int eType = sq
2ef0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65  lite3_value_type
2f00: 28 70 56 61 6c 29 3b 0a 20 20 69 66 28 20 65 54  (pVal);.  if( eT
2f10: 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45 58 54  ype==SQLITE_TEXT
2f20: 20 29 7b 0a 20 20 20 20 4d 65 6d 20 2a 70 4d 65   ){.    Mem *pMe
2f30: 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a  m = (Mem*)pVal;.
2f40: 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
2f50: 41 66 66 69 6e 69 74 79 28 70 4d 65 6d 2c 20 30  Affinity(pMem, 0
2f60: 29 3b 0a 20 20 20 20 65 54 79 70 65 20 3d 20 73  );.    eType = s
2f70: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70  qlite3_value_typ
2f80: 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 20 20 72  e(pVal);.  }.  r
2f90: 65 74 75 72 6e 20 65 54 79 70 65 3b 0a 7d 0a 0a  eturn eType;.}..
2fa0: 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20 76  /*.** Exported v
2fb0: 65 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79 41  ersion of applyA
2fc0: 66 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73 20  ffinity(). This 
2fd0: 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71 6c  one works on sql
2fe0: 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a  ite3_value*, .**
2ff0: 20 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e 61   not the interna
3000: 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a  l Mem* type..*/.
3010: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
3020: 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a  eApplyAffinity(.
3030: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
3040: 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66 66  *pVal, .  u8 aff
3050: 69 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e 63  inity, .  u8 enc
3060: 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e  .){.  applyAffin
3070: 69 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c 2c  ity((Mem *)pVal,
3080: 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29 3b   affinity, enc);
3090: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70 4d 65 6d 20 63  .}../*.** pMem c
30a0: 75 72 72 65 6e 74 6c 79 20 6f 6e 6c 79 20 68 6f  urrently only ho
30b0: 6c 64 73 20 61 20 73 74 72 69 6e 67 20 74 79 70  lds a string typ
30c0: 65 20 28 6f 72 20 6d 61 79 62 65 20 61 20 42 4c  e (or maybe a BL
30d0: 4f 42 20 74 68 61 74 20 77 65 20 63 61 6e 0a 2a  OB that we can.*
30e0: 2a 20 69 6e 74 65 72 70 72 65 74 20 61 73 20 61  * interpret as a
30f0: 20 73 74 72 69 6e 67 20 69 66 20 77 65 20 77 61   string if we wa
3100: 6e 74 20 74 6f 29 2e 20 20 43 6f 6d 70 75 74 65  nt to).  Compute
3110: 20 69 74 73 20 63 6f 72 72 65 73 70 6f 6e 64 69   its correspondi
3120: 6e 67 0a 2a 2a 20 6e 75 6d 65 72 69 63 20 74 79  ng.** numeric ty
3130: 70 65 2c 20 69 66 20 68 61 73 20 6f 6e 65 2e 20  pe, if has one. 
3140: 20 53 65 74 20 74 68 65 20 70 4d 65 6d 2d 3e 75   Set the pMem->u
3150: 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69  .r and pMem->u.i
3160: 20 66 69 65 6c 64 73 0a 2a 2a 20 61 63 63 6f 72   fields.** accor
3170: 64 69 6e 67 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69  dingly..*/.stati
3180: 63 20 75 31 36 20 53 51 4c 49 54 45 5f 4e 4f 49  c u16 SQLITE_NOI
3190: 4e 4c 49 4e 45 20 63 6f 6d 70 75 74 65 4e 75 6d  NLINE computeNum
31a0: 65 72 69 63 54 79 70 65 28 4d 65 6d 20 2a 70 4d  ericType(Mem *pM
31b0: 65 6d 29 7b 0a 20 20 61 73 73 65 72 74 28 20 28  em){.  assert( (
31c0: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
31d0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
31e0: 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )==0 );.  assert
31f0: 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
3200: 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
3210: 6f 62 29 29 21 3d 30 20 29 3b 0a 20 20 69 66 28  ob))!=0 );.  if(
3220: 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 4d 65   sqlite3AtoF(pMe
3230: 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e 72  m->z, &pMem->u.r
3240: 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d  , pMem->n, pMem-
3250: 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a 20 20 20 20  >enc)==0 ){.    
3260: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20  return 0;.  }.  
3270: 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 69 36  if( sqlite3Atoi6
3280: 34 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d  4(pMem->z, &pMem
3290: 2d 3e 75 2e 69 2c 20 70 4d 65 6d 2d 3e 6e 2c 20  ->u.i, pMem->n, 
32a0: 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 53 51 4c 49  pMem->enc)==SQLI
32b0: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74  TE_OK ){.    ret
32c0: 75 72 6e 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d  urn MEM_Int;.  }
32d0: 0a 20 20 72 65 74 75 72 6e 20 4d 45 4d 5f 52 65  .  return MEM_Re
32e0: 61 6c 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  al;.}../*.** Ret
32f0: 75 72 6e 20 74 68 65 20 6e 75 6d 65 72 69 63 20  urn the numeric 
3300: 74 79 70 65 20 66 6f 72 20 70 4d 65 6d 2c 20 65  type for pMem, e
3310: 69 74 68 65 72 20 4d 45 4d 5f 49 6e 74 20 6f 72  ither MEM_Int or
3320: 20 4d 45 4d 5f 52 65 61 6c 20 6f 72 20 62 6f 74   MEM_Real or bot
3330: 68 20 6f 72 0a 2a 2a 20 6e 6f 6e 65 2e 20 20 0a  h or.** none.  .
3340: 2a 2a 0a 2a 2a 20 55 6e 6c 69 6b 65 20 61 70 70  **.** Unlike app
3350: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
3360: 79 28 29 2c 20 74 68 69 73 20 72 6f 75 74 69 6e  y(), this routin
3370: 65 20 64 6f 65 73 20 6e 6f 74 20 6d 6f 64 69 66  e does not modif
3380: 79 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 2e 0a 2a  y pMem->flags..*
3390: 2a 20 42 75 74 20 69 74 20 64 6f 65 73 20 73 65  * But it does se
33a0: 74 20 70 4d 65 6d 2d 3e 75 2e 72 20 61 6e 64 20  t pMem->u.r and 
33b0: 70 4d 65 6d 2d 3e 75 2e 69 20 61 70 70 72 6f 70  pMem->u.i approp
33c0: 72 69 61 74 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74  riately..*/.stat
33d0: 69 63 20 75 31 36 20 6e 75 6d 65 72 69 63 54 79  ic u16 numericTy
33e0: 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20  pe(Mem *pMem){. 
33f0: 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73   if( pMem->flags
3400: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
3410: 52 65 61 6c 29 20 29 7b 0a 20 20 20 20 72 65 74  Real) ){.    ret
3420: 75 72 6e 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  urn pMem->flags 
3430: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
3440: 65 61 6c 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  eal);.  }.  if( 
3450: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
3460: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
3470: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 63   ){.    return c
3480: 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63 54 79 70  omputeNumericTyp
3490: 65 28 70 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 72  e(pMem);.  }.  r
34a0: 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64  eturn 0;.}..#ifd
34b0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
34c0: 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 6e 69  /*.** Write a ni
34d0: 63 65 20 73 74 72 69 6e 67 20 72 65 70 72 65 73  ce string repres
34e0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
34f0: 63 6f 6e 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c  contents of cell
3500: 20 70 4d 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75   pMem.** into bu
3510: 66 66 65 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74  ffer zBuf, lengt
3520: 68 20 6e 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20  h nBuf..*/.void 
3530: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72  sqlite3VdbeMemPr
3540: 65 74 74 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70  ettyPrint(Mem *p
3550: 4d 65 6d 2c 20 63 68 61 72 20 2a 7a 42 75 66 29  Mem, char *zBuf)
3560: 7b 0a 20 20 63 68 61 72 20 2a 7a 43 73 72 20 3d  {.  char *zCsr =
3570: 20 7a 42 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d   zBuf;.  int f =
3580: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20   pMem->flags;.. 
3590: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
35a0: 61 72 20 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d  ar *const encnam
35b0: 65 73 5b 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22  es[] = {"(X)", "
35c0: 28 38 29 22 2c 20 22 28 31 36 4c 45 29 22 2c 20  (8)", "(16LE)", 
35d0: 22 28 31 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66  "(16BE)"};..  if
35e0: 28 20 66 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a  ( f&MEM_Blob ){.
35f0: 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 63      int i;.    c
3600: 68 61 72 20 63 3b 0a 20 20 20 20 69 66 28 20 66  har c;.    if( f
3610: 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20   & MEM_Dyn ){.  
3620: 20 20 20 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20      c = 'z';.   
3630: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3640: 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  (MEM_Static|MEM_
3650: 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20  Ephem))==0 );.  
3660: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
3670: 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20  MEM_Static ){.  
3680: 20 20 20 20 63 20 3d 20 27 74 27 3b 0a 20 20 20      c = 't';.   
3690: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
36a0: 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68  (MEM_Dyn|MEM_Eph
36b0: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
36c0: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
36d0: 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20  _Ephem ){.      
36e0: 63 20 3d 20 27 65 27 3b 0a 20 20 20 20 20 20 61  c = 'e';.      a
36f0: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
3700: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29  _Static|MEM_Dyn)
3710: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
3720: 65 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 73 27  e{.      c = 's'
3730: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c  ;.    }..    sql
3740: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
3750: 30 2c 20 7a 43 73 72 2c 20 22 25 63 22 2c 20 63  0, zCsr, "%c", c
3760: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
3770: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3780: 43 73 72 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  Csr);.    sqlite
3790: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
37a0: 7a 43 73 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65  zCsr, "%d[", pMe
37b0: 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20  m->n);.    zCsr 
37c0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
37d0: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 66 6f  30(zCsr);.    fo
37e0: 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69  r(i=0; i<16 && i
37f0: 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a  <pMem->n; i++){.
3800: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e        sqlite3_sn
3810: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
3820: 2c 20 22 25 30 32 58 22 2c 20 28 28 69 6e 74 29  , "%02X", ((int)
3830: 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78 46  pMem->z[i] & 0xF
3840: 46 29 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20  F));.      zCsr 
3850: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3860: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a  30(zCsr);.    }.
3870: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31      for(i=0; i<1
3880: 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20  6 && i<pMem->n; 
3890: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68 61 72  i++){.      char
38a0: 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b   z = pMem->z[i];
38b0: 0a 20 20 20 20 20 20 69 66 28 20 7a 3c 33 32 20  .      if( z<32 
38c0: 7c 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72  || z>126 ) *zCsr
38d0: 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20  ++ = '.';.      
38e0: 65 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a  else *zCsr++ = z
38f0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c  ;.    }..    sql
3900: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
3910: 30 2c 20 7a 43 73 72 2c 20 22 5d 25 73 22 2c 20  0, zCsr, "]%s", 
3920: 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65  encnames[pMem->e
3930: 6e 63 5d 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b  nc]);.    zCsr +
3940: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
3950: 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 69 66 28  0(zCsr);.    if(
3960: 20 66 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b   f & MEM_Zero ){
3970: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
3980: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3990: 72 2c 22 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75  r,"+%dz",pMem->u
39a0: 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20 7a  .nZero);.      z
39b0: 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74  Csr += sqlite3St
39c0: 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20  rlen30(zCsr);.  
39d0: 20 20 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20    }.    *zCsr = 
39e0: 27 5c 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66  '\0';.  }else if
39f0: 28 20 66 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b  ( f & MEM_Str ){
3a00: 0a 20 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20  .    int j, k;. 
3a10: 20 20 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27     zBuf[0] = ' '
3a20: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
3a30: 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a  M_Dyn ){.      z
3a40: 42 75 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20  Buf[1] = 'z';.  
3a50: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
3a60: 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d   (MEM_Static|MEM
3a70: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
3a80: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
3a90: 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20   MEM_Static ){. 
3aa0: 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27       zBuf[1] = '
3ab0: 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  t';.      assert
3ac0: 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c  ( (f & (MEM_Dyn|
3ad0: 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29  MEM_Ephem))==0 )
3ae0: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
3af0: 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b  f & MEM_Ephem ){
3b00: 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d  .      zBuf[1] =
3b10: 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'e';.      asse
3b20: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
3b30: 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d  atic|MEM_Dyn))==
3b40: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
3b50: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
3b60: 27 73 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b  's';.    }.    k
3b70: 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 2;.    sqlite
3b80: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
3b90: 26 7a 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20  &zBuf[k], "%d", 
3ba0: 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20  pMem->n);.    k 
3bb0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3bc0: 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20  30(&zBuf[k]);.  
3bd0: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b    zBuf[k++] = '[
3be0: 27 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20  ';.    for(j=0; 
3bf0: 6a 3c 31 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e  j<15 && j<pMem->
3c00: 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75  n; j++){.      u
3c10: 38 20 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d  8 c = pMem->z[j]
3c20: 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3e 3d 30  ;.      if( c>=0
3c30: 78 32 30 20 26 26 20 63 3c 30 78 37 66 20 29 7b  x20 && c<0x7f ){
3c40: 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b  .        zBuf[k+
3c50: 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65  +] = c;.      }e
3c60: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 42 75  lse{.        zBu
3c70: 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20  f[k++] = '.';.  
3c80: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
3c90: 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b  zBuf[k++] = ']';
3ca0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
3cb0: 72 69 6e 74 66 28 31 30 30 2c 26 7a 42 75 66 5b  rintf(100,&zBuf[
3cc0: 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65  k], encnames[pMe
3cd0: 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 6b 20  m->enc]);.    k 
3ce0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3cf0: 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20  30(&zBuf[k]);.  
3d00: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b    zBuf[k++] = 0;
3d10: 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  .  }.}.#endif..#
3d20: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
3d30: 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74  UG./*.** Print t
3d40: 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20 72 65  he value of a re
3d50: 67 69 73 74 65 72 20 66 6f 72 20 74 72 61 63 69  gister for traci
3d60: 6e 67 20 70 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a  ng purposes:.*/.
3d70: 73 74 61 74 69 63 20 76 6f 69 64 20 6d 65 6d 54  static void memT
3d80: 72 61 63 65 50 72 69 6e 74 28 4d 65 6d 20 2a 70  racePrint(Mem *p
3d90: 29 7b 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61 67  ){.  if( p->flag
3da0: 73 20 26 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65  s & MEM_Undefine
3db0: 64 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28  d ){.    printf(
3dc0: 22 20 75 6e 64 65 66 69 6e 65 64 22 29 3b 0a 20  " undefined");. 
3dd0: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
3de0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
3df0: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 4e  {.    printf(" N
3e00: 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69  ULL");.  }else i
3e10: 66 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 28  f( (p->flags & (
3e20: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
3e30: 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  )==(MEM_Int|MEM_
3e40: 53 74 72 29 20 29 7b 0a 20 20 20 20 70 72 69 6e  Str) ){.    prin
3e50: 74 66 28 22 20 73 69 3a 25 6c 6c 64 22 2c 20 70  tf(" si:%lld", p
3e60: 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c 73 65 20  ->u.i);.  }else 
3e70: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3e80: 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 70 72  EM_Int ){.    pr
3e90: 69 6e 74 66 28 22 20 69 3a 25 6c 6c 64 22 2c 20  intf(" i:%lld", 
3ea0: 70 2d 3e 75 2e 69 29 3b 0a 23 69 66 6e 64 65 66  p->u.i);.#ifndef
3eb0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
3ec0: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 7d 65  ATING_POINT.  }e
3ed0: 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  lse if( p->flags
3ee0: 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20   & MEM_Real ){. 
3ef0: 20 20 20 70 72 69 6e 74 66 28 22 20 72 3a 25 67     printf(" r:%g
3f00: 22 2c 20 70 2d 3e 75 2e 72 29 3b 0a 23 65 6e 64  ", p->u.r);.#end
3f10: 69 66 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  if.  }else if( p
3f20: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
3f30: 77 53 65 74 20 29 7b 0a 20 20 20 20 70 72 69 6e  wSet ){.    prin
3f40: 74 66 28 22 20 28 72 6f 77 73 65 74 29 22 29 3b  tf(" (rowset)");
3f50: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63 68  .  }else{.    ch
3f60: 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 20 20  ar zBuf[200];.  
3f70: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
3f80: 50 72 65 74 74 79 50 72 69 6e 74 28 70 2c 20 7a  PrettyPrint(p, z
3f90: 42 75 66 29 3b 0a 20 20 20 20 70 72 69 6e 74 66  Buf);.    printf
3fa0: 28 22 20 25 73 22 2c 20 7a 42 75 66 29 3b 0a 20  (" %s", zBuf);. 
3fb0: 20 7d 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61 67   }.  if( p->flag
3fc0: 73 20 26 20 4d 45 4d 5f 53 75 62 74 79 70 65 20  s & MEM_Subtype 
3fd0: 29 20 70 72 69 6e 74 66 28 22 20 73 75 62 74 79  ) printf(" subty
3fe0: 70 65 3d 30 78 25 30 32 78 22 2c 20 70 2d 3e 65  pe=0x%02x", p->e
3ff0: 53 75 62 74 79 70 65 29 3b 0a 7d 0a 73 74 61 74  Subtype);.}.stat
4000: 69 63 20 76 6f 69 64 20 72 65 67 69 73 74 65 72  ic void register
4010: 54 72 61 63 65 28 69 6e 74 20 69 52 65 67 2c 20  Trace(int iReg, 
4020: 4d 65 6d 20 2a 70 29 7b 0a 20 20 70 72 69 6e 74  Mem *p){.  print
4030: 66 28 22 52 45 47 5b 25 64 5d 20 3d 20 22 2c 20  f("REG[%d] = ", 
4040: 69 52 65 67 29 3b 0a 20 20 6d 65 6d 54 72 61 63  iReg);.  memTrac
4050: 65 50 72 69 6e 74 28 70 29 3b 0a 20 20 70 72 69  ePrint(p);.  pri
4060: 6e 74 66 28 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6e  ntf("\n");.}.#en
4070: 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
4080: 54 45 5f 44 45 42 55 47 0a 23 20 20 64 65 66 69  TE_DEBUG.#  defi
4090: 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  ne REGISTER_TRAC
40a0: 45 28 52 2c 4d 29 20 69 66 28 64 62 2d 3e 66 6c  E(R,M) if(db->fl
40b0: 61 67 73 26 53 51 4c 49 54 45 5f 56 64 62 65 54  ags&SQLITE_VdbeT
40c0: 72 61 63 65 29 72 65 67 69 73 74 65 72 54 72 61  race)registerTra
40d0: 63 65 28 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20  ce(R,M).#else.# 
40e0: 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52   define REGISTER
40f0: 5f 54 52 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64  _TRACE(R,M).#end
4100: 69 66 0a 0a 0a 23 69 66 64 65 66 20 56 44 42 45  if...#ifdef VDBE
4110: 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a  _PROFILE../* .**
4120: 20 68 77 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69   hwtime.h contai
4130: 6e 73 20 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62  ns inline assemb
4140: 6c 65 72 20 63 6f 64 65 20 66 6f 72 20 69 6d 70  ler code for imp
4150: 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69  lementing .** hi
4160: 67 68 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20 74  gh-performance t
4170: 69 6d 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a  iming routines..
4180: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 68 77 74  */.#include "hwt
4190: 69 6d 65 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a  ime.h"..#endif..
41a0: 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f  #ifndef NDEBUG./
41b0: 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69  *.** This functi
41c0: 6f 6e 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65  on is only calle
41d0: 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e  d from within an
41e0: 20 61 73 73 65 72 74 28 29 20 65 78 70 72 65 73   assert() expres
41f0: 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63  sion. It.** chec
4200: 6b 73 20 74 68 61 74 20 74 68 65 20 73 71 6c 69  ks that the sqli
4210: 74 65 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e  te3.nTransaction
4220: 20 76 61 72 69 61 62 6c 65 20 69 73 20 63 6f 72   variable is cor
4230: 72 65 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a  rectly set to.**
4240: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e   the number of n
4250: 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  on-transaction s
4260: 61 76 65 70 6f 69 6e 74 73 20 63 75 72 72 65 6e  avepoints curren
4270: 74 6c 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c  tly in the .** l
4280: 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74  inked list start
4290: 69 6e 67 20 61 74 20 73 71 6c 69 74 65 33 2e 70  ing at sqlite3.p
42a0: 53 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a  Savepoint..** .*
42b0: 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20  * Usage:.**.**  
42c0: 20 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b     assert( check
42d0: 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64  SavepointCount(d
42e0: 62 29 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20  b) );.*/.static 
42f0: 69 6e 74 20 63 68 65 63 6b 53 61 76 65 70 6f 69  int checkSavepoi
4300: 6e 74 43 6f 75 6e 74 28 73 71 6c 69 74 65 33 20  ntCount(sqlite3 
4310: 2a 64 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20  *db){.  int n = 
4320: 30 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  0;.  Savepoint *
4330: 70 3b 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70  p;.  for(p=db->p
4340: 53 61 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d  Savepoint; p; p=
4350: 70 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20  p->pNext) n++;. 
4360: 20 61 73 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d   assert( n==(db-
4370: 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62  >nSavepoint + db
4380: 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
4390: 61 76 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72  avepoint) );.  r
43a0: 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69  eturn 1;.}.#endi
43b0: 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  f../*.** Return 
43c0: 74 68 65 20 72 65 67 69 73 74 65 72 20 6f 66 20  the register of 
43d0: 70 4f 70 2d 3e 70 32 20 61 66 74 65 72 20 66 69  pOp->p2 after fi
43e0: 72 73 74 20 70 72 65 70 61 72 69 6e 67 20 69 74  rst preparing it
43f0: 20 74 6f 20 62 65 0a 2a 2a 20 6f 76 65 72 77 72   to be.** overwr
4400: 69 74 74 65 6e 20 77 69 74 68 20 61 6e 20 69 6e  itten with an in
4410: 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a  teger value..*/.
4420: 73 74 61 74 69 63 20 53 51 4c 49 54 45 5f 4e 4f  static SQLITE_NO
4430: 49 4e 4c 49 4e 45 20 4d 65 6d 20 2a 6f 75 74 32  INLINE Mem *out2
4440: 50 72 65 72 65 6c 65 61 73 65 57 69 74 68 43 6c  PrereleaseWithCl
4450: 65 61 72 28 4d 65 6d 20 2a 70 4f 75 74 29 7b 0a  ear(Mem *pOut){.
4460: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
4470: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
4480: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
4490: 45 4d 5f 49 6e 74 3b 0a 20 20 72 65 74 75 72 6e  EM_Int;.  return
44a0: 20 70 4f 75 74 3b 0a 7d 0a 73 74 61 74 69 63 20   pOut;.}.static 
44b0: 4d 65 6d 20 2a 6f 75 74 32 50 72 65 72 65 6c 65  Mem *out2Prerele
44c0: 61 73 65 28 56 64 62 65 20 2a 70 2c 20 56 64 62  ase(Vdbe *p, Vdb
44d0: 65 4f 70 20 2a 70 4f 70 29 7b 0a 20 20 4d 65 6d  eOp *pOp){.  Mem
44e0: 20 2a 70 4f 75 74 3b 0a 20 20 61 73 73 65 72 74   *pOut;.  assert
44f0: 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
4500: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
4510: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
4520: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
4530: 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pOut = &p->aMem[
4540: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41  pOp->p2];.  memA
4550: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
4560: 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 56 64 62  pOut);.  if( Vdb
4570: 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74  eMemDynamic(pOut
4580: 29 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54  ) ){ /*OPTIMIZAT
4590: 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20  ION-IF-FALSE*/. 
45a0: 20 20 20 72 65 74 75 72 6e 20 6f 75 74 32 50 72     return out2Pr
45b0: 65 72 65 6c 65 61 73 65 57 69 74 68 43 6c 65 61  ereleaseWithClea
45c0: 72 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65  r(pOut);.  }else
45d0: 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  {.    pOut->flag
45e0: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  s = MEM_Int;.   
45f0: 20 72 65 74 75 72 6e 20 70 4f 75 74 3b 0a 20 20   return pOut;.  
4600: 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63  }.}.../*.** Exec
4610: 75 74 65 20 61 73 20 6d 75 63 68 20 6f 66 20 61  ute as much of a
4620: 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 61 73   VDBE program as
4630: 20 77 65 20 63 61 6e 2e 0a 2a 2a 20 54 68 69 73   we can..** This
4640: 20 69 73 20 74 68 65 20 63 6f 72 65 20 6f 66 20   is the core of 
4650: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 2e 20  sqlite3_step(). 
4660: 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33   .*/.int sqlite3
4670: 56 64 62 65 45 78 65 63 28 0a 20 20 56 64 62 65  VdbeExec(.  Vdbe
4680: 20 2a 70 20 20 20 20 20 20 20 20 20 20 20 20 20   *p             
4690: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44         /* The VD
46a0: 42 45 20 2a 2f 0a 29 7b 0a 20 20 4f 70 20 2a 61  BE */.){.  Op *a
46b0: 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 20 20 20 20  Op = p->aOp;    
46c0: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
46d0: 20 70 2d 3e 61 4f 70 20 2a 2f 0a 20 20 4f 70 20   p->aOp */.  Op 
46e0: 2a 70 4f 70 20 3d 20 61 4f 70 3b 20 20 20 20 20  *pOp = aOp;     
46f0: 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65          /* Curre
4700: 6e 74 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a  nt operation */.
4710: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
4720: 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66  TE_DEBUG) || def
4730: 69 6e 65 64 28 56 44 42 45 5f 50 52 4f 46 49 4c  ined(VDBE_PROFIL
4740: 45 29 0a 20 20 4f 70 20 2a 70 4f 72 69 67 4f 70  E).  Op *pOrigOp
4750: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4760: 2f 2a 20 56 61 6c 75 65 20 6f 66 20 70 4f 70 20  /* Value of pOp 
4770: 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  at the top of th
4780: 65 20 6c 6f 6f 70 20 2a 2f 0a 23 65 6e 64 69 66  e loop */.#endif
4790: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
47a0: 45 42 55 47 0a 20 20 69 6e 74 20 6e 45 78 74 72  EBUG.  int nExtr
47b0: 61 44 65 6c 65 74 65 20 3d 20 30 3b 20 20 20 20  aDelete = 0;    
47c0: 20 20 2f 2a 20 56 65 72 69 66 69 65 73 20 46 4f    /* Verifies FO
47d0: 52 44 45 4c 45 54 45 20 61 6e 64 20 41 55 58 44  RDELETE and AUXD
47e0: 45 4c 45 54 45 20 66 6c 61 67 73 20 2a 2f 0a 23  ELETE flags */.#
47f0: 65 6e 64 69 66 0a 20 20 69 6e 74 20 72 63 20 3d  endif.  int rc =
4800: 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20   SQLITE_OK;     
4810: 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
4820: 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c 69 74  eturn */.  sqlit
4830: 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 20  e3 *db = p->db; 
4840: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
4850: 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20 72 65  abase */.  u8 re
4860: 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
4870: 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65 74 20 73   = 0; /* Reset s
4880: 63 68 65 6d 61 20 61 66 74 65 72 20 61 6e 20 65  chema after an e
4890: 72 72 6f 72 20 69 66 20 70 6f 73 69 74 69 76 65  rror if positive
48a0: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64 69 6e   */.  u8 encodin
48b0: 67 20 3d 20 45 4e 43 28 64 62 29 3b 20 20 20 20  g = ENC(db);    
48c0: 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
48d0: 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69   encoding */.  i
48e0: 6e 74 20 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b  nt iCompare = 0;
48f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
4900: 75 6c 74 20 6f 66 20 6c 61 73 74 20 63 6f 6d 70  ult of last comp
4910: 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69  arison */.  unsi
4920: 67 6e 65 64 20 6e 56 6d 53 74 65 70 20 3d 20 30  gned nVmStep = 0
4930: 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
4940: 20 6f 66 20 76 69 72 74 75 61 6c 20 6d 61 63 68   of virtual mach
4950: 69 6e 65 20 73 74 65 70 73 20 2a 2f 0a 23 69 66  ine steps */.#if
4960: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
4970: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
4980: 43 4b 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50  CK.  unsigned nP
4990: 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 30  rogressLimit = 0
49a0: 3b 2f 2a 20 49 6e 76 6f 6b 65 20 78 50 72 6f 67  ;/* Invoke xProg
49b0: 72 65 73 73 28 29 20 77 68 65 6e 20 6e 56 6d 53  ress() when nVmS
49c0: 74 65 70 20 72 65 61 63 68 65 73 20 74 68 69 73  tep reaches this
49d0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d   */.#endif.  Mem
49e0: 20 2a 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d   *aMem = p->aMem
49f0: 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20  ;       /* Copy 
4a00: 6f 66 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20  of p->aMem */.  
4a10: 4d 65 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20  Mem *pIn1 = 0;  
4a20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73             /* 1s
4a30: 74 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20  t input operand 
4a40: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d  */.  Mem *pIn2 =
4a50: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   0;             
4a60: 2f 2a 20 32 6e 64 20 69 6e 70 75 74 20 6f 70 65  /* 2nd input ope
4a70: 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  rand */.  Mem *p
4a80: 49 6e 33 20 3d 20 30 3b 20 20 20 20 20 20 20 20  In3 = 0;        
4a90: 20 20 20 20 20 2f 2a 20 33 72 64 20 69 6e 70 75       /* 3rd inpu
4aa0: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d  t operand */.  M
4ab0: 65 6d 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20  em *pOut = 0;   
4ac0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74            /* Out
4ad0: 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  put operand */. 
4ae0: 20 69 6e 74 20 2a 61 50 65 72 6d 75 74 65 20 3d   int *aPermute =
4af0: 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50   0;         /* P
4b00: 65 72 6d 75 74 61 74 69 6f 6e 20 6f 66 20 63 6f  ermutation of co
4b10: 6c 75 6d 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d  lumns for OP_Com
4b20: 70 61 72 65 20 2a 2f 0a 20 20 69 36 34 20 6c 61  pare */.  i64 la
4b30: 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61  stRowid = db->la
4b40: 73 74 52 6f 77 69 64 3b 20 20 2f 2a 20 53 61 76  stRowid;  /* Sav
4b50: 65 64 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ed value of the 
4b60: 6c 61 73 74 20 69 6e 73 65 72 74 20 52 4f 57 49  last insert ROWI
4b70: 44 20 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45  D */.#ifdef VDBE
4b80: 5f 50 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73  _PROFILE.  u64 s
4b90: 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20  tart;           
4ba0: 20 20 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f        /* CPU clo
4bb0: 63 6b 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72  ck count at star
4bc0: 74 20 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23  t of opcode */.#
4bd0: 65 6e 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53  endif.  /*** INS
4be0: 45 52 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20  ERT STACK UNION 
4bf0: 48 45 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73  HERE ***/..  ass
4c00: 65 72 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56  ert( p->magic==V
4c10: 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b  DBE_MAGIC_RUN );
4c20: 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65    /* sqlite3_ste
4c30: 70 28 29 20 76 65 72 69 66 69 65 73 20 74 68 69  p() verifies thi
4c40: 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64  s */.  sqlite3Vd
4c50: 62 65 45 6e 74 65 72 28 70 29 3b 0a 20 20 69 66  beEnter(p);.  if
4c60: 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
4c70: 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20  NOMEM ){.    /* 
4c80: 54 68 69 73 20 68 61 70 70 65 6e 73 20 69 66 20  This happens if 
4c90: 61 20 6d 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64  a malloc() insid
4ca0: 65 20 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69  e a call to sqli
4cb0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
4cc0: 29 20 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69  ) or.    ** sqli
4cd0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31  te3_column_text1
4ce0: 36 28 29 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a  6() failed.  */.
4cf0: 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
4d00: 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
4d10: 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ->rc==SQLITE_OK 
4d20: 7c 7c 20 28 70 2d 3e 72 63 26 30 78 66 66 29 3d  || (p->rc&0xff)=
4d30: 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a  =SQLITE_BUSY );.
4d40: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
4d50: 52 65 61 64 65 72 20 7c 7c 20 70 2d 3e 72 65 61  Reader || p->rea
4d60: 64 4f 6e 6c 79 21 3d 30 20 29 3b 0a 20 20 70 2d  dOnly!=0 );.  p-
4d70: 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b  >rc = SQLITE_OK;
4d80: 0a 20 20 70 2d 3e 69 43 75 72 72 65 6e 74 54 69  .  p->iCurrentTi
4d90: 6d 65 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  me = 0;.  assert
4da0: 28 20 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30 20  ( p->explain==0 
4db0: 29 3b 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74 53  );.  p->pResultS
4dc0: 65 74 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75  et = 0;.  db->bu
4dd0: 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20  syHandler.nBusy 
4de0: 3d 20 30 3b 0a 20 20 69 66 28 20 64 62 2d 3e 75  = 0;.  if( db->u
4df0: 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20  1.isInterrupted 
4e00: 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
4e10: 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20  _to_interrupt;. 
4e20: 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72   sqlite3VdbeIOTr
4e30: 61 63 65 53 71 6c 28 70 29 3b 0a 23 69 66 6e 64  aceSql(p);.#ifnd
4e40: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
4e50: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
4e60: 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67  .  if( db->xProg
4e70: 72 65 73 73 20 29 7b 0a 20 20 20 20 75 33 32 20  ress ){.    u32 
4e80: 69 50 72 69 6f 72 20 3d 20 70 2d 3e 61 43 6f 75  iPrior = p->aCou
4e90: 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54  nter[SQLITE_STMT
4ea0: 53 54 41 54 55 53 5f 56 4d 5f 53 54 45 50 5d 3b  STATUS_VM_STEP];
4eb0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 30 20 3c  .    assert( 0 <
4ec0: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
4ed0: 73 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65  s );.    nProgre
4ee0: 73 73 4c 69 6d 69 74 20 3d 20 64 62 2d 3e 6e 50  ssLimit = db->nP
4ef0: 72 6f 67 72 65 73 73 4f 70 73 20 2d 20 28 69 50  rogressOps - (iP
4f00: 72 69 6f 72 20 25 20 64 62 2d 3e 6e 50 72 6f 67  rior % db->nProg
4f10: 72 65 73 73 4f 70 73 29 3b 0a 20 20 7d 0a 23 65  ressOps);.  }.#e
4f20: 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
4f30: 54 45 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74  TE_DEBUG.  sqlit
4f40: 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
4f50: 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e  loc();.  if( p->
4f60: 70 63 3d 3d 30 0a 20 20 20 26 26 20 28 70 2d 3e  pc==0.   && (p->
4f70: 64 62 2d 3e 66 6c 61 67 73 20 26 20 28 53 51 4c  db->flags & (SQL
4f80: 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 7c  ITE_VdbeListing|
4f90: 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 7c 53  SQLITE_VdbeEQP|S
4fa0: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 29  QLITE_VdbeTrace)
4fb0: 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 69 6e  )!=0.  ){.    in
4fc0: 74 20 69 3b 0a 20 20 20 20 69 6e 74 20 6f 6e 63  t i;.    int onc
4fd0: 65 20 3d 20 31 3b 0a 20 20 20 20 73 71 6c 69 74  e = 1;.    sqlit
4fe0: 65 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70  e3VdbePrintSql(p
4ff0: 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62  );.    if( p->db
5000: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
5010: 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 29 7b 0a  _VdbeListing ){.
5020: 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 56 44        printf("VD
5030: 42 45 20 50 72 6f 67 72 61 6d 20 4c 69 73 74 69  BE Program Listi
5040: 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 66  ng:\n");.      f
5050: 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70  or(i=0; i<p->nOp
5060: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
5070: 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
5080: 4f 70 28 73 74 64 6f 75 74 2c 20 69 2c 20 26 61  Op(stdout, i, &a
5090: 4f 70 5b 69 5d 29 3b 0a 20 20 20 20 20 20 7d 0a  Op[i]);.      }.
50a0: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d      }.    if( p-
50b0: 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  >db->flags & SQL
50c0: 49 54 45 5f 56 64 62 65 45 51 50 20 29 7b 0a 20  ITE_VdbeEQP ){. 
50d0: 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
50e0: 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20  p->nOp; i++){.  
50f0: 20 20 20 20 20 20 69 66 28 20 61 4f 70 5b 69 5d        if( aOp[i]
5100: 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c  .opcode==OP_Expl
5110: 61 69 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ain ){.         
5120: 20 69 66 28 20 6f 6e 63 65 20 29 20 70 72 69 6e   if( once ) prin
5130: 74 66 28 22 56 44 42 45 20 51 75 65 72 79 20 50  tf("VDBE Query P
5140: 6c 61 6e 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20  lan:\n");.      
5150: 20 20 20 20 70 72 69 6e 74 66 28 22 25 73 5c 6e      printf("%s\n
5160: 22 2c 20 61 4f 70 5b 69 5d 2e 70 34 2e 7a 29 3b  ", aOp[i].p4.z);
5170: 0a 20 20 20 20 20 20 20 20 20 20 6f 6e 63 65 20  .          once 
5180: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  = 0;.        }. 
5190: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
51a0: 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67   if( p->db->flag
51b0: 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54  s & SQLITE_VdbeT
51c0: 72 61 63 65 20 29 20 20 70 72 69 6e 74 66 28 22  race )  printf("
51d0: 56 44 42 45 20 54 72 61 63 65 3a 5c 6e 22 29 3b  VDBE Trace:\n");
51e0: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e  .  }.  sqlite3En
51f0: 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b  dBenignMalloc();
5200: 0a 23 65 6e 64 69 66 0a 20 20 66 6f 72 28 70 4f  .#endif.  for(pO
5210: 70 3d 26 61 4f 70 5b 70 2d 3e 70 63 5d 3b 20 31  p=&aOp[p->pc]; 1
5220: 3b 20 70 4f 70 2b 2b 29 7b 0a 20 20 20 20 2f 2a  ; pOp++){.    /*
5230: 20 45 72 72 6f 72 73 20 61 72 65 20 64 65 74 65   Errors are dete
5240: 63 74 65 64 20 62 79 20 69 6e 64 69 76 69 64 75  cted by individu
5250: 61 6c 20 6f 70 63 6f 64 65 73 2c 20 77 69 74 68  al opcodes, with
5260: 20 61 6e 20 69 6d 6d 65 64 69 61 74 65 0a 20 20   an immediate.  
5270: 20 20 2a 2a 20 6a 75 6d 70 73 20 74 6f 20 61 62    ** jumps to ab
5280: 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
5290: 2e 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28  . */.    assert(
52a0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
52b0: 3b 0a 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ;..    assert( p
52c0: 4f 70 3e 3d 61 4f 70 20 26 26 20 70 4f 70 3c 26  Op>=aOp && pOp<&
52d0: 61 4f 70 5b 70 2d 3e 6e 4f 70 5d 29 3b 0a 23 69  aOp[p->nOp]);.#i
52e0: 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c  fdef VDBE_PROFIL
52f0: 45 0a 20 20 20 20 73 74 61 72 74 20 3d 20 73 71  E.    start = sq
5300: 6c 69 74 65 33 48 77 74 69 6d 65 28 29 3b 0a 23  lite3Hwtime();.#
5310: 65 6e 64 69 66 0a 20 20 20 20 6e 56 6d 53 74 65  endif.    nVmSte
5320: 70 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  p++;.#ifdef SQLI
5330: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53  TE_ENABLE_STMT_S
5340: 43 41 4e 53 54 41 54 55 53 0a 20 20 20 20 69 66  CANSTATUS.    if
5350: 28 20 70 2d 3e 61 6e 45 78 65 63 20 29 20 70 2d  ( p->anExec ) p-
5360: 3e 61 6e 45 78 65 63 5b 28 69 6e 74 29 28 70 4f  >anExec[(int)(pO
5370: 70 2d 61 4f 70 29 5d 2b 2b 3b 0a 23 65 6e 64 69  p-aOp)]++;.#endi
5380: 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61  f..    /* Only a
5390: 6c 6c 6f 77 20 74 72 61 63 69 6e 67 20 69 66 20  llow tracing if 
53a0: 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20  SQLITE_DEBUG is 
53b0: 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a  defined..    */.
53c0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
53d0: 42 55 47 0a 20 20 20 20 69 66 28 20 64 62 2d 3e  BUG.    if( db->
53e0: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
53f0: 64 62 65 54 72 61 63 65 20 29 7b 0a 20 20 20 20  dbeTrace ){.    
5400: 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69    sqlite3VdbePri
5410: 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 28 69 6e  ntOp(stdout, (in
5420: 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 2c 20 70  t)(pOp - aOp), p
5430: 4f 70 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  Op);.    }.#endi
5440: 66 0a 20 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a  f.      ..    /*
5450: 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66   Check to see if
5460: 20 77 65 20 6e 65 65 64 20 74 6f 20 73 69 6d 75   we need to simu
5470: 6c 61 74 65 20 61 6e 20 69 6e 74 65 72 72 75 70  late an interrup
5480: 74 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20 68 61  t.  This only ha
5490: 70 70 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20  ppens.    ** if 
54a0: 77 65 20 68 61 76 65 20 61 20 73 70 65 63 69 61  we have a specia
54b0: 6c 20 74 65 73 74 20 62 75 69 6c 64 2e 0a 20 20  l test build..  
54c0: 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49    */.#ifdef SQLI
54d0: 54 45 5f 54 45 53 54 0a 20 20 20 20 69 66 28 20  TE_TEST.    if( 
54e0: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
54f0: 74 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20  t_count>0 ){.   
5500: 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72     sqlite3_inter
5510: 72 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20  rupt_count--;.  
5520: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f      if( sqlite3_
5530: 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d  interrupt_count=
5540: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  =0 ){.        sq
5550: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28  lite3_interrupt(
5560: 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  db);.      }.   
5570: 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f   }.#endif..    /
5580: 2a 20 53 61 6e 69 74 79 20 63 68 65 63 6b 69 6e  * Sanity checkin
5590: 67 20 6f 6e 20 6f 74 68 65 72 20 6f 70 65 72 61  g on other opera
55a0: 6e 64 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  nds */.#ifdef SQ
55b0: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b  LITE_DEBUG.    {
55c0: 0a 20 20 20 20 20 20 75 38 20 6f 70 50 72 6f 70  .      u8 opProp
55d0: 65 72 74 79 20 3d 20 73 71 6c 69 74 65 33 4f 70  erty = sqlite3Op
55e0: 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 70 4f 70  codeProperty[pOp
55f0: 2d 3e 6f 70 63 6f 64 65 5d 3b 0a 20 20 20 20 20  ->opcode];.     
5600: 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79   if( (opProperty
5610: 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29 21 3d 30   & OPFLG_IN1)!=0
5620: 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
5630: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b  rt( pOp->p1>0 );
5640: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
5650: 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d   pOp->p1<=(p->nM
5660: 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
5670: 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  r) );.        as
5680: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
5690: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29  (&aMem[pOp->p1])
56a0: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
56b0: 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43  rt( sqlite3VdbeC
56c0: 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74  heckMemInvariant
56d0: 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  s(&aMem[pOp->p1]
56e0: 29 20 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47  ) );.        REG
56f0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
5700: 3e 70 31 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  >p1, &aMem[pOp->
5710: 70 31 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  p1]);.      }.  
5720: 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65      if( (opPrope
5730: 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 32 29  rty & OPFLG_IN2)
5740: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  !=0 ){.        a
5750: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
5760: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
5770: 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d  rt( pOp->p2<=(p-
5780: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
5790: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20  rsor) );.       
57a0: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
57b0: 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  lid(&aMem[pOp->p
57c0: 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  2]) );.        a
57d0: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64  ssert( sqlite3Vd
57e0: 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69  beCheckMemInvari
57f0: 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ants(&aMem[pOp->
5800: 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20  p2]) );.        
5810: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
5820: 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f  Op->p2, &aMem[pO
5830: 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d  p->p2]);.      }
5840: 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70 50 72  .      if( (opPr
5850: 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49  operty & OPFLG_I
5860: 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  N3)!=0 ){.      
5870: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5880: 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61  3>0 );.        a
5890: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
58a0: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
58b0: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
58c0: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
58d0: 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70  sValid(&aMem[pOp
58e0: 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p3]) );.      
58f0: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
5900: 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76  3VdbeCheckMemInv
5910: 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f  ariants(&aMem[pO
5920: 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20  p->p3]) );.     
5930: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
5940: 45 28 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d  E(pOp->p3, &aMem
5950: 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20  [pOp->p3]);.    
5960: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 6f    }.      if( (o
5970: 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c  pProperty & OPFL
5980: 47 5f 4f 55 54 32 29 21 3d 30 20 29 7b 0a 20 20  G_OUT2)!=0 ){.  
5990: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
59a0: 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20  p->p2>0 );.     
59b0: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
59c0: 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p2<=(p->nMem+1 -
59d0: 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
59e0: 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74          memAbout
59f0: 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65  ToChange(p, &aMe
5a00: 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20  m[pOp->p2]);.   
5a10: 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28     }.      if( (
5a20: 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46  opProperty & OPF
5a30: 4c 47 5f 4f 55 54 33 29 21 3d 30 20 29 7b 0a 20  LG_OUT3)!=0 ){. 
5a40: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
5a50: 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20  Op->p3>0 );.    
5a60: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5a70: 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p3<=(p->nMem+1 
5a80: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
5a90: 0a 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75  .        memAbou
5aa0: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d  tToChange(p, &aM
5ab0: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20  em[pOp->p3]);.  
5ac0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64      }.    }.#end
5ad0: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
5ae0: 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20  QLITE_DEBUG) || 
5af0: 64 65 66 69 6e 65 64 28 56 44 42 45 5f 50 52 4f  defined(VDBE_PRO
5b00: 46 49 4c 45 29 0a 20 20 20 20 70 4f 72 69 67 4f  FILE).    pOrigO
5b10: 70 20 3d 20 70 4f 70 3b 0a 23 65 6e 64 69 66 0a  p = pOp;.#endif.
5b20: 20 20 0a 20 20 20 20 73 77 69 74 63 68 28 20 70    .    switch( p
5b30: 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f  Op->opcode ){../
5b40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b80: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a  *************.**
5b90: 20 57 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73   What follows is
5ba0: 20 61 20 6d 61 73 73 69 76 65 20 73 77 69 74 63   a massive switc
5bb0: 68 20 73 74 61 74 65 6d 65 6e 74 20 77 68 65 72  h statement wher
5bc0: 65 20 65 61 63 68 20 63 61 73 65 20 69 6d 70 6c  e each case impl
5bd0: 65 6d 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61  ements a.** sepa
5be0: 72 61 74 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  rate instruction
5bf0: 20 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20   in the virtual 
5c00: 6d 61 63 68 69 6e 65 2e 20 20 49 66 20 77 65 20  machine.  If we 
5c10: 66 6f 6c 6c 6f 77 20 74 68 65 20 75 73 75 61 6c  follow the usual
5c20: 0a 2a 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20  .** indentation 
5c30: 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63  conventions, eac
5c40: 68 20 63 61 73 65 20 73 68 6f 75 6c 64 20 62 65  h case should be
5c50: 20 69 6e 64 65 6e 74 65 64 20 62 79 20 36 20 73   indented by 6 s
5c60: 70 61 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74  paces.  But.** t
5c70: 68 61 74 20 69 73 20 61 20 6c 6f 74 20 6f 66 20  hat is a lot of 
5c80: 77 61 73 74 65 64 20 73 70 61 63 65 20 6f 6e 20  wasted space on 
5c90: 74 68 65 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e  the left margin.
5ca0: 20 20 53 6f 20 74 68 65 20 63 6f 64 65 20 77 69    So the code wi
5cb0: 74 68 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74  thin.** the swit
5cc0: 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c  ch statement wil
5cd0: 6c 20 62 72 65 61 6b 20 77 69 74 68 20 63 6f 6e  l break with con
5ce0: 76 65 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20 66  vention and be f
5cf0: 6c 75 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68  lush-left. Anoth
5d00: 65 72 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e  er.** big commen
5d10: 74 20 28 73 69 6d 69 6c 61 72 20 74 6f 20 74 68  t (similar to th
5d20: 69 73 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72  is one) will mar
5d30: 6b 20 74 68 65 20 70 6f 69 6e 74 20 69 6e 20 74  k the point in t
5d40: 68 65 20 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a  he code where.**
5d50: 20 77 65 20 74 72 61 6e 73 69 74 69 6f 6e 20 62   we transition b
5d60: 61 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e  ack to normal in
5d70: 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  dentation..**.**
5d80: 20 54 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20   The formatting 
5d90: 6f 66 20 65 61 63 68 20 63 61 73 65 20 69 73 20  of each case is 
5da0: 69 6d 70 6f 72 74 61 6e 74 2e 20 20 54 68 65 20  important.  The 
5db0: 6d 61 6b 65 66 69 6c 65 20 66 6f 72 20 53 51 4c  makefile for SQL
5dc0: 69 74 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73  ite.** generates
5dd0: 20 74 77 6f 20 43 20 66 69 6c 65 73 20 22 6f 70   two C files "op
5de0: 63 6f 64 65 73 2e 68 22 20 61 6e 64 20 22 6f 70  codes.h" and "op
5df0: 63 6f 64 65 73 2e 63 22 20 62 79 20 73 63 61 6e  codes.c" by scan
5e00: 6e 69 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c  ning this.** fil
5e10: 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69  e looking for li
5e20: 6e 65 73 20 74 68 61 74 20 62 65 67 69 6e 20 77  nes that begin w
5e30: 69 74 68 20 22 63 61 73 65 20 4f 50 5f 22 2e 20  ith "case OP_". 
5e40: 20 54 68 65 20 6f 70 63 6f 64 65 73 2e 68 20 66   The opcodes.h f
5e50: 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20  iles.** will be 
5e60: 66 69 6c 6c 65 64 20 77 69 74 68 20 23 64 65 66  filled with #def
5e70: 69 6e 65 73 20 74 68 61 74 20 67 69 76 65 20 75  ines that give u
5e80: 6e 69 71 75 65 20 69 6e 74 65 67 65 72 20 76 61  nique integer va
5e90: 6c 75 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20  lues to each.** 
5ea0: 6f 70 63 6f 64 65 20 61 6e 64 20 74 68 65 20 6f  opcode and the o
5eb0: 70 63 6f 64 65 73 2e 63 20 66 69 6c 65 20 69 73  pcodes.c file is
5ec0: 20 66 69 6c 6c 65 64 20 77 69 74 68 20 61 6e 20   filled with an 
5ed0: 61 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73  array of strings
5ee0: 20 77 68 65 72 65 0a 2a 2a 20 65 61 63 68 20 73   where.** each s
5ef0: 74 72 69 6e 67 20 69 73 20 74 68 65 20 73 79 6d  tring is the sym
5f00: 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20 74  bolic name for t
5f10: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
5f20: 20 6f 70 63 6f 64 65 2e 20 20 49 66 20 74 68 65   opcode.  If the
5f30: 0a 2a 2a 20 63 61 73 65 20 73 74 61 74 65 6d 65  .** case stateme
5f40: 6e 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62  nt is followed b
5f50: 79 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74  y a comment of t
5f60: 68 65 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65  he form "/# same
5f70: 20 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74   as ... #/".** t
5f80: 68 61 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75  hat comment is u
5f90: 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  sed to determine
5fa0: 20 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20   the particular 
5fb0: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63  value of the opc
5fc0: 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72  ode..**.** Other
5fd0: 20 6b 65 79 77 6f 72 64 73 20 69 6e 20 74 68 65   keywords in the
5fe0: 20 63 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f   comment that fo
5ff0: 6c 6c 6f 77 73 20 65 61 63 68 20 63 61 73 65 20  llows each case 
6000: 61 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63  are used to.** c
6010: 6f 6e 73 74 72 75 63 74 20 74 68 65 20 4f 50 46  onstruct the OPF
6020: 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20 76  LG_INITIALIZER v
6030: 61 6c 75 65 20 74 68 61 74 20 69 6e 69 74 69 61  alue that initia
6040: 6c 69 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f 70  lizes opcodeProp
6050: 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f  erty[]..** Keywo
6060: 72 64 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31  rds include: in1
6070: 2c 20 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32  , in2, in3, out2
6080: 2c 20 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20  , out3.  See.** 
6090: 74 68 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77  the mkopcodeh.aw
60a0: 6b 20 73 63 72 69 70 74 20 66 6f 72 20 61 64 64  k script for add
60b0: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
60c0: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d  ion..**.** Docum
60d0: 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56  entation about V
60e0: 44 42 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67  DBE opcodes is g
60f0: 65 6e 65 72 61 74 65 64 20 62 79 20 73 63 61 6e  enerated by scan
6100: 6e 69 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a  ning this file.*
6110: 2a 20 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74  * for lines of t
6120: 68 61 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63  hat contain "Opc
6130: 6f 64 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e  ode:".  That lin
6140: 65 20 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71  e and all subseq
6150: 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20  uent.** comment 
6160: 6c 69 6e 65 73 20 61 72 65 20 75 73 65 64 20 69  lines are used i
6170: 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e  n the generation
6180: 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68   of the opcode.h
6190: 74 6d 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  tml documentatio
61a0: 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  n.** file..**.**
61b0: 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20   SUMMARY:.**.** 
61c0: 20 20 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69      Formatting i
61d0: 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73  s important to s
61e0: 63 72 69 70 74 73 20 74 68 61 74 20 73 63 61 6e  cripts that scan
61f0: 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20   this file..**  
6200: 20 20 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74     Do not deviat
6210: 65 20 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61  e from the forma
6220: 74 74 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72  tting style curr
6230: 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a  ently in use..**
6240: 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .***************
6250: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6260: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6270: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6280: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
6290: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74  ./* Opcode:  Got
62a0: 6f 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a  o * P2 * * *.**.
62b0: 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f  ** An unconditio
62c0: 6e 61 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72  nal jump to addr
62d0: 65 73 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e  ess P2..** The n
62e0: 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
62f0: 65 78 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65  executed will be
6300: 20 0a 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20   .** the one at 
6310: 69 6e 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68  index P2 from th
6320: 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a  e beginning of.*
6330: 2a 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a  * the program..*
6340: 2a 0a 2a 2a 20 54 68 65 20 50 31 20 70 61 72 61  *.** The P1 para
6350: 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 61 63 74  meter is not act
6360: 75 61 6c 6c 79 20 75 73 65 64 20 62 79 20 74 68  ually used by th
6370: 69 73 20 6f 70 63 6f 64 65 2e 20 20 48 6f 77 65  is opcode.  Howe
6380: 76 65 72 2c 20 69 74 0a 2a 2a 20 69 73 20 73 6f  ver, it.** is so
6390: 6d 65 74 69 6d 65 73 20 73 65 74 20 74 6f 20 31  metimes set to 1
63a0: 20 69 6e 73 74 65 61 64 20 6f 66 20 30 20 61 73   instead of 0 as
63b0: 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63   a hint to the c
63c0: 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c  ommand-line shel
63d0: 6c 0a 2a 2a 20 74 68 61 74 20 74 68 69 73 20 47  l.** that this G
63e0: 6f 74 6f 20 69 73 20 74 68 65 20 62 6f 74 74 6f  oto is the botto
63f0: 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 61 6e 64 20  m of a loop and 
6400: 74 68 61 74 20 74 68 65 20 6c 69 6e 65 73 20 66  that the lines f
6410: 72 6f 6d 20 50 32 20 64 6f 77 6e 0a 2a 2a 20 74  rom P2 down.** t
6420: 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20 6c 69  o the current li
6430: 6e 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64  ne should be ind
6440: 65 6e 74 65 64 20 66 6f 72 20 45 58 50 4c 41 49  ented for EXPLAI
6450: 4e 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73  N output..*/.cas
6460: 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20 20 20  e OP_Goto: {    
6470: 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
6480: 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61   */.jump_to_p2_a
6490: 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  nd_check_for_int
64a0: 65 72 72 75 70 74 3a 0a 20 20 70 4f 70 20 3d 20  errupt:.  pOp = 
64b0: 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31  &aOp[pOp->p2 - 1
64c0: 5d 3b 0a 0a 20 20 2f 2a 20 4f 70 63 6f 64 65 73  ];..  /* Opcodes
64d0: 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
64e0: 73 20 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20  s the bottom of 
64f0: 61 20 6c 6f 6f 70 20 28 4f 50 5f 4e 65 78 74 2c  a loop (OP_Next,
6500: 20 4f 50 5f 50 72 65 76 2c 0a 20 20 2a 2a 20 4f   OP_Prev,.  ** O
6510: 50 5f 56 4e 65 78 74 2c 20 4f 50 5f 52 6f 77 53  P_VNext, OP_RowS
6520: 65 74 4e 65 78 74 2c 20 6f 72 20 4f 50 5f 53 6f  etNext, or OP_So
6530: 72 74 65 72 4e 65 78 74 29 20 61 6c 6c 20 6a 75  rterNext) all ju
6540: 6d 70 20 68 65 72 65 20 75 70 6f 6e 0a 20 20 2a  mp here upon.  *
6550: 2a 20 63 6f 6d 70 6c 65 74 69 6f 6e 2e 20 20 43  * completion.  C
6560: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 73  heck to see if s
6570: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
6580: 28 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c  () has been call
6590: 65 64 0a 20 20 2a 2a 20 6f 72 20 69 66 20 74 68  ed.  ** or if th
65a0: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
65b0: 61 63 6b 20 6e 65 65 64 73 20 74 6f 20 62 65 20  ack needs to be 
65c0: 69 6e 76 6f 6b 65 64 2e 20 0a 20 20 2a 2a 0a 20  invoked. .  **. 
65d0: 20 2a 2a 20 54 68 69 73 20 63 6f 64 65 20 75 73   ** This code us
65e0: 65 73 20 75 6e 73 74 72 75 63 74 75 72 65 64 20  es unstructured 
65f0: 22 67 6f 74 6f 22 20 73 74 61 74 65 6d 65 6e 74  "goto" statement
6600: 73 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 6c  s and does not l
6610: 6f 6f 6b 20 63 6c 65 61 6e 2e 0a 20 20 2a 2a 20  ook clean..  ** 
6620: 42 75 74 20 74 68 61 74 20 69 73 20 6e 6f 74 20  But that is not 
6630: 64 75 65 20 74 6f 20 73 6c 6f 70 70 79 20 63 6f  due to sloppy co
6640: 64 69 6e 67 20 68 61 62 69 74 73 2e 20 54 68 65  ding habits. The
6650: 20 63 6f 64 65 20 69 73 20 77 72 69 74 74 65 6e   code is written
6660: 20 74 68 69 73 0a 20 20 2a 2a 20 77 61 79 20 66   this.  ** way f
6670: 6f 72 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20  or performance, 
6680: 74 6f 20 61 76 6f 69 64 20 68 61 76 69 6e 67 20  to avoid having 
6690: 74 6f 20 72 75 6e 20 74 68 65 20 69 6e 74 65 72  to run the inter
66a0: 72 75 70 74 20 61 6e 64 20 70 72 6f 67 72 65 73  rupt and progres
66b0: 73 0a 20 20 2a 2a 20 63 68 65 63 6b 73 20 6f 6e  s.  ** checks on
66c0: 20 65 76 65 72 79 20 6f 70 63 6f 64 65 2e 20 20   every opcode.  
66d0: 54 68 69 73 20 68 65 6c 70 73 20 73 71 6c 69 74  This helps sqlit
66e0: 65 33 5f 73 74 65 70 28 29 20 74 6f 20 72 75 6e  e3_step() to run
66f0: 20 61 62 6f 75 74 20 31 2e 35 25 0a 20 20 2a 2a   about 1.5%.  **
6700: 20 66 61 73 74 65 72 20 61 63 63 6f 72 64 69 6e   faster accordin
6710: 67 20 74 6f 20 22 76 61 6c 67 72 69 6e 64 20 2d  g to "valgrind -
6720: 2d 74 6f 6f 6c 3d 63 61 63 68 65 67 72 69 6e 64  -tool=cachegrind
6730: 22 20 2a 2f 0a 63 68 65 63 6b 5f 66 6f 72 5f 69  " */.check_for_i
6740: 6e 74 65 72 72 75 70 74 3a 0a 20 20 69 66 28 20  nterrupt:.  if( 
6750: 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75  db->u1.isInterru
6760: 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72  pted ) goto abor
6770: 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75  t_due_to_interru
6780: 70 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  pt;.#ifndef SQLI
6790: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
67a0: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 43  _CALLBACK.  /* C
67b0: 61 6c 6c 20 74 68 65 20 70 72 6f 67 72 65 73 73  all the progress
67c0: 20 63 61 6c 6c 62 61 63 6b 20 69 66 20 69 74 20   callback if it 
67d0: 69 73 20 63 6f 6e 66 69 67 75 72 65 64 20 61 6e  is configured an
67e0: 64 20 74 68 65 20 72 65 71 75 69 72 65 64 20 6e  d the required n
67f0: 75 6d 62 65 72 0a 20 20 2a 2a 20 6f 66 20 56 44  umber.  ** of VD
6800: 42 45 20 6f 70 73 20 68 61 76 65 20 62 65 65 6e  BE ops have been
6810: 20 65 78 65 63 75 74 65 64 20 28 65 69 74 68 65   executed (eithe
6820: 72 20 73 69 6e 63 65 20 74 68 69 73 20 69 6e 76  r since this inv
6830: 6f 63 61 74 69 6f 6e 20 6f 66 0a 20 20 2a 2a 20  ocation of.  ** 
6840: 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63 28  sqlite3VdbeExec(
6850: 29 20 6f 72 20 73 69 6e 63 65 20 6c 61 73 74 20  ) or since last 
6860: 74 69 6d 65 20 74 68 65 20 70 72 6f 67 72 65 73  time the progres
6870: 73 20 63 61 6c 6c 62 61 63 6b 20 77 61 73 20 63  s callback was c
6880: 61 6c 6c 65 64 29 2e 0a 20 20 2a 2a 20 49 66 20  alled)..  ** If 
6890: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
68a0: 6c 62 61 63 6b 20 72 65 74 75 72 6e 73 20 6e 6f  lback returns no
68b0: 6e 2d 7a 65 72 6f 2c 20 65 78 69 74 20 74 68 65  n-zero, exit the
68c0: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
68d0: 20 77 69 74 68 0a 20 20 2a 2a 20 61 20 72 65 74   with.  ** a ret
68e0: 75 72 6e 20 63 6f 64 65 20 53 51 4c 49 54 45 5f  urn code SQLITE_
68f0: 41 42 4f 52 54 2e 0a 20 20 2a 2f 0a 20 20 69 66  ABORT..  */.  if
6900: 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21  ( db->xProgress!
6910: 3d 30 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e  =0 && nVmStep>=n
6920: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 29 7b  ProgressLimit ){
6930: 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d  .    assert( db-
6940: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 21 3d 30  >nProgressOps!=0
6950: 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73   );.    nProgres
6960: 73 4c 69 6d 69 74 20 3d 20 6e 56 6d 53 74 65 70  sLimit = nVmStep
6970: 20 2b 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73   + db->nProgress
6980: 4f 70 73 20 2d 20 28 6e 56 6d 53 74 65 70 25 64  Ops - (nVmStep%d
6990: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 29  b->nProgressOps)
69a0: 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78 50  ;.    if( db->xP
69b0: 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f  rogress(db->pPro
69c0: 67 72 65 73 73 41 72 67 29 20 29 7b 0a 20 20 20  gressArg) ){.   
69d0: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49     rc = SQLITE_I
69e0: 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20 20 20  NTERRUPT;.      
69f0: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
6a00: 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  o_error;.    }. 
6a10: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 62   }.#endif.  .  b
6a20: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
6a30: 64 65 3a 20 20 47 6f 73 75 62 20 50 31 20 50 32  de:  Gosub P1 P2
6a40: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
6a50: 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 61  te the current a
6a60: 64 64 72 65 73 73 20 6f 6e 74 6f 20 72 65 67 69  ddress onto regi
6a70: 73 74 65 72 20 50 31 0a 2a 2a 20 61 6e 64 20 74  ster P1.** and t
6a80: 68 65 6e 20 6a 75 6d 70 20 74 6f 20 61 64 64 72  hen jump to addr
6a90: 65 73 73 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ess P2..*/.case 
6aa0: 4f 50 5f 47 6f 73 75 62 3a 20 7b 20 20 20 20 20  OP_Gosub: {     
6ab0: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
6ac0: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
6ad0: 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31  >p1>0 && pOp->p1
6ae0: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
6af0: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
6b00: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
6b10: 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
6b20: 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28   VdbeMemDynamic(
6b30: 70 49 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 6d 65  pIn1)==0 );.  me
6b40: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
6b50: 2c 20 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d  , pIn1);.  pIn1-
6b60: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
6b70: 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20  ;.  pIn1->u.i = 
6b80: 28 69 6e 74 29 28 70 4f 70 2d 61 4f 70 29 3b 0a  (int)(pOp-aOp);.
6b90: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
6ba0: 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b  (pOp->p1, pIn1);
6bb0: 0a 0a 20 20 2f 2a 20 4d 6f 73 74 20 6a 75 6d 70  ..  /* Most jump
6bc0: 20 6f 70 65 72 61 74 69 6f 6e 73 20 64 6f 20 61   operations do a
6bd0: 20 67 6f 74 6f 20 74 6f 20 74 68 69 73 20 73 70   goto to this sp
6be0: 6f 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 75  ot in order to u
6bf0: 70 64 61 74 65 0a 20 20 2a 2a 20 74 68 65 20 70  pdate.  ** the p
6c00: 4f 70 20 70 6f 69 6e 74 65 72 2e 20 2a 2f 0a 6a  Op pointer. */.j
6c10: 75 6d 70 5f 74 6f 5f 70 32 3a 0a 20 20 70 4f 70  ump_to_p2:.  pOp
6c20: 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20   = &aOp[pOp->p2 
6c30: 2d 20 31 5d 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  - 1];.  break;.}
6c40: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 52 65  ../* Opcode:  Re
6c50: 74 75 72 6e 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  turn P1 * * * *.
6c60: 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68  **.** Jump to th
6c70: 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
6c80: 6f 6e 20 61 66 74 65 72 20 74 68 65 20 61 64 64  on after the add
6c90: 72 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72  ress in register
6ca0: 20 50 31 2e 20 20 41 66 74 65 72 0a 2a 2a 20 74   P1.  After.** t
6cb0: 68 65 20 6a 75 6d 70 2c 20 72 65 67 69 73 74 65  he jump, registe
6cc0: 72 20 50 31 20 62 65 63 6f 6d 65 73 20 75 6e 64  r P1 becomes und
6cd0: 65 66 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  efined..*/.case 
6ce0: 4f 50 5f 52 65 74 75 72 6e 3a 20 7b 20 20 20 20  OP_Return: {    
6cf0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
6d00: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
6d10: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
6d20: 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3d  rt( pIn1->flags=
6d30: 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 4f  =MEM_Int );.  pO
6d40: 70 20 3d 20 26 61 4f 70 5b 70 49 6e 31 2d 3e 75  p = &aOp[pIn1->u
6d50: 2e 69 5d 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  .i];.  pIn1->fla
6d60: 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e  gs = MEM_Undefin
6d70: 65 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ed;.  break;.}..
6d80: 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 69 74 43  /* Opcode: InitC
6d90: 6f 72 6f 75 74 69 6e 65 20 50 31 20 50 32 20 50  oroutine P1 P2 P
6da0: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20  3 * *.**.** Set 
6db0: 75 70 20 72 65 67 69 73 74 65 72 20 50 31 20 73  up register P1 s
6dc0: 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 59  o that it will Y
6dd0: 69 65 6c 64 20 74 6f 20 74 68 65 20 63 6f 72 6f  ield to the coro
6de0: 75 74 69 6e 65 0a 2a 2a 20 6c 6f 63 61 74 65 64  utine.** located
6df0: 20 61 74 20 61 64 64 72 65 73 73 20 50 33 2e 0a   at address P3..
6e00: 2a 2a 0a 2a 2a 20 49 66 20 50 32 21 3d 30 20 74  **.** If P2!=0 t
6e10: 68 65 6e 20 74 68 65 20 63 6f 72 6f 75 74 69 6e  hen the coroutin
6e20: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
6e30: 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c   immediately fol
6e40: 6c 6f 77 73 0a 2a 2a 20 74 68 69 73 20 6f 70 63  lows.** this opc
6e50: 6f 64 65 2e 20 20 53 6f 20 6a 75 6d 70 20 6f 76  ode.  So jump ov
6e60: 65 72 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65  er the coroutine
6e70: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
6e80: 74 6f 0a 2a 2a 20 61 64 64 72 65 73 73 20 50 32  to.** address P2
6e90: 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
6ea0: 3a 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65 0a 2a  : EndCoroutine.*
6eb0: 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 69 74 43 6f  /.case OP_InitCo
6ec0: 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20 20 2f  routine: {     /
6ed0: 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65  * jump */.  asse
6ee0: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26  rt( pOp->p1>0 &&
6ef0: 20 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e    pOp->p1<=(p->n
6f00: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
6f10: 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  or) );.  assert(
6f20: 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 26 26 20 70   pOp->p2>=0 && p
6f30: 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b  Op->p2<p->nOp );
6f40: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
6f50: 70 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 33  p3>=0 && pOp->p3
6f60: 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f 75  <p->nOp );.  pOu
6f70: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
6f80: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 21 56  1];.  assert( !V
6f90: 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f  dbeMemDynamic(pO
6fa0: 75 74 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  ut) );.  pOut->u
6fb0: 2e 69 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31  .i = pOp->p3 - 1
6fc0: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
6fd0: 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 69 66 28  = MEM_Int;.  if(
6fe0: 20 70 4f 70 2d 3e 70 32 20 29 20 67 6f 74 6f 20   pOp->p2 ) goto 
6ff0: 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72  jump_to_p2;.  br
7000: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
7010: 65 3a 20 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65  e:  EndCoroutine
7020: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
7030: 2a 20 54 68 65 20 69 6e 73 74 72 75 63 74 69 6f  * The instructio
7040: 6e 20 61 74 20 74 68 65 20 61 64 64 72 65 73 73  n at the address
7050: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
7060: 69 73 20 61 20 59 69 65 6c 64 2e 0a 2a 2a 20 4a  is a Yield..** J
7070: 75 6d 70 20 74 6f 20 74 68 65 20 50 32 20 70 61  ump to the P2 pa
7080: 72 61 6d 65 74 65 72 20 6f 66 20 74 68 61 74 20  rameter of that 
7090: 59 69 65 6c 64 2e 0a 2a 2a 20 41 66 74 65 72 20  Yield..** After 
70a0: 74 68 65 20 6a 75 6d 70 2c 20 72 65 67 69 73 74  the jump, regist
70b0: 65 72 20 50 31 20 62 65 63 6f 6d 65 73 20 75 6e  er P1 becomes un
70c0: 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 53  defined..**.** S
70d0: 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74 43 6f 72  ee also: InitCor
70e0: 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f  outine.*/.case O
70f0: 50 5f 45 6e 64 43 6f 72 6f 75 74 69 6e 65 3a 20  P_EndCoroutine: 
7100: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69  {           /* i
7110: 6e 31 20 2a 2f 0a 20 20 56 64 62 65 4f 70 20 2a  n1 */.  VdbeOp *
7120: 70 43 61 6c 6c 65 72 3b 0a 20 20 70 49 6e 31 20  pCaller;.  pIn1 
7130: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
7140: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
7150: 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74  ->flags==MEM_Int
7160: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49   );.  assert( pI
7170: 6e 31 2d 3e 75 2e 69 3e 3d 30 20 26 26 20 70 49  n1->u.i>=0 && pI
7180: 6e 31 2d 3e 75 2e 69 3c 70 2d 3e 6e 4f 70 20 29  n1->u.i<p->nOp )
7190: 3b 0a 20 20 70 43 61 6c 6c 65 72 20 3d 20 26 61  ;.  pCaller = &a
71a0: 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20  Op[pIn1->u.i];. 
71b0: 20 61 73 73 65 72 74 28 20 70 43 61 6c 6c 65 72   assert( pCaller
71c0: 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 59 69 65  ->opcode==OP_Yie
71d0: 6c 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ld );.  assert( 
71e0: 70 43 61 6c 6c 65 72 2d 3e 70 32 3e 3d 30 20 26  pCaller->p2>=0 &
71f0: 26 20 70 43 61 6c 6c 65 72 2d 3e 70 32 3c 70 2d  & pCaller->p2<p-
7200: 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f 70 20 3d 20  >nOp );.  pOp = 
7210: 26 61 4f 70 5b 70 43 61 6c 6c 65 72 2d 3e 70 32  &aOp[pCaller->p2
7220: 20 2d 20 31 5d 3b 0a 20 20 70 49 6e 31 2d 3e 66   - 1];.  pIn1->f
7230: 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66  lags = MEM_Undef
7240: 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ined;.  break;.}
7250: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 59 69  ../* Opcode:  Yi
7260: 65 6c 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  eld P1 P2 * * *.
7270: 2a 2a 0a 2a 2a 20 53 77 61 70 20 74 68 65 20 70  **.** Swap the p
7280: 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 77  rogram counter w
7290: 69 74 68 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ith the value in
72a0: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 54   register P1.  T
72b0: 68 69 73 0a 2a 2a 20 68 61 73 20 74 68 65 20 65  his.** has the e
72c0: 66 66 65 63 74 20 6f 66 20 79 69 65 6c 64 69 6e  ffect of yieldin
72d0: 67 20 74 6f 20 61 20 63 6f 72 6f 75 74 69 6e 65  g to a coroutine
72e0: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63  ..**.** If the c
72f0: 6f 72 6f 75 74 69 6e 65 20 74 68 61 74 20 69 73  oroutine that is
7300: 20 6c 61 75 6e 63 68 65 64 20 62 79 20 74 68 69   launched by thi
7310: 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e  s instruction en
7320: 64 73 20 77 69 74 68 0a 2a 2a 20 59 69 65 6c 64  ds with.** Yield
7330: 20 6f 72 20 52 65 74 75 72 6e 20 74 68 65 6e 20   or Return then 
7340: 63 6f 6e 74 69 6e 75 65 20 74 6f 20 74 68 65 20  continue to the 
7350: 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
7360: 2e 20 20 42 75 74 20 69 66 0a 2a 2a 20 74 68 65  .  But if.** the
7370: 20 63 6f 72 6f 75 74 69 6e 65 20 6c 61 75 6e 63   coroutine launc
7380: 68 65 64 20 62 79 20 74 68 69 73 20 69 6e 73 74  hed by this inst
7390: 72 75 63 74 69 6f 6e 20 65 6e 64 73 20 77 69 74  ruction ends wit
73a0: 68 0a 2a 2a 20 45 6e 64 43 6f 72 6f 75 74 69 6e  h.** EndCoroutin
73b0: 65 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  e, then jump to 
73c0: 50 32 20 72 61 74 68 65 72 20 74 68 61 6e 20 63  P2 rather than c
73d0: 6f 6e 74 69 6e 75 69 6e 67 20 77 69 74 68 20 74  ontinuing with t
73e0: 68 65 0a 2a 2a 20 6e 65 78 74 20 69 6e 73 74 72  he.** next instr
73f0: 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65  uction..**.** Se
7400: 65 20 61 6c 73 6f 3a 20 49 6e 69 74 43 6f 72 6f  e also: InitCoro
7410: 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50  utine.*/.case OP
7420: 5f 59 69 65 6c 64 3a 20 7b 20 20 20 20 20 20 20  _Yield: {       
7430: 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6a 75 6d       /* in1, jum
7440: 70 20 2a 2f 0a 20 20 69 6e 74 20 70 63 44 65 73  p */.  int pcDes
7450: 74 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  t;.  pIn1 = &aMe
7460: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
7470: 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e  sert( VdbeMemDyn
7480: 61 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b  amic(pIn1)==0 );
7490: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d  .  pIn1->flags =
74a0: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 63 44 65   MEM_Int;.  pcDe
74b0: 73 74 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e  st = (int)pIn1->
74c0: 75 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69  u.i;.  pIn1->u.i
74d0: 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61   = (int)(pOp - a
74e0: 4f 70 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  Op);.  REGISTER_
74f0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70  TRACE(pOp->p1, p
7500: 49 6e 31 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61  In1);.  pOp = &a
7510: 4f 70 5b 70 63 44 65 73 74 5d 3b 0a 20 20 62 72  Op[pcDest];.  br
7520: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
7530: 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c 20 20  e:  HaltIfNull  
7540: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
7550: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
7560: 5b 50 33 5d 3d 6e 75 6c 6c 20 68 61 6c 74 0a 2a  [P3]=null halt.*
7570: 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76  *.** Check the v
7580: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
7590: 20 50 33 2e 20 20 49 66 20 69 74 20 69 73 20 4e   P3.  If it is N
75a0: 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74 20 75 73  ULL then Halt us
75b0: 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72  ing.** parameter
75c0: 20 50 31 2c 20 50 32 2c 20 61 6e 64 20 50 34 20   P1, P2, and P4 
75d0: 61 73 20 69 66 20 74 68 69 73 20 77 65 72 65 20  as if this were 
75e0: 61 20 48 61 6c 74 20 69 6e 73 74 72 75 63 74 69  a Halt instructi
75f0: 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 76  on.  If the.** v
7600: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
7610: 20 50 33 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   P3 is not NULL,
7620: 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69   then this routi
7630: 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  ne is a no-op..*
7640: 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d 65 74  * The P5 paramet
7650: 65 72 20 73 68 6f 75 6c 64 20 62 65 20 31 2e 0a  er should be 1..
7660: 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 49  */.case OP_HaltI
7670: 66 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 2f 2a  fNull: {      /*
7680: 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20 3d   in3 */.  pIn3 =
7690: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
76a0: 0a 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c  .  if( (pIn3->fl
76b0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
76c0: 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a  =0 ) break;.  /*
76d0: 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   Fall through in
76e0: 74 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a 7d 0a  to OP_Halt */.}.
76f0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c  ./* Opcode:  Hal
7700: 74 20 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a  t P1 P2 * P4 P5.
7710: 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65 64  **.** Exit immed
7720: 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70 65  iately.  All ope
7730: 6e 20 63 75 72 73 6f 72 73 2c 20 65 74 63 20 61  n cursors, etc a
7740: 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20 61 75 74  re closed.** aut
7750: 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a  omatically..**.*
7760: 2a 20 50 31 20 69 73 20 74 68 65 20 72 65 73 75  * P1 is the resu
7770: 6c 74 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64  lt code returned
7780: 20 62 79 20 73 71 6c 69 74 65 33 5f 65 78 65 63   by sqlite3_exec
7790: 28 29 2c 20 73 71 6c 69 74 65 33 5f 72 65 73 65  (), sqlite3_rese
77a0: 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69 74  t(),.** or sqlit
77b0: 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 2e 20 20  e3_finalize().  
77c0: 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20 68 61 6c  For a normal hal
77d0: 74 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20 62  t, this should b
77e0: 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28 30 29 2e  e SQLITE_OK (0).
77f0: 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72 73 2c 20  .** For errors, 
7800: 69 74 20 63 61 6e 20 62 65 20 73 6f 6d 65 20 6f  it can be some o
7810: 74 68 65 72 20 76 61 6c 75 65 2e 20 20 49 66 20  ther value.  If 
7820: 50 31 21 3d 30 20 74 68 65 6e 20 50 32 20 77 69  P1!=0 then P2 wi
7830: 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20  ll determine.** 
7840: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
7850: 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 63  o rollback the c
7860: 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69  urrent transacti
7870: 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72 6f 6c 6c  on.  Do not roll
7880: 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d 4f  back.** if P2==O
7890: 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68 65 20 72  E_Fail. Do the r
78a0: 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32 3d 3d 4f  ollback if P2==O
78b0: 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20 49 66 20  E_Rollback.  If 
78c0: 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a 2a  P2==OE_Abort,.**
78d0: 20 74 68 65 6e 20 62 61 63 6b 20 6f 75 74 20 61   then back out a
78e0: 6c 6c 20 63 68 61 6e 67 65 73 20 74 68 61 74 20  ll changes that 
78f0: 68 61 76 65 20 6f 63 63 75 72 72 65 64 20 64 75  have occurred du
7900: 72 69 6e 67 20 74 68 69 73 20 65 78 65 63 75 74  ring this execut
7910: 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 56 44  ion of the.** VD
7920: 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 72  BE, but do not r
7930: 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e  ollback the tran
7940: 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20  saction. .**.** 
7950: 49 66 20 50 34 20 69 73 20 6e 6f 74 20 6e 75 6c  If P4 is not nul
7960: 6c 20 74 68 65 6e 20 69 74 20 69 73 20 61 6e 20  l then it is an 
7970: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74  error message st
7980: 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69  ring..**.** P5 i
7990: 73 20 61 20 76 61 6c 75 65 20 62 65 74 77 65 65  s a value betwee
79a0: 6e 20 30 20 61 6e 64 20 34 2c 20 69 6e 63 6c 75  n 0 and 4, inclu
79b0: 73 69 76 65 2c 20 74 68 61 74 20 6d 6f 64 69 66  sive, that modif
79c0: 69 65 73 20 74 68 65 20 50 34 20 73 74 72 69 6e  ies the P4 strin
79d0: 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 30 3a 20 20  g..**.**    0:  
79e0: 28 6e 6f 20 63 68 61 6e 67 65 29 0a 2a 2a 20 20  (no change).**  
79f0: 20 20 31 3a 20 20 4e 4f 54 20 4e 55 4c 4c 20 63    1:  NOT NULL c
7a00: 6f 6e 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a  ontraint failed:
7a10: 20 50 34 0a 2a 2a 20 20 20 20 32 3a 20 20 55 4e   P4.**    2:  UN
7a20: 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
7a30: 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20  failed: P4.**   
7a40: 20 33 3a 20 20 43 48 45 43 4b 20 63 6f 6e 73 74   3:  CHECK const
7a50: 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34  raint failed: P4
7a60: 0a 2a 2a 20 20 20 20 34 3a 20 20 46 4f 52 45 49  .**    4:  FOREI
7a70: 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e  GN KEY constrain
7a80: 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 0a  t failed: P4.**.
7a90: 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20  ** If P5 is not 
7aa0: 7a 65 72 6f 20 61 6e 64 20 50 34 20 69 73 20 4e  zero and P4 is N
7ab0: 55 4c 4c 2c 20 74 68 65 6e 20 65 76 65 72 79 74  ULL, then everyt
7ac0: 68 69 6e 67 20 61 66 74 65 72 20 74 68 65 20 22  hing after the "
7ad0: 3a 22 20 69 73 0a 2a 2a 20 6f 6d 69 74 74 65 64  :" is.** omitted
7ae0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 69 73  ..**.** There is
7af0: 20 61 6e 20 69 6d 70 6c 69 65 64 20 22 48 61 6c   an implied "Hal
7b00: 74 20 30 20 30 20 30 22 20 69 6e 73 74 72 75 63  t 0 0 0" instruc
7b10: 74 69 6f 6e 20 69 6e 73 65 72 74 65 64 20 61 74  tion inserted at
7b20: 20 74 68 65 20 76 65 72 79 20 65 6e 64 20 6f 66   the very end of
7b30: 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f 67 72 61  .** every progra
7b40: 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20 70 61  m.  So a jump pa
7b50: 73 74 20 74 68 65 20 6c 61 73 74 20 69 6e 73 74  st the last inst
7b60: 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 70  ruction of the p
7b70: 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74 68 65  rogram.** is the
7b80: 20 73 61 6d 65 20 61 73 20 65 78 65 63 75 74 69   same as executi
7b90: 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65  ng Halt..*/.case
7ba0: 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20 20 56 64   OP_Halt: {.  Vd
7bb0: 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
7bc0: 0a 20 20 69 6e 74 20 70 63 78 3b 0a 0a 20 20 70  .  int pcx;..  p
7bd0: 63 78 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d  cx = (int)(pOp -
7be0: 20 61 4f 70 29 3b 0a 20 20 69 66 28 20 70 4f 70   aOp);.  if( pOp
7bf0: 2d 3e 70 31 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ->p1==SQLITE_OK 
7c00: 26 26 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a  && p->pFrame ){.
7c10: 20 20 20 20 2f 2a 20 48 61 6c 74 20 74 68 65 20      /* Halt the 
7c20: 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 52 65 74  sub-program. Ret
7c30: 75 72 6e 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74  urn control to t
7c40: 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65 2e  he parent frame.
7c50: 20 2a 2f 0a 20 20 20 20 70 46 72 61 6d 65 20 3d   */.    pFrame =
7c60: 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 20 20   p->pFrame;.    
7c70: 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61  p->pFrame = pFra
7c80: 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 0a 20 20 20  me->pParent;.   
7c90: 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20   p->nFrame--;.  
7ca0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
7cb0: 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e  Changes(db, p->n
7cc0: 43 68 61 6e 67 65 29 3b 0a 20 20 20 20 70 63 78  Change);.    pcx
7cd0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 46 72   = sqlite3VdbeFr
7ce0: 61 6d 65 52 65 73 74 6f 72 65 28 70 46 72 61 6d  ameRestore(pFram
7cf0: 65 29 3b 0a 20 20 20 20 6c 61 73 74 52 6f 77 69  e);.    lastRowi
7d00: 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  d = db->lastRowi
7d10: 64 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  d;.    if( pOp->
7d20: 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b  p2==OE_Ignore ){
7d30: 0a 20 20 20 20 20 20 2f 2a 20 49 6e 73 74 72 75  .      /* Instru
7d40: 63 74 69 6f 6e 20 70 63 78 20 69 73 20 74 68 65  ction pcx is the
7d50: 20 4f 50 5f 50 72 6f 67 72 61 6d 20 74 68 61 74   OP_Program that
7d60: 20 69 6e 76 6f 6b 65 64 20 74 68 65 20 73 75 62   invoked the sub
7d70: 2d 70 72 6f 67 72 61 6d 20 0a 20 20 20 20 20 20  -program .      
7d80: 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69  ** currently bei
7d90: 6e 67 20 68 61 6c 74 65 64 2e 20 49 66 20 74 68  ng halted. If th
7da0: 65 20 70 32 20 69 6e 73 74 72 75 63 74 69 6f 6e  e p2 instruction
7db0: 20 6f 66 20 74 68 69 73 20 4f 50 5f 48 61 6c 74   of this OP_Halt
7dc0: 0a 20 20 20 20 20 20 2a 2a 20 69 6e 73 74 72 75  .      ** instru
7dd0: 63 74 69 6f 6e 20 69 73 20 73 65 74 20 74 6f 20  ction is set to 
7de0: 4f 45 5f 49 67 6e 6f 72 65 2c 20 74 68 65 6e 20  OE_Ignore, then 
7df0: 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  the sub-program 
7e00: 69 73 20 74 68 72 6f 77 69 6e 67 0a 20 20 20 20  is throwing.    
7e10: 20 20 2a 2a 20 61 6e 20 49 47 4e 4f 52 45 20 65    ** an IGNORE e
7e20: 78 63 65 70 74 69 6f 6e 2e 20 49 6e 20 74 68 69  xception. In thi
7e30: 73 20 63 61 73 65 20 6a 75 6d 70 20 74 6f 20 74  s case jump to t
7e40: 68 65 20 61 64 64 72 65 73 73 20 73 70 65 63 69  he address speci
7e50: 66 69 65 64 0a 20 20 20 20 20 20 2a 2a 20 61 73  fied.      ** as
7e60: 20 74 68 65 20 70 32 20 6f 66 20 74 68 65 20 63   the p2 of the c
7e70: 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61  alling OP_Progra
7e80: 6d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 63 78  m.  */.      pcx
7e90: 20 3d 20 70 2d 3e 61 4f 70 5b 70 63 78 5d 2e 70   = p->aOp[pcx].p
7ea0: 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61  2-1;.    }.    a
7eb0: 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20  Op = p->aOp;.   
7ec0: 20 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b   aMem = p->aMem;
7ed0: 0a 20 20 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b  .    pOp = &aOp[
7ee0: 70 63 78 5d 3b 0a 20 20 20 20 62 72 65 61 6b 3b  pcx];.    break;
7ef0: 0a 20 20 7d 0a 20 20 70 2d 3e 72 63 20 3d 20 70  .  }.  p->rc = p
7f00: 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e 65 72 72  Op->p1;.  p->err
7f10: 6f 72 41 63 74 69 6f 6e 20 3d 20 28 75 38 29 70  orAction = (u8)p
7f20: 4f 70 2d 3e 70 32 3b 0a 20 20 70 2d 3e 70 63 20  Op->p2;.  p->pc 
7f30: 3d 20 70 63 78 3b 0a 20 20 61 73 73 65 72 74 28  = pcx;.  assert(
7f40: 20 70 4f 70 2d 3e 70 35 3e 3d 30 20 26 26 20 70   pOp->p5>=0 && p
7f50: 4f 70 2d 3e 70 35 3c 3d 34 20 29 3b 0a 20 20 69  Op->p5<=4 );.  i
7f60: 66 28 20 70 2d 3e 72 63 20 29 7b 0a 20 20 20 20  f( p->rc ){.    
7f70: 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20  if( pOp->p5 ){. 
7f80: 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73       static cons
7f90: 74 20 63 68 61 72 20 2a 20 63 6f 6e 73 74 20 61  t char * const a
7fa0: 7a 54 79 70 65 5b 5d 20 3d 20 7b 20 22 4e 4f 54  zType[] = { "NOT
7fb0: 20 4e 55 4c 4c 22 2c 20 22 55 4e 49 51 55 45 22   NULL", "UNIQUE"
7fc0: 2c 20 22 43 48 45 43 4b 22 2c 0a 20 20 20 20 20  , "CHECK",.     
7fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ff0: 20 20 20 20 20 20 20 20 22 46 4f 52 45 49 47 4e          "FOREIGN
8000: 20 4b 45 59 22 20 7d 3b 0a 20 20 20 20 20 20 74   KEY" };.      t
8010: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35  estcase( pOp->p5
8020: 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 74 65 73  ==1 );.      tes
8030: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d  tcase( pOp->p5==
8040: 32 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63  2 );.      testc
8050: 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 33 20  ase( pOp->p5==3 
8060: 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73  );.      testcas
8070: 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 34 20 29 3b  e( pOp->p5==4 );
8080: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
8090: 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 20 63  beError(p, "%s c
80a0: 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64  onstraint failed
80b0: 22 2c 20 61 7a 54 79 70 65 5b 70 4f 70 2d 3e 70  ", azType[pOp->p
80c0: 35 2d 31 5d 29 3b 0a 20 20 20 20 20 20 69 66 28  5-1]);.      if(
80d0: 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20   pOp->p4.z ){.  
80e0: 20 20 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67        p->zErrMsg
80f0: 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74   = sqlite3MPrint
8100: 66 28 64 62 2c 20 22 25 7a 3a 20 25 73 22 2c 20  f(db, "%z: %s", 
8110: 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 70 4f 70 2d  p->zErrMsg, pOp-
8120: 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 20 20 7d 0a  >p4.z);.      }.
8130: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
8140: 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
8150: 72 28 70 2c 20 22 25 73 22 2c 20 70 4f 70 2d 3e  r(p, "%s", pOp->
8160: 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20  p4.z);.    }.   
8170: 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 70 4f 70   sqlite3_log(pOp
8180: 2d 3e 70 31 2c 20 22 61 62 6f 72 74 20 61 74 20  ->p1, "abort at 
8190: 25 64 20 69 6e 20 5b 25 73 5d 3a 20 25 73 22 2c  %d in [%s]: %s",
81a0: 20 70 63 78 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70   pcx, p->zSql, p
81b0: 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a  ->zErrMsg);.  }.
81c0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
81d0: 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 61 73 73  beHalt(p);.  ass
81e0: 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
81f0: 42 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49  BUSY || rc==SQLI
8200: 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c  TE_OK || rc==SQL
8210: 49 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20 20 69  ITE_ERROR );.  i
8220: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  f( rc==SQLITE_BU
8230: 53 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20  SY ){.    p->rc 
8240: 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
8250: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
8260: 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
8270: 4b 20 7c 7c 20 28 70 2d 3e 72 63 26 30 78 66 66  K || (p->rc&0xff
8280: 29 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52  )==SQLITE_CONSTR
8290: 41 49 4e 54 20 29 3b 0a 20 20 20 20 61 73 73 65  AINT );.    asse
82a0: 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
82b0: 4b 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72  K || db->nDeferr
82c0: 65 64 43 6f 6e 73 3e 30 20 7c 7c 20 64 62 2d 3e  edCons>0 || db->
82d0: 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
82e0: 3e 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70  >0 );.    rc = p
82f0: 2d 3e 72 63 20 3f 20 53 51 4c 49 54 45 5f 45 52  ->rc ? SQLITE_ER
8300: 52 4f 52 20 3a 20 53 51 4c 49 54 45 5f 44 4f 4e  ROR : SQLITE_DON
8310: 45 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64  E;.  }.  goto vd
8320: 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a  be_return;.}../*
8330: 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 65 72   Opcode: Integer
8340: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
8350: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
8360: 50 31 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33 32 2d  P1.**.** The 32-
8370: 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75  bit integer valu
8380: 65 20 50 31 20 69 73 20 77 72 69 74 74 65 6e 20  e P1 is written 
8390: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
83a0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74  ..*/.case OP_Int
83b0: 65 67 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20  eger: {         
83c0: 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75  /* out2 */.  pOu
83d0: 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
83e0: 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f  se(p, pOp);.  pO
83f0: 75 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70  ut->u.i = pOp->p
8400: 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  1;.  break;.}../
8410: 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 36 34 20  * Opcode: Int64 
8420: 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  * P2 * P4 *.** S
8430: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50  ynopsis: r[P2]=P
8440: 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  4.**.** P4 is a 
8450: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d  pointer to a 64-
8460: 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75  bit integer valu
8470: 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74  e..** Write that
8480: 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69   value into regi
8490: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
84a0: 20 4f 50 5f 49 6e 74 36 34 3a 20 7b 20 20 20 20   OP_Int64: {    
84b0: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
84c0: 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  /.  pOut = out2P
84d0: 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
84e0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
84f0: 2d 3e 70 34 2e 70 49 36 34 21 3d 30 20 29 3b 0a  ->p4.pI64!=0 );.
8500: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a 70    pOut->u.i = *p
8510: 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62  Op->p4.pI64;.  b
8520: 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  reak;.}..#ifndef
8530: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
8540: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f  ATING_POINT./* O
8550: 70 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50 32  pcode: Real * P2
8560: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
8570: 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a  sis: r[P2]=P4.**
8580: 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
8590: 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20  ter to a 64-bit 
85a0: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76  floating point v
85b0: 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74  alue..** Write t
85c0: 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72  hat value into r
85d0: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
85e0: 61 73 65 20 4f 50 5f 52 65 61 6c 3a 20 7b 20 20  ase OP_Real: {  
85f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
8600: 65 20 61 73 20 54 4b 5f 46 4c 4f 41 54 2c 20 6f  e as TK_FLOAT, o
8610: 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20  ut2 */.  pOut = 
8620: 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
8630: 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e  , pOp);.  pOut->
8640: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 65 61 6c  flags = MEM_Real
8650: 3b 0a 20 20 61 73 73 65 72 74 28 20 21 73 71 6c  ;.  assert( !sql
8660: 69 74 65 33 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e  ite3IsNaN(*pOp->
8670: 70 34 2e 70 52 65 61 6c 29 20 29 3b 0a 20 20 70  p4.pReal) );.  p
8680: 4f 75 74 2d 3e 75 2e 72 20 3d 20 2a 70 4f 70 2d  Out->u.r = *pOp-
8690: 3e 70 34 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65  >p4.pReal;.  bre
86a0: 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ak;.}.#endif../*
86b0: 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 38   Opcode: String8
86c0: 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20   * P2 * P4 *.** 
86d0: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
86e0: 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f  'P4'.**.** P4 po
86f0: 69 6e 74 73 20 74 6f 20 61 20 6e 75 6c 20 74 65  ints to a nul te
8700: 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73  rminated UTF-8 s
8710: 74 72 69 6e 67 2e 20 54 68 69 73 20 6f 70 63 6f  tring. This opco
8720: 64 65 20 69 73 20 74 72 61 6e 73 66 6f 72 6d 65  de is transforme
8730: 64 20 0a 2a 2a 20 69 6e 74 6f 20 61 20 53 74 72  d .** into a Str
8740: 69 6e 67 20 6f 70 63 6f 64 65 20 62 65 66 6f 72  ing opcode befor
8750: 65 20 69 74 20 69 73 20 65 78 65 63 75 74 65 64  e it is executed
8760: 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 74   for the first t
8770: 69 6d 65 2e 20 20 44 75 72 69 6e 67 0a 2a 2a 20  ime.  During.** 
8780: 74 68 69 73 20 74 72 61 6e 73 66 6f 72 6d 61 74  this transformat
8790: 69 6f 6e 2c 20 74 68 65 20 6c 65 6e 67 74 68 20  ion, the length 
87a0: 6f 66 20 73 74 72 69 6e 67 20 50 34 20 69 73 20  of string P4 is 
87b0: 63 6f 6d 70 75 74 65 64 20 61 6e 64 20 73 74 6f  computed and sto
87c0: 72 65 64 0a 2a 2a 20 61 73 20 74 68 65 20 50 31  red.** as the P1
87d0: 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 63   parameter..*/.c
87e0: 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 38 3a 20  ase OP_String8: 
87f0: 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d  {         /* sam
8800: 65 20 61 73 20 54 4b 5f 53 54 52 49 4e 47 2c 20  e as TK_STRING, 
8810: 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72 74  out2 */.  assert
8820: 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29  ( pOp->p4.z!=0 )
8830: 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
8840: 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
8850: 29 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  );.  pOp->opcode
8860: 20 3d 20 4f 50 5f 53 74 72 69 6e 67 3b 0a 20 20   = OP_String;.  
8870: 70 4f 70 2d 3e 70 31 20 3d 20 73 71 6c 69 74 65  pOp->p1 = sqlite
8880: 33 53 74 72 6c 65 6e 33 30 28 70 4f 70 2d 3e 70  3Strlen30(pOp->p
8890: 34 2e 7a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53  4.z);..#ifndef S
88a0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
88b0: 0a 20 20 69 66 28 20 65 6e 63 6f 64 69 6e 67 21  .  if( encoding!
88c0: 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29 7b 0a  =SQLITE_UTF8 ){.
88d0: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
88e0: 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f  VdbeMemSetStr(pO
88f0: 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d  ut, pOp->p4.z, -
8900: 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  1, SQLITE_UTF8, 
8910: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
8920: 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
8930: 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d  SQLITE_OK || rc=
8940: 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29  =SQLITE_TOOBIG )
8950: 3b 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54 45  ;.    if( SQLITE
8960: 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64 62 65  _OK!=sqlite3Vdbe
8970: 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
8980: 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29  Out, encoding) )
8990: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
89a0: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 2d 3e    assert( pOut->
89b0: 73 7a 4d 61 6c 6c 6f 63 3e 30 20 26 26 20 70 4f  szMalloc>0 && pO
89c0: 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75  ut->zMalloc==pOu
89d0: 74 2d 3e 7a 20 29 3b 0a 20 20 20 20 61 73 73 65  t->z );.    asse
89e0: 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d  rt( VdbeMemDynam
89f0: 69 63 28 70 4f 75 74 29 3d 3d 30 20 29 3b 0a 20  ic(pOut)==0 );. 
8a00: 20 20 20 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f     pOut->szMallo
8a10: 63 20 3d 20 30 3b 0a 20 20 20 20 70 4f 75 74 2d  c = 0;.    pOut-
8a20: 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74  >flags |= MEM_St
8a30: 61 74 69 63 3b 0a 20 20 20 20 69 66 28 20 70 4f  atic;.    if( pO
8a40: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 44 59  p->p4type==P4_DY
8a50: 4e 41 4d 49 43 20 29 7b 0a 20 20 20 20 20 20 73  NAMIC ){.      s
8a60: 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
8a70: 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20   pOp->p4.z);.   
8a80: 20 7d 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74 79   }.    pOp->p4ty
8a90: 70 65 20 3d 20 50 34 5f 44 59 4e 41 4d 49 43 3b  pe = P4_DYNAMIC;
8aa0: 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d  .    pOp->p4.z =
8ab0: 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f   pOut->z;.    pO
8ac0: 70 2d 3e 70 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b  p->p1 = pOut->n;
8ad0: 0a 20 20 7d 0a 20 20 74 65 73 74 63 61 73 65 28  .  }.  testcase(
8ae0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42   rc==SQLITE_TOOB
8af0: 49 47 20 29 3b 0a 23 65 6e 64 69 66 0a 20 20 69  IG );.#endif.  i
8b00: 66 28 20 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61  f( pOp->p1>db->a
8b10: 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
8b20: 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
8b30: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
8b40: 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 72 63    }.  assert( rc
8b50: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20  ==SQLITE_OK );. 
8b60: 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
8b70: 20 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61 73   to the next cas
8b80: 65 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f 0a  e, OP_String */.
8b90: 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  }.  ./* Opcode: 
8ba0: 53 74 72 69 6e 67 20 50 31 20 50 32 20 50 33 20  String P1 P2 P3 
8bb0: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
8bc0: 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27 20 28 6c  s: r[P2]='P4' (l
8bd0: 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 54 68 65  en=P1).**.** The
8be0: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 50 34   string value P4
8bf0: 20 6f 66 20 6c 65 6e 67 74 68 20 50 31 20 28 62   of length P1 (b
8c00: 79 74 65 73 29 20 69 73 20 73 74 6f 72 65 64 20  ytes) is stored 
8c10: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
8c20: 2a 2a 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 6e  **.** If P3 is n
8c30: 6f 74 20 7a 65 72 6f 20 61 6e 64 20 74 68 65 20  ot zero and the 
8c40: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
8c50: 74 65 72 20 50 33 20 69 73 20 65 71 75 61 6c 20  ter P3 is equal 
8c60: 74 6f 20 50 35 2c 20 74 68 65 6e 0a 2a 2a 20 74  to P5, then.** t
8c70: 68 65 20 64 61 74 61 74 79 70 65 20 6f 66 20 74  he datatype of t
8c80: 68 65 20 72 65 67 69 73 74 65 72 20 50 32 20 69  he register P2 i
8c90: 73 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 42  s converted to B
8ca0: 4c 4f 42 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e  LOB.  The conten
8cb0: 74 20 69 73 0a 2a 2a 20 74 68 65 20 73 61 6d 65  t is.** the same
8cc0: 20 73 65 71 75 65 6e 63 65 20 6f 66 20 62 79 74   sequence of byt
8cd0: 65 73 2c 20 69 74 20 69 73 20 6d 65 72 65 6c 79  es, it is merely
8ce0: 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
8cf0: 61 20 42 4c 4f 42 20 69 6e 73 74 65 61 64 0a 2a  a BLOB instead.*
8d00: 2a 20 6f 66 20 61 20 73 74 72 69 6e 67 2c 20 61  * of a string, a
8d10: 73 20 69 66 20 69 74 20 68 61 64 20 62 65 65 6e  s if it had been
8d20: 20 43 41 53 54 2e 20 20 49 6e 20 6f 74 68 65 72   CAST.  In other
8d30: 20 77 6f 72 64 73 3a 0a 2a 2a 0a 2a 2a 20 69 66   words:.**.** if
8d40: 28 20 50 33 21 3d 30 20 61 6e 64 20 72 65 67 5b  ( P3!=0 and reg[
8d50: 50 33 5d 3d 3d 50 35 20 29 20 72 65 67 5b 50 32  P3]==P5 ) reg[P2
8d60: 5d 20 3a 3d 20 43 41 53 54 28 72 65 67 5b 50 32  ] := CAST(reg[P2
8d70: 5d 20 61 73 20 42 4c 4f 42 29 0a 2a 2f 0a 63 61  ] as BLOB).*/.ca
8d80: 73 65 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20  se OP_String: { 
8d90: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
8da0: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
8db0: 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20  p->p4.z!=0 );.  
8dc0: 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
8dd0: 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
8de0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
8df0: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69  EM_Str|MEM_Stati
8e00: 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f  c|MEM_Term;.  pO
8e10: 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e  ut->z = pOp->p4.
8e20: 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 70  z;.  pOut->n = p
8e30: 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f 75 74 2d 3e  Op->p1;.  pOut->
8e40: 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
8e50: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
8e60: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 23 69 66  BSIZE(pOut);.#if
8e70: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4c 49 4b 45  ndef SQLITE_LIKE
8e80: 5f 44 4f 45 53 4e 54 5f 4d 41 54 43 48 5f 42 4c  _DOESNT_MATCH_BL
8e90: 4f 42 53 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  OBS.  if( pOp->p
8ea0: 33 3e 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72  3>0 ){.    asser
8eb0: 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  t( pOp->p3<=(p->
8ec0: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
8ed0: 73 6f 72 29 20 29 3b 0a 20 20 20 20 70 49 6e 33  sor) );.    pIn3
8ee0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
8ef0: 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ];.    assert( p
8f00: 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
8f10: 5f 49 6e 74 20 29 3b 0a 20 20 20 20 69 66 28 20  _Int );.    if( 
8f20: 70 49 6e 33 2d 3e 75 2e 69 3d 3d 70 4f 70 2d 3e  pIn3->u.i==pOp->
8f30: 70 35 20 29 20 70 4f 75 74 2d 3e 66 6c 61 67 73  p5 ) pOut->flags
8f40: 20 3d 20 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f   = MEM_Blob|MEM_
8f50: 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b  Static|MEM_Term;
8f60: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 62 72  .  }.#endif.  br
8f70: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
8f80: 65 3a 20 4e 75 6c 6c 20 50 31 20 50 32 20 50 33  e: Null P1 P2 P3
8f90: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
8fa0: 3a 20 72 5b 50 32 2e 2e 50 33 5d 3d 4e 55 4c 4c  : r[P2..P3]=NULL
8fb0: 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 4e  .**.** Write a N
8fc0: 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ULL into registe
8fd0: 72 73 20 50 32 2e 20 20 49 66 20 50 33 20 67 72  rs P2.  If P3 gr
8fe0: 65 61 74 65 72 20 74 68 61 6e 20 50 32 2c 20 74  eater than P2, t
8ff0: 68 65 6e 20 61 6c 73 6f 20 77 72 69 74 65 0a 2a  hen also write.*
9000: 2a 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69  * NULL into regi
9010: 73 74 65 72 20 50 33 20 61 6e 64 20 65 76 65 72  ster P3 and ever
9020: 79 20 72 65 67 69 73 74 65 72 20 69 6e 20 62 65  y register in be
9030: 74 77 65 65 6e 20 50 32 20 61 6e 64 20 50 33 2e  tween P2 and P3.
9040: 20 20 49 66 20 50 33 0a 2a 2a 20 69 73 20 6c 65    If P3.** is le
9050: 73 73 20 74 68 61 6e 20 50 32 20 28 74 79 70 69  ss than P2 (typi
9060: 63 61 6c 6c 79 20 50 33 20 69 73 20 7a 65 72 6f  cally P3 is zero
9070: 29 20 74 68 65 6e 20 6f 6e 6c 79 20 72 65 67 69  ) then only regi
9080: 73 74 65 72 20 50 32 20 69 73 0a 2a 2a 20 73 65  ster P2 is.** se
9090: 74 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  t to NULL..**.**
90a0: 20 49 66 20 74 68 65 20 50 31 20 76 61 6c 75 65   If the P1 value
90b0: 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
90c0: 65 6e 20 61 6c 73 6f 20 73 65 74 20 74 68 65 20  en also set the 
90d0: 4d 45 4d 5f 43 6c 65 61 72 65 64 20 66 6c 61 67  MEM_Cleared flag
90e0: 20 73 6f 20 74 68 61 74 0a 2a 2a 20 4e 55 4c 4c   so that.** NULL
90f0: 20 76 61 6c 75 65 73 20 77 69 6c 6c 20 6e 6f 74   values will not
9100: 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 65   compare equal e
9110: 76 65 6e 20 69 66 20 53 51 4c 49 54 45 5f 4e 55  ven if SQLITE_NU
9120: 4c 4c 45 51 20 69 73 20 73 65 74 20 6f 6e 0a 2a  LLEQ is set on.*
9130: 2a 20 4f 50 5f 4e 65 20 6f 72 20 4f 50 5f 45 71  * OP_Ne or OP_Eq
9140: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c  ..*/.case OP_Nul
9150: 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  l: {           /
9160: 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20  * out2 */.  int 
9170: 63 6e 74 3b 0a 20 20 75 31 36 20 6e 75 6c 6c 46  cnt;.  u16 nullF
9180: 6c 61 67 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  lag;.  pOut = ou
9190: 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
91a0: 70 4f 70 29 3b 0a 20 20 63 6e 74 20 3d 20 70 4f  pOp);.  cnt = pO
91b0: 70 2d 3e 70 33 2d 70 4f 70 2d 3e 70 32 3b 0a 20  p->p3-pOp->p2;. 
91c0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
91d0: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
91e0: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
91f0: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75  pOut->flags = nu
9200: 6c 6c 46 6c 61 67 20 3d 20 70 4f 70 2d 3e 70 31  llFlag = pOp->p1
9210: 20 3f 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d   ? (MEM_Null|MEM
9220: 5f 43 6c 65 61 72 65 64 29 20 3a 20 4d 45 4d 5f  _Cleared) : MEM_
9230: 4e 75 6c 6c 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20  Null;.  pOut->n 
9240: 3d 20 30 3b 0a 20 20 77 68 69 6c 65 28 20 63 6e  = 0;.  while( cn
9250: 74 3e 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2b  t>0 ){.    pOut+
9260: 2b 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  +;.    memAboutT
9270: 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
9280: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
9290: 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
92a0: 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  );.    pOut->fla
92b0: 67 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20  gs = nullFlag;. 
92c0: 20 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 30 3b 0a     pOut->n = 0;.
92d0: 20 20 20 20 63 6e 74 2d 2d 3b 0a 20 20 7d 0a 20      cnt--;.  }. 
92e0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
92f0: 63 6f 64 65 3a 20 53 6f 66 74 4e 75 6c 6c 20 50  code: SoftNull P
9300: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e  1 * * * *.** Syn
9310: 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 4e 55 4c  opsis: r[P1]=NUL
9320: 4c 0a 2a 2a 0a 2a 2a 20 53 65 74 20 72 65 67 69  L.**.** Set regi
9330: 73 74 65 72 20 50 31 20 74 6f 20 68 61 76 65 20  ster P1 to have 
9340: 74 68 65 20 76 61 6c 75 65 20 4e 55 4c 4c 20 61  the value NULL a
9350: 73 20 73 65 65 6e 20 62 79 20 74 68 65 20 4f 50  s seen by the OP
9360: 5f 4d 61 6b 65 52 65 63 6f 72 64 0a 2a 2a 20 69  _MakeRecord.** i
9370: 6e 73 74 72 75 63 74 69 6f 6e 2c 20 62 75 74 20  nstruction, but 
9380: 64 6f 20 6e 6f 74 20 66 72 65 65 20 61 6e 79 20  do not free any 
9390: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
93a0: 65 6d 6f 72 79 20 61 73 73 6f 63 69 61 74 65 64  emory associated
93b0: 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 72 65 67   with.** the reg
93c0: 69 73 74 65 72 2c 20 73 6f 20 74 68 61 74 20 69  ister, so that i
93d0: 66 20 74 68 65 20 76 61 6c 75 65 20 77 61 73 20  f the value was 
93e0: 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62  a string or blob
93f0: 20 74 68 61 74 20 77 61 73 0a 2a 2a 20 70 72 65   that was.** pre
9400: 76 69 6f 75 73 6c 79 20 63 6f 70 69 65 64 20 75  viously copied u
9410: 73 69 6e 67 20 4f 50 5f 53 43 6f 70 79 2c 20 74  sing OP_SCopy, t
9420: 68 65 20 63 6f 70 69 65 73 20 77 69 6c 6c 20 63  he copies will c
9430: 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65 20 76 61  ontinue to be va
9440: 6c 69 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lid..*/.case OP_
9450: 53 6f 66 74 4e 75 6c 6c 3a 20 7b 0a 20 20 61 73  SoftNull: {.  as
9460: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
9470: 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e  && pOp->p1<=(p->
9480: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
9490: 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 20 3d  sor) );.  pOut =
94a0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
94b0: 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
94c0: 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73 7c 4d 45   (pOut->flags|ME
94d0: 4d 5f 4e 75 6c 6c 29 26 7e 4d 45 4d 5f 55 6e 64  M_Null)&~MEM_Und
94e0: 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b  efined;.  break;
94f0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42  .}../* Opcode: B
9500: 6c 6f 62 20 50 31 20 50 32 20 2a 20 50 34 20 2a  lob P1 P2 * P4 *
9510: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
9520: 50 32 5d 3d 50 34 20 28 6c 65 6e 3d 50 31 29 0a  P2]=P4 (len=P1).
9530: 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20  **.** P4 points 
9540: 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20 64 61 74  to a blob of dat
9550: 61 20 50 31 20 62 79 74 65 73 20 6c 6f 6e 67 2e  a P1 bytes long.
9560: 20 20 53 74 6f 72 65 20 74 68 69 73 0a 2a 2a 20    Store this.** 
9570: 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72  blob in register
9580: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
9590: 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20  Blob: {         
95a0: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
95b0: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
95c0: 3e 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41  >p1 <= SQLITE_MA
95d0: 58 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20 70 4f  X_LENGTH );.  pO
95e0: 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
95f0: 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 73  ase(p, pOp);.  s
9600: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
9610: 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70  Str(pOut, pOp->p
9620: 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c  4.z, pOp->p1, 0,
9630: 20 30 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63   0);.  pOut->enc
9640: 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55   = encoding;.  U
9650: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
9660: 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
9670: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
9680: 20 56 61 72 69 61 62 6c 65 20 50 31 20 50 32 20   Variable P1 P2 
9690: 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
96a0: 69 73 3a 20 72 5b 50 32 5d 3d 70 61 72 61 6d 65  is: r[P2]=parame
96b0: 74 65 72 28 50 31 2c 50 34 29 0a 2a 2a 0a 2a 2a  ter(P1,P4).**.**
96c0: 20 54 72 61 6e 73 66 65 72 20 74 68 65 20 76 61   Transfer the va
96d0: 6c 75 65 73 20 6f 66 20 62 6f 75 6e 64 20 70 61  lues of bound pa
96e0: 72 61 6d 65 74 65 72 20 50 31 20 69 6e 74 6f 20  rameter P1 into 
96f0: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a  register P2.**.*
9700: 2a 20 49 66 20 74 68 65 20 70 61 72 61 6d 65 74  * If the paramet
9710: 65 72 20 69 73 20 6e 61 6d 65 64 2c 20 74 68 65  er is named, the
9720: 6e 20 69 74 73 20 6e 61 6d 65 20 61 70 70 65 61  n its name appea
9730: 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 20 54 68 65  rs in P4..** The
9740: 20 50 34 20 76 61 6c 75 65 20 69 73 20 75 73 65   P4 value is use
9750: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 62 69 6e  d by sqlite3_bin
9760: 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
9770: 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ()..*/.case OP_V
9780: 61 72 69 61 62 6c 65 3a 20 7b 20 20 20 20 20 20  ariable: {      
9790: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
97a0: 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b 20 20 20  .  Mem *pVar;   
97b0: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 62 65 69      /* Value bei
97c0: 6e 67 20 74 72 61 6e 73 66 65 72 72 65 64 20 2a  ng transferred *
97d0: 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  /..  assert( pOp
97e0: 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p1>0 && pOp->p
97f0: 31 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20  1<=p->nVar );.  
9800: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
9810: 7a 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  z==0 || pOp->p4.
9820: 7a 3d 3d 70 2d 3e 61 7a 56 61 72 5b 70 4f 70 2d  z==p->azVar[pOp-
9830: 3e 70 31 2d 31 5d 20 29 3b 0a 20 20 70 56 61 72  >p1-1] );.  pVar
9840: 20 3d 20 26 70 2d 3e 61 56 61 72 5b 70 4f 70 2d   = &p->aVar[pOp-
9850: 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 69 66 28 20  >p1 - 1];.  if( 
9860: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
9870: 6f 42 69 67 28 70 56 61 72 29 20 29 7b 0a 20 20  oBig(pVar) ){.  
9880: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
9890: 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74    }.  pOut = out
98a0: 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
98b0: 4f 70 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  Op);.  sqlite3Vd
98c0: 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
98d0: 28 70 4f 75 74 2c 20 70 56 61 72 2c 20 4d 45 4d  (pOut, pVar, MEM
98e0: 5f 53 74 61 74 69 63 29 3b 0a 20 20 55 50 44 41  _Static);.  UPDA
98f0: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
9900: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
9910: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f  }../* Opcode: Mo
9920: 76 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ve P1 P2 P3 * *.
9930: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
9940: 32 40 50 33 5d 3d 72 5b 50 31 40 50 33 5d 0a 2a  2@P3]=r[P1@P3].*
9950: 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 50 33  *.** Move the P3
9960: 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
9970: 74 65 72 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20  ter P1..P1+P3-1 
9980: 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a 20 72 65 67  over into.** reg
9990: 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33  isters P2..P2+P3
99a0: 2d 31 2e 20 20 52 65 67 69 73 74 65 72 73 20 50  -1.  Registers P
99b0: 31 2e 2e 50 31 2b 50 33 2d 31 20 61 72 65 0a 2a  1..P1+P3-1 are.*
99c0: 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e 67 20 61  * left holding a
99d0: 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 6e   NULL.  It is an
99e0: 20 65 72 72 6f 72 20 66 6f 72 20 72 65 67 69 73   error for regis
99f0: 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a 20 50 31  ter ranges.** P1
9a00: 2e 2e 50 31 2b 50 33 2d 31 20 61 6e 64 20 50 32  ..P1+P3-1 and P2
9a10: 2e 2e 50 32 2b 50 33 2d 31 20 74 6f 20 6f 76 65  ..P2+P3-1 to ove
9a20: 72 6c 61 70 2e 20 20 49 74 20 69 73 20 61 6e 20  rlap.  It is an 
9a30: 65 72 72 6f 72 0a 2a 2a 20 66 6f 72 20 50 33 20  error.** for P3 
9a40: 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20  to be less than 
9a50: 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f  1..*/.case OP_Mo
9a60: 76 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 20 20  ve: {.  int n;  
9a70: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
9a80: 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  er of registers 
9a90: 6c 65 66 74 20 74 6f 20 63 6f 70 79 20 2a 2f 0a  left to copy */.
9aa0: 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20    int p1;       
9ab0: 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74     /* Register t
9ac0: 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a 20  o copy from */. 
9ad0: 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20   int p2;        
9ae0: 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f    /* Register to
9af0: 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20 20 6e   copy to */..  n
9b00: 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 31   = pOp->p3;.  p1
9b10: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32   = pOp->p1;.  p2
9b20: 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73   = pOp->p2;.  as
9b30: 73 65 72 74 28 20 6e 3e 30 20 26 26 20 70 31 3e  sert( n>0 && p1>
9b40: 30 20 26 26 20 70 32 3e 30 20 29 3b 0a 20 20 61  0 && p2>0 );.  a
9b50: 73 73 65 72 74 28 20 70 31 2b 6e 3c 3d 70 32 20  ssert( p1+n<=p2 
9b60: 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a  || p2+n<=p1 );..
9b70: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
9b80: 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  1];.  pOut = &aM
9b90: 65 6d 5b 70 32 5d 3b 0a 20 20 64 6f 7b 0a 20 20  em[p2];.  do{.  
9ba0: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 3c 3d    assert( pOut<=
9bb0: 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31  &aMem[(p->nMem+1
9bc0: 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20   - p->nCursor)] 
9bd0: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
9be0: 49 6e 31 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e  In1<=&aMem[(p->n
9bf0: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
9c00: 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65  or)] );.    asse
9c10: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
9c20: 49 6e 31 29 20 29 3b 0a 20 20 20 20 6d 65 6d 41  In1) );.    memA
9c30: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
9c40: 70 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c 69 74  pOut);.    sqlit
9c50: 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f  e3VdbeMemMove(pO
9c60: 75 74 2c 20 70 49 6e 31 29 3b 0a 23 69 66 64 65  ut, pIn1);.#ifde
9c70: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
9c80: 20 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63     if( pOut->pSc
9c90: 6f 70 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d 5b 70  opyFrom>=&aMem[p
9ca0: 31 5d 20 26 26 20 70 4f 75 74 2d 3e 70 53 63 6f  1] && pOut->pSco
9cb0: 70 79 46 72 6f 6d 3c 70 4f 75 74 20 29 7b 0a 20  pyFrom<pOut ){. 
9cc0: 20 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70       pOut->pScop
9cd0: 79 46 72 6f 6d 20 2b 3d 20 70 4f 70 2d 3e 70 32  yFrom += pOp->p2
9ce0: 20 2d 20 70 31 3b 0a 20 20 20 20 7d 0a 23 65 6e   - p1;.    }.#en
9cf0: 64 69 66 0a 20 20 20 20 44 65 65 70 68 65 6d 65  dif.    Deepheme
9d00: 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 20 20  ralize(pOut);.  
9d10: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
9d20: 28 70 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20 20  (p2++, pOut);.  
9d30: 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 20 20 70 4f    pIn1++;.    pO
9d40: 75 74 2b 2b 3b 0a 20 20 7d 77 68 69 6c 65 28 20  ut++;.  }while( 
9d50: 2d 2d 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  --n );.  break;.
9d60: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
9d70: 70 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  py P1 P2 P3 * *.
9d80: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
9d90: 32 40 50 33 2b 31 5d 3d 72 5b 50 31 40 50 33 2b  2@P3+1]=r[P1@P3+
9da0: 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20  1].**.** Make a 
9db0: 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72  copy of register
9dc0: 73 20 50 31 2e 2e 50 31 2b 50 33 20 69 6e 74 6f  s P1..P1+P3 into
9dd0: 20 72 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50   registers P2..P
9de0: 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  2+P3..**.** This
9df0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b   instruction mak
9e00: 65 73 20 61 20 64 65 65 70 20 63 6f 70 79 20 6f  es a deep copy o
9e10: 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 41 20  f the value.  A 
9e20: 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 69 73 20  duplicate.** is 
9e30: 6d 61 64 65 20 6f 66 20 61 6e 79 20 73 74 72 69  made of any stri
9e40: 6e 67 20 6f 72 20 62 6c 6f 62 20 63 6f 6e 73 74  ng or blob const
9e50: 61 6e 74 2e 20 20 53 65 65 20 61 6c 73 6f 20 4f  ant.  See also O
9e60: 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65  P_SCopy..*/.case
9e70: 20 4f 50 5f 43 6f 70 79 3a 20 7b 0a 20 20 69 6e   OP_Copy: {.  in
9e80: 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d  t n;..  n = pOp-
9e90: 3e 70 33 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  >p3;.  pIn1 = &a
9ea0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
9eb0: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
9ec0: 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
9ed0: 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20   pOut!=pIn1 );. 
9ee0: 20 77 68 69 6c 65 28 20 31 20 29 7b 0a 20 20 20   while( 1 ){.   
9ef0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
9f00: 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
9f10: 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d   pIn1, MEM_Ephem
9f20: 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72  );.    Deephemer
9f30: 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 23 69 66  alize(pOut);.#if
9f40: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
9f50: 0a 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70  .    pOut->pScop
9f60: 79 46 72 6f 6d 20 3d 20 30 3b 0a 23 65 6e 64 69  yFrom = 0;.#endi
9f70: 66 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  f.    REGISTER_T
9f80: 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 70 4f 70  RACE(pOp->p2+pOp
9f90: 2d 3e 70 33 2d 6e 2c 20 70 4f 75 74 29 3b 0a 20  ->p3-n, pOut);. 
9fa0: 20 20 20 69 66 28 20 28 6e 2d 2d 29 3d 3d 30 20     if( (n--)==0 
9fb0: 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 70 4f 75  ) break;.    pOu
9fc0: 74 2b 2b 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b  t++;.    pIn1++;
9fd0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
9fe0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 43 6f 70  ./* Opcode: SCop
9ff0: 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  y P1 P2 * * *.**
a000: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
a010: 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b  =r[P1].**.** Mak
a020: 65 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79  e a shallow copy
a030: 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
a040: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
a050: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ..**.** This ins
a060: 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61  truction makes a
a070: 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66   shallow copy of
a080: 20 74 68 65 20 76 61 6c 75 65 2e 20 20 49 66 20   the value.  If 
a090: 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20  the value.** is 
a0a0: 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62  a string or blob
a0b0: 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 70 79 20  , then the copy 
a0c0: 69 73 20 6f 6e 6c 79 20 61 20 70 6f 69 6e 74 65  is only a pointe
a0d0: 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6f 72 69 67  r to the.** orig
a0e0: 69 6e 61 6c 20 61 6e 64 20 68 65 6e 63 65 20 69  inal and hence i
a0f0: 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 63  f the original c
a100: 68 61 6e 67 65 73 20 73 6f 20 77 69 6c 6c 20 74  hanges so will t
a110: 68 65 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72 73  he copy..** Wors
a120: 65 2c 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e  e, if the origin
a130: 61 6c 20 69 73 20 64 65 61 6c 6c 6f 63 61 74 65  al is deallocate
a140: 64 2c 20 74 68 65 20 63 6f 70 79 20 62 65 63 6f  d, the copy beco
a150: 6d 65 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a 20  mes invalid..** 
a160: 54 68 75 73 20 74 68 65 20 70 72 6f 67 72 61 6d  Thus the program
a170: 20 6d 75 73 74 20 67 75 61 72 61 6e 74 65 65 20   must guarantee 
a180: 74 68 61 74 20 74 68 65 20 6f 72 69 67 69 6e 61  that the origina
a190: 6c 20 77 69 6c 6c 20 6e 6f 74 20 63 68 61 6e 67  l will not chang
a1a0: 65 0a 2a 2a 20 64 75 72 69 6e 67 20 74 68 65 20  e.** during the 
a1b0: 6c 69 66 65 74 69 6d 65 20 6f 66 20 74 68 65 20  lifetime of the 
a1c0: 63 6f 70 79 2e 20 20 55 73 65 20 4f 50 5f 43 6f  copy.  Use OP_Co
a1d0: 70 79 20 74 6f 20 6d 61 6b 65 20 61 20 63 6f 6d  py to make a com
a1e0: 70 6c 65 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a 2a  plete.** copy..*
a1f0: 2f 0a 63 61 73 65 20 4f 50 5f 53 43 6f 70 79 3a  /.case OP_SCopy:
a200: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
a210: 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20   out2 */.  pIn1 
a220: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
a230: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
a240: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
a250: 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20  ert( pOut!=pIn1 
a260: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
a270: 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
a280: 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45  Out, pIn1, MEM_E
a290: 70 68 65 6d 29 3b 0a 23 69 66 64 65 66 20 53 51  phem);.#ifdef SQ
a2a0: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28  LITE_DEBUG.  if(
a2b0: 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f   pOut->pScopyFro
a2c0: 6d 3d 3d 30 20 29 20 70 4f 75 74 2d 3e 70 53 63  m==0 ) pOut->pSc
a2d0: 6f 70 79 46 72 6f 6d 20 3d 20 70 49 6e 31 3b 0a  opyFrom = pIn1;.
a2e0: 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a  #endif.  break;.
a2f0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
a300: 74 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20  tCopy P1 P2 * * 
a310: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
a320: 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]=r[P1].**.**
a330: 20 54 72 61 6e 73 66 65 72 20 74 68 65 20 69 6e   Transfer the in
a340: 74 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64  teger value held
a350: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
a360: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
a370: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20  ..**.** This is 
a380: 61 6e 20 6f 70 74 69 6d 69 7a 65 64 20 76 65 72  an optimized ver
a390: 73 69 6f 6e 20 6f 66 20 53 43 6f 70 79 20 74 68  sion of SCopy th
a3a0: 61 74 20 77 6f 72 6b 73 20 6f 6e 6c 79 20 66 6f  at works only fo
a3b0: 72 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61 6c  r integer.** val
a3c0: 75 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ues..*/.case OP_
a3d0: 49 6e 74 43 6f 70 79 3a 20 7b 20 20 20 20 20 20  IntCopy: {      
a3e0: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
a3f0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
a400: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
a410: 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  rt( (pIn1->flags
a420: 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
a430: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
a440: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c  [pOp->p2];.  sql
a450: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
a460: 74 36 34 28 70 4f 75 74 2c 20 70 49 6e 31 2d 3e  t64(pOut, pIn1->
a470: 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  u.i);.  break;.}
a480: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73  ../* Opcode: Res
a490: 75 6c 74 52 6f 77 20 50 31 20 50 32 20 2a 20 2a  ultRow P1 P2 * *
a4a0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
a4b0: 6f 75 74 70 75 74 3d 72 5b 50 31 40 50 32 5d 0a  output=r[P1@P2].
a4c0: 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74  **.** The regist
a4d0: 65 72 73 20 50 31 20 74 68 72 6f 75 67 68 20 50  ers P1 through P
a4e0: 31 2b 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61  1+P2-1 contain a
a4f0: 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a   single row of.*
a500: 2a 20 72 65 73 75 6c 74 73 2e 20 54 68 69 73 20  * results. This 
a510: 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20 74 68  opcode causes th
a520: 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  e sqlite3_step()
a530: 20 63 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61   call to termina
a540: 74 65 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53 51  te.** with an SQ
a550: 4c 49 54 45 5f 52 4f 57 20 72 65 74 75 72 6e 20  LITE_ROW return 
a560: 63 6f 64 65 20 61 6e 64 20 69 74 20 73 65 74 73  code and it sets
a570: 20 75 70 20 74 68 65 20 73 71 6c 69 74 65 33 5f   up the sqlite3_
a580: 73 74 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75 72  stmt.** structur
a590: 65 20 74 6f 20 70 72 6f 76 69 64 65 20 61 63 63  e to provide acc
a5a0: 65 73 73 20 74 6f 20 74 68 65 20 72 28 50 31 29  ess to the r(P1)
a5b0: 2e 2e 72 28 50 31 2b 50 32 2d 31 29 20 76 61 6c  ..r(P1+P2-1) val
a5c0: 75 65 73 20 61 73 0a 2a 2a 20 74 68 65 20 72 65  ues as.** the re
a5d0: 73 75 6c 74 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73  sult row..*/.cas
a5e0: 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 3a 20  e OP_ResultRow: 
a5f0: 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20  {.  Mem *pMem;. 
a600: 20 69 6e 74 20 69 3b 0a 20 20 61 73 73 65 72 74   int i;.  assert
a610: 28 20 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d  ( p->nResColumn=
a620: 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 61 73  =pOp->p2 );.  as
a630: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
a640: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
a650: 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d 28 70  ->p1+pOp->p2<=(p
a660: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
a670: 75 72 73 6f 72 29 2b 31 20 29 3b 0a 0a 23 69 66  ursor)+1 );..#if
a680: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
a690: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
a6a0: 43 4b 0a 20 20 2f 2a 20 52 75 6e 20 74 68 65 20  CK.  /* Run the 
a6b0: 70 72 6f 67 72 65 73 73 20 63 6f 75 6e 74 65 72  progress counter
a6c0: 20 6a 75 73 74 20 62 65 66 6f 72 65 20 72 65 74   just before ret
a6d0: 75 72 6e 69 6e 67 2e 0a 20 20 2a 2f 0a 20 20 69  urning..  */.  i
a6e0: 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73  f( db->xProgress
a6f0: 21 3d 30 0a 20 20 20 26 26 20 6e 56 6d 53 74 65  !=0.   && nVmSte
a700: 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69  p>=nProgressLimi
a710: 74 0a 20 20 20 26 26 20 64 62 2d 3e 78 50 72 6f  t.   && db->xPro
a720: 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67 72  gress(db->pProgr
a730: 65 73 73 41 72 67 29 21 3d 30 0a 20 20 29 7b 0a  essArg)!=0.  ){.
a740: 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
a750: 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20 67  INTERRUPT;.    g
a760: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
a770: 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 23 65 6e 64  _error;.  }.#end
a780: 69 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73  if..  /* If this
a790: 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 76   statement has v
a7a0: 69 6f 6c 61 74 65 64 20 69 6d 6d 65 64 69 61 74  iolated immediat
a7b0: 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  e foreign key co
a7c0: 6e 73 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20 20  nstraints, do.  
a7d0: 2a 2a 20 6e 6f 74 20 72 65 74 75 72 6e 20 74 68  ** not return th
a7e0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
a7f0: 20 6d 6f 64 69 66 69 65 64 2e 20 41 6e 64 20 64   modified. And d
a800: 6f 20 6e 6f 74 20 52 45 4c 45 41 53 45 20 74 68  o not RELEASE th
a810: 65 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a 2a  e statement.  **
a820: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 74   transaction. It
a830: 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c   needs to be rol
a840: 6c 65 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20 20  led back.  */.  
a850: 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 28  if( SQLITE_OK!=(
a860: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
a870: 43 68 65 63 6b 46 6b 28 70 2c 20 30 29 29 20 29  CheckFk(p, 0)) )
a880: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62  {.    assert( db
a890: 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43  ->flags&SQLITE_C
a8a0: 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20 20  ountRows );.    
a8b0: 61 73 73 65 72 74 28 20 70 2d 3e 75 73 65 73 53  assert( p->usesS
a8c0: 74 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20 20  tmtJournal );.  
a8d0: 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
a8e0: 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a  _to_error;.  }..
a8f0: 20 20 2f 2a 20 49 66 20 74 68 65 20 53 51 4c 49    /* If the SQLI
a900: 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61  TE_CountRows fla
a910: 67 20 69 73 20 73 65 74 20 69 6e 20 73 71 6c 69  g is set in sqli
a920: 74 65 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20  te3.flags mask, 
a930: 74 68 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73  then .  ** DML s
a940: 74 61 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65  tatements invoke
a950: 20 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20   this opcode to 
a960: 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  return the numbe
a970: 72 20 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20  r of rows .  ** 
a980: 6d 6f 64 69 66 69 65 64 20 74 6f 20 74 68 65 20  modified to the 
a990: 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 68  user. This is th
a9a0: 65 20 6f 6e 6c 79 20 77 61 79 20 74 68 61 74 20  e only way that 
a9b0: 61 20 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f  a VM that.  ** o
a9c0: 70 65 6e 73 20 61 20 73 74 61 74 65 6d 65 6e 74  pens a statement
a9d0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79   transaction may
a9e0: 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63   invoke this opc
a9f0: 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49  ode..  **.  ** I
aa00: 6e 20 63 61 73 65 20 74 68 69 73 20 69 73 20 73  n case this is s
aa10: 75 63 68 20 61 20 73 74 61 74 65 6d 65 6e 74 2c  uch a statement,
aa20: 20 63 6c 6f 73 65 20 61 6e 79 20 73 74 61 74 65   close any state
aa30: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
aa40: 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20  .  ** opened by 
aa50: 74 68 69 73 20 56 4d 20 62 65 66 6f 72 65 20 72  this VM before r
aa60: 65 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c  eturning control
aa70: 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68   to the user. Th
aa80: 69 73 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e  is is to.  ** en
aa90: 73 75 72 65 20 74 68 61 74 20 73 74 61 74 65 6d  sure that statem
aaa0: 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73  ent-transactions
aab0: 20 61 72 65 20 61 6c 77 61 79 73 20 6e 65 73 74   are always nest
aac0: 65 64 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70  ed, not overlapp
aad0: 69 6e 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65  ing..  ** If the
aae0: 20 6f 70 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d   open statement-
aaf0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
ab00: 6f 74 20 63 6c 6f 73 65 64 20 68 65 72 65 2c 20  ot closed here, 
ab10: 74 68 65 6e 20 74 68 65 20 75 73 65 72 0a 20 20  then the user.  
ab20: 2a 2a 20 6d 61 79 20 73 74 65 70 20 61 6e 6f 74  ** may step anot
ab30: 68 65 72 20 56 4d 20 74 68 61 74 20 6f 70 65 6e  her VM that open
ab40: 73 20 69 74 73 20 6f 77 6e 20 73 74 61 74 65 6d  s its own statem
ab50: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ent transaction.
ab60: 20 54 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c   This.  ** may l
ab70: 65 61 64 20 74 6f 20 6f 76 65 72 6c 61 70 70 69  ead to overlappi
ab80: 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  ng statement tra
ab90: 6e 73 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a  nsactions..  **.
aba0: 20 20 2a 2a 20 54 68 65 20 73 74 61 74 65 6d 65    ** The stateme
abb0: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  nt transaction i
abc0: 73 20 6e 65 76 65 72 20 61 20 74 6f 70 2d 6c 65  s never a top-le
abd0: 76 65 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  vel transaction.
abe0: 20 20 48 65 6e 63 65 0a 20 20 2a 2a 20 74 68 65    Hence.  ** the
abf0: 20 52 45 4c 45 41 53 45 20 63 61 6c 6c 20 62 65   RELEASE call be
ac00: 6c 6f 77 20 63 61 6e 20 6e 65 76 65 72 20 66 61  low can never fa
ac10: 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  il..  */.  asser
ac20: 74 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74  t( p->iStatement
ac30: 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73  ==0 || db->flags
ac40: 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77  &SQLITE_CountRow
ac50: 73 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  s );.  rc = sqli
ac60: 74 65 33 56 64 62 65 43 6c 6f 73 65 53 74 61 74  te3VdbeCloseStat
ac70: 65 6d 65 6e 74 28 70 2c 20 53 41 56 45 50 4f 49  ement(p, SAVEPOI
ac80: 4e 54 5f 52 45 4c 45 41 53 45 29 3b 0a 20 20 61  NT_RELEASE);.  a
ac90: 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
aca0: 45 5f 4f 4b 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e  E_OK );..  /* In
acb0: 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 65 70 68  validate all eph
acc0: 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 20 72 6f  emeral cursor ro
acd0: 77 20 63 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d  w caches */.  p-
ace0: 3e 63 61 63 68 65 43 74 72 20 3d 20 28 70 2d 3e  >cacheCtr = (p->
acf0: 63 61 63 68 65 43 74 72 20 2b 20 32 29 7c 31 3b  cacheCtr + 2)|1;
ad00: 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65  ..  /* Make sure
ad10: 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
ad20: 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
ad30: 61 72 65 20 5c 30 30 30 20 74 65 72 6d 69 6e 61  are \000 termina
ad40: 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76  ted.  ** and hav
ad50: 65 20 61 6e 20 61 73 73 69 67 6e 65 64 20 74 79  e an assigned ty
ad60: 70 65 2e 20 20 54 68 65 20 72 65 73 75 6c 74 73  pe.  The results
ad70: 20 61 72 65 20 64 65 2d 65 70 68 65 6d 65 72 61   are de-ephemera
ad80: 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61 20  lized as.  ** a 
ad90: 73 69 64 65 20 65 66 66 65 63 74 2e 0a 20 20 2a  side effect..  *
ada0: 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 52  /.  pMem = p->pR
adb0: 65 73 75 6c 74 53 65 74 20 3d 20 26 61 4d 65 6d  esultSet = &aMem
adc0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72  [pOp->p1];.  for
add0: 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b  (i=0; i<pOp->p2;
ade0: 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72   i++){.    asser
adf0: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 70  t( memIsValid(&p
ae00: 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20 44  Mem[i]) );.    D
ae10: 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 26 70  eephemeralize(&p
ae20: 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73 73  Mem[i]);.    ass
ae30: 65 72 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c  ert( (pMem[i].fl
ae40: 61 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29  ags & MEM_Ephem)
ae50: 3d 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20 20  ==0.            
ae60: 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67  || (pMem[i].flag
ae70: 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
ae80: 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20  _Blob))==0 );.  
ae90: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
aea0: 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28 26 70 4d  NulTerminate(&pM
aeb0: 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 52 45 47 49  em[i]);.    REGI
aec0: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
aed0: 70 31 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29 3b  p1+i, &pMem[i]);
aee0: 0a 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d  .  }.  if( db->m
aef0: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f  allocFailed ) go
af00: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 69 66  to no_mem;..  if
af10: 28 20 64 62 2d 3e 6d 54 72 61 63 65 20 26 20 53  ( db->mTrace & S
af20: 51 4c 49 54 45 5f 54 52 41 43 45 5f 52 4f 57 20  QLITE_TRACE_ROW 
af30: 29 7b 0a 20 20 20 20 64 62 2d 3e 78 54 72 61 63  ){.    db->xTrac
af40: 65 28 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 52  e(SQLITE_TRACE_R
af50: 4f 57 2c 20 64 62 2d 3e 70 54 72 61 63 65 41 72  OW, db->pTraceAr
af60: 67 2c 20 70 2c 20 30 29 3b 0a 20 20 7d 0a 0a 20  g, p, 0);.  }.. 
af70: 20 2f 2a 20 52 65 74 75 72 6e 20 53 51 4c 49 54   /* Return SQLIT
af80: 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e  E_ROW.  */.  p->
af90: 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d  pc = (int)(pOp -
afa0: 20 61 4f 70 29 20 2b 20 31 3b 0a 20 20 72 63 20   aOp) + 1;.  rc 
afb0: 3d 20 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20  = SQLITE_ROW;.  
afc0: 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
afd0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
afe0: 43 6f 6e 63 61 74 20 50 31 20 50 32 20 50 33 20  Concat P1 P2 P3 
aff0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
b000: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2b 72 5b 50   r[P3]=r[P2]+r[P
b010: 31 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65  1].**.** Add the
b020: 20 74 65 78 74 20 69 6e 20 72 65 67 69 73 74 65   text in registe
b030: 72 20 50 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e  r P1 onto the en
b040: 64 20 6f 66 20 74 68 65 20 74 65 78 74 20 69 6e  d of the text in
b050: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 20  .** register P2 
b060: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
b070: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
b080: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
b090: 72 20 74 68 65 20 50 31 20 6f 72 20 50 32 20 74  r the P1 or P2 t
b0a0: 65 78 74 20 61 72 65 20 4e 55 4c 4c 20 74 68 65  ext are NULL the
b0b0: 6e 20 73 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20  n store NULL in 
b0c0: 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d  P3..**.**   P3 =
b0d0: 20 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20   P2 || P1.**.** 
b0e0: 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f  It is illegal fo
b0f0: 72 20 50 31 20 61 6e 64 20 50 33 20 74 6f 20 62  r P1 and P3 to b
b100: 65 20 74 68 65 20 73 61 6d 65 20 72 65 67 69 73  e the same regis
b110: 74 65 72 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a  ter. Sometimes,.
b120: 2a 2a 20 69 66 20 50 33 20 69 73 20 74 68 65 20  ** if P3 is the 
b130: 73 61 6d 65 20 72 65 67 69 73 74 65 72 20 61 73  same register as
b140: 20 50 32 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65   P2, the impleme
b150: 6e 74 61 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a  ntation is able.
b160: 2a 2a 20 74 6f 20 61 76 6f 69 64 20 61 20 6d 65  ** to avoid a me
b170: 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20  mcpy()..*/.case 
b180: 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20  OP_Concat: {    
b190: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
b1a0: 73 20 54 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31  s TK_CONCAT, in1
b1b0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
b1c0: 20 69 36 34 20 6e 42 79 74 65 3b 0a 0a 20 20 70   i64 nByte;..  p
b1d0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
b1e0: 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26  >p1];.  pIn2 = &
b1f0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
b200: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
b210: 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74  p->p3];.  assert
b220: 28 20 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a  ( pIn1!=pOut );.
b230: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
b240: 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73  gs | pIn2->flags
b250: 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  ) & MEM_Null ){.
b260: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
b270: 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
b280: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
b290: 20 20 69 66 28 20 45 78 70 61 6e 64 42 6c 6f 62    if( ExpandBlob
b2a0: 28 70 49 6e 31 29 20 7c 7c 20 45 78 70 61 6e 64  (pIn1) || Expand
b2b0: 42 6c 6f 62 28 70 49 6e 32 29 20 29 20 67 6f 74  Blob(pIn2) ) got
b2c0: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72 69  o no_mem;.  Stri
b2d0: 6e 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f  ngify(pIn1, enco
b2e0: 64 69 6e 67 29 3b 0a 20 20 53 74 72 69 6e 67 69  ding);.  Stringi
b2f0: 66 79 28 70 49 6e 32 2c 20 65 6e 63 6f 64 69 6e  fy(pIn2, encodin
b300: 67 29 3b 0a 20 20 6e 42 79 74 65 20 3d 20 70 49  g);.  nByte = pI
b310: 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b  n1->n + pIn2->n;
b320: 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d  .  if( nByte>db-
b330: 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
b340: 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
b350: 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
b360: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69  ;.  }.  if( sqli
b370: 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
b380: 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2b  Out, (int)nByte+
b390: 32 2c 20 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29  2, pOut==pIn2) )
b3a0: 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
b3b0: 6d 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54  m;.  }.  MemSetT
b3c0: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
b3d0: 4d 5f 53 74 72 29 3b 0a 20 20 69 66 28 20 70 4f  M_Str);.  if( pO
b3e0: 75 74 21 3d 70 49 6e 32 20 29 7b 0a 20 20 20 20  ut!=pIn2 ){.    
b3f0: 6d 65 6d 63 70 79 28 70 4f 75 74 2d 3e 7a 2c 20  memcpy(pOut->z, 
b400: 70 49 6e 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e  pIn2->z, pIn2->n
b410: 29 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28  );.  }.  memcpy(
b420: 26 70 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e  &pOut->z[pIn2->n
b430: 5d 2c 20 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31  ], pIn1->z, pIn1
b440: 2d 3e 6e 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b  ->n);.  pOut->z[
b450: 6e 42 79 74 65 5d 3d 30 3b 0a 20 20 70 4f 75 74  nByte]=0;.  pOut
b460: 2d 3e 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30  ->z[nByte+1] = 0
b470: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
b480: 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70  |= MEM_Term;.  p
b490: 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42  Out->n = (int)nB
b4a0: 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63  yte;.  pOut->enc
b4b0: 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55   = encoding;.  U
b4c0: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
b4d0: 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
b4e0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
b4f0: 20 41 64 64 20 50 31 20 50 32 20 50 33 20 2a 20   Add P1 P2 P3 * 
b500: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
b510: 5b 50 33 5d 3d 72 5b 50 31 5d 2b 72 5b 50 32 5d  [P3]=r[P1]+r[P2]
b520: 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 76  .**.** Add the v
b530: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
b540: 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65   P1 to the value
b550: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
b560: 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  ** and store the
b570: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
b580: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
b590: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
b5a0: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
b5b0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
b5c0: 63 6f 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50  code: Multiply P
b5d0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
b5e0: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72  ynopsis: r[P3]=r
b5f0: 5b 50 31 5d 2a 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]*r[P2].**.**
b600: 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68 65  .** Multiply the
b610: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b620: 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c  er P1 by the val
b630: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
b640: 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74  2.** and store t
b650: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
b660: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
b670: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
b680: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
b690: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
b6a0: 4f 70 63 6f 64 65 3a 20 53 75 62 74 72 61 63 74  Opcode: Subtract
b6b0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
b6c0: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
b6d0: 3d 72 5b 50 32 5d 2d 72 5b 50 31 5d 0a 2a 2a 0a  =r[P2]-r[P1].**.
b6e0: 2a 2a 20 53 75 62 74 72 61 63 74 20 74 68 65 20  ** Subtract the 
b6f0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
b700: 72 20 50 31 20 66 72 6f 6d 20 74 68 65 20 76 61  r P1 from the va
b710: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
b720: 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20  P2.** and store 
b730: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
b740: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
b750: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
b760: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
b770: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
b780: 20 4f 70 63 6f 64 65 3a 20 44 69 76 69 64 65 20   Opcode: Divide 
b790: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
b7a0: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
b7b0: 72 5b 50 32 5d 2f 72 5b 50 31 5d 0a 2a 2a 0a 2a  r[P2]/r[P1].**.*
b7c0: 2a 20 44 69 76 69 64 65 20 74 68 65 20 76 61 6c  * Divide the val
b7d0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
b7e0: 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69  1 by the value i
b7f0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
b800: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
b810: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
b820: 72 20 50 33 20 28 50 33 3d 50 32 2f 50 31 29 2e  r P3 (P3=P2/P1).
b830: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   If the value in
b840: 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31   .** register P1
b850: 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74   is zero, then t
b860: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
b870: 4c 2e 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  L. If either inp
b880: 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20  ut is .** NULL, 
b890: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
b8a0: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
b8b0: 3a 20 52 65 6d 61 69 6e 64 65 72 20 50 31 20 50  : Remainder P1 P
b8c0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
b8d0: 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32  psis: r[P3]=r[P2
b8e0: 5d 25 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f  ]%r[P1].**.** Co
b8f0: 6d 70 75 74 65 20 74 68 65 20 72 65 6d 61 69 6e  mpute the remain
b900: 64 65 72 20 61 66 74 65 72 20 69 6e 74 65 67 65  der after intege
b910: 72 20 72 65 67 69 73 74 65 72 20 50 32 20 69 73  r register P2 is
b920: 20 64 69 76 69 64 65 64 20 62 79 20 0a 2a 2a 20   divided by .** 
b930: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
b940: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
b950: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
b960: 20 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75   .** If the valu
b970: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
b980: 20 69 73 20 7a 65 72 6f 20 74 68 65 20 72 65 73   is zero the res
b990: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20  ult is NULL..** 
b9a0: 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  If either operan
b9b0: 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  d is NULL, the r
b9c0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
b9d0: 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20  /.case OP_Add:  
b9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b9f0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 50   /* same as TK_P
ba00: 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  LUS, in1, in2, o
ba10: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ut3 */.case OP_S
ba20: 75 62 74 72 61 63 74 3a 20 20 20 20 20 20 20 20  ubtract:        
ba30: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
ba40: 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c 20   TK_MINUS, in1, 
ba50: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
ba60: 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20  e OP_Multiply:  
ba70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
ba80: 61 6d 65 20 61 73 20 54 4b 5f 53 54 41 52 2c 20  ame as TK_STAR, 
ba90: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
baa0: 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65  /.case OP_Divide
bab0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
bac0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53   /* same as TK_S
bad0: 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  LASH, in1, in2, 
bae0: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
baf0: 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20 20 20 20  Remainder: {    
bb00: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
bb10: 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20 69  s TK_REM, in1, i
bb20: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 63 68  n2, out3 */.  ch
bb30: 61 72 20 62 49 6e 74 69 6e 74 3b 20 20 20 2f 2a  ar bIntint;   /*
bb40: 20 53 74 61 72 74 65 64 20 6f 75 74 20 61 73 20   Started out as 
bb50: 74 77 6f 20 69 6e 74 65 67 65 72 20 6f 70 65 72  two integer oper
bb60: 61 6e 64 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c  ands */.  u16 fl
bb70: 61 67 73 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d  ags;      /* Com
bb80: 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c 61 67  bined MEM_* flag
bb90: 73 20 66 72 6f 6d 20 62 6f 74 68 20 69 6e 70 75  s from both inpu
bba0: 74 73 20 2a 2f 0a 20 20 75 31 36 20 74 79 70 65  ts */.  u16 type
bbb0: 31 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72  1;      /* Numer
bbc0: 69 63 20 74 79 70 65 20 6f 66 20 6c 65 66 74 20  ic type of left 
bbd0: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 75 31 36  operand */.  u16
bbe0: 20 74 79 70 65 32 3b 20 20 20 20 20 20 2f 2a 20   type2;      /* 
bbf0: 4e 75 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20  Numeric type of 
bc00: 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f  right operand */
bc10: 0a 20 20 69 36 34 20 69 41 3b 20 20 20 20 20 20  .  i64 iA;      
bc20: 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61     /* Integer va
bc30: 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72  lue of left oper
bc40: 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69 42 3b  and */.  i64 iB;
bc50: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65           /* Inte
bc60: 67 65 72 20 76 61 6c 75 65 20 6f 66 20 72 69 67  ger value of rig
bc70: 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ht operand */.  
bc80: 64 6f 75 62 6c 65 20 72 41 3b 20 20 20 20 20 20  double rA;      
bc90: 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66  /* Real value of
bca0: 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f   left operand */
bcb0: 0a 20 20 64 6f 75 62 6c 65 20 72 42 3b 20 20 20  .  double rB;   
bcc0: 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65     /* Real value
bcd0: 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e   of right operan
bce0: 64 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26  d */..  pIn1 = &
bcf0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
bd00: 20 74 79 70 65 31 20 3d 20 6e 75 6d 65 72 69 63   type1 = numeric
bd10: 54 79 70 65 28 70 49 6e 31 29 3b 0a 20 20 70 49  Type(pIn1);.  pI
bd20: 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
bd30: 70 32 5d 3b 0a 20 20 74 79 70 65 32 20 3d 20 6e  p2];.  type2 = n
bd40: 75 6d 65 72 69 63 54 79 70 65 28 70 49 6e 32 29  umericType(pIn2)
bd50: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
bd60: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61  [pOp->p3];.  fla
bd70: 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73  gs = pIn1->flags
bd80: 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a   | pIn2->flags;.
bd90: 20 20 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d    if( (flags & M
bda0: 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 20 67 6f  EM_Null)!=0 ) go
bdb0: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
bdc0: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
bdd0: 69 66 28 20 28 74 79 70 65 31 20 26 20 74 79 70  if( (type1 & typ
bde0: 65 32 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  e2 & MEM_Int)!=0
bdf0: 20 29 7b 0a 20 20 20 20 69 41 20 3d 20 70 49 6e   ){.    iA = pIn
be00: 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d  1->u.i;.    iB =
be10: 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20   pIn2->u.i;.    
be20: 62 49 6e 74 69 6e 74 20 3d 20 31 3b 0a 20 20 20  bIntint = 1;.   
be30: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
be40: 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61  code ){.      ca
be50: 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20  se OP_Add:      
be60: 20 69 66 28 20 73 71 6c 69 74 65 33 41 64 64 49   if( sqlite3AddI
be70: 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67  nt64(&iB,iA) ) g
be80: 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72  oto fp_math;  br
be90: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
bea0: 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 69 66  OP_Subtract:  if
beb0: 28 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36  ( sqlite3SubInt6
bec0: 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f  4(&iB,iA) ) goto
bed0: 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b   fp_math;  break
bee0: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
bef0: 4d 75 6c 74 69 70 6c 79 3a 20 20 69 66 28 20 73  Multiply:  if( s
bf00: 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 26  qlite3MulInt64(&
bf10: 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70  iB,iA) ) goto fp
bf20: 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20  _math;  break;. 
bf30: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76       case OP_Div
bf40: 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  ide: {.        i
bf50: 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20  f( iA==0 ) goto 
bf60: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
bf70: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
bf80: 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 26 26     if( iA==-1 &&
bf90: 20 69 42 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e   iB==SMALLEST_IN
bfa0: 54 36 34 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61  T64 ) goto fp_ma
bfb0: 74 68 3b 0a 20 20 20 20 20 20 20 20 69 42 20 2f  th;.        iB /
bfc0: 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72  = iA;.        br
bfd0: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
bfe0: 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20     default: {.  
bff0: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20        if( iA==0 
c000: 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69  ) goto arithmeti
c010: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
c020: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  ;.        if( iA
c030: 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20  ==-1 ) iA = 1;. 
c040: 20 20 20 20 20 20 20 69 42 20 25 3d 20 69 41 3b         iB %= iA;
c050: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
c060: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
c070: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42    pOut->u.i = iB
c080: 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
c090: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
c0a0: 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  nt);.  }else{.  
c0b0: 20 20 62 49 6e 74 69 6e 74 20 3d 20 30 3b 0a 66    bIntint = 0;.f
c0c0: 70 5f 6d 61 74 68 3a 0a 20 20 20 20 72 41 20 3d  p_math:.    rA =
c0d0: 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c   sqlite3VdbeReal
c0e0: 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 20  Value(pIn1);.   
c0f0: 20 72 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rB = sqlite3Vdb
c100: 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 32 29  eRealValue(pIn2)
c110: 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f  ;.    switch( pO
c120: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20  p->opcode ){.   
c130: 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20     case OP_Add: 
c140: 20 20 20 20 20 20 20 20 72 42 20 2b 3d 20 72 41          rB += rA
c150: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
c160: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62       case OP_Sub
c170: 74 72 61 63 74 3a 20 20 20 20 72 42 20 2d 3d 20  tract:    rB -= 
c180: 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b  rA;       break;
c190: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d  .      case OP_M
c1a0: 75 6c 74 69 70 6c 79 3a 20 20 20 20 72 42 20 2a  ultiply:    rB *
c1b0: 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61  = rA;       brea
c1c0: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  k;.      case OP
c1d0: 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20  _Divide: {.     
c1e0: 20 20 20 2f 2a 20 28 64 6f 75 62 6c 65 29 30 20     /* (double)0 
c1f0: 49 6e 20 63 61 73 65 20 6f 66 20 53 51 4c 49 54  In case of SQLIT
c200: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
c210: 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20  POINT... */.    
c220: 20 20 20 20 69 66 28 20 72 41 3d 3d 28 64 6f 75      if( rA==(dou
c230: 62 6c 65 29 30 20 29 20 67 6f 74 6f 20 61 72 69  ble)0 ) goto ari
c240: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
c250: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  s_null;.        
c260: 72 42 20 2f 3d 20 72 41 3b 0a 20 20 20 20 20 20  rB /= rA;.      
c270: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
c280: 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20  .      default: 
c290: 7b 0a 20 20 20 20 20 20 20 20 69 41 20 3d 20 28  {.        iA = (
c2a0: 69 36 34 29 72 41 3b 0a 20 20 20 20 20 20 20 20  i64)rA;.        
c2b0: 69 42 20 3d 20 28 69 36 34 29 72 42 3b 0a 20 20  iB = (i64)rB;.  
c2c0: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20        if( iA==0 
c2d0: 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69  ) goto arithmeti
c2e0: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
c2f0: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  ;.        if( iA
c300: 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20  ==-1 ) iA = 1;. 
c310: 20 20 20 20 20 20 20 72 42 20 3d 20 28 64 6f 75         rB = (dou
c320: 62 6c 65 29 28 69 42 20 25 20 69 41 29 3b 0a 20  ble)(iB % iA);. 
c330: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
c340: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 69 66 64      }.    }.#ifd
c350: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
c360: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20  LOATING_POINT.  
c370: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 42    pOut->u.i = rB
c380: 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
c390: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
c3a0: 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 69  nt);.#else.    i
c3b0: 66 28 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  f( sqlite3IsNaN(
c3c0: 72 42 29 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  rB) ){.      got
c3d0: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
c3e0: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
c3f0: 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 72   }.    pOut->u.r
c400: 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65   = rB;.    MemSe
c410: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
c420: 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 20 20 69  MEM_Real);.    i
c430: 66 28 20 28 28 74 79 70 65 31 7c 74 79 70 65 32  f( ((type1|type2
c440: 29 26 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 26  )&MEM_Real)==0 &
c450: 26 20 21 62 49 6e 74 69 6e 74 20 29 7b 0a 20 20  & !bIntint ){.  
c460: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 49      sqlite3VdbeI
c470: 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70  ntegerAffinity(p
c480: 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  Out);.    }.#end
c490: 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  if.  }.  break;.
c4a0: 0a 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75  .arithmetic_resu
c4b0: 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71  lt_is_null:.  sq
c4c0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
c4d0: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  ull(pOut);.  bre
c4e0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
c4f0: 3a 20 43 6f 6c 6c 53 65 71 20 50 31 20 2a 20 2a  : CollSeq P1 * *
c500: 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20   P4.**.** P4 is 
c510: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 43  a pointer to a C
c520: 6f 6c 6c 53 65 71 20 73 74 72 75 63 74 2e 20 49  ollSeq struct. I
c530: 66 20 74 68 65 20 6e 65 78 74 20 63 61 6c 6c 20  f the next call 
c540: 74 6f 20 61 20 75 73 65 72 20 66 75 6e 63 74 69  to a user functi
c550: 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67 61  on.** or aggrega
c560: 74 65 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33  te calls sqlite3
c570: 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29  GetFuncCollSeq()
c580: 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f 6e  , this collation
c590: 20 73 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a 2a   sequence will.*
c5a0: 2a 20 62 65 20 72 65 74 75 72 6e 65 64 2e 20 54  * be returned. T
c5b0: 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74  his is used by t
c5c0: 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e 28  he built-in min(
c5d0: 29 2c 20 6d 61 78 28 29 20 61 6e 64 20 6e 75 6c  ), max() and nul
c5e0: 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f  lif().** functio
c5f0: 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20  ns..**.** If P1 
c600: 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
c610: 6e 20 69 74 20 69 73 20 61 20 72 65 67 69 73 74  n it is a regist
c620: 65 72 20 74 68 61 74 20 61 20 73 75 62 73 65 71  er that a subseq
c630: 75 65 6e 74 20 6d 69 6e 28 29 20 6f 72 0a 2a 2a  uent min() or.**
c640: 20 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65   max() aggregate
c650: 20 77 69 6c 6c 20 73 65 74 20 74 6f 20 31 20 69   will set to 1 i
c660: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f  f the current ro
c670: 77 20 69 73 20 6e 6f 74 20 74 68 65 20 6d 69 6e  w is not the min
c680: 69 6d 75 6d 20 6f 72 0a 2a 2a 20 6d 61 78 69 6d  imum or.** maxim
c690: 75 6d 2e 20 20 54 68 65 20 50 31 20 72 65 67 69  um.  The P1 regi
c6a0: 73 74 65 72 20 69 73 20 69 6e 69 74 69 61 6c 69  ster is initiali
c6b0: 7a 65 64 20 74 6f 20 30 20 62 79 20 74 68 69 73  zed to 0 by this
c6c0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
c6d0: 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63  .** The interfac
c6e0: 65 20 75 73 65 64 20 62 79 20 74 68 65 20 69 6d  e used by the im
c6f0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
c700: 74 68 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f 6e  the aforemention
c710: 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20  ed functions.** 
c720: 74 6f 20 72 65 74 72 69 65 76 65 20 74 68 65 20  to retrieve the 
c730: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
c740: 63 65 20 73 65 74 20 62 79 20 74 68 69 73 20 6f  ce set by this o
c750: 70 63 6f 64 65 20 69 73 20 6e 6f 74 20 61 76 61  pcode is not ava
c760: 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69 63  ilable.** public
c770: 6c 79 2e 20 20 4f 6e 6c 79 20 62 75 69 6c 74 2d  ly.  Only built-
c780: 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76  in functions hav
c790: 65 20 61 63 63 65 73 73 20 74 6f 20 74 68 69 73  e access to this
c7a0: 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73   feature..*/.cas
c7b0: 65 20 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a  e OP_CollSeq: {.
c7c0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
c7d0: 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45  4type==P4_COLLSE
c7e0: 51 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  Q );.  if( pOp->
c7f0: 70 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  p1 ){.    sqlite
c800: 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
c810: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c  (&aMem[pOp->p1],
c820: 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b   0);.  }.  break
c830: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
c840: 46 75 6e 63 74 69 6f 6e 30 20 50 31 20 50 32 20  Function0 P1 P2 
c850: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
c860: 70 73 69 73 3a 20 72 5b 50 33 5d 3d 66 75 6e 63  psis: r[P3]=func
c870: 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a  (r[P2@P5]).**.**
c880: 20 49 6e 76 6f 6b 65 20 61 20 75 73 65 72 20 66   Invoke a user f
c890: 75 6e 63 74 69 6f 6e 20 28 50 34 20 69 73 20 61  unction (P4 is a
c8a0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 46 75   pointer to a Fu
c8b0: 6e 63 44 65 66 20 6f 62 6a 65 63 74 20 74 68 61  ncDef object tha
c8c0: 74 0a 2a 2a 20 64 65 66 69 6e 65 73 20 74 68 65  t.** defines the
c8d0: 20 66 75 6e 63 74 69 6f 6e 29 20 77 69 74 68 20   function) with 
c8e0: 50 35 20 61 72 67 75 6d 65 6e 74 73 20 74 61 6b  P5 arguments tak
c8f0: 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  en from register
c900: 20 50 32 20 61 6e 64 0a 2a 2a 20 73 75 63 63 65   P2 and.** succe
c910: 73 73 6f 72 73 2e 20 20 54 68 65 20 72 65 73 75  ssors.  The resu
c920: 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  lt of the functi
c930: 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  on is stored in 
c940: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
c950: 52 65 67 69 73 74 65 72 20 50 33 20 6d 75 73 74  Register P3 must
c960: 20 6e 6f 74 20 62 65 20 6f 6e 65 20 6f 66 20 74   not be one of t
c970: 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 70 75  he function inpu
c980: 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  ts..**.** P1 is 
c990: 61 20 33 32 2d 62 69 74 20 62 69 74 6d 61 73 6b  a 32-bit bitmask
c9a0: 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74   indicating whet
c9b0: 68 65 72 20 6f 72 20 6e 6f 74 20 65 61 63 68 20  her or not each 
c9c0: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
c9d0: 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77 61 73  .** function was
c9e0: 20 64 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 62   determined to b
c9f0: 65 20 63 6f 6e 73 74 61 6e 74 20 61 74 20 63 6f  e constant at co
ca00: 6d 70 69 6c 65 20 74 69 6d 65 2e 20 49 66 20 74  mpile time. If t
ca10: 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75  he first.** argu
ca20: 6d 65 6e 74 20 77 61 73 20 63 6f 6e 73 74 61 6e  ment was constan
ca30: 74 20 74 68 65 6e 20 62 69 74 20 30 20 6f 66 20  t then bit 0 of 
ca40: 50 31 20 69 73 20 73 65 74 2e 20 54 68 69 73 20  P1 is set. This 
ca50: 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72  is used to deter
ca60: 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20  mine.** whether 
ca70: 6d 65 74 61 20 64 61 74 61 20 61 73 73 6f 63 69  meta data associ
ca80: 61 74 65 64 20 77 69 74 68 20 61 20 75 73 65 72  ated with a user
ca90: 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65   function argume
caa0: 6e 74 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  nt using the.** 
cab0: 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 78 64  sqlite3_set_auxd
cac0: 61 74 61 28 29 20 41 50 49 20 6d 61 79 20 62 65  ata() API may be
cad0: 20 73 61 66 65 6c 79 20 72 65 74 61 69 6e 65 64   safely retained
cae0: 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 0a   until the next.
caf0: 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66  ** invocation of
cb00: 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a   this opcode..**
cb10: 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 75  .** See also: Fu
cb20: 6e 63 74 69 6f 6e 2c 20 41 67 67 53 74 65 70 2c  nction, AggStep,
cb30: 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 2f 2a 20   AggFinal.*/./* 
cb40: 4f 70 63 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e  Opcode: Function
cb50: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
cb60: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
cb70: 33 5d 3d 66 75 6e 63 28 72 5b 50 32 40 50 35 5d  3]=func(r[P2@P5]
cb80: 29 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61  ).**.** Invoke a
cb90: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 28   user function (
cba0: 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
cbb0: 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f  to an sqlite3_co
cbc0: 6e 74 65 78 74 20 6f 62 6a 65 63 74 20 74 68 61  ntext object tha
cbd0: 74 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20  t.** contains a 
cbe0: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66  pointer to the f
cbf0: 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20 72 75  unction to be ru
cc00: 6e 29 20 77 69 74 68 20 50 35 20 61 72 67 75 6d  n) with P5 argum
cc10: 65 6e 74 73 20 74 61 6b 65 6e 0a 2a 2a 20 66 72  ents taken.** fr
cc20: 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61  om register P2 a
cc30: 6e 64 20 73 75 63 63 65 73 73 6f 72 73 2e 20 20  nd successors.  
cc40: 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  The result of th
cc50: 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 74  e function is st
cc60: 6f 72 65 64 0a 2a 2a 20 69 6e 20 72 65 67 69 73  ored.** in regis
cc70: 74 65 72 20 50 33 2e 20 20 52 65 67 69 73 74 65  ter P3.  Registe
cc80: 72 20 50 33 20 6d 75 73 74 20 6e 6f 74 20 62 65  r P3 must not be
cc90: 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 75 6e 63   one of the func
cca0: 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a  tion inputs..**.
ccb0: 2a 2a 20 50 31 20 69 73 20 61 20 33 32 2d 62 69  ** P1 is a 32-bi
ccc0: 74 20 62 69 74 6d 61 73 6b 20 69 6e 64 69 63 61  t bitmask indica
ccd0: 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20  ting whether or 
cce0: 6e 6f 74 20 65 61 63 68 20 61 72 67 75 6d 65 6e  not each argumen
ccf0: 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e  t to the .** fun
cd00: 63 74 69 6f 6e 20 77 61 73 20 64 65 74 65 72 6d  ction was determ
cd10: 69 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e 73 74  ined to be const
cd20: 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65 20 74  ant at compile t
cd30: 69 6d 65 2e 20 49 66 20 74 68 65 20 66 69 72 73  ime. If the firs
cd40: 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77 61  t.** argument wa
cd50: 73 20 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20  s constant then 
cd60: 62 69 74 20 30 20 6f 66 20 50 31 20 69 73 20 73  bit 0 of P1 is s
cd70: 65 74 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  et. This is used
cd80: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a   to determine.**
cd90: 20 77 68 65 74 68 65 72 20 6d 65 74 61 20 64 61   whether meta da
cda0: 74 61 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ta associated wi
cdb0: 74 68 20 61 20 75 73 65 72 20 66 75 6e 63 74 69  th a user functi
cdc0: 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75 73 69 6e  on argument usin
cdd0: 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  g the.** sqlite3
cde0: 5f 73 65 74 5f 61 75 78 64 61 74 61 28 29 20 41  _set_auxdata() A
cdf0: 50 49 20 6d 61 79 20 62 65 20 73 61 66 65 6c 79  PI may be safely
ce00: 20 72 65 74 61 69 6e 65 64 20 75 6e 74 69 6c 20   retained until 
ce10: 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f  the next.** invo
ce20: 63 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f  cation of this o
ce30: 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c  pcode..**.** SQL
ce40: 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 69   functions are i
ce50: 6e 69 74 69 61 6c 6c 79 20 63 6f 64 65 64 20 61  nitially coded a
ce60: 73 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 30 20 77  s OP_Function0 w
ce70: 69 74 68 20 50 34 20 70 6f 69 6e 74 69 6e 67 0a  ith P4 pointing.
ce80: 2a 2a 20 74 6f 20 61 20 46 75 6e 63 44 65 66 20  ** to a FuncDef 
ce90: 6f 62 6a 65 63 74 2e 20 20 42 75 74 20 6f 6e 20  object.  But on 
cea0: 66 69 72 73 74 20 65 76 61 6c 75 61 74 69 6f 6e  first evaluation
ceb0: 2c 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64  , the P4 operand
cec0: 20 69 73 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63   is.** automatic
ced0: 61 6c 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 69  ally converted i
cee0: 6e 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 63  nto an sqlite3_c
cef0: 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74 20 61 6e  ontext object an
cf00: 64 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 0a  d the operation.
cf10: 2a 2a 20 63 68 61 6e 67 65 64 20 74 6f 20 74 68  ** changed to th
cf20: 69 73 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 20 6f  is OP_Function o
cf30: 70 63 6f 64 65 2e 20 20 49 6e 20 74 68 69 73 20  pcode.  In this 
cf40: 77 61 79 2c 20 74 68 65 20 69 6e 69 74 69 61 6c  way, the initial
cf50: 69 7a 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  ization of.** th
cf60: 65 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  e sqlite3_contex
cf70: 74 20 6f 62 6a 65 63 74 20 6f 63 63 75 72 73 20  t object occurs 
cf80: 6f 6e 6c 79 20 6f 6e 63 65 2c 20 72 61 74 68 65  only once, rathe
cf90: 72 20 74 68 61 6e 20 6f 6e 63 65 20 66 6f 72 20  r than once for 
cfa0: 65 61 63 68 0a 2a 2a 20 65 76 61 6c 75 61 74 69  each.** evaluati
cfb0: 6f 6e 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  on of the functi
cfc0: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  on..**.** See al
cfd0: 73 6f 3a 20 46 75 6e 63 74 69 6f 6e 30 2c 20 41  so: Function0, A
cfe0: 67 67 53 74 65 70 2c 20 41 67 67 46 69 6e 61 6c  ggStep, AggFinal
cff0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 75 6e 63  .*/.case OP_Func
d000: 74 69 6f 6e 30 3a 20 7b 0a 20 20 69 6e 74 20 6e  tion0: {.  int n
d010: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ;.  sqlite3_cont
d020: 65 78 74 20 2a 70 43 74 78 3b 0a 0a 20 20 61 73  ext *pCtx;..  as
d030: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
d040: 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 3b  e==P4_FUNCDEF );
d050: 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a  .  n = pOp->p5;.
d060: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
d070: 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
d080: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
d090: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73  nCursor) );.  as
d0a0: 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70  sert( n==0 || (p
d0b0: 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d  Op->p2>0 && pOp-
d0c0: 3e 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  >p2+n<=(p->nMem+
d0d0: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  1 - p->nCursor)+
d0e0: 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  1) );.  assert( 
d0f0: 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20  pOp->p3<pOp->p2 
d100: 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d  || pOp->p3>=pOp-
d110: 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 43 74 78 20  >p2+n );.  pCtx 
d120: 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  = sqlite3DbMallo
d130: 63 52 61 77 4e 4e 28 64 62 2c 20 73 69 7a 65 6f  cRawNN(db, sizeo
d140: 66 28 2a 70 43 74 78 29 20 2b 20 28 6e 2d 31 29  f(*pCtx) + (n-1)
d150: 2a 73 69 7a 65 6f 66 28 73 71 6c 69 74 65 33 5f  *sizeof(sqlite3_
d160: 76 61 6c 75 65 2a 29 29 3b 0a 20 20 69 66 28 20  value*));.  if( 
d170: 70 43 74 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  pCtx==0 ) goto n
d180: 6f 5f 6d 65 6d 3b 0a 20 20 70 43 74 78 2d 3e 70  o_mem;.  pCtx->p
d190: 4f 75 74 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d  Out = 0;.  pCtx-
d1a0: 3e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34  >pFunc = pOp->p4
d1b0: 2e 70 46 75 6e 63 3b 0a 20 20 70 43 74 78 2d 3e  .pFunc;.  pCtx->
d1c0: 69 4f 70 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  iOp = (int)(pOp 
d1d0: 2d 20 61 4f 70 29 3b 0a 20 20 70 43 74 78 2d 3e  - aOp);.  pCtx->
d1e0: 70 56 64 62 65 20 3d 20 70 3b 0a 20 20 70 43 74  pVdbe = p;.  pCt
d1f0: 78 2d 3e 61 72 67 63 20 3d 20 6e 3b 0a 20 20 70  x->argc = n;.  p
d200: 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f  Op->p4type = P4_
d210: 46 55 4e 43 43 54 58 3b 0a 20 20 70 4f 70 2d 3e  FUNCCTX;.  pOp->
d220: 70 34 2e 70 43 74 78 20 3d 20 70 43 74 78 3b 0a  p4.pCtx = pCtx;.
d230: 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20    pOp->opcode = 
d240: 4f 50 5f 46 75 6e 63 74 69 6f 6e 3b 0a 20 20 2f  OP_Function;.  /
d250: 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69  * Fall through i
d260: 6e 74 6f 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 20  nto OP_Function 
d270: 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50 5f 46 75 6e  */.}.case OP_Fun
d280: 63 74 69 6f 6e 3a 20 7b 0a 20 20 69 6e 74 20 69  ction: {.  int i
d290: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ;.  sqlite3_cont
d2a0: 65 78 74 20 2a 70 43 74 78 3b 0a 0a 20 20 61 73  ext *pCtx;..  as
d2b0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
d2c0: 65 3d 3d 50 34 5f 46 55 4e 43 43 54 58 20 29 3b  e==P4_FUNCCTX );
d2d0: 0a 20 20 70 43 74 78 20 3d 20 70 4f 70 2d 3e 70  .  pCtx = pOp->p
d2e0: 34 2e 70 43 74 78 3b 0a 0a 20 20 2f 2a 20 49 66  4.pCtx;..  /* If
d2f0: 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69   this function i
d300: 73 20 69 6e 73 69 64 65 20 6f 66 20 61 20 74 72  s inside of a tr
d310: 69 67 67 65 72 2c 20 74 68 65 20 72 65 67 69 73  igger, the regis
d320: 74 65 72 20 61 72 72 61 79 20 69 6e 20 61 4d 65  ter array in aMe
d330: 6d 5b 5d 0a 20 20 2a 2a 20 6d 69 67 68 74 20 63  m[].  ** might c
d340: 68 61 6e 67 65 20 66 72 6f 6d 20 6f 6e 65 20 65  hange from one e
d350: 76 61 6c 75 61 74 69 6f 6e 20 74 6f 20 74 68 65  valuation to the
d360: 20 6e 65 78 74 2e 20 20 54 68 65 20 6e 65 78 74   next.  The next
d370: 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 0a 20   block of code. 
d380: 20 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20 73 65   ** checks to se
d390: 65 20 69 66 20 74 68 65 20 72 65 67 69 73 74 65  e if the registe
d3a0: 72 20 61 72 72 61 79 20 68 61 73 20 63 68 61 6e  r array has chan
d3b0: 67 65 64 2c 20 61 6e 64 20 69 66 20 73 6f 20 69  ged, and if so i
d3c0: 74 0a 20 20 2a 2a 20 72 65 69 6e 69 74 69 61 6c  t.  ** reinitial
d3d0: 69 7a 65 73 20 74 68 65 20 72 65 6c 61 76 61 6e  izes the relavan
d3e0: 74 20 70 61 72 74 73 20 6f 66 20 74 68 65 20 73  t parts of the s
d3f0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f  qlite3_context o
d400: 62 6a 65 63 74 20 2a 2f 0a 20 20 70 4f 75 74 20  bject */.  pOut 
d410: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
d420: 3b 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 70 4f  ;.  if( pCtx->pO
d430: 75 74 20 21 3d 20 70 4f 75 74 20 29 7b 0a 20 20  ut != pOut ){.  
d440: 20 20 70 43 74 78 2d 3e 70 4f 75 74 20 3d 20 70    pCtx->pOut = p
d450: 4f 75 74 3b 0a 20 20 20 20 66 6f 72 28 69 3d 70  Out;.    for(i=p
d460: 43 74 78 2d 3e 61 72 67 63 2d 31 3b 20 69 3e 3d  Ctx->argc-1; i>=
d470: 30 3b 20 69 2d 2d 29 20 70 43 74 78 2d 3e 61 72  0; i--) pCtx->ar
d480: 67 76 5b 69 5d 20 3d 20 26 61 4d 65 6d 5b 70 4f  gv[i] = &aMem[pO
d490: 70 2d 3e 70 32 2b 69 5d 3b 0a 20 20 7d 0a 0a 20  p->p2+i];.  }.. 
d4a0: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
d4b0: 65 28 70 2c 20 70 43 74 78 2d 3e 70 4f 75 74 29  e(p, pCtx->pOut)
d4c0: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
d4d0: 44 45 42 55 47 0a 20 20 66 6f 72 28 69 3d 30 3b  DEBUG.  for(i=0;
d4e0: 20 69 3c 70 43 74 78 2d 3e 61 72 67 63 3b 20 69   i<pCtx->argc; i
d4f0: 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
d500: 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 43 74 78   memIsValid(pCtx
d510: 2d 3e 61 72 67 76 5b 69 5d 29 20 29 3b 0a 20 20  ->argv[i]) );.  
d520: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
d530: 28 70 4f 70 2d 3e 70 32 2b 69 2c 20 70 43 74 78  (pOp->p2+i, pCtx
d540: 2d 3e 61 72 67 76 5b 69 5d 29 3b 0a 20 20 7d 0a  ->argv[i]);.  }.
d550: 23 65 6e 64 69 66 0a 20 20 4d 65 6d 53 65 74 54  #endif.  MemSetT
d560: 79 70 65 46 6c 61 67 28 70 43 74 78 2d 3e 70 4f  ypeFlag(pCtx->pO
d570: 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  ut, MEM_Null);. 
d580: 20 70 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41   pCtx->fErrorOrA
d590: 75 78 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 6c 61  ux = 0;.  db->la
d5a0: 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f  stRowid = lastRo
d5b0: 77 69 64 3b 0a 20 20 28 2a 70 43 74 78 2d 3e 70  wid;.  (*pCtx->p
d5c0: 46 75 6e 63 2d 3e 78 53 46 75 6e 63 29 28 70 43  Func->xSFunc)(pC
d5d0: 74 78 2c 20 70 43 74 78 2d 3e 61 72 67 63 2c 20  tx, pCtx->argc, 
d5e0: 70 43 74 78 2d 3e 61 72 67 76 29 3b 2f 2a 20 49  pCtx->argv);/* I
d5f0: 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33  MP: R-24505-2323
d600: 30 20 2a 2f 0a 20 20 6c 61 73 74 52 6f 77 69 64  0 */.  lastRowid
d610: 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64   = db->lastRowid
d620: 3b 20 20 2f 2a 20 52 65 6d 65 6d 62 65 72 20 72  ;  /* Remember r
d630: 6f 77 69 64 20 63 68 61 6e 67 65 73 20 6d 61 64  owid changes mad
d640: 65 20 62 79 20 78 53 46 75 6e 63 20 2a 2f 0a 0a  e by xSFunc */..
d650: 20 20 2f 2a 20 49 66 20 74 68 65 20 66 75 6e 63    /* If the func
d660: 74 69 6f 6e 20 72 65 74 75 72 6e 65 64 20 61 6e  tion returned an
d670: 20 65 72 72 6f 72 2c 20 74 68 72 6f 77 20 61 6e   error, throw an
d680: 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20   exception */.  
d690: 69 66 28 20 70 43 74 78 2d 3e 66 45 72 72 6f 72  if( pCtx->fError
d6a0: 4f 72 41 75 78 20 29 7b 0a 20 20 20 20 69 66 28  OrAux ){.    if(
d6b0: 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 20 29   pCtx->isError )
d6c0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
d6d0: 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22  dbeError(p, "%s"
d6e0: 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
d6f0: 74 65 78 74 28 70 43 74 78 2d 3e 70 4f 75 74 29  text(pCtx->pOut)
d700: 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 70 43  );.      rc = pC
d710: 74 78 2d 3e 69 73 45 72 72 6f 72 3b 0a 20 20 20  tx->isError;.   
d720: 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64   }.    sqlite3Vd
d730: 62 65 44 65 6c 65 74 65 41 75 78 44 61 74 61 28  beDeleteAuxData(
d740: 64 62 2c 20 26 70 2d 3e 70 41 75 78 44 61 74 61  db, &p->pAuxData
d750: 2c 20 70 43 74 78 2d 3e 69 4f 70 2c 20 70 4f 70  , pCtx->iOp, pOp
d760: 2d 3e 70 31 29 3b 0a 20 20 20 20 69 66 28 20 72  ->p1);.    if( r
d770: 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
d780: 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
d790: 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20  ..  /* Copy the 
d7a0: 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75  result of the fu
d7b0: 6e 63 74 69 6f 6e 20 69 6e 74 6f 20 72 65 67 69  nction into regi
d7c0: 73 74 65 72 20 50 33 20 2a 2f 0a 20 20 69 66 28  ster P3 */.  if(
d7d0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 20 28   pOut->flags & (
d7e0: 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62  MEM_Str|MEM_Blob
d7f0: 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  ) ){.    sqlite3
d800: 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
d810: 6e 67 28 70 43 74 78 2d 3e 70 4f 75 74 2c 20 65  ng(pCtx->pOut, e
d820: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 69 66  ncoding);.    if
d830: 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
d840: 54 6f 6f 42 69 67 28 70 43 74 78 2d 3e 70 4f 75  TooBig(pCtx->pOu
d850: 74 29 20 29 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  t) ) goto too_bi
d860: 67 3b 0a 20 20 7d 0a 0a 20 20 52 45 47 49 53 54  g;.  }..  REGIST
d870: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
d880: 2c 20 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 20  , pCtx->pOut);. 
d890: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
d8a0: 53 49 5a 45 28 70 43 74 78 2d 3e 70 4f 75 74 29  SIZE(pCtx->pOut)
d8b0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
d8c0: 20 4f 70 63 6f 64 65 3a 20 42 69 74 41 6e 64 20   Opcode: BitAnd 
d8d0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
d8e0: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
d8f0: 72 5b 50 31 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a  r[P1]&r[P2].**.*
d900: 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77  * Take the bit-w
d910: 69 73 65 20 41 4e 44 20 6f 66 20 74 68 65 20 76  ise AND of the v
d920: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
d930: 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a  r P1 and P2 and.
d940: 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  ** store the res
d950: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
d960: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
d970: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
d980: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
d990: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
d9a0: 3a 20 42 69 74 4f 72 20 50 31 20 50 32 20 50 33  : BitOr P1 P2 P3
d9b0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
d9c0: 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b  : r[P3]=r[P1]|r[
d9d0: 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74  P2].**.** Take t
d9e0: 68 65 20 62 69 74 2d 77 69 73 65 20 4f 52 20 6f  he bit-wise OR o
d9f0: 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  f the values in 
da00: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
da10: 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20  P2 and.** store 
da20: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
da30: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
da40: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
da50: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
da60: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
da70: 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 4c 65   Opcode: ShiftLe
da80: 66 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ft P1 P2 P3 * *.
da90: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
daa0: 33 5d 3d 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d 0a  3]=r[P2]<<r[P1].
dab0: 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20  **.** Shift the 
dac0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e  integer value in
dad0: 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20   register P2 to 
dae0: 74 68 65 20 6c 65 66 74 20 62 79 20 74 68 65 0a  the left by the.
daf0: 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74  ** number of bit
db00: 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74  s specified by t
db10: 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65  he integer in re
db20: 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74  gister P1..** St
db30: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
db40: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
db50: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
db60: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
db70: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
db80: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69  /./* Opcode: Shi
db90: 66 74 52 69 67 68 74 20 50 31 20 50 32 20 50 33  ftRight P1 P2 P3
dba0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
dbb0: 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3e 3e 72  : r[P3]=r[P2]>>r
dbc0: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74  [P1].**.** Shift
dbd0: 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
dbe0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
dbf0: 32 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 62  2 to the right b
dc00: 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20  y the.** number 
dc10: 6f 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65  of bits specifie
dc20: 64 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72  d by the integer
dc30: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
dc40: 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65  .** Store the re
dc50: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
dc60: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
dc70: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
dc80: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
dc90: 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
dca0: 42 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20 20  BitAnd:         
dcb0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
dcc0: 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e  as TK_BITAND, in
dcd0: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
dce0: 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20  case OP_BitOr:  
dcf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd00: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49  /* same as TK_BI
dd10: 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  TOR, in1, in2, o
dd20: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ut3 */.case OP_S
dd30: 68 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20 20  hiftLeft:       
dd40: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
dd50: 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31  s TK_LSHIFT, in1
dd60: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
dd70: 61 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67 68  ase OP_ShiftRigh
dd80: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  t: {           /
dd90: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53 48  * same as TK_RSH
dda0: 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  IFT, in1, in2, o
ddb0: 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b  ut3 */.  i64 iA;
ddc0: 0a 20 20 75 36 34 20 75 41 3b 0a 20 20 69 36 34  .  u64 uA;.  i64
ddd0: 20 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a 20   iB;.  u8 op;.. 
dde0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
ddf0: 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d  p->p1];.  pIn2 =
de00: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
de10: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
de20: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
de30: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70  (pIn1->flags | p
de40: 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45  In2->flags) & ME
de50: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71  M_Null ){.    sq
de60: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
de70: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62  ull(pOut);.    b
de80: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41 20 3d  reak;.  }.  iA =
de90: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
dea0: 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 69 42  alue(pIn2);.  iB
deb0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
dec0: 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20  tValue(pIn1);.  
ded0: 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  op = pOp->opcode
dee0: 3b 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42  ;.  if( op==OP_B
def0: 69 74 41 6e 64 20 29 7b 0a 20 20 20 20 69 41 20  itAnd ){.    iA 
df00: 26 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69  &= iB;.  }else i
df10: 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72 20  f( op==OP_BitOr 
df20: 29 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69 42 3b  ){.    iA |= iB;
df30: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69 42 21  .  }else if( iB!
df40: 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
df50: 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 52 69  ( op==OP_ShiftRi
df60: 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68  ght || op==OP_Sh
df70: 69 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20 20 20  iftLeft );..    
df80: 2f 2a 20 49 66 20 73 68 69 66 74 69 6e 67 20 62  /* If shifting b
df90: 79 20 61 20 6e 65 67 61 74 69 76 65 20 61 6d 6f  y a negative amo
dfa0: 75 6e 74 2c 20 73 68 69 66 74 20 69 6e 20 74 68  unt, shift in th
dfb0: 65 20 6f 74 68 65 72 20 64 69 72 65 63 74 69 6f  e other directio
dfc0: 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20 69 42 3c  n */.    if( iB<
dfd0: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
dfe0: 74 28 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74  t( OP_ShiftRight
dff0: 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 2b 31  ==OP_ShiftLeft+1
e000: 20 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d 20 32   );.      op = 2
e010: 2a 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 2b 20  *OP_ShiftLeft + 
e020: 31 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20 69 42  1 - op;.      iB
e030: 20 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20 2d 69   = iB>(-64) ? -i
e040: 42 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a 0a 20  B : 64;.    }.. 
e050: 20 20 20 69 66 28 20 69 42 3e 3d 36 34 20 29 7b     if( iB>=64 ){
e060: 0a 20 20 20 20 20 20 69 41 20 3d 20 28 69 41 3e  .      iA = (iA>
e070: 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69  =0 || op==OP_Shi
e080: 66 74 4c 65 66 74 29 20 3f 20 30 20 3a 20 2d 31  ftLeft) ? 0 : -1
e090: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
e0a0: 20 20 20 6d 65 6d 63 70 79 28 26 75 41 2c 20 26     memcpy(&uA, &
e0b0: 69 41 2c 20 73 69 7a 65 6f 66 28 75 41 29 29 3b  iA, sizeof(uA));
e0c0: 0a 20 20 20 20 20 20 69 66 28 20 6f 70 3d 3d 4f  .      if( op==O
e0d0: 50 5f 53 68 69 66 74 4c 65 66 74 20 29 7b 0a 20  P_ShiftLeft ){. 
e0e0: 20 20 20 20 20 20 20 75 41 20 3c 3c 3d 20 69 42         uA <<= iB
e0f0: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
e100: 20 20 20 20 20 20 20 75 41 20 3e 3e 3d 20 69 42         uA >>= iB
e110: 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 69 67  ;.        /* Sig
e120: 6e 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20 72 69  n-extend on a ri
e130: 67 68 74 20 73 68 69 66 74 20 6f 66 20 61 20 6e  ght shift of a n
e140: 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20 2a  egative number *
e150: 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  /.        if( iA
e160: 3c 30 20 29 20 75 41 20 7c 3d 20 28 28 28 28 75  <0 ) uA |= ((((u
e170: 36 34 29 30 78 66 66 66 66 66 66 66 66 29 3c 3c  64)0xffffffff)<<
e180: 33 32 29 7c 30 78 66 66 66 66 66 66 66 66 29 20  32)|0xffffffff) 
e190: 3c 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20 20 20  << (64-iB);.    
e1a0: 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70 79    }.      memcpy
e1b0: 28 26 69 41 2c 20 26 75 41 2c 20 73 69 7a 65 6f  (&iA, &uA, sizeo
e1c0: 66 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a 20 20  f(iA));.    }.  
e1d0: 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  }.  pOut->u.i = 
e1e0: 69 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65  iA;.  MemSetType
e1f0: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
e200: 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  nt);.  break;.}.
e210: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 49  ./* Opcode: AddI
e220: 6d 6d 20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  mm  P1 P2 * * *.
e230: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
e240: 31 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a 2a 20 0a  1]=r[P1]+P2.** .
e250: 2a 2a 20 41 64 64 20 74 68 65 20 63 6f 6e 73 74  ** Add the const
e260: 61 6e 74 20 50 32 20 74 6f 20 74 68 65 20 76 61  ant P2 to the va
e270: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
e280: 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c  P1..** The resul
e290: 74 20 69 73 20 61 6c 77 61 79 73 20 61 6e 20 69  t is always an i
e2a0: 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f  nteger..**.** To
e2b0: 20 66 6f 72 63 65 20 61 6e 79 20 72 65 67 69 73   force any regis
e2c0: 74 65 72 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  ter to be an int
e2d0: 65 67 65 72 2c 20 6a 75 73 74 20 61 64 64 20 30  eger, just add 0
e2e0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64  ..*/.case OP_Add
e2f0: 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Imm: {          
e300: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49    /* in1 */.  pI
e310: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
e320: 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p1];.  memAboutT
e330: 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29  oChange(p, pIn1)
e340: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
e350: 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
e360: 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20  1);.  pIn1->u.i 
e370: 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72  += pOp->p2;.  br
e380: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
e390: 65 3a 20 4d 75 73 74 42 65 49 6e 74 20 50 31 20  e: MustBeInt P1 
e3a0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20  P2 * * *.** .** 
e3b0: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
e3c0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
e3d0: 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e  o be an integer.
e3e0: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
e3f0: 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f 74 20 61  * in P1 is not a
e400: 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20 63 61  n integer and ca
e410: 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65  nnot be converte
e420: 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65  d into an intege
e430: 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20 64 61 74  r.** without dat
e440: 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d  a loss, then jum
e450: 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
e460: 20 50 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30   P2, or if P2==0
e470: 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20 53 51 4c  .** raise an SQL
e480: 49 54 45 5f 4d 49 53 4d 41 54 43 48 20 65 78 63  ITE_MISMATCH exc
e490: 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  eption..*/.case 
e4a0: 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20  OP_MustBeInt: { 
e4b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
e4c0: 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
e4d0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
e4e0: 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  1];.  if( (pIn1-
e4f0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
e500: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70 6c  )==0 ){.    appl
e510: 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20  yAffinity(pIn1, 
e520: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
e530: 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  IC, encoding);. 
e540: 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
e550: 65 6e 28 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26  en((pIn1->flags&
e560: 4d 45 4d 5f 49 6e 74 29 3d 3d 30 2c 20 32 29 3b  MEM_Int)==0, 2);
e570: 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  .    if( (pIn1->
e580: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
e590: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ==0 ){.      if(
e5a0: 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20   pOp->p2==0 ){. 
e5b0: 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
e5c0: 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20  TE_MISMATCH;.   
e5d0: 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
e5e0: 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
e5f0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
e600: 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
e610: 70 32 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  p2;.      }.    
e620: 7d 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79  }.  }.  MemSetTy
e630: 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d  peFlag(pIn1, MEM
e640: 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  _Int);.  break;.
e650: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
e660: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
e670: 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  POINT./* Opcode:
e680: 20 52 65 61 6c 41 66 66 69 6e 69 74 79 20 50 31   RealAffinity P1
e690: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49   * * * *.**.** I
e6a0: 66 20 72 65 67 69 73 74 65 72 20 50 31 20 68 6f  f register P1 ho
e6b0: 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63  lds an integer c
e6c0: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 72  onvert it to a r
e6d0: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a  eal value..**.**
e6e0: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
e6f0: 75 73 65 64 20 77 68 65 6e 20 65 78 74 72 61 63  used when extrac
e700: 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ting information
e710: 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74   from a column t
e720: 68 61 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20  hat.** has REAL 
e730: 61 66 66 69 6e 69 74 79 2e 20 20 53 75 63 68 20  affinity.  Such 
e740: 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61  column values ma
e750: 79 20 73 74 69 6c 6c 20 62 65 20 73 74 6f 72 65  y still be store
e760: 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73  d as.** integers
e770: 2c 20 66 6f 72 20 73 70 61 63 65 20 65 66 66 69  , for space effi
e780: 63 69 65 6e 63 79 2c 20 62 75 74 20 61 66 74 65  ciency, but afte
e790: 72 20 65 78 74 72 61 63 74 69 6f 6e 20 77 65 20  r extraction we 
e7a0: 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20  want them.** to 
e7b0: 68 61 76 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c  have only a real
e7c0: 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20   value..*/.case 
e7d0: 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69 74 79 3a  OP_RealAffinity:
e7e0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
e7f0: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
e800: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
e810: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p1];.  if( pIn
e820: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
e830: 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  nt ){.    sqlite
e840: 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28  3VdbeMemRealify(
e850: 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65  pIn1);.  }.  bre
e860: 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
e870: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
e880: 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65  T_CAST./* Opcode
e890: 3a 20 43 61 73 74 20 50 31 20 50 32 20 2a 20 2a  : Cast P1 P2 * *
e8a0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
e8b0: 61 66 66 69 6e 69 74 79 28 72 5b 50 31 5d 29 0a  affinity(r[P1]).
e8c0: 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20  **.** Force the 
e8d0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
e8e0: 72 20 50 31 20 74 6f 20 62 65 20 74 68 65 20 74  r P1 to be the t
e8f0: 79 70 65 20 64 65 66 69 6e 65 64 20 62 79 20 50  ype defined by P
e900: 32 2e 0a 2a 2a 20 0a 2a 2a 20 3c 75 6c 3e 0a 2a  2..** .** <ul>.*
e910: 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 39 37 22  * <li value="97"
e920: 3e 20 54 45 58 54 0a 2a 2a 20 3c 6c 69 20 76 61  > TEXT.** <li va
e930: 6c 75 65 3d 22 39 38 22 3e 20 42 4c 4f 42 0a 2a  lue="98"> BLOB.*
e940: 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 39 39 22  * <li value="99"
e950: 3e 20 4e 55 4d 45 52 49 43 0a 2a 2a 20 3c 6c 69  > NUMERIC.** <li
e960: 20 76 61 6c 75 65 3d 22 31 30 30 22 3e 20 49 4e   value="100"> IN
e970: 54 45 47 45 52 0a 2a 2a 20 3c 6c 69 20 76 61 6c  TEGER.** <li val
e980: 75 65 3d 22 31 30 31 22 3e 20 52 45 41 4c 0a 2a  ue="101"> REAL.*
e990: 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 41 20  * </ul>.**.** A 
e9a0: 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f  NULL value is no
e9b0: 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69  t changed by thi
e9c0: 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72  s routine.  It r
e9d0: 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  emains NULL..*/.
e9e0: 63 61 73 65 20 4f 50 5f 43 61 73 74 3a 20 7b 20  case OP_Cast: { 
e9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea00: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73   /* in1 */.  ass
ea10: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 53 51  ert( pOp->p2>=SQ
ea20: 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 26 26  LITE_AFF_BLOB &&
ea30: 20 70 4f 70 2d 3e 70 32 3c 3d 53 51 4c 49 54 45   pOp->p2<=SQLITE
ea40: 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20 74  _AFF_REAL );.  t
ea50: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
ea60: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  ==SQLITE_AFF_TEX
ea70: 54 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  T );.  testcase(
ea80: 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
ea90: 5f 41 46 46 5f 42 4c 4f 42 20 29 3b 0a 20 20 74  _AFF_BLOB );.  t
eaa0: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
eab0: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  ==SQLITE_AFF_NUM
eac0: 45 52 49 43 20 29 3b 0a 20 20 74 65 73 74 63 61  ERIC );.  testca
ead0: 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c  se( pOp->p2==SQL
eae0: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20  ITE_AFF_INTEGER 
eaf0: 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
eb00: 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41  Op->p2==SQLITE_A
eb10: 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20 70 49 6e  FF_REAL );.  pIn
eb20: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
eb30: 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  1];.  memAboutTo
eb40: 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b  Change(p, pIn1);
eb50: 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c  .  rc = ExpandBl
eb60: 6f 62 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69  ob(pIn1);.  sqli
eb70: 74 65 33 56 64 62 65 4d 65 6d 43 61 73 74 28 70  te3VdbeMemCast(p
eb80: 49 6e 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 65 6e  In1, pOp->p2, en
eb90: 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54  coding);.  UPDAT
eba0: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
ebb0: 49 6e 31 29 3b 0a 20 20 69 66 28 20 72 63 20 29  In1);.  if( rc )
ebc0: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
ebd0: 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
ebe0: 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
ebf0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20  QLITE_OMIT_CAST 
ec00: 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45  */../* Opcode: E
ec10: 71 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  q P1 P2 P3 P4 P5
ec20: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46  .** Synopsis: IF
ec30: 20 72 5b 50 33 5d 3d 3d 72 5b 50 31 5d 0a 2a 2a   r[P3]==r[P1].**
ec40: 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20  .** Compare the 
ec50: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
ec60: 65 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49  er P1 and P3.  I
ec70: 66 20 72 65 67 28 50 33 29 3d 3d 72 65 67 28 50  f reg(P3)==reg(P
ec80: 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20  1) then.** jump 
ec90: 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 20 20  to address P2.  
eca0: 4f 72 20 69 66 20 74 68 65 20 53 51 4c 49 54 45  Or if the SQLITE
ecb0: 5f 53 54 4f 52 45 50 32 20 66 6c 61 67 20 69 73  _STOREP2 flag is
ecc0: 20 73 65 74 20 69 6e 20 50 35 2c 20 74 68 65 6e   set in P5, then
ecd0: 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65  .** store the re
ece0: 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73  sult of comparis
ecf0: 6f 6e 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  on in register P
ed00: 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  2..**.** The SQL
ed10: 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72  ITE_AFF_MASK por
ed20: 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20  tion of P5 must 
ed30: 62 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63  be an affinity c
ed40: 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51  haracter -.** SQ
ed50: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53  LITE_AFF_TEXT, S
ed60: 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45  QLITE_AFF_INTEGE
ed70: 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e  R, and so forth.
ed80: 20 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d   An attempt is m
ed90: 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63  ade .** to coerc
eda0: 65 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63  e both inputs ac
edb0: 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20  cording to this 
edc0: 61 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20  affinity before 
edd0: 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f  the.** compariso
ede0: 6e 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68  n is made. If th
edf0: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  e SQLITE_AFF_MAS
ee00: 4b 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20  K is 0x00, then 
ee10: 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e  numeric.** affin
ee20: 69 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74  ity is used. Not
ee30: 65 20 74 68 61 74 20 74 68 65 20 61 66 66 69 6e  e that the affin
ee40: 69 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20  ity conversions 
ee50: 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61  are stored.** ba
ee60: 63 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75  ck into the inpu
ee70: 74 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  t registers P1 a
ee80: 6e 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20  nd P3.  So this 
ee90: 6f 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65  opcode can cause
eea0: 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63  .** persistent c
eeb0: 68 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74  hanges to regist
eec0: 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a  ers P1 and P3..*
eed0: 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f  *.** Once any co
eee0: 6e 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74  nversions have t
eef0: 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20  aken place, and 
ef00: 6e 65 69 74 68 65 72 20 76 61 6c 75 65 20 69 73  neither value is
ef10: 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76   NULL, .** the v
ef20: 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72  alues are compar
ef30: 65 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75  ed. If both valu
ef40: 65 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65  es are blobs the
ef50: 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a  n memcmp() is.**
ef60: 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69   used to determi
ef70: 6e 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  ne the results o
ef80: 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  f the comparison
ef90: 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65  .  If both value
efa0: 73 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74  s.** are text, t
efb0: 68 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69  hen the appropri
efc0: 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  ate collating fu
efd0: 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64  nction specified
efe0: 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20 75 73 65   in.** P4 is use
eff0: 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70  d to do the comp
f000: 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34 20 69  arison.  If P4 i
f010: 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20  s not specified 
f020: 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29  then.** memcmp()
f030: 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70   is used to comp
f040: 61 72 65 20 74 65 78 74 20 73 74 72 69 6e 67 2e  are text string.
f050: 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73    If both values
f060: 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c   are.** numeric,
f070: 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69 63 20   then a numeric 
f080: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 75 73  comparison is us
f090: 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f 20 76  ed. If the two v
f0a0: 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20  alues.** are of 
f0b0: 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 73 2c  different types,
f0c0: 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20 61 72   then numbers ar
f0d0: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73  e considered les
f0e0: 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67  s than.** string
f0f0: 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72  s and strings ar
f100: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73  e considered les
f110: 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a  s than blobs..**
f120: 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55  .** If SQLITE_NU
f130: 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e 20 50  LLEQ is set in P
f140: 35 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  5 then the resul
f150: 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20  t of comparison 
f160: 69 73 20 61 6c 77 61 79 73 20 65 69 74 68 65 72  is always either
f170: 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61 6c 73  .** true or fals
f180: 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72 20 4e  e and is never N
f190: 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f 70  ULL.  If both op
f1a0: 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20  erands are NULL 
f1b0: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 0a  then the result.
f1c0: 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e  ** of comparison
f1d0: 20 69 73 20 74 72 75 65 2e 20 20 49 66 20 65 69   is true.  If ei
f1e0: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
f1f0: 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65  NULL then the re
f200: 73 75 6c 74 20 69 73 20 66 61 6c 73 65 2e 0a 2a  sult is false..*
f210: 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f 70 65  * If neither ope
f220: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65  rand is NULL the
f230: 20 72 65 73 75 6c 74 20 69 73 20 74 68 65 20 73   result is the s
f240: 61 6d 65 20 61 73 20 69 74 20 77 6f 75 6c 64 20  ame as it would 
f250: 62 65 20 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c  be if.** the SQL
f260: 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20  ITE_NULLEQ flag 
f270: 77 65 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f  were omitted fro
f280: 6d 20 50 35 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 62  m P5..**.** If b
f290: 6f 74 68 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  oth SQLITE_STORE
f2a0: 50 32 20 61 6e 64 20 53 51 4c 49 54 45 5f 4b 45  P2 and SQLITE_KE
f2b0: 45 50 4e 55 4c 4c 20 66 6c 61 67 73 20 61 72 65  EPNULL flags are
f2c0: 20 73 65 74 20 74 68 65 6e 20 74 68 65 0a 2a 2a   set then the.**
f2d0: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 5b 50 32   content of r[P2
f2e0: 5d 20 69 73 20 6f 6e 6c 79 20 63 68 61 6e 67 65  ] is only change
f2f0: 64 20 69 66 20 74 68 65 20 6e 65 77 20 76 61 6c  d if the new val
f300: 75 65 20 69 73 20 4e 55 4c 4c 20 6f 72 20 30 20  ue is NULL or 0 
f310: 28 66 61 6c 73 65 29 2e 0a 2a 2a 20 49 6e 20 6f  (false)..** In o
f320: 74 68 65 72 20 77 6f 72 64 73 2c 20 61 20 70 72  ther words, a pr
f330: 69 6f 72 20 72 5b 50 32 5d 20 76 61 6c 75 65 20  ior r[P2] value 
f340: 77 69 6c 6c 20 6e 6f 74 20 62 65 20 6f 76 65 72  will not be over
f350: 77 72 69 74 74 65 6e 20 62 79 20 31 20 28 74 72  written by 1 (tr
f360: 75 65 29 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ue)..*/./* Opcod
f370: 65 3a 20 4e 65 20 50 31 20 50 32 20 50 33 20 50  e: Ne P1 P2 P3 P
f380: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
f390: 3a 20 49 46 20 72 5b 50 33 5d 21 3d 72 5b 50 31  : IF r[P3]!=r[P1
f3a0: 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  ].**.** This wor
f3b0: 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65  ks just like the
f3c0: 20 45 71 20 6f 70 63 6f 64 65 20 65 78 63 65 70   Eq opcode excep
f3d0: 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20  t that the jump 
f3e0: 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74  is taken if.** t
f3f0: 68 65 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72  he operands in r
f400: 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20  egisters P1 and 
f410: 50 33 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c  P3 are not equal
f420: 2e 20 20 53 65 65 20 74 68 65 20 45 71 20 6f 70  .  See the Eq op
f430: 63 6f 64 65 20 66 6f 72 0a 2a 2a 20 61 64 64 69  code for.** addi
f440: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
f450: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 62 6f 74  on..**.** If bot
f460: 68 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  h SQLITE_STOREP2
f470: 20 61 6e 64 20 53 51 4c 49 54 45 5f 4b 45 45 50   and SQLITE_KEEP
f480: 4e 55 4c 4c 20 66 6c 61 67 73 20 61 72 65 20 73  NULL flags are s
f490: 65 74 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 63  et then the.** c
f4a0: 6f 6e 74 65 6e 74 20 6f 66 20 72 5b 50 32 5d 20  ontent of r[P2] 
f4b0: 69 73 20 6f 6e 6c 79 20 63 68 61 6e 67 65 64 20  is only changed 
f4c0: 69 66 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65  if the new value
f4d0: 20 69 73 20 4e 55 4c 4c 20 6f 72 20 31 20 28 74   is NULL or 1 (t
f4e0: 72 75 65 29 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65  rue)..** In othe
f4f0: 72 20 77 6f 72 64 73 2c 20 61 20 70 72 69 6f 72  r words, a prior
f500: 20 72 5b 50 32 5d 20 76 61 6c 75 65 20 77 69 6c   r[P2] value wil
f510: 6c 20 6e 6f 74 20 62 65 20 6f 76 65 72 77 72 69  l not be overwri
f520: 74 74 65 6e 20 62 79 20 30 20 28 66 61 6c 73 65  tten by 0 (false
f530: 29 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  )..*/./* Opcode:
f540: 20 4c 74 20 50 31 20 50 32 20 50 33 20 50 34 20   Lt P1 P2 P3 P4 
f550: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
f560: 49 46 20 72 5b 50 33 5d 3c 72 5b 50 31 5d 0a 2a  IF r[P3]<r[P1].*
f570: 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65  *.** Compare the
f580: 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
f590: 74 65 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20  ter P1 and P3.  
f5a0: 49 66 20 72 65 67 28 50 33 29 3c 72 65 67 28 50  If reg(P3)<reg(P
f5b0: 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20  1) then.** jump 
f5c0: 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 20 20  to address P2.  
f5d0: 4f 72 20 69 66 20 74 68 65 20 53 51 4c 49 54 45  Or if the SQLITE
f5e0: 5f 53 54 4f 52 45 50 32 20 66 6c 61 67 20 69 73  _STOREP2 flag is
f5f0: 20 73 65 74 20 69 6e 20 50 35 20 73 74 6f 72 65   set in P5 store
f600: 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 6f  .** the result o
f610: 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 28 30 20  f comparison (0 
f620: 6f 72 20 31 20 6f 72 20 4e 55 4c 4c 29 20 69 6e  or 1 or NULL) in
f630: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
f640: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  **.** If the SQL
f650: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62  ITE_JUMPIFNULL b
f660: 69 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 20  it of P5 is set 
f670: 61 6e 64 20 65 69 74 68 65 72 20 72 65 67 28 50  and either reg(P
f680: 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29  1) or.** reg(P3)
f690: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68   is NULL then th
f6a0: 65 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e  e take the jump.
f6b0: 20 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f    If the SQLITE_
f6c0: 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62  JUMPIFNULL .** b
f6d0: 69 74 20 69 73 20 63 6c 65 61 72 20 74 68 65 6e  it is clear then
f6e0: 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 66   fall through if
f6f0: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
f700: 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54  is NULL..**.** T
f710: 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  he SQLITE_AFF_MA
f720: 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35  SK portion of P5
f730: 20 6d 75 73 74 20 62 65 20 61 6e 20 61 66 66 69   must be an affi
f740: 6e 69 74 79 20 63 68 61 72 61 63 74 65 72 20 2d  nity character -
f750: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  .** SQLITE_AFF_T
f760: 45 58 54 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f  EXT, SQLITE_AFF_
f770: 49 4e 54 45 47 45 52 2c 20 61 6e 64 20 73 6f 20  INTEGER, and so 
f780: 66 6f 72 74 68 2e 20 41 6e 20 61 74 74 65 6d 70  forth. An attemp
f790: 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f  t is made .** to
f7a0: 20 63 6f 65 72 63 65 20 62 6f 74 68 20 69 6e 70   coerce both inp
f7b0: 75 74 73 20 61 63 63 6f 72 64 69 6e 67 20 74 6f  uts according to
f7c0: 20 74 68 69 73 20 61 66 66 69 6e 69 74 79 20 62   this affinity b
f7d0: 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d  efore the.** com
f7e0: 70 61 72 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e  parison is made.
f7f0: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41   If the SQLITE_A
f800: 46 46 5f 4d 41 53 4b 20 69 73 20 30 78 30 30 2c  FF_MASK is 0x00,
f810: 20 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a   then numeric.**
f820: 20 61 66 66 69 6e 69 74 79 20 69 73 20 75 73 65   affinity is use
f830: 64 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  d. Note that the
f840: 20 61 66 66 69 6e 69 74 79 20 63 6f 6e 76 65 72   affinity conver
f850: 73 69 6f 6e 73 20 61 72 65 20 73 74 6f 72 65 64  sions are stored
f860: 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74 68  .** back into th
f870: 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72  e input register
f880: 73 20 50 31 20 61 6e 64 20 50 33 2e 20 20 53 6f  s P1 and P3.  So
f890: 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63 61 6e   this opcode can
f8a0: 20 63 61 75 73 65 0a 2a 2a 20 70 65 72 73 69 73   cause.** persis
f8b0: 74 65 6e 74 20 63 68 61 6e 67 65 73 20 74 6f 20  tent changes to 
f8c0: 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
f8d0: 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20   P3..**.** Once 
f8e0: 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20  any conversions 
f8f0: 68 61 76 65 20 74 61 6b 65 6e 20 70 6c 61 63 65  have taken place
f900: 2c 20 61 6e 64 20 6e 65 69 74 68 65 72 20 76 61  , and neither va
f910: 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a  lue is NULL, .**
f920: 20 74 68 65 20 76 61 6c 75 65 73 20 61 72 65 20   the values are 
f930: 63 6f 6d 70 61 72 65 64 2e 20 49 66 20 62 6f 74  compared. If bot
f940: 68 20 76 61 6c 75 65 73 20 61 72 65 20 62 6c 6f  h values are blo
f950: 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29  bs then memcmp()
f960: 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64   is.** used to d
f970: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 72 65 73  etermine the res
f980: 75 6c 74 73 20 6f 66 20 74 68 65 20 63 6f 6d 70  ults of the comp
f990: 61 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68  arison.  If both
f9a0: 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74   values.** are t
f9b0: 65 78 74 2c 20 74 68 65 6e 20 74 68 65 20 61 70  ext, then the ap
f9c0: 70 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61 74  propriate collat
f9d0: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65  ing function spe
f9e0: 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20  cified in.** P4 
f9f0: 69 73 20 20 75 73 65 64 20 74 6f 20 64 6f 20 74  is  used to do t
fa00: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  he comparison.  
fa10: 49 66 20 50 34 20 69 73 20 6e 6f 74 20 73 70 65  If P4 is not spe
fa20: 63 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d  cified then.** m
fa30: 65 6d 63 6d 70 28 29 20 69 73 20 75 73 65 64 20  emcmp() is used 
fa40: 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20  to compare text 
fa50: 73 74 72 69 6e 67 2e 20 20 49 66 20 62 6f 74 68  string.  If both
fa60: 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e   values are.** n
fa70: 75 6d 65 72 69 63 2c 20 74 68 65 6e 20 61 20 6e  umeric, then a n
fa80: 75 6d 65 72 69 63 20 63 6f 6d 70 61 72 69 73 6f  umeric compariso
fa90: 6e 20 69 73 20 75 73 65 64 2e 20 49 66 20 74 68  n is used. If th
faa0: 65 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20  e two values.** 
fab0: 61 72 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74  are of different
fac0: 20 74 79 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d   types, then num
fad0: 62 65 72 73 20 61 72 65 20 63 6f 6e 73 69 64 65  bers are conside
fae0: 72 65 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a  red less than.**
faf0: 20 73 74 72 69 6e 67 73 20 61 6e 64 20 73 74 72   strings and str
fb00: 69 6e 67 73 20 61 72 65 20 63 6f 6e 73 69 64 65  ings are conside
fb10: 72 65 64 20 6c 65 73 73 20 74 68 61 6e 20 62 6c  red less than bl
fb20: 6f 62 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  obs..*/./* Opcod
fb30: 65 3a 20 4c 65 20 50 31 20 50 32 20 50 33 20 50  e: Le P1 P2 P3 P
fb40: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
fb50: 3a 20 49 46 20 72 5b 50 33 5d 3c 3d 72 5b 50 31  : IF r[P3]<=r[P1
fb60: 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  ].**.** This wor
fb70: 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65  ks just like the
fb80: 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70   Lt opcode excep
fb90: 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20  t that the jump 
fba0: 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74  is taken if.** t
fbb0: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
fbc0: 67 69 73 74 65 72 20 50 33 20 69 73 20 6c 65 73  gister P3 is les
fbd0: 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
fbe0: 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  to the content o
fbf0: 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  f.** register P1
fc00: 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70  .  See the Lt op
fc10: 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
fc20: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
fc30: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47  .*/./* Opcode: G
fc40: 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
fc50: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46  .** Synopsis: IF
fc60: 20 72 5b 50 33 5d 3e 72 5b 50 31 5d 0a 2a 2a 0a   r[P3]>r[P1].**.
fc70: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
fc80: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
fc90: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
fca0: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
fcb0: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f  ken if.** the co
fcc0: 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
fcd0: 72 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20  r P3 is greater 
fce0: 74 68 61 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74  than the content
fcf0: 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   of.** register 
fd00: 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20  P1.  See the Lt 
fd10: 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74  opcode for addit
fd20: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
fd30: 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n..*/./* Opcode:
fd40: 20 47 65 20 50 31 20 50 32 20 50 33 20 50 34 20   Ge P1 P2 P3 P4 
fd50: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
fd60: 49 46 20 72 5b 50 33 5d 3e 3d 72 5b 50 31 5d 0a  IF r[P3]>=r[P1].
fd70: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
fd80: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
fd90: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
fda0: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
fdb0: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
fdc0: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
fdd0: 73 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74  ster P3 is great
fde0: 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
fdf0: 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   to the content 
fe00: 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  of.** register P
fe10: 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f  1.  See the Lt o
fe20: 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
fe30: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
fe40: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 71 3a  ..*/.case OP_Eq:
fe50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
fe60: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 51 2c  * same as TK_EQ,
fe70: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
fe80: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20  */.case OP_Ne:  
fe90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
fea0: 73 61 6d 65 20 61 73 20 54 4b 5f 4e 45 2c 20 6a  same as TK_NE, j
feb0: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
fec0: 0a 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20  .case OP_Lt:    
fed0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
fee0: 6d 65 20 61 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d  me as TK_LT, jum
fef0: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
ff00: 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 20 20  ase OP_Le:      
ff10: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
ff20: 20 61 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c   as TK_LE, jump,
ff30: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
ff40: 65 20 4f 50 5f 47 74 3a 20 20 20 20 20 20 20 20  e OP_Gt:        
ff50: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
ff60: 73 20 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20 69  s TK_GT, jump, i
ff70: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
ff80: 4f 50 5f 47 65 3a 20 7b 20 20 20 20 20 20 20 20  OP_Ge: {        
ff90: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
ffa0: 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_GE, jump, in1
ffb0: 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72  , in3 */.  int r
ffc0: 65 73 2c 20 72 65 73 32 3b 20 20 20 20 20 20 2f  es, res2;      /
ffd0: 2a 20 52 65 73 75 6c 74 20 6f 66 20 74 68 65 20  * Result of the 
ffe0: 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 70 49  comparison of pI
fff0: 6e 31 20 61 67 61 69 6e 73 74 20 70 49 6e 33 20  n1 against pIn3 
10000 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
10010 74 79 3b 20 20 20 20 20 20 2f 2a 20 41 66 66 69  ty;      /* Affi
10020 6e 69 74 79 20 74 6f 20 75 73 65 20 66 6f 72 20  nity to use for 
10030 63 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a 20 20  comparison */.  
10040 75 31 36 20 66 6c 61 67 73 31 3b 20 20 20 20 20  u16 flags1;     
10050 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69      /* Copy of i
10060 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20  nitial value of 
10070 70 49 6e 31 2d 3e 66 6c 61 67 73 20 2a 2f 0a 20  pIn1->flags */. 
10080 20 75 31 36 20 66 6c 61 67 73 33 3b 20 20 20 20   u16 flags3;    
10090 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20       /* Copy of 
100a0 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66  initial value of
100b0 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 2a 2f 0a   pIn3->flags */.
100c0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
100d0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33  pOp->p1];.  pIn3
100e0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
100f0 5d 3b 0a 20 20 66 6c 61 67 73 31 20 3d 20 70 49  ];.  flags1 = pI
10100 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20 20 66 6c 61  n1->flags;.  fla
10110 67 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67  gs3 = pIn3->flag
10120 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 31  s;.  if( (flags1
10130 20 7c 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f 4e   | flags3)&MEM_N
10140 75 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e  ull ){.    /* On
10150 65 20 6f 72 20 62 6f 74 68 20 6f 70 65 72 61 6e  e or both operan
10160 64 73 20 61 72 65 20 4e 55 4c 4c 20 2a 2f 0a 20  ds are NULL */. 
10170 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26     if( pOp->p5 &
10180 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 29   SQLITE_NULLEQ )
10190 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 53 51  {.      /* If SQ
101a0 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73  LITE_NULLEQ is s
101b0 65 74 20 28 77 68 69 63 68 20 77 69 6c 6c 20 6f  et (which will o
101c0 6e 6c 79 20 68 61 70 70 65 6e 20 69 66 20 74 68  nly happen if th
101d0 65 20 6f 70 65 72 61 74 6f 72 20 69 73 0a 20 20  e operator is.  
101e0 20 20 20 20 2a 2a 20 4f 50 5f 45 71 20 6f 72 20      ** OP_Eq or 
101f0 4f 50 5f 4e 65 29 20 74 68 65 6e 20 74 61 6b 65  OP_Ne) then take
10200 20 74 68 65 20 6a 75 6d 70 20 6f 72 20 6e 6f 74   the jump or not
10210 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
10220 65 74 68 65 72 0a 20 20 20 20 20 20 2a 2a 20 6f  ether.      ** o
10230 72 20 6e 6f 74 20 62 6f 74 68 20 6f 70 65 72 61  r not both opera
10240 6e 64 73 20 61 72 65 20 6e 75 6c 6c 2e 0a 20 20  nds are null..  
10250 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73      */.      ass
10260 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
10270 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70 4f 70 2d 3e  ==OP_Eq || pOp->
10280 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b  opcode==OP_Ne );
10290 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
102a0 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 43 6c 65  flags1 & MEM_Cle
102b0 61 72 65 64 29 3d 3d 30 20 29 3b 0a 20 20 20 20  ared)==0 );.    
102c0 20 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e    assert( (pOp->
102d0 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50  p5 & SQLITE_JUMP
102e0 49 46 4e 55 4c 4c 29 3d 3d 30 20 29 3b 0a 20 20  IFNULL)==0 );.  
102f0 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 26      if( (flags1&
10300 66 6c 61 67 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29  flags3&MEM_Null)
10310 21 3d 30 0a 20 20 20 20 20 20 20 26 26 20 28 66  !=0.       && (f
10320 6c 61 67 73 33 26 4d 45 4d 5f 43 6c 65 61 72 65  lags3&MEM_Cleare
10330 64 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20  d)==0.      ){. 
10340 20 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 20         res = 0; 
10350 20 2f 2a 20 4f 70 65 72 61 6e 64 73 20 61 72 65   /* Operands are
10360 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20   equal */.      
10370 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72  }else{.        r
10380 65 73 20 3d 20 31 3b 20 20 2f 2a 20 4f 70 65 72  es = 1;  /* Oper
10390 61 6e 64 73 20 61 72 65 20 6e 6f 74 20 65 71 75  ands are not equ
103a0 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 0a 20 20  al */.      }.  
103b0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f    }else{.      /
103c0 2a 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  * SQLITE_NULLEQ 
103d0 69 73 20 63 6c 65 61 72 20 61 6e 64 20 61 74 20  is clear and at 
103e0 6c 65 61 73 74 20 6f 6e 65 20 6f 70 65 72 61 6e  least one operan
103f0 64 20 69 73 20 4e 55 4c 4c 2c 0a 20 20 20 20 20  d is NULL,.     
10400 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 72 65 73   ** then the res
10410 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 4e 55  ult is always NU
10420 4c 4c 2e 0a 20 20 20 20 20 20 2a 2a 20 54 68 65  LL..      ** The
10430 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
10440 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d  f the SQLITE_JUM
10450 50 49 46 4e 55 4c 4c 20 62 69 74 20 69 73 20 73  PIFNULL bit is s
10460 65 74 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  et..      */.   
10470 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26     if( pOp->p5 &
10480 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
10490 29 7b 0a 20 20 20 20 20 20 20 20 70 4f 75 74 20  ){.        pOut 
104a0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
104b0 3b 0a 20 20 20 20 20 20 20 20 69 43 6f 6d 70 61  ;.        iCompa
104c0 72 65 20 3d 20 31 3b 20 20 20 20 2f 2a 20 4f 70  re = 1;    /* Op
104d0 65 72 61 6e 64 73 20 61 72 65 20 6e 6f 74 20 65  erands are not e
104e0 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 20 20  qual */.        
104f0 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
10500 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20  (p, pOut);.     
10510 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
10520 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c  g(pOut, MEM_Null
10530 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53  );.        REGIS
10540 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
10550 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20  2, pOut);.      
10560 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 56  }else{.        V
10570 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 32  dbeBranchTaken(2
10580 2c 33 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ,3);.        if(
10590 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
105a0 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a  E_JUMPIFNULL ){.
105b0 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6a            goto j
105c0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20  ump_to_p2;.     
105d0 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
105e0 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
105f0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
10600 4e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20  Neither operand 
10610 69 73 20 4e 55 4c 4c 2e 20 20 44 6f 20 61 20 63  is NULL.  Do a c
10620 6f 6d 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20  omparison. */.  
10630 20 20 61 66 66 69 6e 69 74 79 20 3d 20 70 4f 70    affinity = pOp
10640 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 41 46  ->p5 & SQLITE_AF
10650 46 5f 4d 41 53 4b 3b 0a 20 20 20 20 69 66 28 20  F_MASK;.    if( 
10660 61 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45  affinity>=SQLITE
10670 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a  _AFF_NUMERIC ){.
10680 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73        if( (flags
10690 31 20 7c 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f  1 | flags3)&MEM_
106a0 53 74 72 20 29 7b 0a 20 20 20 20 20 20 20 20 69  Str ){.        i
106b0 66 28 20 28 66 6c 61 67 73 31 20 26 20 28 4d 45  f( (flags1 & (ME
106c0 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d  M_Int|MEM_Real|M
106d0 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74  EM_Str))==MEM_St
106e0 72 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61  r ){.          a
106f0 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
10700 69 74 79 28 70 49 6e 31 2c 30 29 3b 0a 20 20 20  ity(pIn1,0);.   
10710 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
10720 20 66 6c 61 67 73 33 21 3d 70 49 6e 33 2d 3e 66   flags3!=pIn3->f
10730 6c 61 67 73 20 29 3b 20 2f 2a 20 50 6f 73 73 69  lags ); /* Possi
10740 62 6c 65 20 69 66 20 70 49 6e 31 3d 3d 70 49 6e  ble if pIn1==pIn
10750 33 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 66  3 */.          f
10760 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c  lags3 = pIn3->fl
10770 61 67 73 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ags;.        }. 
10780 20 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67         if( (flag
10790 73 33 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  s3 & (MEM_Int|ME
107a0 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29  M_Real|MEM_Str))
107b0 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20  ==MEM_Str ){.   
107c0 20 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65         applyNume
107d0 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 33  ricAffinity(pIn3
107e0 2c 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ,0);.        }. 
107f0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 2f 2a 20       }.      /* 
10800 48 61 6e 64 6c 65 20 74 68 65 20 63 6f 6d 6d 6f  Handle the commo
10810 6e 20 63 61 73 65 20 6f 66 20 69 6e 74 65 67 65  n case of intege
10820 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20 68 65 72  r comparison her
10830 65 2c 20 61 73 20 61 6e 0a 20 20 20 20 20 20 2a  e, as an.      *
10840 2a 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2c 20  * optimization, 
10850 74 6f 20 61 76 6f 69 64 20 61 20 63 61 6c 6c 20  to avoid a call 
10860 74 6f 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d  to sqlite3MemCom
10870 70 61 72 65 28 29 20 2a 2f 0a 20 20 20 20 20 20  pare() */.      
10880 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
10890 20 26 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26   & pIn3->flags &
108a0 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 7b 0a   MEM_Int)!=0 ){.
108b0 20 20 20 20 20 20 20 20 69 66 28 20 70 49 6e 33          if( pIn3
108c0 2d 3e 75 2e 69 20 3e 20 70 49 6e 31 2d 3e 75 2e  ->u.i > pIn1->u.
108d0 69 20 29 7b 20 72 65 73 20 3d 20 2b 31 3b 20 67  i ){ res = +1; g
108e0 6f 74 6f 20 63 6f 6d 70 61 72 65 5f 6f 70 3b 20  oto compare_op; 
108f0 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 49  }.        if( pI
10900 6e 33 2d 3e 75 2e 69 20 3c 20 70 49 6e 31 2d 3e  n3->u.i < pIn1->
10910 75 2e 69 20 29 7b 20 72 65 73 20 3d 20 2d 31 3b  u.i ){ res = -1;
10920 20 67 6f 74 6f 20 63 6f 6d 70 61 72 65 5f 6f 70   goto compare_op
10930 3b 20 7d 0a 20 20 20 20 20 20 20 20 72 65 73 20  ; }.        res 
10940 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  = 0;.        got
10950 6f 20 63 6f 6d 70 61 72 65 5f 6f 70 3b 0a 20 20  o compare_op;.  
10960 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 20      }.    }else 
10970 69 66 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51  if( affinity==SQ
10980 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29 7b  LITE_AFF_TEXT ){
10990 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67  .      if( (flag
109a0 73 31 20 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30  s1 & MEM_Str)==0
109b0 20 26 26 20 28 66 6c 61 67 73 31 20 26 20 28 4d   && (flags1 & (M
109c0 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
109d0 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
109e0 74 65 73 74 63 61 73 65 28 20 70 49 6e 31 2d 3e  testcase( pIn1->
109f0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
10a00 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63  );.        testc
10a10 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ase( pIn1->flags
10a20 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20   & MEM_Real );. 
10a30 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
10a40 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70  beMemStringify(p
10a50 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31  In1, encoding, 1
10a60 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63  );.        testc
10a70 61 73 65 28 20 28 66 6c 61 67 73 31 26 4d 45 4d  ase( (flags1&MEM
10a80 5f 44 79 6e 29 20 21 3d 20 28 70 49 6e 31 2d 3e  _Dyn) != (pIn1->
10a90 66 6c 61 67 73 26 4d 45 4d 5f 44 79 6e 29 20 29  flags&MEM_Dyn) )
10aa0 3b 0a 20 20 20 20 20 20 20 20 66 6c 61 67 73 31  ;.        flags1
10ab0 20 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20   = (pIn1->flags 
10ac0 26 20 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29  & ~MEM_TypeMask)
10ad0 20 7c 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d   | (flags1 & MEM
10ae0 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 20 20  _TypeMask);.    
10af0 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31      assert( pIn1
10b00 21 3d 70 49 6e 33 20 29 3b 0a 20 20 20 20 20 20  !=pIn3 );.      
10b10 7d 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c 61  }.      if( (fla
10b20 67 73 33 20 26 20 4d 45 4d 5f 53 74 72 29 3d 3d  gs3 & MEM_Str)==
10b30 30 20 26 26 20 28 66 6c 61 67 73 33 20 26 20 28  0 && (flags3 & (
10b40 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
10b50 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ))!=0 ){.       
10b60 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 33 2d   testcase( pIn3-
10b70 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
10b80 20 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74   );.        test
10b90 63 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67  case( pIn3->flag
10ba0 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a  s & MEM_Real );.
10bb0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
10bc0 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28  dbeMemStringify(
10bd0 70 49 6e 33 2c 20 65 6e 63 6f 64 69 6e 67 2c 20  pIn3, encoding, 
10be0 31 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74  1);.        test
10bf0 63 61 73 65 28 20 28 66 6c 61 67 73 33 26 4d 45  case( (flags3&ME
10c00 4d 5f 44 79 6e 29 20 21 3d 20 28 70 49 6e 33 2d  M_Dyn) != (pIn3-
10c10 3e 66 6c 61 67 73 26 4d 45 4d 5f 44 79 6e 29 20  >flags&MEM_Dyn) 
10c20 29 3b 0a 20 20 20 20 20 20 20 20 66 6c 61 67 73  );.        flags
10c30 33 20 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  3 = (pIn3->flags
10c40 20 26 20 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b   & ~MEM_TypeMask
10c50 29 20 7c 20 28 66 6c 61 67 73 33 20 26 20 4d 45  ) | (flags3 & ME
10c60 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 20  M_TypeMask);.   
10c70 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61     }.    }.    a
10c80 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
10c90 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 7c  pe==P4_COLLSEQ |
10ca0 7c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d  | pOp->p4.pColl=
10cb0 3d 30 20 29 3b 0a 20 20 20 20 72 65 73 20 3d 20  =0 );.    res = 
10cc0 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72  sqlite3MemCompar
10cd0 65 28 70 49 6e 33 2c 20 70 49 6e 31 2c 20 70 4f  e(pIn3, pIn1, pO
10ce0 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20  p->p4.pColl);.  
10cf0 7d 0a 63 6f 6d 70 61 72 65 5f 6f 70 3a 0a 20 20  }.compare_op:.  
10d00 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63  switch( pOp->opc
10d10 6f 64 65 20 29 7b 0a 20 20 20 20 63 61 73 65 20  ode ){.    case 
10d20 4f 50 5f 45 71 3a 20 20 20 20 72 65 73 32 20 3d  OP_Eq:    res2 =
10d30 20 72 65 73 3d 3d 30 3b 20 20 20 20 20 62 72 65   res==0;     bre
10d40 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f  ak;.    case OP_
10d50 4e 65 3a 20 20 20 20 72 65 73 32 20 3d 20 72 65  Ne:    res2 = re
10d60 73 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  s;        break;
10d70 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 74 3a  .    case OP_Lt:
10d80 20 20 20 20 72 65 73 32 20 3d 20 72 65 73 3c 30      res2 = res<0
10d90 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ;      break;.  
10da0 20 20 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20    case OP_Le:   
10db0 20 72 65 73 32 20 3d 20 72 65 73 3c 3d 30 3b 20   res2 = res<=0; 
10dc0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
10dd0 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 72 65  ase OP_Gt:    re
10de0 73 32 20 3d 20 72 65 73 3e 30 3b 20 20 20 20 20  s2 = res>0;     
10df0 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61   break;.    defa
10e00 75 6c 74 3a 20 20 20 20 20 20 20 72 65 73 32 20  ult:       res2 
10e10 3d 20 72 65 73 3e 3d 30 3b 20 20 20 20 20 62 72  = res>=0;     br
10e20 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 55  eak;.  }..  /* U
10e30 6e 64 6f 20 61 6e 79 20 63 68 61 6e 67 65 73 20  ndo any changes 
10e40 6d 61 64 65 20 62 79 20 61 70 70 6c 79 41 66 66  made by applyAff
10e50 69 6e 69 74 79 28 29 20 74 6f 20 74 68 65 20 69  inity() to the i
10e60 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 2e 20  nput registers. 
10e70 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70 49  */.  assert( (pI
10e80 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
10e90 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67 73 31 20  Dyn) == (flags1 
10ea0 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20  & MEM_Dyn) );.  
10eb0 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 66 6c  pIn1->flags = fl
10ec0 61 67 73 31 3b 0a 20 20 61 73 73 65 72 74 28 20  ags1;.  assert( 
10ed0 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
10ee0 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67  EM_Dyn) == (flag
10ef0 73 33 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b  s3 & MEM_Dyn) );
10f00 0a 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 3d  .  pIn3->flags =
10f10 20 66 6c 61 67 73 33 3b 0a 0a 20 20 69 66 28 20   flags3;..  if( 
10f20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
10f30 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20  _STOREP2 ){.    
10f40 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
10f50 2d 3e 70 32 5d 3b 0a 20 20 20 20 69 43 6f 6d 70  ->p2];.    iComp
10f60 61 72 65 20 3d 20 72 65 73 3b 0a 20 20 20 20 72  are = res;.    r
10f70 65 73 32 20 3d 20 72 65 73 32 21 3d 30 3b 20 20  es2 = res2!=0;  
10f80 2f 2a 20 46 6f 72 20 74 68 69 73 20 70 61 74 68  /* For this path
10f90 20 72 65 73 32 20 6d 75 73 74 20 62 65 20 65 78   res2 must be ex
10fa0 61 63 74 6c 79 20 30 20 6f 72 20 31 20 2a 2f 0a  actly 0 or 1 */.
10fb0 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 70 35      if( (pOp->p5
10fc0 20 26 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55   & SQLITE_KEEPNU
10fd0 4c 4c 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  LL)!=0 ){.      
10fe0 2f 2a 20 54 68 65 20 4b 45 45 50 4e 55 4c 4c 20  /* The KEEPNULL 
10ff0 66 6c 61 67 20 70 72 65 76 65 6e 74 73 20 4f 50  flag prevents OP
11000 5f 45 71 20 66 72 6f 6d 20 6f 76 65 72 77 72 69  _Eq from overwri
11010 74 69 6e 67 20 61 20 4e 55 4c 4c 20 77 69 74 68  ting a NULL with
11020 20 31 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64 20   1.      ** and 
11030 70 72 65 76 65 6e 74 73 20 4f 50 5f 4e 65 20 66  prevents OP_Ne f
11040 72 6f 6d 20 6f 76 65 72 77 72 69 74 69 6e 67 20  rom overwriting 
11050 4e 55 4c 4c 20 77 69 74 68 20 30 2e 20 20 54 68  NULL with 0.  Th
11060 69 73 20 66 6c 61 67 0a 20 20 20 20 20 20 2a 2a  is flag.      **
11070 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e   is only used in
11080 20 63 6f 6e 74 65 78 74 73 20 77 68 65 72 65 20   contexts where 
11090 65 69 74 68 65 72 3a 0a 20 20 20 20 20 20 2a 2a  either:.      **
110a0 20 20 20 28 31 29 20 6f 70 3d 3d 4f 50 5f 45 71     (1) op==OP_Eq
110b0 20 26 26 20 28 72 5b 50 32 5d 3d 3d 4e 55 4c 4c   && (r[P2]==NULL
110c0 20 7c 7c 20 72 5b 50 32 5d 3d 3d 30 29 0a 20 20   || r[P2]==0).  
110d0 20 20 20 20 2a 2a 20 20 20 28 32 29 20 6f 70 3d      **   (2) op=
110e0 3d 4f 50 5f 4e 65 20 26 26 20 28 72 5b 50 32 5d  =OP_Ne && (r[P2]
110f0 3d 3d 4e 55 4c 4c 20 7c 7c 20 72 5b 50 32 5d 3d  ==NULL || r[P2]=
11100 3d 31 29 0a 20 20 20 20 20 20 2a 2a 20 54 68 65  =1).      ** The
11110 72 65 66 6f 72 65 20 69 74 20 69 73 20 6e 6f 74  refore it is not
11120 20 6e 65 63 65 73 73 61 72 79 20 74 6f 20 63 68   necessary to ch
11130 65 63 6b 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  eck the content 
11140 6f 66 20 72 5b 50 32 5d 20 66 6f 72 0a 20 20 20  of r[P2] for.   
11150 20 20 20 2a 2a 20 4e 55 4c 4c 2e 20 2a 2f 0a 20     ** NULL. */. 
11160 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
11170 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20  ->opcode==OP_Ne 
11180 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
11190 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20 20 20 61  OP_Eq );.      a
111a0 73 73 65 72 74 28 20 72 65 73 32 3d 3d 30 20 7c  ssert( res2==0 |
111b0 7c 20 72 65 73 32 3d 3d 31 20 29 3b 0a 20 20 20  | res2==1 );.   
111c0 20 20 20 74 65 73 74 63 61 73 65 28 20 72 65 73     testcase( res
111d0 32 3d 3d 30 20 26 26 20 70 4f 70 2d 3e 6f 70 63  2==0 && pOp->opc
111e0 6f 64 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20 20  ode==OP_Eq );.  
111f0 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72 65      testcase( re
11200 73 32 3d 3d 31 20 26 26 20 70 4f 70 2d 3e 6f 70  s2==1 && pOp->op
11210 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20  code==OP_Eq );. 
11220 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72       testcase( r
11230 65 73 32 3d 3d 30 20 26 26 20 70 4f 70 2d 3e 6f  es2==0 && pOp->o
11240 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a  pcode==OP_Ne );.
11250 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
11260 72 65 73 32 3d 3d 31 20 26 26 20 70 4f 70 2d 3e  res2==1 && pOp->
11270 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b  opcode==OP_Ne );
11280 0a 20 20 20 20 20 20 69 66 28 20 28 70 4f 70 2d  .      if( (pOp-
11290 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 29 3d  >opcode==OP_Eq)=
112a0 3d 72 65 73 32 20 29 20 62 72 65 61 6b 3b 0a 20  =res2 ) break;. 
112b0 20 20 20 7d 0a 20 20 20 20 6d 65 6d 41 62 6f 75     }.    memAbou
112c0 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
112d0 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79  t);.    MemSetTy
112e0 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
112f0 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d  _Int);.    pOut-
11300 3e 75 2e 69 20 3d 20 72 65 73 32 3b 0a 20 20 20  >u.i = res2;.   
11310 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
11320 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a  pOp->p2, pOut);.
11330 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62    }else{.    Vdb
11340 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
11350 21 3d 30 2c 20 28 70 4f 70 2d 3e 70 35 20 26 20  !=0, (pOp->p5 & 
11360 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 29 3f 32  SQLITE_NULLEQ)?2
11370 3a 33 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73  :3);.    if( res
11380 32 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  2 ){.      goto 
11390 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20  jump_to_p2;.    
113a0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
113b0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 6c 73  ../* Opcode: Els
113c0 65 4e 6f 74 45 71 20 2a 20 50 32 20 2a 20 2a 20  eNotEq * P2 * * 
113d0 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  *.**.** This opc
113e0 6f 64 65 20 6d 75 73 74 20 69 6d 6d 65 64 69 61  ode must immedia
113f0 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 61 6e 20 4f  tely follow an O
11400 50 5f 4c 74 20 6f 72 20 4f 50 5f 47 74 20 63 6f  P_Lt or OP_Gt co
11410 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f  mparison operato
11420 72 2e 0a 2a 2a 20 49 66 20 72 65 73 75 6c 74 20  r..** If result 
11430 6f 66 20 61 6e 20 4f 50 5f 45 71 20 63 6f 6d 70  of an OP_Eq comp
11440 61 72 69 73 6f 6e 20 6f 6e 20 74 68 65 20 73 61  arison on the sa
11450 6d 65 20 74 77 6f 20 6f 70 65 72 61 6e 64 73 0a  me two operands.
11460 2a 2a 20 77 6f 75 6c 64 20 68 61 76 65 20 62 65  ** would have be
11470 20 4e 55 4c 4c 20 6f 72 20 66 61 6c 73 65 20 28   NULL or false (
11480 30 29 2c 20 74 68 65 6e 20 74 68 65 6e 20 6a 75  0), then then ju
11490 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 20 49 66  mp to P2. .** If
114a0 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61   the result of a
114b0 6e 20 4f 50 5f 45 71 20 63 6f 6d 70 61 72 69 73  n OP_Eq comparis
114c0 6f 6e 20 6f 6e 20 74 68 65 20 74 77 6f 20 70 72  on on the two pr
114d0 65 76 69 6f 75 73 20 6f 70 65 72 61 6e 64 73 0a  evious operands.
114e0 2a 2a 20 77 6f 75 6c 64 20 68 61 76 65 20 62 65  ** would have be
114f0 65 6e 20 74 72 75 65 20 28 31 29 2c 20 74 68 65  en true (1), the
11500 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e 0a  n fall through..
11510 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6c 73 65 4e  */.case OP_ElseN
11520 6f 74 45 71 3a 20 7b 20 20 20 20 20 20 20 2f 2a  otEq: {       /*
11530 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 53 43 41   same as TK_ESCA
11540 50 45 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73  PE, jump */.  as
11550 73 65 72 74 28 20 70 4f 70 3e 61 4f 70 20 29 3b  sert( pOp>aOp );
11560 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d  .  assert( pOp[-
11570 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4c 74  1].opcode==OP_Lt
11580 20 7c 7c 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f   || pOp[-1].opco
11590 64 65 3d 3d 4f 50 5f 47 74 20 29 3b 0a 20 20 61  de==OP_Gt );.  a
115a0 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70  ssert( pOp[-1].p
115b0 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  5 & SQLITE_STORE
115c0 50 32 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  P2 );.  VdbeBran
115d0 63 68 54 61 6b 65 6e 28 69 43 6f 6d 70 61 72 65  chTaken(iCompare
115e0 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 69  !=0, 2);.  if( i
115f0 43 6f 6d 70 61 72 65 21 3d 30 20 29 20 67 6f 74  Compare!=0 ) got
11600 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
11610 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
11620 63 6f 64 65 3a 20 50 65 72 6d 75 74 61 74 69 6f  code: Permutatio
11630 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a  n * * * P4 *.**.
11640 2a 2a 20 53 65 74 20 74 68 65 20 70 65 72 6d 75  ** Set the permu
11650 74 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74  tation used by t
11660 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70  he OP_Compare op
11670 65 72 61 74 6f 72 20 74 6f 20 62 65 20 74 68 65  erator to be the
11680 20 61 72 72 61 79 0a 2a 2a 20 6f 66 20 69 6e 74   array.** of int
11690 65 67 65 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 0a  egers in P4..**.
116a0 2a 2a 20 54 68 65 20 70 65 72 6d 75 74 61 74 69  ** The permutati
116b0 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  on is only valid
116c0 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 20   until the next 
116d0 4f 50 5f 43 6f 6d 70 61 72 65 20 74 68 61 74 20  OP_Compare that 
116e0 68 61 73 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41  has.** the OPFLA
116f0 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 73 65  G_PERMUTE bit se
11700 74 20 69 6e 20 50 35 2e 20 54 79 70 69 63 61 6c  t in P5. Typical
11710 6c 79 20 74 68 65 20 4f 50 5f 50 65 72 6d 75 74  ly the OP_Permut
11720 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 0a 2a 2a  ation should .**
11730 20 6f 63 63 75 72 20 69 6d 6d 65 64 69 61 74 65   occur immediate
11740 6c 79 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20  ly prior to the 
11750 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2a 0a 2a  OP_Compare..**.*
11760 2a 20 54 68 65 20 66 69 72 73 74 20 69 6e 74 65  * The first inte
11770 67 65 72 20 69 6e 20 74 68 65 20 50 34 20 69 6e  ger in the P4 in
11780 74 65 67 65 72 20 61 72 72 61 79 20 69 73 20 74  teger array is t
11790 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65  he length of the
117a0 20 61 72 72 61 79 0a 2a 2a 20 61 6e 64 20 64 6f   array.** and do
117b0 65 73 20 6e 6f 74 20 62 65 63 6f 6d 65 20 70 61  es not become pa
117c0 72 74 20 6f 66 20 74 68 65 20 70 65 72 6d 75 74  rt of the permut
117d0 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ation..*/.case O
117e0 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20 7b  P_Permutation: {
117f0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
11800 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52  p4type==P4_INTAR
11810 52 41 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28  RAY );.  assert(
11820 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a 20   pOp->p4.ai );. 
11830 20 61 50 65 72 6d 75 74 65 20 3d 20 70 4f 70 2d   aPermute = pOp-
11840 3e 70 34 2e 61 69 20 2b 20 31 3b 0a 20 20 62 72  >p4.ai + 1;.  br
11850 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
11860 65 3a 20 43 6f 6d 70 61 72 65 20 50 31 20 50 32  e: Compare P1 P2
11870 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
11880 6f 70 73 69 73 3a 20 72 5b 50 31 40 50 33 5d 20  opsis: r[P1@P3] 
11890 3c 2d 3e 20 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a  <-> r[P2@P3].**.
118a0 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f 20 76  ** Compare two v
118b0 65 63 74 6f 72 73 20 6f 66 20 72 65 67 69 73 74  ectors of regist
118c0 65 72 73 20 69 6e 20 72 65 67 28 50 31 29 2e 2e  ers in reg(P1)..
118d0 72 65 67 28 50 31 2b 50 33 2d 31 29 20 28 63 61  reg(P1+P3-1) (ca
118e0 6c 6c 20 74 68 69 73 0a 2a 2a 20 76 65 63 74 6f  ll this.** vecto
118f0 72 20 22 41 22 29 20 61 6e 64 20 69 6e 20 72 65  r "A") and in re
11900 67 28 50 32 29 2e 2e 72 65 67 28 50 32 2b 50 33  g(P2)..reg(P2+P3
11910 2d 31 29 20 28 22 42 22 29 2e 20 20 53 61 76 65  -1) ("B").  Save
11920 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a   the result of.*
11930 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  * the comparison
11940 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20   for use by the 
11950 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69 6e 73  next OP_Jump ins
11960 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  truct..**.** If 
11970 50 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41  P5 has the OPFLA
11980 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 73 65  G_PERMUTE bit se
11990 74 2c 20 74 68 65 6e 20 74 68 65 20 6f 72 64 65  t, then the orde
119a0 72 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20  r of comparison 
119b0 69 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 64  is.** determined
119c0 20 62 79 20 74 68 65 20 6d 6f 73 74 20 72 65 63   by the most rec
119d0 65 6e 74 20 4f 50 5f 50 65 72 6d 75 74 61 74 69  ent OP_Permutati
119e0 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 20 20 49 66  on operator.  If
119f0 20 74 68 65 0a 2a 2a 20 4f 50 46 4c 41 47 5f 50   the.** OPFLAG_P
11a00 45 52 4d 55 54 45 20 62 69 74 20 69 73 20 63 6c  ERMUTE bit is cl
11a10 65 61 72 2c 20 74 68 65 6e 20 72 65 67 69 73 74  ear, then regist
11a20 65 72 20 61 72 65 20 63 6f 6d 70 61 72 65 64 20  er are compared 
11a30 69 6e 20 73 65 71 75 65 6e 74 69 61 6c 0a 2a 2a  in sequential.**
11a40 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34   order..**.** P4
11a50 20 69 73 20 61 20 4b 65 79 49 6e 66 6f 20 73 74   is a KeyInfo st
11a60 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65 66  ructure that def
11a70 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ines collating s
11a80 65 71 75 65 6e 63 65 73 20 61 6e 64 20 73 6f 72  equences and sor
11a90 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f 72 20  t.** orders for 
11aa0 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
11ab0 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   The permutation
11ac0 20 61 70 70 6c 69 65 73 20 74 6f 20 72 65 67 69   applies to regi
11ad0 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20  sters.** only.  
11ae0 54 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c 65 6d  The KeyInfo elem
11af0 65 6e 74 73 20 61 72 65 20 75 73 65 64 20 73 65  ents are used se
11b00 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a  quentially..**.*
11b10 2a 20 54 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  * The comparison
11b20 20 69 73 20 61 20 73 6f 72 74 20 63 6f 6d 70 61   is a sort compa
11b30 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20  rison, so NULLs 
11b40 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c 0a 2a  compare equal,.*
11b50 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65 73 73  * NULLs are less
11b60 20 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c 20 6e   than numbers, n
11b70 75 6d 62 65 72 73 20 61 72 65 20 6c 65 73 73 20  umbers are less 
11b80 74 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a 2a 2a  than strings,.**
11b90 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65   and strings are
11ba0 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73   less than blobs
11bb0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6d  ..*/.case OP_Com
11bc0 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b  pare: {.  int n;
11bd0 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20  .  int i;.  int 
11be0 70 31 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20  p1;.  int p2;.  
11bf0 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20 2a 70  const KeyInfo *p
11c00 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 69  KeyInfo;.  int i
11c10 64 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70  dx;.  CollSeq *p
11c20 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c  Coll;    /* Coll
11c30 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 74  ating sequence t
11c40 6f 20 75 73 65 20 6f 6e 20 74 68 69 73 20 74 65  o use on this te
11c50 72 6d 20 2a 2f 0a 20 20 69 6e 74 20 62 52 65 76  rm */.  int bRev
11c60 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  ;          /* Tr
11c70 75 65 20 66 6f 72 20 44 45 53 43 45 4e 44 49 4e  ue for DESCENDIN
11c80 47 20 73 6f 72 74 20 6f 72 64 65 72 20 2a 2f 0a  G sort order */.
11c90 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e 70 35 20  .  if( (pOp->p5 
11ca0 26 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  & OPFLAG_PERMUTE
11cb0 29 3d 3d 30 20 29 20 61 50 65 72 6d 75 74 65 20  )==0 ) aPermute 
11cc0 3d 20 30 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e  = 0;.  n = pOp->
11cd0 70 33 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d  p3;.  pKeyInfo =
11ce0 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66   pOp->p4.pKeyInf
11cf0 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30  o;.  assert( n>0
11d00 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4b   );.  assert( pK
11d10 65 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20 20 70  eyInfo!=0 );.  p
11d20 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  1 = pOp->p1;.  p
11d30 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23 69 66  2 = pOp->p2;.#if
11d40 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
11d50 69 66 28 20 61 50 65 72 6d 75 74 65 20 29 7b 0a  if( aPermute ){.
11d60 20 20 20 20 69 6e 74 20 6b 2c 20 6d 78 20 3d 20      int k, mx = 
11d70 30 3b 0a 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20  0;.    for(k=0; 
11d80 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28 20 61 50  k<n; k++) if( aP
11d90 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d  ermute[k]>mx ) m
11da0 78 20 3d 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3b  x = aPermute[k];
11db0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e  .    assert( p1>
11dc0 30 20 26 26 20 70 31 2b 6d 78 3c 3d 28 70 2d 3e  0 && p1+mx<=(p->
11dd0 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
11de0 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73  sor)+1 );.    as
11df0 73 65 72 74 28 20 70 32 3e 30 20 26 26 20 70 32  sert( p2>0 && p2
11e00 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  +mx<=(p->nMem+1 
11e10 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  - p->nCursor)+1 
11e20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
11e30 61 73 73 65 72 74 28 20 70 31 3e 30 20 26 26 20  assert( p1>0 && 
11e40 70 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  p1+n<=(p->nMem+1
11e50 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31   - p->nCursor)+1
11e60 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
11e70 70 32 3e 30 20 26 26 20 70 32 2b 6e 3c 3d 28 70  p2>0 && p2+n<=(p
11e80 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
11e90 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 0a  ursor)+1 );.  }.
11ea0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
11eb0 5f 44 45 42 55 47 20 2a 2f 0a 20 20 66 6f 72 28  _DEBUG */.  for(
11ec0 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a  i=0; i<n; i++){.
11ed0 20 20 20 20 69 64 78 20 3d 20 61 50 65 72 6d 75      idx = aPermu
11ee0 74 65 20 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d  te ? aPermute[i]
11ef0 20 3a 20 69 3b 0a 20 20 20 20 61 73 73 65 72 74   : i;.    assert
11f00 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
11f10 65 6d 5b 70 31 2b 69 64 78 5d 29 20 29 3b 0a 20  em[p1+idx]) );. 
11f20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
11f30 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 32 2b 69  Valid(&aMem[p2+i
11f40 64 78 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49  dx]) );.    REGI
11f50 53 54 45 52 5f 54 52 41 43 45 28 70 31 2b 69 64  STER_TRACE(p1+id
11f60 78 2c 20 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d  x, &aMem[p1+idx]
11f70 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
11f80 54 52 41 43 45 28 70 32 2b 69 64 78 2c 20 26 61  TRACE(p2+idx, &a
11f90 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20 20  Mem[p2+idx]);.  
11fa0 20 20 61 73 73 65 72 74 28 20 69 3c 70 4b 65 79    assert( i<pKey
11fb0 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a  Info->nField );.
11fc0 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b 65 79      pColl = pKey
11fd0 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a  Info->aColl[i];.
11fe0 20 20 20 20 62 52 65 76 20 3d 20 70 4b 65 79 49      bRev = pKeyI
11ff0 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65 72 5b  nfo->aSortOrder[
12000 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72 65  i];.    iCompare
12010 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d   = sqlite3MemCom
12020 70 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b 69 64  pare(&aMem[p1+id
12030 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78  x], &aMem[p2+idx
12040 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20 69  ], pColl);.    i
12050 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a 20  f( iCompare ){. 
12060 20 20 20 20 20 69 66 28 20 62 52 65 76 20 29 20       if( bRev ) 
12070 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d  iCompare = -iCom
12080 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72 65 61  pare;.      brea
12090 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61  k;.    }.  }.  a
120a0 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 62  Permute = 0;.  b
120b0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
120c0 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32 20 50  de: Jump P1 P2 P
120d0 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
120e0 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75 63 74   to the instruct
120f0 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73 20 50  ion at address P
12100 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64 65 70  1, P2, or P3 dep
12110 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
12120 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73 74  r.** in the most
12130 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70 61   recent OP_Compa
12140 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  re instruction t
12150 68 65 20 50 31 20 76 65 63 74 6f 72 20 77 61 73  he P1 vector was
12160 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65 71   less than.** eq
12170 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74  ual to, or great
12180 65 72 20 74 68 61 6e 20 74 68 65 20 50 32 20 76  er than the P2 v
12190 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74 69 76  ector, respectiv
121a0 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ely..*/.case OP_
121b0 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20 20 20  Jump: {         
121c0 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
121d0 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c 30 20   if( iCompare<0 
121e0 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  ){.    VdbeBranc
121f0 68 54 61 6b 65 6e 28 30 2c 33 29 3b 20 70 4f 70  hTaken(0,3); pOp
12200 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 31 20   = &aOp[pOp->p1 
12210 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73 65 20 69 66  - 1];.  }else if
12220 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30 20 29 7b  ( iCompare==0 ){
12230 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
12240 61 6b 65 6e 28 31 2c 33 29 3b 20 70 4f 70 20 3d  aken(1,3); pOp =
12250 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20   &aOp[pOp->p2 - 
12260 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  1];.  }else{.   
12270 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
12280 28 32 2c 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f  (2,3); pOp = &aO
12290 70 5b 70 4f 70 2d 3e 70 33 20 2d 20 31 5d 3b 0a  p[pOp->p3 - 1];.
122a0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
122b0 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64 20 50  /* Opcode: And P
122c0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
122d0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28  ynopsis: r[P3]=(
122e0 72 5b 50 31 5d 20 26 26 20 72 5b 50 32 5d 29 0a  r[P1] && r[P2]).
122f0 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c  **.** Take the l
12300 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66 20 74 68  ogical AND of th
12310 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
12320 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 32 20  sters P1 and P2 
12330 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74 68 65  and.** write the
12340 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 72 65 67   result into reg
12350 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  ister P3..**.** 
12360 49 66 20 65 69 74 68 65 72 20 50 31 20 6f 72 20  If either P1 or 
12370 50 32 20 69 73 20 30 20 28 66 61 6c 73 65 29 20  P2 is 0 (false) 
12380 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
12390 69 73 20 30 20 65 76 65 6e 20 69 66 0a 2a 2a 20  is 0 even if.** 
123a0 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20  the other input 
123b0 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c  is NULL.  A NULL
123c0 20 61 6e 64 20 74 72 75 65 20 6f 72 20 74 77 6f   and true or two
123d0 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a 20 61   NULLs give.** a
123e0 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f   NULL output..*/
123f0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72 20 50  ./* Opcode: Or P
12400 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
12410 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28  ynopsis: r[P3]=(
12420 72 5b 50 31 5d 20 7c 7c 20 72 5b 50 32 5d 29 0a  r[P1] || r[P2]).
12430 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c  **.** Take the l
12440 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74 68 65  ogical OR of the
12450 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
12460 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e  ter P1 and P2 an
12470 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 61  d.** store the a
12480 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73 74 65  nswer in registe
12490 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65  r P3..**.** If e
124a0 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20 69  ither P1 or P2 i
124b0 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75 65 29  s nonzero (true)
124c0 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
124d0 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a 2a 20   is 1 (true).** 
124e0 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74 68 65  even if the othe
124f0 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e  r input is NULL.
12500 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66 61 6c    A NULL and fal
12510 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 0a  se or two NULLs.
12520 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c 20 6f  ** give a NULL o
12530 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  utput..*/.case O
12540 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20  P_And:          
12550 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
12560 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c  K_AND, in1, in2,
12570 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
12580 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20  _Or: {          
12590 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
125a0 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  _OR, in1, in2, o
125b0 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76 31 3b  ut3 */.  int v1;
125c0 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70 65 72      /* Left oper
125d0 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45 2c 20  and:  0==FALSE, 
125e0 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e  1==TRUE, 2==UNKN
125f0 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  OWN or NULL */. 
12600 20 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a 20 52   int v2;    /* R
12610 69 67 68 74 20 6f 70 65 72 61 6e 64 3a 20 30 3d  ight operand: 0=
12620 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c  =FALSE, 1==TRUE,
12630 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e   2==UNKNOWN or N
12640 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d  ULL */..  pIn1 =
12650 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
12660 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
12670 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
12680 0a 20 20 20 20 76 31 20 3d 20 32 3b 0a 20 20 7d  .    v1 = 2;.  }
12690 65 6c 73 65 7b 0a 20 20 20 20 76 31 20 3d 20 73  else{.    v1 = s
126a0 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
126b0 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 20 20 7d  ue(pIn1)!=0;.  }
126c0 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
126d0 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20  pOp->p2];.  if( 
126e0 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
126f0 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 32  M_Null ){.    v2
12700 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 2;.  }else{. 
12710 20 20 20 76 32 20 3d 20 73 71 6c 69 74 65 33 56     v2 = sqlite3V
12720 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32  dbeIntValue(pIn2
12730 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20  )!=0;.  }.  if( 
12740 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
12750 41 6e 64 20 29 7b 0a 20 20 20 20 73 74 61 74 69  And ){.    stati
12760 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  c const unsigned
12770 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69 63 5b   char and_logic[
12780 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c 20 30  ] = { 0, 0, 0, 0
12790 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20 32 20  , 1, 2, 0, 2, 2 
127a0 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e 64 5f  };.    v1 = and_
127b0 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a  logic[v1*3+v2];.
127c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 74 61    }else{.    sta
127d0 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  tic const unsign
127e0 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67 69 63  ed char or_logic
127f0 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32 2c 20  [] = { 0, 1, 2, 
12800 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c 20 32  1, 1, 1, 2, 1, 2
12810 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f 72 5f   };.    v1 = or_
12820 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a  logic[v1*3+v2];.
12830 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d    }.  pOut = &aM
12840 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
12850 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20 20 20  f( v1==2 ){.    
12860 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
12870 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  Out, MEM_Null);.
12880 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75    }else{.    pOu
12890 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20 20 20  t->u.i = v1;.   
128a0 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
128b0 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
128c0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
128d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 20 50  /* Opcode: Not P
128e0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
128f0 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 20 21  nopsis: r[P2]= !
12900 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65  r[P1].**.** Inte
12910 72 70 72 65 74 20 74 68 65 20 76 61 6c 75 65 20  rpret the value 
12920 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
12930 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  s a boolean valu
12940 65 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a  e.  Store the.**
12950 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d   boolean complem
12960 65 6e 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ent in register 
12970 50 32 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  P2.  If the valu
12980 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
12990 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68   is .** NULL, th
129a0 65 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f  en a NULL is sto
129b0 72 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61  red in P2..*/.ca
129c0 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20  se OP_Not: {    
129d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
129e0 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69  ame as TK_NOT, i
129f0 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49  n1, out2 */.  pI
12a00 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
12a10 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p1];.  pOut = &a
12a20 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
12a30 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
12a40 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 69  tNull(pOut);.  i
12a50 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
12a60 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
12a70 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  {.    pOut->flag
12a80 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  s = MEM_Int;.   
12a90 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 21 73 71   pOut->u.i = !sq
12aa0 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
12ab0 65 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62  e(pIn1);.  }.  b
12ac0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
12ad0 64 65 3a 20 42 69 74 4e 6f 74 20 50 31 20 50 32  de: BitNot P1 P2
12ae0 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
12af0 69 73 3a 20 72 5b 50 31 5d 3d 20 7e 72 5b 50 31  is: r[P1]= ~r[P1
12b00 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65  ].**.** Interpre
12b10 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  t the content of
12b20 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20   register P1 as 
12b30 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 53 74 6f  an integer.  Sto
12b40 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63  re the.** ones-c
12b50 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  omplement of the
12b60 20 50 31 20 76 61 6c 75 65 20 69 6e 74 6f 20 72   P1 value into r
12b70 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20  egister P2.  If 
12b80 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55  P1 holds.** a NU
12b90 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 61 20  LL then store a 
12ba0 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63  NULL in P2..*/.c
12bb0 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b  ase OP_BitNot: {
12bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12bd0 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f  same as TK_BITNO
12be0 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a  T, in1, out2 */.
12bf0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
12c00 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Op->p1];.  pOut 
12c10 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
12c20 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
12c30 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
12c40 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
12c50 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
12c60 3d 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e  =0 ){.    pOut->
12c70 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
12c80 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
12c90 20 7e 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74   ~sqlite3VdbeInt
12ca0 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 7d  Value(pIn1);.  }
12cb0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
12cc0 4f 70 63 6f 64 65 3a 20 4f 6e 63 65 20 50 31 20  Opcode: Once P1 
12cd0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49  P2 * * *.**.** I
12ce0 66 20 74 68 65 20 50 31 20 76 61 6c 75 65 20 69  f the P1 value i
12cf0 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 50  s equal to the P
12d00 31 20 76 61 6c 75 65 20 6f 6e 20 74 68 65 20 4f  1 value on the O
12d10 50 5f 49 6e 69 74 20 6f 70 63 6f 64 65 20 61 74  P_Init opcode at
12d20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  .** instruction 
12d30 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  0, then jump to 
12d40 50 32 2e 20 20 49 66 20 74 68 65 20 74 77 6f 20  P2.  If the two 
12d50 50 31 20 76 61 6c 75 65 73 20 64 69 66 66 65 72  P1 values differ
12d60 2c 20 74 68 65 6e 0a 2a 2a 20 73 65 74 20 74 68  , then.** set th
12d70 65 20 50 31 20 76 61 6c 75 65 20 6f 6e 20 74 68  e P1 value on th
12d80 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 65 71 75  is opcode to equ
12d90 61 6c 20 74 68 65 20 50 31 20 76 61 6c 75 65 20  al the P1 value 
12da0 6f 6e 20 74 68 65 20 4f 50 5f 49 6e 69 74 0a 2a  on the OP_Init.*
12db0 2a 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75  * and fall throu
12dc0 67 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  gh..*/.case OP_O
12dd0 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  nce: {          
12de0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
12df0 61 73 73 65 72 74 28 20 70 2d 3e 61 4f 70 5b 30  assert( p->aOp[0
12e00 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 69  ].opcode==OP_Ini
12e10 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  t );.  VdbeBranc
12e20 68 54 61 6b 65 6e 28 70 2d 3e 61 4f 70 5b 30 5d  hTaken(p->aOp[0]
12e30 2e 70 31 3d 3d 70 4f 70 2d 3e 70 31 2c 20 32 29  .p1==pOp->p1, 2)
12e40 3b 0a 20 20 69 66 28 20 70 2d 3e 61 4f 70 5b 30  ;.  if( p->aOp[0
12e50 5d 2e 70 31 3d 3d 70 4f 70 2d 3e 70 31 20 29 7b  ].p1==pOp->p1 ){
12e60 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  .    goto jump_t
12e70 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  o_p2;.  }else{. 
12e80 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 2d 3e     pOp->p1 = p->
12e90 61 4f 70 5b 30 5d 2e 70 31 3b 0a 20 20 7d 0a 20  aOp[0].p1;.  }. 
12ea0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
12eb0 63 6f 64 65 3a 20 49 66 20 50 31 20 50 32 20 50  code: If P1 P2 P
12ec0 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
12ed0 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
12ee0 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
12ef0 50 31 20 69 73 20 74 72 75 65 2e 20 20 54 68 65  P1 is true.  The
12f00 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e   value.** is con
12f10 73 69 64 65 72 65 64 20 74 72 75 65 20 69 66 20  sidered true if 
12f20 69 74 20 69 73 20 6e 75 6d 65 72 69 63 20 61 6e  it is numeric an
12f30 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66 20  d non-zero.  If 
12f40 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20  the value.** in 
12f50 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  P1 is NULL then 
12f60 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66  take the jump if
12f70 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33 20   and only if P3 
12f80 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a  is non-zero..*/.
12f90 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74  /* Opcode: IfNot
12fa0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
12fb0 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
12fc0 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
12fd0 65 67 69 73 74 65 72 20 50 31 20 69 73 20 46 61  egister P1 is Fa
12fe0 6c 73 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a  lse.  The value.
12ff0 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  ** is considered
13000 20 66 61 6c 73 65 20 69 66 20 69 74 20 68 61 73   false if it has
13010 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65   a numeric value
13020 20 6f 66 20 7a 65 72 6f 2e 20 20 49 66 20 74 68   of zero.  If th
13030 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31  e value.** in P1
13040 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61   is NULL then ta
13050 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61  ke the jump if a
13060 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33 20 69 73  nd only if P3 is
13070 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 63 61   non-zero..*/.ca
13080 73 65 20 4f 50 5f 49 66 3a 20 20 20 20 20 20 20  se OP_If:       
13090 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
130a0 70 2c 20 69 6e 31 20 2a 2f 0a 63 61 73 65 20 4f  p, in1 */.case O
130b0 50 5f 49 66 4e 6f 74 3a 20 7b 20 20 20 20 20 20  P_IfNot: {      
130c0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
130d0 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a 20  n1 */.  int c;. 
130e0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
130f0 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49  p->p1];.  if( pI
13100 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
13110 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 63 20 3d 20  Null ){.    c = 
13120 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 65 6c 73 65  pOp->p3;.  }else
13130 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  {.#ifdef SQLITE_
13140 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
13150 49 4e 54 0a 20 20 20 20 63 20 3d 20 73 71 6c 69  INT.    c = sqli
13160 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
13170 70 49 6e 31 29 21 3d 30 3b 0a 23 65 6c 73 65 0a  pIn1)!=0;.#else.
13180 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56      c = sqlite3V
13190 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e  dbeRealValue(pIn
131a0 31 29 21 3d 30 2e 30 3b 0a 23 65 6e 64 69 66 0a  1)!=0.0;.#endif.
131b0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63      if( pOp->opc
131c0 6f 64 65 3d 3d 4f 50 5f 49 66 4e 6f 74 20 29 20  ode==OP_IfNot ) 
131d0 63 20 3d 20 21 63 3b 0a 20 20 7d 0a 20 20 56 64  c = !c;.  }.  Vd
131e0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 63 21  beBranchTaken(c!
131f0 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 63 20  =0, 2);.  if( c 
13200 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  ){.    goto jump
13210 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
13220 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
13230 65 3a 20 49 73 4e 75 6c 6c 20 50 31 20 50 32 20  e: IsNull P1 P2 
13240 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
13250 73 3a 20 69 66 20 72 5b 50 31 5d 3d 3d 4e 55 4c  s: if r[P1]==NUL
13260 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  L goto P2.**.** 
13270 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
13280 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
13290 74 65 72 20 50 31 20 69 73 20 4e 55 4c 4c 2e 0a  ter P1 is NULL..
132a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c  */.case OP_IsNul
132b0 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  l: {            
132c0 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 49 53  /* same as TK_IS
132d0 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20  NULL, jump, in1 
132e0 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
132f0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56 64  m[pOp->p1];.  Vd
13300 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 28  beBranchTaken( (
13310 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
13320 4d 5f 4e 75 6c 6c 29 21 3d 30 2c 20 32 29 3b 0a  M_Null)!=0, 2);.
13330 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
13340 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  gs & MEM_Null)!=
13350 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75  0 ){.    goto ju
13360 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
13370 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
13380 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50 31 20  ode: NotNull P1 
13390 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
133a0 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d  psis: if r[P1]!=
133b0 4e 55 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  NULL goto P2.**.
133c0 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
133d0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
133e0 67 69 73 74 65 72 20 50 31 20 69 73 20 6e 6f 74  gister P1 is not
133f0 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65   NULL.  .*/.case
13400 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20   OP_NotNull: {  
13410 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
13420 65 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c  e as TK_NOTNULL,
13430 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
13440 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
13450 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42 72 61  ->p1];.  VdbeBra
13460 6e 63 68 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d  nchTaken( (pIn1-
13470 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
13480 6c 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28  l)==0, 2);.  if(
13490 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
134a0 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a  MEM_Null)==0 ){.
134b0 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
134c0 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _p2;.  }.  break
134d0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
134e0 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20  Column P1 P2 P3 
134f0 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
13500 73 3a 20 72 5b 50 33 5d 3d 50 58 0a 2a 2a 0a 2a  s: r[P3]=PX.**.*
13510 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
13520 64 61 74 61 20 74 68 61 74 20 63 75 72 73 6f 72  data that cursor
13530 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 20 61 73   P1 points to as
13540 20 61 20 73 74 72 75 63 74 75 72 65 20 62 75 69   a structure bui
13550 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20  lt using.** the 
13560 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72  MakeRecord instr
13570 75 63 74 69 6f 6e 2e 20 20 28 53 65 65 20 74 68  uction.  (See th
13580 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70 63  e MakeRecord opc
13590 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
135a0 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  al.** informatio
135b0 6e 20 61 62 6f 75 74 20 74 68 65 20 66 6f 72 6d  n about the form
135c0 61 74 20 6f 66 20 74 68 65 20 64 61 74 61 2e 29  at of the data.)
135d0 20 20 45 78 74 72 61 63 74 20 74 68 65 20 50 32    Extract the P2
135e0 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72  -th column.** fr
135f0 6f 6d 20 74 68 69 73 20 72 65 63 6f 72 64 2e 20  om this record. 
13600 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6c 65   If there are le
13610 73 73 20 74 68 61 74 20 28 50 32 2b 31 29 20 0a  ss that (P2+1) .
13620 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  ** values in the
13630 20 72 65 63 6f 72 64 2c 20 65 78 74 72 61 63 74   record, extract
13640 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54   a NULL..**.** T
13650 68 65 20 76 61 6c 75 65 20 65 78 74 72 61 63 74  he value extract
13660 65 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ed is stored in 
13670 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a  register P3..**.
13680 2a 2a 20 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ** If the column
13690 20 63 6f 6e 74 61 69 6e 73 20 66 65 77 65 72 20   contains fewer 
136a0 74 68 61 6e 20 50 32 20 66 69 65 6c 64 73 2c 20  than P2 fields, 
136b0 74 68 65 6e 20 65 78 74 72 61 63 74 20 61 20 4e  then extract a N
136c0 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69 66 20  ULL.  Or,.** if 
136d0 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20  the P4 argument 
136e0 69 73 20 61 20 50 34 5f 4d 45 4d 20 75 73 65 20  is a P4_MEM use 
136f0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
13700 20 50 34 20 61 72 67 75 6d 65 6e 74 20 61 73 0a   P4 argument as.
13710 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 2e 0a 2a  ** the result..*
13720 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
13730 41 47 5f 43 4c 45 41 52 43 41 43 48 45 20 62 69  AG_CLEARCACHE bi
13740 74 20 69 73 20 73 65 74 20 6f 6e 20 50 35 20 61  t is set on P5 a
13750 6e 64 20 50 31 20 69 73 20 61 20 70 73 65 75 64  nd P1 is a pseud
13760 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 2c 0a  o-table cursor,.
13770 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 61 63 68  ** then the cach
13780 65 20 6f 66 20 74 68 65 20 63 75 72 73 6f 72 20  e of the cursor 
13790 69 73 20 72 65 73 65 74 20 70 72 69 6f 72 20 74  is reset prior t
137a0 6f 20 65 78 74 72 61 63 74 69 6e 67 20 74 68 65  o extracting the
137b0 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54 68 65 20   column..** The 
137c0 66 69 72 73 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20  first OP_Column 
137d0 61 67 61 69 6e 73 74 20 61 20 70 73 65 75 64 6f  against a pseudo
137e0 2d 74 61 62 6c 65 20 61 66 74 65 72 20 74 68 65  -table after the
137f0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f   value of the co
13800 6e 74 65 6e 74 0a 2a 2a 20 72 65 67 69 73 74 65  ntent.** registe
13810 72 20 68 61 73 20 63 68 61 6e 67 65 64 20 73 68  r has changed sh
13820 6f 75 6c 64 20 68 61 76 65 20 74 68 69 73 20 62  ould have this b
13830 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 49 66  it set..**.** If
13840 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47   the OPFLAG_LENG
13850 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47  THARG and OPFLAG
13860 5f 54 59 50 45 4f 46 41 52 47 20 62 69 74 73 20  _TYPEOFARG bits 
13870 61 72 65 20 73 65 74 20 6f 6e 20 50 35 20 77 68  are set on P5 wh
13880 65 6e 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74  en.** the result
13890 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 20 74   is guaranteed t
138a0 6f 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 61  o only be used a
138b0 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 6f  s the argument o
138c0 66 20 61 20 6c 65 6e 67 74 68 28 29 0a 2a 2a 20  f a length().** 
138d0 6f 72 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63  or typeof() func
138e0 74 69 6f 6e 2c 20 72 65 73 70 65 63 74 69 76 65  tion, respective
138f0 6c 79 2e 20 20 54 68 65 20 6c 6f 61 64 69 6e 67  ly.  The loading
13900 20 6f 66 20 6c 61 72 67 65 20 62 6c 6f 62 73 20   of large blobs 
13910 63 61 6e 20 62 65 0a 2a 2a 20 73 6b 69 70 70 65  can be.** skippe
13920 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 61  d for length() a
13930 6e 64 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 6c  nd all content l
13940 6f 61 64 69 6e 67 20 63 61 6e 20 62 65 20 73 6b  oading can be sk
13950 69 70 70 65 64 20 66 6f 72 20 74 79 70 65 6f 66  ipped for typeof
13960 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  ()..*/.case OP_C
13970 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69 6e 74 20 70  olumn: {.  int p
13980 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  2;            /*
13990 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74   column number t
139a0 6f 20 72 65 74 72 69 65 76 65 20 2a 2f 0a 20 20  o retrieve */.  
139b0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
139c0 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63     /* The VDBE c
139d0 75 72 73 6f 72 20 2a 2f 0a 20 20 42 74 43 75 72  ursor */.  BtCur
139e0 73 6f 72 20 2a 70 43 72 73 72 3b 20 20 20 2f 2a  sor *pCrsr;   /*
139f0 20 54 68 65 20 42 54 72 65 65 20 63 75 72 73 6f   The BTree curso
13a00 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66 66  r */.  u32 *aOff
13a10 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f 66  set;      /* aOf
13a20 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66 73 65  fset[i] is offse
13a30 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20 64 61  t to start of da
13a40 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c 75  ta for i-th colu
13a50 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b  mn */.  int len;
13a60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
13a70 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20  e length of the 
13a80 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74 61 20  serialized data 
13a90 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 2a  for the column *
13aa0 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  /.  int i;      
13ab0 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
13ac0 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4d 65 6d 20  ounter */.  Mem 
13ad0 2a 70 44 65 73 74 3b 20 20 20 20 20 20 20 20 2f  *pDest;        /
13ae0 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69 74 65  * Where to write
13af0 20 74 68 65 20 65 78 74 72 61 63 74 65 64 20 76   the extracted v
13b00 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d  alue */.  Mem sM
13b10 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  em;          /* 
13b20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20  For storing the 
13b30 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63  record being dec
13b40 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  oded */.  const 
13b50 75 38 20 2a 7a 44 61 74 61 3b 20 20 20 2f 2a 20  u8 *zData;   /* 
13b60 50 61 72 74 20 6f 66 20 74 68 65 20 72 65 63 6f  Part of the reco
13b70 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64  rd being decoded
13b80 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a   */.  const u8 *
13b90 7a 48 64 72 3b 20 20 20 20 2f 2a 20 4e 65 78 74  zHdr;    /* Next
13ba0 20 75 6e 70 61 72 73 65 64 20 62 79 74 65 20 6f   unparsed byte o
13bb0 66 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a  f the header */.
13bc0 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 45 6e 64    const u8 *zEnd
13bd0 48 64 72 3b 20 2f 2a 20 50 6f 69 6e 74 65 72 20  Hdr; /* Pointer 
13be0 74 6f 20 66 69 72 73 74 20 62 79 74 65 20 61 66  to first byte af
13bf0 74 65 72 20 74 68 65 20 68 65 61 64 65 72 20 2a  ter the header *
13c00 2f 0a 20 20 75 33 32 20 6f 66 66 73 65 74 3b 20  /.  u32 offset; 
13c10 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73 65 74         /* Offset
13c20 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 20 2a   into the data *
13c30 2f 0a 20 20 75 36 34 20 6f 66 66 73 65 74 36 34  /.  u64 offset64
13c40 3b 20 20 20 20 20 20 2f 2a 20 36 34 2d 62 69 74  ;      /* 64-bit
13c50 20 6f 66 66 73 65 74 20 2a 2f 0a 20 20 75 33 32   offset */.  u32
13c60 20 61 76 61 69 6c 3b 20 20 20 20 20 20 20 20 20   avail;         
13c70 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
13c80 65 73 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  es of available 
13c90 64 61 74 61 20 2a 2f 0a 20 20 75 33 32 20 74 3b  data */.  u32 t;
13ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
13cb0 41 20 74 79 70 65 20 63 6f 64 65 20 66 72 6f 6d  A type code from
13cc0 20 74 68 65 20 72 65 63 6f 72 64 20 68 65 61 64   the record head
13cd0 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65  er */.  Mem *pRe
13ce0 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50 73  g;         /* Ps
13cf0 65 75 64 6f 54 61 62 6c 65 20 69 6e 70 75 74 20  eudoTable input 
13d00 72 65 67 69 73 74 65 72 20 2a 2f 0a 0a 20 20 70  register */..  p
13d10 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
13d20 2d 3e 70 31 5d 3b 0a 20 20 70 32 20 3d 20 70 4f  ->p1];.  p2 = pO
13d30 70 2d 3e 70 32 3b 0a 0a 20 20 2f 2a 20 49 66 20  p->p2;..  /* If 
13d40 74 68 65 20 63 75 72 73 6f 72 20 63 61 63 68 65  the cursor cache
13d50 20 69 73 20 73 74 61 6c 65 2c 20 62 72 69 6e 67   is stale, bring
13d60 20 69 74 20 75 70 2d 74 6f 2d 64 61 74 65 20 2a   it up-to-date *
13d70 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
13d80 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
13d90 28 26 70 43 2c 20 26 70 32 29 3b 0a 20 20 69 66  (&pC, &p2);.  if
13da0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
13db0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
13dc0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
13dd0 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
13de0 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
13df0 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
13e00 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  Dest = &aMem[pOp
13e10 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p3];.  memAbou
13e20 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65  tToChange(p, pDe
13e30 73 74 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  st);.  assert( p
13e40 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
13e50 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
13e60 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  );.  assert( pC!
13e70 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
13e80 70 32 3c 70 43 2d 3e 6e 46 69 65 6c 64 20 29 3b  p2<pC->nField );
13e90 0a 20 20 61 4f 66 66 73 65 74 20 3d 20 70 43 2d  .  aOffset = pC-
13ea0 3e 61 4f 66 66 73 65 74 3b 0a 20 20 61 73 73 65  >aOffset;.  asse
13eb0 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
13ec0 21 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29  !=CURTYPE_VTAB )
13ed0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
13ee0 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59 50  eCurType!=CURTYP
13ef0 45 5f 50 53 45 55 44 4f 20 7c 7c 20 70 43 2d 3e  E_PSEUDO || pC->
13f00 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 61 73 73  nullRow );.  ass
13f10 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
13f20 65 21 3d 43 55 52 54 59 50 45 5f 53 4f 52 54 45  e!=CURTYPE_SORTE
13f30 52 20 29 3b 0a 0a 20 20 69 66 28 20 70 43 2d 3e  R );..  if( pC->
13f40 63 61 63 68 65 53 74 61 74 75 73 21 3d 70 2d 3e  cacheStatus!=p->
13f50 63 61 63 68 65 43 74 72 20 29 7b 20 20 20 20 20  cacheCtr ){     
13f60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 4f 50 54             /*OPT
13f70 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c  IMIZATION-IF-FAL
13f80 53 45 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d  SE*/.    if( pC-
13f90 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
13fa0 20 20 69 66 28 20 70 43 2d 3e 65 43 75 72 54 79    if( pC->eCurTy
13fb0 70 65 3d 3d 43 55 52 54 59 50 45 5f 50 53 45 55  pe==CURTYPE_PSEU
13fc0 44 4f 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  DO ){.        as
13fd0 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 73 65  sert( pC->uc.pse
13fe0 75 64 6f 54 61 62 6c 65 52 65 67 3e 30 20 29 3b  udoTableReg>0 );
13ff0 0a 20 20 20 20 20 20 20 20 70 52 65 67 20 3d 20  .        pReg = 
14000 26 61 4d 65 6d 5b 70 43 2d 3e 75 63 2e 70 73 65  &aMem[pC->uc.pse
14010 75 64 6f 54 61 62 6c 65 52 65 67 5d 3b 0a 20 20  udoTableReg];.  
14020 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 52        assert( pR
14030 65 67 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  eg->flags & MEM_
14040 42 6c 6f 62 20 29 3b 0a 20 20 20 20 20 20 20 20  Blob );.        
14050 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
14060 69 64 28 70 52 65 67 29 20 29 3b 0a 20 20 20 20  id(pReg) );.    
14070 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53      pC->payloadS
14080 69 7a 65 20 3d 20 70 43 2d 3e 73 7a 52 6f 77 20  ize = pC->szRow 
14090 3d 20 61 76 61 69 6c 20 3d 20 70 52 65 67 2d 3e  = avail = pReg->
140a0 6e 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61  n;.        pC->a
140b0 52 6f 77 20 3d 20 28 75 38 2a 29 70 52 65 67 2d  Row = (u8*)pReg-
140c0 3e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  >z;.      }else{
140d0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
140e0 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
140f0 44 65 73 74 29 3b 0a 20 20 20 20 20 20 20 20 67  Dest);.        g
14100 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75  oto op_column_ou
14110 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  t;.      }.    }
14120 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 43 72 73  else{.      pCrs
14130 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  r = pC->uc.pCurs
14140 6f 72 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  or;.      assert
14150 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
14160 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
14170 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
14180 43 72 73 72 20 29 3b 0a 20 20 20 20 20 20 61 73  Crsr );.      as
14190 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
141a0 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28  eeCursorIsValid(
141b0 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20  pCrsr) );.      
141c0 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20  pC->payloadSize 
141d0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  = sqlite3BtreePa
141e0 79 6c 6f 61 64 53 69 7a 65 28 70 43 72 73 72 29  yloadSize(pCrsr)
141f0 3b 0a 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77  ;.      pC->aRow
14200 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
14210 61 79 6c 6f 61 64 46 65 74 63 68 28 70 43 72 73  ayloadFetch(pCrs
14220 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20  r, &avail);.    
14230 20 20 61 73 73 65 72 74 28 20 61 76 61 69 6c 3c    assert( avail<
14240 3d 36 35 35 33 36 20 29 3b 20 20 2f 2a 20 4d 61  =65536 );  /* Ma
14250 78 69 6d 75 6d 20 70 61 67 65 20 73 69 7a 65 20  ximum page size 
14260 69 73 20 36 34 4b 69 42 20 2a 2f 0a 20 20 20 20  is 64KiB */.    
14270 20 20 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61    if( pC->payloa
14280 64 53 69 7a 65 20 3c 3d 20 28 75 33 32 29 61 76  dSize <= (u32)av
14290 61 69 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 70  ail ){.        p
142a0 43 2d 3e 73 7a 52 6f 77 20 3d 20 70 43 2d 3e 70  C->szRow = pC->p
142b0 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20  ayloadSize;.    
142c0 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e    }else if( pC->
142d0 70 61 79 6c 6f 61 64 53 69 7a 65 20 3e 20 28 75  payloadSize > (u
142e0 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  32)db->aLimit[SQ
142f0 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
14300 48 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f  H] ){.        go
14310 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20  to too_big;.    
14320 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
14330 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 61 76 61   pC->szRow = ava
14340 69 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  il;.      }.    
14350 7d 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  }.    pC->cacheS
14360 74 61 74 75 73 20 3d 20 70 2d 3e 63 61 63 68 65  tatus = p->cache
14370 43 74 72 3b 0a 20 20 20 20 70 43 2d 3e 69 48 64  Ctr;.    pC->iHd
14380 72 4f 66 66 73 65 74 20 3d 20 67 65 74 56 61 72  rOffset = getVar
14390 69 6e 74 33 32 28 70 43 2d 3e 61 52 6f 77 2c 20  int32(pC->aRow, 
143a0 6f 66 66 73 65 74 29 3b 0a 20 20 20 20 70 43 2d  offset);.    pC-
143b0 3e 6e 48 64 72 50 61 72 73 65 64 20 3d 20 30 3b  >nHdrParsed = 0;
143c0 0a 20 20 20 20 61 4f 66 66 73 65 74 5b 30 5d 20  .    aOffset[0] 
143d0 3d 20 6f 66 66 73 65 74 3b 0a 0a 0a 20 20 20 20  = offset;...    
143e0 69 66 28 20 61 76 61 69 6c 3c 6f 66 66 73 65 74  if( avail<offset
143f0 20 29 7b 20 20 20 20 20 20 2f 2a 4f 50 54 49 4d   ){      /*OPTIM
14400 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45  IZATION-IF-FALSE
14410 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 70 43 2d 3e  */.      /* pC->
14420 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20 68 61  aRow does not ha
14430 76 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 65  ve to hold the e
14440 6e 74 69 72 65 20 72 6f 77 2c 20 62 75 74 20 69  ntire row, but i
14450 74 20 64 6f 65 73 20 61 74 20 6c 65 61 73 74 0a  t does at least.
14460 20 20 20 20 20 20 2a 2a 20 6e 65 65 64 20 74 6f        ** need to
14470 20 63 6f 76 65 72 20 74 68 65 20 68 65 61 64 65   cover the heade
14480 72 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2e  r of the record.
14490 20 20 49 66 20 70 43 2d 3e 61 52 6f 77 20 64 6f    If pC->aRow do
144a0 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 0a 20  es not contain. 
144b0 20 20 20 20 20 2a 2a 20 74 68 65 20 63 6f 6d 70       ** the comp
144c0 6c 65 74 65 20 68 65 61 64 65 72 2c 20 74 68 65  lete header, the
144d0 6e 20 73 65 74 20 69 74 20 74 6f 20 7a 65 72 6f  n set it to zero
144e0 2c 20 66 6f 72 63 69 6e 67 20 74 68 65 20 68 65  , forcing the he
144f0 61 64 65 72 20 74 6f 20 62 65 0a 20 20 20 20 20  ader to be.     
14500 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20   ** dynamically 
14510 61 6c 6c 6f 63 61 74 65 64 2e 20 2a 2f 0a 20 20  allocated. */.  
14520 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 30      pC->aRow = 0
14530 3b 0a 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f  ;.      pC->szRo
14540 77 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20 2f 2a  w = 0;..      /*
14550 20 4d 61 6b 65 20 73 75 72 65 20 61 20 63 6f 72   Make sure a cor
14560 72 75 70 74 20 64 61 74 61 62 61 73 65 20 68 61  rupt database ha
14570 73 20 6e 6f 74 20 67 69 76 65 6e 20 75 73 20 61  s not given us a
14580 6e 20 6f 76 65 72 73 69 7a 65 20 68 65 61 64 65  n oversize heade
14590 72 2e 0a 20 20 20 20 20 20 2a 2a 20 44 6f 20 74  r..      ** Do t
145a0 68 69 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64  his now to avoid
145b0 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d   an oversize mem
145c0 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a  ory allocation..
145d0 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a        **.      *
145e0 2a 20 54 79 70 65 20 65 6e 74 72 69 65 73 20 63  * Type entries c
145f0 61 6e 20 62 65 20 62 65 74 77 65 65 6e 20 31 20  an be between 1 
14600 61 6e 64 20 35 20 62 79 74 65 73 20 65 61 63 68  and 5 bytes each
14610 2e 20 20 42 75 74 20 34 20 61 6e 64 20 35 20 62  .  But 4 and 5 b
14620 79 74 65 0a 20 20 20 20 20 20 2a 2a 20 74 79 70  yte.      ** typ
14630 65 73 20 75 73 65 20 73 6f 20 6d 75 63 68 20 64  es use so much d
14640 61 74 61 20 73 70 61 63 65 20 74 68 61 74 20 74  ata space that t
14650 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65  here can only be
14660 20 34 30 39 36 20 61 6e 64 20 33 32 20 6f 66 0a   4096 and 32 of.
14670 20 20 20 20 20 20 2a 2a 20 74 68 65 6d 2c 20 72        ** them, r
14680 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53 6f  espectively.  So
14690 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 68 65 61   the maximum hea
146a0 64 65 72 20 6c 65 6e 67 74 68 20 72 65 73 75 6c  der length resul
146b0 74 73 20 66 72 6f 6d 20 61 0a 20 20 20 20 20 20  ts from a.      
146c0 2a 2a 20 33 2d 62 79 74 65 20 74 79 70 65 20 66  ** 3-byte type f
146d0 6f 72 20 65 61 63 68 20 6f 66 20 74 68 65 20 6d  or each of the m
146e0 61 78 69 6d 75 6d 20 6f 66 20 33 32 37 36 38 20  aximum of 32768 
146f0 63 6f 6c 75 6d 6e 73 20 70 6c 75 73 20 74 68 72  columns plus thr
14700 65 65 0a 20 20 20 20 20 20 2a 2a 20 65 78 74 72  ee.      ** extr
14710 61 20 62 79 74 65 73 20 66 6f 72 20 74 68 65 20  a bytes for the 
14720 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20 69 74  header length it
14730 73 65 6c 66 2e 20 20 33 32 37 36 38 2a 33 20 2b  self.  32768*3 +
14740 20 33 20 3d 20 39 38 33 30 37 2e 0a 20 20 20 20   3 = 98307..    
14750 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 6f    */.      if( o
14760 66 66 73 65 74 20 3e 20 39 38 33 30 37 20 7c 7c  ffset > 98307 ||
14770 20 6f 66 66 73 65 74 20 3e 20 70 43 2d 3e 70 61   offset > pC->pa
14780 79 6c 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20 20  yloadSize ){.   
14790 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
147a0 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20  _CORRUPT_BKPT;. 
147b0 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
147c0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
147d0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
147e0 65 20 69 66 28 20 6f 66 66 73 65 74 3e 30 20 29  e if( offset>0 )
147f0 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e  { /*OPTIMIZATION
14800 2d 49 46 2d 54 52 55 45 2a 2f 0a 20 20 20 20 20  -IF-TRUE*/.     
14810 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e   /* The followin
14820 67 20 67 6f 74 6f 20 69 73 20 61 6e 20 6f 70 74  g goto is an opt
14830 69 6d 69 7a 61 74 69 6f 6e 2e 20 20 49 74 20 63  imization.  It c
14840 61 6e 20 62 65 20 6f 6d 69 74 74 65 64 20 61 6e  an be omitted an
14850 64 0a 20 20 20 20 20 20 2a 2a 20 65 76 65 72 79  d.      ** every
14860 74 68 69 6e 67 20 77 69 6c 6c 20 73 74 69 6c 6c  thing will still
14870 20 77 6f 72 6b 2e 20 20 42 75 74 20 4f 50 5f 43   work.  But OP_C
14880 6f 6c 75 6d 6e 20 69 73 20 6d 65 61 73 75 72 61  olumn is measura
14890 62 6c 79 20 66 61 73 74 65 72 0a 20 20 20 20 20  bly faster.     
148a0 20 2a 2a 20 62 79 20 73 6b 69 70 70 69 6e 67 20   ** by skipping 
148b0 74 68 65 20 73 75 62 73 65 71 75 65 6e 74 20 63  the subsequent c
148c0 6f 6e 64 69 74 69 6f 6e 61 6c 2c 20 77 68 69 63  onditional, whic
148d0 68 20 69 73 20 61 6c 77 61 79 73 20 74 72 75 65  h is always true
148e0 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
148f0 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f   zData = pC->aRo
14900 77 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  w;.      assert(
14910 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c   pC->nHdrParsed<
14920 3d 70 32 20 29 3b 20 20 20 20 20 20 20 20 20 2f  =p2 );         /
14930 2a 20 43 6f 6e 64 69 74 69 6f 6e 61 6c 20 73 6b  * Conditional sk
14940 69 70 70 65 64 20 2a 2f 0a 20 20 20 20 20 20 67  ipped */.      g
14950 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65  oto op_column_re
14960 61 64 5f 68 65 61 64 65 72 3b 0a 20 20 20 20 7d  ad_header;.    }
14970 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20  .  }..  /* Make 
14980 73 75 72 65 20 61 74 20 6c 65 61 73 74 20 74 68  sure at least th
14990 65 20 66 69 72 73 74 20 70 32 2b 31 20 65 6e 74  e first p2+1 ent
149a0 72 69 65 73 20 6f 66 20 74 68 65 20 68 65 61 64  ries of the head
149b0 65 72 20 68 61 76 65 20 62 65 65 6e 0a 20 20 2a  er have been.  *
149c0 2a 20 70 61 72 73 65 64 20 61 6e 64 20 76 61 6c  * parsed and val
149d0 69 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  id information i
149e0 73 20 69 6e 20 61 4f 66 66 73 65 74 5b 5d 20 61  s in aOffset[] a
149f0 6e 64 20 70 43 2d 3e 61 54 79 70 65 5b 5d 2e 0a  nd pC->aType[]..
14a00 20 20 2a 2f 0a 20 20 69 66 28 20 70 43 2d 3e 6e    */.  if( pC->n
14a10 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b  HdrParsed<=p2 ){
14a20 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65  .    /* If there
14a30 20 69 73 20 6d 6f 72 65 20 68 65 61 64 65 72 20   is more header 
14a40 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 70 61  available for pa
14a50 72 73 69 6e 67 20 69 6e 20 74 68 65 20 72 65 63  rsing in the rec
14a60 6f 72 64 2c 20 74 72 79 0a 20 20 20 20 2a 2a 20  ord, try.    ** 
14a70 74 6f 20 65 78 74 72 61 63 74 20 61 64 64 69 74  to extract addit
14a80 69 6f 6e 61 6c 20 66 69 65 6c 64 73 20 75 70 20  ional fields up 
14a90 74 68 72 6f 75 67 68 20 74 68 65 20 70 32 2b 31  through the p2+1
14aa0 2d 74 68 20 66 69 65 6c 64 20 0a 20 20 20 20 2a  -th field .    *
14ab0 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69 48  /.    if( pC->iH
14ac0 64 72 4f 66 66 73 65 74 3c 61 4f 66 66 73 65 74  drOffset<aOffset
14ad0 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  [0] ){.      /* 
14ae0 4d 61 6b 65 20 73 75 72 65 20 7a 44 61 74 61 20  Make sure zData 
14af0 70 6f 69 6e 74 73 20 74 6f 20 65 6e 6f 75 67 68  points to enough
14b00 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 74   of the record t
14b10 6f 20 63 6f 76 65 72 20 74 68 65 20 68 65 61 64  o cover the head
14b20 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  er. */.      if(
14b30 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a   pC->aRow==0 ){.
14b40 20 20 20 20 20 20 20 20 6d 65 6d 73 65 74 28 26          memset(&
14b50 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28  sMem, 0, sizeof(
14b60 73 4d 65 6d 29 29 3b 0a 20 20 20 20 20 20 20 20  sMem));.        
14b70 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
14b80 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 2d  MemFromBtree(pC-
14b90 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20  >uc.pCursor, 0, 
14ba0 61 4f 66 66 73 65 74 5b 30 5d 2c 20 26 73 4d 65  aOffset[0], &sMe
14bb0 6d 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  m);.        if( 
14bc0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
14bd0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
14be0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
14bf0 20 7a 44 61 74 61 20 3d 20 28 75 38 2a 29 73 4d   zData = (u8*)sM
14c00 65 6d 2e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73  em.z;.      }els
14c10 65 7b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61  e{.        zData
14c20 20 3d 20 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20   = pC->aRow;.   
14c30 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a     }.  .      /*
14c40 20 46 69 6c 6c 20 69 6e 20 70 43 2d 3e 61 54 79   Fill in pC->aTy
14c50 70 65 5b 69 5d 20 61 6e 64 20 61 4f 66 66 73 65  pe[i] and aOffse
14c60 74 5b 69 5d 20 76 61 6c 75 65 73 20 74 68 72 6f  t[i] values thro
14c70 75 67 68 20 74 68 65 20 70 32 2d 74 68 20 66 69  ugh the p2-th fi
14c80 65 6c 64 2e 20 2a 2f 0a 20 20 20 20 6f 70 5f 63  eld. */.    op_c
14c90 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65  olumn_read_heade
14ca0 72 3a 0a 20 20 20 20 20 20 69 20 3d 20 70 43 2d  r:.      i = pC-
14cb0 3e 6e 48 64 72 50 61 72 73 65 64 3b 0a 20 20 20  >nHdrParsed;.   
14cc0 20 20 20 6f 66 66 73 65 74 36 34 20 3d 20 61 4f     offset64 = aO
14cd0 66 66 73 65 74 5b 69 5d 3b 0a 20 20 20 20 20 20  ffset[i];.      
14ce0 7a 48 64 72 20 3d 20 7a 44 61 74 61 20 2b 20 70  zHdr = zData + p
14cf0 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 3b 0a 20  C->iHdrOffset;. 
14d00 20 20 20 20 20 7a 45 6e 64 48 64 72 20 3d 20 7a       zEndHdr = z
14d10 44 61 74 61 20 2b 20 61 4f 66 66 73 65 74 5b 30  Data + aOffset[0
14d20 5d 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20  ];.      do{.   
14d30 20 20 20 20 20 69 66 28 20 28 74 20 3d 20 7a 48       if( (t = zH
14d40 64 72 5b 30 5d 29 3c 30 78 38 30 20 29 7b 0a 20  dr[0])<0x80 ){. 
14d50 20 20 20 20 20 20 20 20 20 7a 48 64 72 2b 2b 3b           zHdr++;
14d60 0a 20 20 20 20 20 20 20 20 20 20 6f 66 66 73 65  .          offse
14d70 74 36 34 20 2b 3d 20 73 71 6c 69 74 65 33 56 64  t64 += sqlite3Vd
14d80 62 65 4f 6e 65 42 79 74 65 53 65 72 69 61 6c 54  beOneByteSerialT
14d90 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20  ypeLen(t);.     
14da0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
14db0 20 20 20 20 7a 48 64 72 20 2b 3d 20 73 71 6c 69      zHdr += sqli
14dc0 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 7a  te3GetVarint32(z
14dd0 48 64 72 2c 20 26 74 29 3b 0a 20 20 20 20 20 20  Hdr, &t);.      
14de0 20 20 20 20 6f 66 66 73 65 74 36 34 20 2b 3d 20      offset64 += 
14df0 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
14e00 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20  lTypeLen(t);.   
14e10 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70       }.        p
14e20 43 2d 3e 61 54 79 70 65 5b 69 2b 2b 5d 20 3d 20  C->aType[i++] = 
14e30 74 3b 0a 20 20 20 20 20 20 20 20 61 4f 66 66 73  t;.        aOffs
14e40 65 74 5b 69 5d 20 3d 20 28 75 33 32 29 28 6f 66  et[i] = (u32)(of
14e50 66 73 65 74 36 34 20 26 20 30 78 66 66 66 66 66  fset64 & 0xfffff
14e60 66 66 66 29 3b 0a 20 20 20 20 20 20 7d 77 68 69  fff);.      }whi
14e70 6c 65 28 20 69 3c 3d 70 32 20 26 26 20 7a 48 64  le( i<=p2 && zHd
14e80 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a 0a 20 20  r<zEndHdr );..  
14e90 20 20 20 20 2f 2a 20 54 68 65 20 72 65 63 6f 72      /* The recor
14ea0 64 20 69 73 20 63 6f 72 72 75 70 74 20 69 66 20  d is corrupt if 
14eb0 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  any of the follo
14ec0 77 69 6e 67 20 61 72 65 20 74 72 75 65 3a 0a 20  wing are true:. 
14ed0 20 20 20 20 20 2a 2a 20 28 31 29 20 74 68 65 20       ** (1) the 
14ee0 62 79 74 65 73 20 6f 66 20 74 68 65 20 68 65 61  bytes of the hea
14ef0 64 65 72 20 65 78 74 65 6e 64 20 70 61 73 74 20  der extend past 
14f00 74 68 65 20 64 65 63 6c 61 72 65 64 20 68 65 61  the declared hea
14f10 64 65 72 20 73 69 7a 65 0a 20 20 20 20 20 20 2a  der size.      *
14f20 2a 20 28 32 29 20 74 68 65 20 65 6e 74 69 72 65  * (2) the entire
14f30 20 68 65 61 64 65 72 20 77 61 73 20 75 73 65 64   header was used
14f40 20 62 75 74 20 6e 6f 74 20 61 6c 6c 20 64 61 74   but not all dat
14f50 61 20 77 61 73 20 75 73 65 64 0a 20 20 20 20 20  a was used.     
14f60 20 2a 2a 20 28 33 29 20 74 68 65 20 65 6e 64 20   ** (3) the end 
14f70 6f 66 20 74 68 65 20 64 61 74 61 20 65 78 74 65  of the data exte
14f80 6e 64 73 20 62 65 79 6f 6e 64 20 74 68 65 20 65  nds beyond the e
14f90 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  nd of the record
14fa0 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
14fb0 20 69 66 28 20 28 7a 48 64 72 3e 3d 7a 45 6e 64   if( (zHdr>=zEnd
14fc0 48 64 72 20 26 26 20 28 7a 48 64 72 3e 7a 45 6e  Hdr && (zHdr>zEn
14fd0 64 48 64 72 20 7c 7c 20 6f 66 66 73 65 74 36 34  dHdr || offset64
14fe0 21 3d 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a  !=pC->payloadSiz
14ff0 65 29 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 6f  e)).       || (o
15000 66 66 73 65 74 36 34 20 3e 20 70 43 2d 3e 70 61  ffset64 > pC->pa
15010 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20 20 20  yloadSize).     
15020 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
15030 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 20 73 71  pC->aRow==0 ) sq
15040 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
15050 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 20 20  ase(&sMem);.    
15060 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
15070 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20  CORRUPT_BKPT;.  
15080 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
15090 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
150a0 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 70 43       }..      pC
150b0 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 3d 20 69  ->nHdrParsed = i
150c0 3b 0a 20 20 20 20 20 20 70 43 2d 3e 69 48 64 72  ;.      pC->iHdr
150d0 4f 66 66 73 65 74 20 3d 20 28 75 33 32 29 28 7a  Offset = (u32)(z
150e0 48 64 72 20 2d 20 7a 44 61 74 61 29 3b 0a 20 20  Hdr - zData);.  
150f0 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77      if( pC->aRow
15100 3d 3d 30 20 29 20 73 71 6c 69 74 65 33 56 64 62  ==0 ) sqlite3Vdb
15110 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65  eMemRelease(&sMe
15120 6d 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  m);.    }else{. 
15130 20 20 20 20 20 74 20 3d 20 30 3b 0a 20 20 20 20       t = 0;.    
15140 7d 0a 0a 20 20 20 20 2f 2a 20 49 66 20 61 66 74  }..    /* If aft
15150 65 72 20 74 72 79 69 6e 67 20 74 6f 20 65 78 74  er trying to ext
15160 72 61 63 74 20 6e 65 77 20 65 6e 74 72 69 65 73  ract new entries
15170 20 66 72 6f 6d 20 74 68 65 20 68 65 61 64 65 72   from the header
15180 2c 20 6e 48 64 72 50 61 72 73 65 64 20 69 73 0a  , nHdrParsed is.
15190 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 6e 6f 74      ** still not
151a0 20 75 70 20 74 6f 20 70 32 2c 20 74 68 61 74 20   up to p2, that 
151b0 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 72  means that the r
151c0 65 63 6f 72 64 20 68 61 73 20 66 65 77 65 72 20  ecord has fewer 
151d0 74 68 61 6e 20 70 32 0a 20 20 20 20 2a 2a 20 63  than p2.    ** c
151e0 6f 6c 75 6d 6e 73 2e 20 20 53 6f 20 74 68 65 20  olumns.  So the 
151f0 72 65 73 75 6c 74 20 77 69 6c 6c 20 62 65 20 65  result will be e
15200 69 74 68 65 72 20 74 68 65 20 64 65 66 61 75 6c  ither the defaul
15210 74 20 76 61 6c 75 65 20 6f 72 20 61 20 4e 55 4c  t value or a NUL
15220 4c 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  L..    */.    if
15230 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64  ( pC->nHdrParsed
15240 3c 3d 70 32 20 29 7b 0a 20 20 20 20 20 20 69 66  <=p2 ){.      if
15250 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
15260 34 5f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 20  4_MEM ){.       
15270 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
15280 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73 74  hallowCopy(pDest
15290 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20  , pOp->p4.pMem, 
152a0 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20  MEM_Static);.   
152b0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
152c0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
152d0 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
152e0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 67 6f        }.      go
152f0 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  to op_column_out
15300 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
15310 0a 20 20 20 20 74 20 3d 20 70 43 2d 3e 61 54 79  .    t = pC->aTy
15320 70 65 5b 70 32 5d 3b 0a 20 20 7d 0a 0a 20 20 2f  pe[p2];.  }..  /
15330 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 63 6f  * Extract the co
15340 6e 74 65 6e 74 20 66 6f 72 20 74 68 65 20 70 32  ntent for the p2
15350 2b 31 2d 74 68 20 63 6f 6c 75 6d 6e 2e 20 20 43  +1-th column.  C
15360 6f 6e 74 72 6f 6c 20 63 61 6e 20 6f 6e 6c 79 0a  ontrol can only.
15370 20 20 2a 2a 20 72 65 61 63 68 20 74 68 69 73 20    ** reach this 
15380 70 6f 69 6e 74 20 69 66 20 61 4f 66 66 73 65 74  point if aOffset
15390 5b 70 32 5d 2c 20 61 4f 66 66 73 65 74 5b 70 32  [p2], aOffset[p2
153a0 2b 31 5d 2c 20 61 6e 64 20 70 43 2d 3e 61 54 79  +1], and pC->aTy
153b0 70 65 5b 70 32 5d 20 61 72 65 0a 20 20 2a 2a 20  pe[p2] are.  ** 
153c0 61 6c 6c 20 76 61 6c 69 64 2e 0a 20 20 2a 2f 0a  all valid..  */.
153d0 20 20 61 73 73 65 72 74 28 20 70 32 3c 70 43 2d    assert( p2<pC-
153e0 3e 6e 48 64 72 50 61 72 73 65 64 20 29 3b 0a 20  >nHdrParsed );. 
153f0 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
15400 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 61 73 73 65  ITE_OK );.  asse
15410 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43  rt( sqlite3VdbeC
15420 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74  heckMemInvariant
15430 73 28 70 44 65 73 74 29 20 29 3b 0a 20 20 69 66  s(pDest) );.  if
15440 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63  ( VdbeMemDynamic
15450 28 70 44 65 73 74 29 20 29 7b 0a 20 20 20 20 73  (pDest) ){.    s
15460 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
15470 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 7d  Null(pDest);.  }
15480 0a 20 20 61 73 73 65 72 74 28 20 74 3d 3d 70 43  .  assert( t==pC
15490 2d 3e 61 54 79 70 65 5b 70 32 5d 20 29 3b 0a 20  ->aType[p2] );. 
154a0 20 69 66 28 20 70 43 2d 3e 73 7a 52 6f 77 3e 3d   if( pC->szRow>=
154b0 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d 20 29 7b  aOffset[p2+1] ){
154c0 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20  .    /* This is 
154d0 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20  the common case 
154e0 77 68 65 72 65 20 74 68 65 20 64 65 73 69 72 65  where the desire
154f0 64 20 63 6f 6e 74 65 6e 74 20 66 69 74 73 20 6f  d content fits o
15500 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 20  n the original. 
15510 20 20 20 2a 2a 20 70 61 67 65 20 2d 20 77 68 65     ** page - whe
15520 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69  re the content i
15530 73 20 6e 6f 74 20 6f 6e 20 61 6e 20 6f 76 65 72  s not on an over
15540 66 6c 6f 77 20 70 61 67 65 20 2a 2f 0a 20 20 20  flow page */.   
15550 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f   zData = pC->aRo
15560 77 20 2b 20 61 4f 66 66 73 65 74 5b 70 32 5d 3b  w + aOffset[p2];
15570 0a 20 20 20 20 69 66 28 20 74 3c 31 32 20 29 7b  .    if( t<12 ){
15580 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
15590 62 65 53 65 72 69 61 6c 47 65 74 28 7a 44 61 74  beSerialGet(zDat
155a0 61 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20  a, t, pDest);.  
155b0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f    }else{.      /
155c0 2a 20 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  * If the column 
155d0 76 61 6c 75 65 20 69 73 20 61 20 73 74 72 69 6e  value is a strin
155e0 67 2c 20 77 65 20 6e 65 65 64 20 61 20 70 65 72  g, we need a per
155f0 73 69 73 74 65 6e 74 20 76 61 6c 75 65 2c 20 6e  sistent value, n
15600 6f 74 0a 20 20 20 20 20 20 2a 2a 20 61 20 4d 45  ot.      ** a ME
15610 4d 5f 45 70 68 65 6d 20 76 61 6c 75 65 2e 20 20  M_Ephem value.  
15620 54 68 69 73 20 62 72 61 6e 63 68 20 69 73 20 61  This branch is a
15630 20 66 61 73 74 20 73 68 6f 72 74 2d 63 75 74 20   fast short-cut 
15640 74 68 61 74 20 69 73 20 65 71 75 69 76 61 6c 65  that is equivale
15650 6e 74 0a 20 20 20 20 20 20 2a 2a 20 74 6f 20 63  nt.      ** to c
15660 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33 56 64  alling sqlite3Vd
15670 62 65 53 65 72 69 61 6c 47 65 74 28 29 20 61 6e  beSerialGet() an
15680 64 20 73 71 6c 69 74 65 33 56 64 62 65 44 65 65  d sqlite3VdbeDee
15690 70 68 65 6d 65 72 61 6c 69 7a 65 28 29 2e 0a 20  phemeralize().. 
156a0 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 74       */.      st
156b0 61 74 69 63 20 63 6f 6e 73 74 20 75 31 36 20 61  atic const u16 a
156c0 46 6c 61 67 5b 5d 20 3d 20 7b 20 4d 45 4d 5f 42  Flag[] = { MEM_B
156d0 6c 6f 62 2c 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d  lob, MEM_Str|MEM
156e0 5f 54 65 72 6d 20 7d 3b 0a 20 20 20 20 20 20 70  _Term };.      p
156f0 44 65 73 74 2d 3e 6e 20 3d 20 6c 65 6e 20 3d 20  Dest->n = len = 
15700 28 74 2d 31 32 29 2f 32 3b 0a 20 20 20 20 20 20  (t-12)/2;.      
15710 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63  pDest->enc = enc
15720 6f 64 69 6e 67 3b 0a 20 20 20 20 20 20 69 66 28  oding;.      if(
15730 20 70 44 65 73 74 2d 3e 73 7a 4d 61 6c 6c 6f 63   pDest->szMalloc
15740 20 3c 20 6c 65 6e 2b 32 20 29 7b 0a 20 20 20 20   < len+2 ){.    
15750 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73      pDest->flags
15760 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20   = MEM_Null;.   
15770 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
15780 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 44 65 73  VdbeMemGrow(pDes
15790 74 2c 20 6c 65 6e 2b 32 2c 20 30 29 20 29 20 67  t, len+2, 0) ) g
157a0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
157b0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
157c0 20 70 44 65 73 74 2d 3e 7a 20 3d 20 70 44 65 73   pDest->z = pDes
157d0 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20  t->zMalloc;.    
157e0 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70 79    }.      memcpy
157f0 28 70 44 65 73 74 2d 3e 7a 2c 20 7a 44 61 74 61  (pDest->z, zData
15800 2c 20 6c 65 6e 29 3b 0a 20 20 20 20 20 20 70 44  , len);.      pD
15810 65 73 74 2d 3e 7a 5b 6c 65 6e 5d 20 3d 20 30 3b  est->z[len] = 0;
15820 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 7a 5b  .      pDest->z[
15830 6c 65 6e 2b 31 5d 20 3d 20 30 3b 0a 20 20 20 20  len+1] = 0;.    
15840 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d    pDest->flags =
15850 20 61 46 6c 61 67 5b 74 26 31 5d 3b 0a 20 20 20   aFlag[t&1];.   
15860 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
15870 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63  pDest->enc = enc
15880 6f 64 69 6e 67 3b 0a 20 20 20 20 2f 2a 20 54 68  oding;.    /* Th
15890 69 73 20 62 72 61 6e 63 68 20 68 61 70 70 65 6e  is branch happen
158a0 73 20 6f 6e 6c 79 20 77 68 65 6e 20 63 6f 6e 74  s only when cont
158b0 65 6e 74 20 69 73 20 6f 6e 20 6f 76 65 72 66 6c  ent is on overfl
158c0 6f 77 20 70 61 67 65 73 20 2a 2f 0a 20 20 20 20  ow pages */.    
158d0 69 66 28 20 28 28 70 4f 70 2d 3e 70 35 20 26 20  if( ((pOp->p5 & 
158e0 28 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52  (OPFLAG_LENGTHAR
158f0 47 7c 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  G|OPFLAG_TYPEOFA
15900 52 47 29 29 21 3d 30 0a 20 20 20 20 20 20 20 20  RG))!=0.        
15910 20 20 26 26 20 28 28 74 3e 3d 31 32 20 26 26 20    && ((t>=12 && 
15920 28 74 26 31 29 3d 3d 30 29 20 7c 7c 20 28 70 4f  (t&1)==0) || (pO
15930 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 54  p->p5 & OPFLAG_T
15940 59 50 45 4f 46 41 52 47 29 21 3d 30 29 29 0a 20  YPEOFARG)!=0)). 
15950 20 20 20 20 7c 7c 20 28 6c 65 6e 20 3d 20 73 71      || (len = sq
15960 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
15970 79 70 65 4c 65 6e 28 74 29 29 3d 3d 30 0a 20 20  ypeLen(t))==0.  
15980 20 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 43 6f    ){.      /* Co
15990 6e 74 65 6e 74 20 69 73 20 69 72 72 65 6c 65 76  ntent is irrelev
159a0 61 6e 74 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a  ant for.      **
159b0 20 20 20 20 31 2e 20 74 68 65 20 74 79 70 65 6f      1. the typeo
159c0 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20  f() function,.  
159d0 20 20 20 20 2a 2a 20 20 20 20 32 2e 20 74 68 65      **    2. the
159e0 20 6c 65 6e 67 74 68 28 58 29 20 66 75 6e 63 74   length(X) funct
159f0 69 6f 6e 20 69 66 20 58 20 69 73 20 61 20 62 6c  ion if X is a bl
15a00 6f 62 2c 20 61 6e 64 0a 20 20 20 20 20 20 2a 2a  ob, and.      **
15a10 20 20 20 20 33 2e 20 69 66 20 74 68 65 20 63 6f      3. if the co
15a20 6e 74 65 6e 74 20 6c 65 6e 67 74 68 20 69 73 20  ntent length is 
15a30 7a 65 72 6f 2e 0a 20 20 20 20 20 20 2a 2a 20 53  zero..      ** S
15a40 6f 20 77 65 20 6d 69 67 68 74 20 61 73 20 77 65  o we might as we
15a50 6c 6c 20 75 73 65 20 62 6f 67 75 73 20 63 6f 6e  ll use bogus con
15a60 74 65 6e 74 20 72 61 74 68 65 72 20 74 68 61 6e  tent rather than
15a70 20 72 65 61 64 69 6e 67 0a 20 20 20 20 20 20 2a   reading.      *
15a80 2a 20 63 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 64  * content from d
15a90 69 73 6b 2e 20 2a 2f 0a 20 20 20 20 20 20 73 74  isk. */.      st
15aa0 61 74 69 63 20 75 38 20 61 5a 65 72 6f 5b 38 5d  atic u8 aZero[8]
15ab0 3b 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68  ;  /* This is th
15ac0 65 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74 20  e bogus content 
15ad0 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  */.      sqlite3
15ae0 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 61 5a  VdbeSerialGet(aZ
15af0 65 72 6f 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a  ero, t, pDest);.
15b00 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
15b10 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
15b20 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43  eMemFromBtree(pC
15b30 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 61 4f  ->uc.pCursor, aO
15b40 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20  ffset[p2], len, 
15b50 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 69 66  pDest);.      if
15b60 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
15b70 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
15b80 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
15b90 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
15ba0 61 6c 47 65 74 28 28 63 6f 6e 73 74 20 75 38 2a  alGet((const u8*
15bb0 29 70 44 65 73 74 2d 3e 7a 2c 20 74 2c 20 70 44  )pDest->z, t, pD
15bc0 65 73 74 29 3b 0a 20 20 20 20 20 20 70 44 65 73  est);.      pDes
15bd0 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d  t->flags &= ~MEM
15be0 5f 45 70 68 65 6d 3b 0a 20 20 20 20 7d 0a 20 20  _Ephem;.    }.  
15bf0 7d 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  }..op_column_out
15c00 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  :.  UPDATE_MAX_B
15c10 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a  LOBSIZE(pDest);.
15c20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
15c30 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29  (pOp->p3, pDest)
15c40 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
15c50 20 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e 69 74   Opcode: Affinit
15c60 79 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  y P1 P2 * P4 *.*
15c70 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69  * Synopsis: affi
15c80 6e 69 74 79 28 72 5b 50 31 40 50 32 5d 29 0a 2a  nity(r[P1@P2]).*
15c90 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66 69 6e  *.** Apply affin
15ca0 69 74 69 65 73 20 74 6f 20 61 20 72 61 6e 67 65  ities to a range
15cb0 20 6f 66 20 50 32 20 72 65 67 69 73 74 65 72 73   of P2 registers
15cc0 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 50   starting with P
15cd0 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  1..**.** P4 is a
15ce0 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20   string that is 
15cf0 50 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f  P2 characters lo
15d00 6e 67 2e 20 54 68 65 20 6e 74 68 20 63 68 61 72  ng. The nth char
15d10 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  acter of the.** 
15d20 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73  string indicates
15d30 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69   the column affi
15d40 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64  nity that should
15d50 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65   be used for the
15d60 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63   nth.** memory c
15d70 65 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e 67 65  ell in the range
15d80 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66  ..*/.case OP_Aff
15d90 69 6e 69 74 79 3a 20 7b 0a 20 20 63 6f 6e 73 74  inity: {.  const
15da0 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79   char *zAffinity
15db0 3b 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e  ;   /* The affin
15dc0 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65  ity to be applie
15dd0 64 20 2a 2f 0a 20 20 63 68 61 72 20 63 41 66 66  d */.  char cAff
15de0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
15df0 2f 2a 20 41 20 73 69 6e 67 6c 65 20 63 68 61 72  /* A single char
15e00 61 63 74 65 72 20 6f 66 20 61 66 66 69 6e 69 74  acter of affinit
15e10 79 20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e 69 74  y */..  zAffinit
15e20 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  y = pOp->p4.z;. 
15e30 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69   assert( zAffini
15e40 74 79 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ty!=0 );.  asser
15e50 74 28 20 7a 41 66 66 69 6e 69 74 79 5b 70 4f 70  t( zAffinity[pOp
15e60 2d 3e 70 32 5d 3d 3d 30 20 29 3b 0a 20 20 70 49  ->p2]==0 );.  pI
15e70 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
15e80 70 31 5d 3b 0a 20 20 77 68 69 6c 65 28 20 28 63  p1];.  while( (c
15e90 41 66 66 20 3d 20 2a 28 7a 41 66 66 69 6e 69 74  Aff = *(zAffinit
15ea0 79 2b 2b 29 29 21 3d 30 20 29 7b 0a 20 20 20 20  y++))!=0 ){.    
15eb0 61 73 73 65 72 74 28 20 70 49 6e 31 20 3c 3d 20  assert( pIn1 <= 
15ec0 26 70 2d 3e 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65  &p->aMem[(p->nMe
15ed0 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
15ee0 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  )] );.    assert
15ef0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e  ( memIsValid(pIn
15f00 31 29 20 29 3b 0a 20 20 20 20 61 70 70 6c 79 41  1) );.    applyA
15f10 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 63 41  ffinity(pIn1, cA
15f20 66 66 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  ff, encoding);. 
15f30 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20     pIn1++;.  }. 
15f40 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
15f50 63 6f 64 65 3a 20 4d 61 6b 65 52 65 63 6f 72 64  code: MakeRecord
15f60 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
15f70 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
15f80 5d 3d 6d 6b 72 65 63 28 72 5b 50 31 40 50 32 5d  ]=mkrec(r[P1@P2]
15f90 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20  ).**.** Convert 
15fa0 50 32 20 72 65 67 69 73 74 65 72 73 20 62 65 67  P2 registers beg
15fb0 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 31 20 69  inning with P1 i
15fc0 6e 74 6f 20 74 68 65 20 5b 72 65 63 6f 72 64 20  nto the [record 
15fd0 66 6f 72 6d 61 74 5d 0a 2a 2a 20 75 73 65 20 61  format].** use a
15fe0 73 20 61 20 64 61 74 61 20 72 65 63 6f 72 64 20  s a data record 
15ff0 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 74 61  in a database ta
16000 62 6c 65 20 6f 72 20 61 73 20 61 20 6b 65 79 0a  ble or as a key.
16010 2a 2a 20 69 6e 20 61 6e 20 69 6e 64 65 78 2e 20  ** in an index. 
16020 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f   The OP_Column o
16030 70 63 6f 64 65 20 63 61 6e 20 64 65 63 6f 64 65  pcode can decode
16040 20 74 68 65 20 72 65 63 6f 72 64 20 6c 61 74 65   the record late
16050 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20  r..**.** P4 may 
16060 62 65 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  be a string that
16070 20 69 73 20 50 32 20 63 68 61 72 61 63 74 65 72   is P2 character
16080 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20 6e 74 68  s long.  The nth
16090 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68   character of th
160a0 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69  e.** string indi
160b0 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  cates the column
160c0 20 61 66 66 69 6e 69 74 79 20 74 68 61 74 20 73   affinity that s
160d0 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f  hould be used fo
160e0 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 66 69 65  r the nth.** fie
160f0 6c 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  ld of the index 
16100 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d  key..**.** The m
16110 61 70 70 69 6e 67 20 66 72 6f 6d 20 63 68 61 72  apping from char
16120 61 63 74 65 72 20 74 6f 20 61 66 66 69 6e 69 74  acter to affinit
16130 79 20 69 73 20 67 69 76 65 6e 20 62 79 20 74 68  y is given by th
16140 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a  e SQLITE_AFF_.**
16150 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20   macros defined 
16160 69 6e 20 73 71 6c 69 74 65 49 6e 74 2e 68 2e 0a  in sqliteInt.h..
16170 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 4e  **.** If P4 is N
16180 55 4c 4c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64  ULL then all ind
16190 65 78 20 66 69 65 6c 64 73 20 68 61 76 65 20 74  ex fields have t
161a0 68 65 20 61 66 66 69 6e 69 74 79 20 42 4c 4f 42  he affinity BLOB
161b0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 6b  ..*/.case OP_Mak
161c0 65 52 65 63 6f 72 64 3a 20 7b 0a 20 20 75 38 20  eRecord: {.  u8 
161d0 2a 7a 4e 65 77 52 65 63 6f 72 64 3b 20 20 20 20  *zNewRecord;    
161e0 20 20 20 20 2f 2a 20 41 20 62 75 66 66 65 72 20      /* A buffer 
161f0 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61  to hold the data
16200 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63   for the new rec
16210 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52  ord */.  Mem *pR
16220 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ec;             
16230 2f 2a 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72  /* The new recor
16240 64 20 2a 2f 0a 20 20 75 36 34 20 6e 44 61 74 61  d */.  u64 nData
16250 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
16260 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
16270 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a   of data space *
16280 2f 0a 20 20 69 6e 74 20 6e 48 64 72 3b 20 20 20  /.  int nHdr;   
16290 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
162a0 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
162b0 20 68 65 61 64 65 72 20 73 70 61 63 65 20 2a 2f   header space */
162c0 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 20 20 20  .  i64 nByte;   
162d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
162e0 61 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64  a space required
162f0 20 66 6f 72 20 74 68 69 73 20 72 65 63 6f 72 64   for this record
16300 20 2a 2f 0a 20 20 69 36 34 20 6e 5a 65 72 6f 3b   */.  i64 nZero;
16310 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16320 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62  Number of zero b
16330 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64 20  ytes at the end 
16340 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  of the record */
16350 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e 74 3b 20  .  int nVarint; 
16360 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
16370 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
16380 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20 20 75 33  a varint */.  u3
16390 32 20 73 65 72 69 61 6c 5f 74 79 70 65 3b 20 20  2 serial_type;  
163a0 20 20 20 20 20 2f 2a 20 54 79 70 65 20 66 69 65       /* Type fie
163b0 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 61  ld */.  Mem *pDa
163c0 74 61 30 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ta0;           /
163d0 2a 20 46 69 72 73 74 20 66 69 65 6c 64 20 74 6f  * First field to
163e0 20 62 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e 74   be combined int
163f0 6f 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  o the record */.
16400 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b 20 20 20    Mem *pLast;   
16410 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74           /* Last
16420 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 72 65   field of the re
16430 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 46  cord */.  int nF
16440 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20  ield;           
16450 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69   /* Number of fi
16460 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f  elds in the reco
16470 72 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41  rd */.  char *zA
16480 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 2f  ffinity;       /
16490 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 73  * The affinity s
164a0 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20 72 65  tring for the re
164b0 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 66 69  cord */.  int fi
164c0 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20  le_format;      
164d0 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d 61 74 20   /* File format 
164e0 74 6f 20 75 73 65 20 66 6f 72 20 65 6e 63 6f 64  to use for encod
164f0 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20  ing */.  int i; 
16500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16510 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20 69 6e  /* Space used in
16520 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20 68 65   zNewRecord[] he
16530 61 64 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b  ader */.  int j;
16540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16550 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20 69   /* Space used i
16560 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20 63  n zNewRecord[] c
16570 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 75 33 32 20  ontent */.  u32 
16580 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  len;            
16590 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20     /* Length of 
165a0 61 20 66 69 65 6c 64 20 2a 2f 0a 0a 20 20 2f 2a  a field */..  /*
165b0 20 41 73 73 75 6d 69 6e 67 20 74 68 65 20 72 65   Assuming the re
165c0 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20 4e 20  cord contains N 
165d0 66 69 65 6c 64 73 2c 20 74 68 65 20 72 65 63 6f  fields, the reco
165e0 72 64 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a  rd format looks.
165f0 20 20 2a 2a 20 6c 69 6b 65 20 74 68 69 73 3a 0a    ** like this:.
16600 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d    **.  ** ------
16610 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16620 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16630 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16640 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16650 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64 72 2d 73 69  --.  ** | hdr-si
16660 7a 65 20 7c 20 74 79 70 65 20 30 20 7c 20 74 79  ze | type 0 | ty
16670 70 65 20 31 20 7c 20 2e 2e 2e 20 7c 20 74 79 70  pe 1 | ... | typ
16680 65 20 4e 2d 31 20 7c 20 64 61 74 61 30 20 7c 20  e N-1 | data0 | 
16690 2e 2e 2e 20 7c 20 64 61 74 61 20 4e 2d 31 20 7c  ... | data N-1 |
166a0 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d   .  ** ---------
166b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
166c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
166d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
166e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
166f0 20 20 2a 2a 0a 20 20 2a 2a 20 44 61 74 61 28 30    **.  ** Data(0
16700 29 20 69 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20  ) is taken from 
16710 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 44 61  register P1.  Da
16720 74 61 28 31 29 20 63 6f 6d 65 73 20 66 72 6f 6d  ta(1) comes from
16730 20 72 65 67 69 73 74 65 72 20 50 31 2b 31 0a 20   register P1+1. 
16740 20 2a 2a 20 61 6e 64 20 73 6f 20 66 6f 72 74 68   ** and so forth
16750 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45 61 63 68  ..  **.  ** Each
16760 20 74 79 70 65 20 66 69 65 6c 64 20 69 73 20 61   type field is a
16770 20 76 61 72 69 6e 74 20 72 65 70 72 65 73 65 6e   varint represen
16780 74 69 6e 67 20 74 68 65 20 73 65 72 69 61 6c 20  ting the serial 
16790 74 79 70 65 20 6f 66 20 74 68 65 20 0a 20 20 2a  type of the .  *
167a0 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  * corresponding 
167b0 64 61 74 61 20 65 6c 65 6d 65 6e 74 20 28 73 65  data element (se
167c0 65 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  e sqlite3VdbeSer
167d0 69 61 6c 54 79 70 65 28 29 29 2e 20 54 68 65 0a  ialType()). The.
167e0 20 20 2a 2a 20 68 64 72 2d 73 69 7a 65 20 66 69    ** hdr-size fi
167f0 65 6c 64 20 69 73 20 61 6c 73 6f 20 61 20 76 61  eld is also a va
16800 72 69 6e 74 20 77 68 69 63 68 20 69 73 20 74 68  rint which is th
16810 65 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68  e offset from th
16820 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a  e beginning.  **
16830 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 74   of the record t
16840 6f 20 64 61 74 61 30 2e 0a 20 20 2a 2f 0a 20 20  o data0..  */.  
16850 6e 44 61 74 61 20 3d 20 30 3b 20 20 20 20 20 20  nData = 0;      
16860 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
16870 62 79 74 65 73 20 6f 66 20 64 61 74 61 20 73 70  bytes of data sp
16880 61 63 65 20 2a 2f 0a 20 20 6e 48 64 72 20 3d 20  ace */.  nHdr = 
16890 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  0;          /* N
168a0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
168b0 66 20 68 65 61 64 65 72 20 73 70 61 63 65 20 2a  f header space *
168c0 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 20 20  /.  nZero = 0;  
168d0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
168e0 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20 61   of zero bytes a
168f0 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
16900 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 6e 46 69   record */.  nFi
16910 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  eld = pOp->p1;. 
16920 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70   zAffinity = pOp
16930 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74  ->p4.z;.  assert
16940 28 20 6e 46 69 65 6c 64 3e 30 20 26 26 20 70 4f  ( nField>0 && pO
16950 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p2>0 && pOp->
16960 70 32 2b 6e 46 69 65 6c 64 3c 3d 28 70 2d 3e 6e  p2+nField<=(p->n
16970 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
16980 6f 72 29 2b 31 20 29 3b 0a 20 20 70 44 61 74 61  or)+1 );.  pData
16990 30 20 3d 20 26 61 4d 65 6d 5b 6e 46 69 65 6c 64  0 = &aMem[nField
169a0 5d 3b 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f  ];.  nField = pO
169b0 70 2d 3e 70 32 3b 0a 20 20 70 4c 61 73 74 20 3d  p->p2;.  pLast =
169c0 20 26 70 44 61 74 61 30 5b 6e 46 69 65 6c 64 2d   &pData0[nField-
169d0 31 5d 3b 0a 20 20 66 69 6c 65 5f 66 6f 72 6d 61  1];.  file_forma
169e0 74 20 3d 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46  t = p->minWriteF
169f0 69 6c 65 46 6f 72 6d 61 74 3b 0a 0a 20 20 2f 2a  ileFormat;..  /*
16a00 20 49 64 65 6e 74 69 66 79 20 74 68 65 20 6f 75   Identify the ou
16a10 74 70 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f  tput register */
16a20 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
16a30 70 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f  p3<pOp->p1 || pO
16a40 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70  p->p3>=pOp->p1+p
16a50 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 70 4f 75 74  Op->p2 );.  pOut
16a60 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
16a70 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
16a80 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
16a90 0a 20 20 2f 2a 20 41 70 70 6c 79 20 74 68 65 20  .  /* Apply the 
16aa0 72 65 71 75 65 73 74 65 64 20 61 66 66 69 6e 69  requested affini
16ab0 74 79 20 74 6f 20 61 6c 6c 20 69 6e 70 75 74 73  ty to all inputs
16ac0 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
16ad0 70 44 61 74 61 30 3c 3d 70 4c 61 73 74 20 29 3b  pData0<=pLast );
16ae0 0a 20 20 69 66 28 20 7a 41 66 66 69 6e 69 74 79  .  if( zAffinity
16af0 20 29 7b 0a 20 20 20 20 70 52 65 63 20 3d 20 70   ){.    pRec = p
16b00 44 61 74 61 30 3b 0a 20 20 20 20 64 6f 7b 0a 20  Data0;.    do{. 
16b10 20 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69       applyAffini
16b20 74 79 28 70 52 65 63 2b 2b 2c 20 2a 28 7a 41 66  ty(pRec++, *(zAf
16b30 66 69 6e 69 74 79 2b 2b 29 2c 20 65 6e 63 6f 64  finity++), encod
16b40 69 6e 67 29 3b 0a 20 20 20 20 20 20 61 73 73 65  ing);.      asse
16b50 72 74 28 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d  rt( zAffinity[0]
16b60 3d 3d 30 20 7c 7c 20 70 52 65 63 3c 3d 70 4c 61  ==0 || pRec<=pLa
16b70 73 74 20 29 3b 0a 20 20 20 20 7d 77 68 69 6c 65  st );.    }while
16b80 28 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d 20 29  ( zAffinity[0] )
16b90 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4c 6f 6f 70  ;.  }..  /* Loop
16ba0 20 74 68 72 6f 75 67 68 20 74 68 65 20 65 6c 65   through the ele
16bb0 6d 65 6e 74 73 20 74 68 61 74 20 77 69 6c 6c 20  ments that will 
16bc0 6d 61 6b 65 20 75 70 20 74 68 65 20 72 65 63 6f  make up the reco
16bd0 72 64 20 74 6f 20 66 69 67 75 72 65 0a 20 20 2a  rd to figure.  *
16be0 2a 20 6f 75 74 20 68 6f 77 20 6d 75 63 68 20 73  * out how much s
16bf0 70 61 63 65 20 69 73 20 72 65 71 75 69 72 65 64  pace is required
16c00 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63   for the new rec
16c10 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20 70 52 65 63  ord..  */.  pRec
16c20 20 3d 20 70 4c 61 73 74 3b 0a 20 20 64 6f 7b 0a   = pLast;.  do{.
16c30 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
16c40 73 56 61 6c 69 64 28 70 52 65 63 29 20 29 3b 0a  sValid(pRec) );.
16c50 20 20 20 20 70 52 65 63 2d 3e 75 54 65 6d 70 20      pRec->uTemp 
16c60 3d 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20  = serial_type = 
16c70 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
16c80 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c 65  lType(pRec, file
16c90 5f 66 6f 72 6d 61 74 2c 20 26 6c 65 6e 29 3b 0a  _format, &len);.
16ca0 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c      if( pRec->fl
16cb0 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29  ags & MEM_Zero )
16cc0 7b 0a 20 20 20 20 20 20 69 66 28 20 6e 44 61 74  {.      if( nDat
16cd0 61 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  a ){.        if(
16ce0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45   sqlite3VdbeMemE
16cf0 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63 29 20  xpandBlob(pRec) 
16d00 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
16d10 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
16d20 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65      nZero += pRe
16d30 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20  c->u.nZero;.    
16d40 20 20 20 20 6c 65 6e 20 2d 3d 20 70 52 65 63 2d      len -= pRec-
16d50 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20  >u.nZero;.      
16d60 7d 0a 20 20 20 20 7d 0a 20 20 20 20 6e 44 61 74  }.    }.    nDat
16d70 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20 74 65  a += len;.    te
16d80 73 74 63 61 73 65 28 20 73 65 72 69 61 6c 5f 74  stcase( serial_t
16d90 79 70 65 3d 3d 31 32 37 20 29 3b 0a 20 20 20 20  ype==127 );.    
16da0 74 65 73 74 63 61 73 65 28 20 73 65 72 69 61 6c  testcase( serial
16db0 5f 74 79 70 65 3d 3d 31 32 38 20 29 3b 0a 20 20  _type==128 );.  
16dc0 20 20 6e 48 64 72 20 2b 3d 20 73 65 72 69 61 6c    nHdr += serial
16dd0 5f 74 79 70 65 3c 3d 31 32 37 20 3f 20 31 20 3a  _type<=127 ? 1 :
16de0 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65   sqlite3VarintLe
16df0 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a  n(serial_type);.
16e00 20 20 20 20 69 66 28 20 70 52 65 63 3d 3d 70 44      if( pRec==pD
16e10 61 74 61 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  ata0 ) break;.  
16e20 20 20 70 52 65 63 2d 2d 3b 0a 20 20 7d 77 68 69    pRec--;.  }whi
16e30 6c 65 28 31 29 3b 0a 0a 20 20 2f 2a 20 45 56 49  le(1);..  /* EVI
16e40 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 32 35 36  DENCE-OF: R-2256
16e50 34 2d 31 31 36 34 37 20 54 68 65 20 68 65 61 64  4-11647 The head
16e60 65 72 20 62 65 67 69 6e 73 20 77 69 74 68 20 61  er begins with a
16e70 20 73 69 6e 67 6c 65 20 76 61 72 69 6e 74 0a 20   single varint. 
16e80 20 2a 2a 20 77 68 69 63 68 20 64 65 74 65 72 6d   ** which determ
16e90 69 6e 65 73 20 74 68 65 20 74 6f 74 61 6c 20 6e  ines the total n
16ea0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
16eb0 6e 20 74 68 65 20 68 65 61 64 65 72 2e 20 54 68  n the header. Th
16ec0 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 76 61  e varint.  ** va
16ed0 6c 75 65 20 69 73 20 74 68 65 20 73 69 7a 65 20  lue is the size 
16ee0 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 69 6e  of the header in
16ef0 20 62 79 74 65 73 20 69 6e 63 6c 75 64 69 6e 67   bytes including
16f00 20 74 68 65 20 73 69 7a 65 20 76 61 72 69 6e 74   the size varint
16f10 0a 20 20 2a 2a 20 69 74 73 65 6c 66 2e 20 2a 2f  .  ** itself. */
16f20 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 48 64  .  testcase( nHd
16f30 72 3d 3d 31 32 36 20 29 3b 0a 20 20 74 65 73 74  r==126 );.  test
16f40 63 61 73 65 28 20 6e 48 64 72 3d 3d 31 32 37 20  case( nHdr==127 
16f50 29 3b 0a 20 20 69 66 28 20 6e 48 64 72 3c 3d 31  );.  if( nHdr<=1
16f60 32 36 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65  26 ){.    /* The
16f70 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 2a 2f 0a   common case */.
16f80 20 20 20 20 6e 48 64 72 20 2b 3d 20 31 3b 0a 20      nHdr += 1;. 
16f90 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 52   }else{.    /* R
16fa0 61 72 65 20 63 61 73 65 20 6f 66 20 61 20 72 65  are case of a re
16fb0 61 6c 6c 79 20 6c 61 72 67 65 20 68 65 61 64 65  ally large heade
16fc0 72 20 2a 2f 0a 20 20 20 20 6e 56 61 72 69 6e 74  r */.    nVarint
16fd0 20 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74   = sqlite3Varint
16fe0 4c 65 6e 28 6e 48 64 72 29 3b 0a 20 20 20 20 6e  Len(nHdr);.    n
16ff0 48 64 72 20 2b 3d 20 6e 56 61 72 69 6e 74 3b 0a  Hdr += nVarint;.
17000 20 20 20 20 69 66 28 20 6e 56 61 72 69 6e 74 3c      if( nVarint<
17010 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
17020 28 6e 48 64 72 29 20 29 20 6e 48 64 72 2b 2b 3b  (nHdr) ) nHdr++;
17030 0a 20 20 7d 0a 20 20 6e 42 79 74 65 20 3d 20 6e  .  }.  nByte = n
17040 48 64 72 2b 6e 44 61 74 61 3b 0a 20 20 69 66 28  Hdr+nData;.  if(
17050 20 6e 42 79 74 65 2b 6e 5a 65 72 6f 3e 64 62 2d   nByte+nZero>db-
17060 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
17070 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
17080 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
17090 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65  ;.  }..  /* Make
170a0 20 73 75 72 65 20 74 68 65 20 6f 75 74 70 75 74   sure the output
170b0 20 72 65 67 69 73 74 65 72 20 68 61 73 20 61 20   register has a 
170c0 62 75 66 66 65 72 20 6c 61 72 67 65 20 65 6e 6f  buffer large eno
170d0 75 67 68 20 74 6f 20 73 74 6f 72 65 20 0a 20 20  ugh to store .  
170e0 2a 2a 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72  ** the new recor
170f0 64 2e 20 54 68 65 20 6f 75 74 70 75 74 20 72 65  d. The output re
17100 67 69 73 74 65 72 20 28 70 4f 70 2d 3e 70 33 29  gister (pOp->p3)
17110 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20   is not allowed 
17120 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20 6f  to.  ** be one o
17130 66 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69  f the input regi
17140 73 74 65 72 73 20 28 62 65 63 61 75 73 65 20 74  sters (because t
17150 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c  he following cal
17160 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65  l to.  ** sqlite
17170 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64  3VdbeMemClearAnd
17180 52 65 73 69 7a 65 28 29 20 63 6f 75 6c 64 20 63  Resize() could c
17190 6c 6f 62 62 65 72 20 74 68 65 20 76 61 6c 75 65  lobber the value
171a0 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 75 73   before it is us
171b0 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ed)..  */.  if( 
171c0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c  sqlite3VdbeMemCl
171d0 65 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4f 75  earAndResize(pOu
171e0 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 29 20 29  t, (int)nByte) )
171f0 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
17200 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65 77 52 65 63  m;.  }.  zNewRec
17210 6f 72 64 20 3d 20 28 75 38 20 2a 29 70 4f 75 74  ord = (u8 *)pOut
17220 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72 69 74 65  ->z;..  /* Write
17230 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
17240 20 69 20 3d 20 70 75 74 56 61 72 69 6e 74 33 32   i = putVarint32
17250 28 7a 4e 65 77 52 65 63 6f 72 64 2c 20 6e 48 64  (zNewRecord, nHd
17260 72 29 3b 0a 20 20 6a 20 3d 20 6e 48 64 72 3b 0a  r);.  j = nHdr;.
17270 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61 30    assert( pData0
17280 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 70 52 65  <=pLast );.  pRe
17290 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20 64 6f  c = pData0;.  do
172a0 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70  {.    serial_typ
172b0 65 20 3d 20 70 52 65 63 2d 3e 75 54 65 6d 70 3b  e = pRec->uTemp;
172c0 0a 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45  .    /* EVIDENCE
172d0 2d 4f 46 3a 20 52 2d 30 36 35 32 39 2d 34 37 33  -OF: R-06529-473
172e0 36 32 20 46 6f 6c 6c 6f 77 69 6e 67 20 74 68 65  62 Following the
172f0 20 73 69 7a 65 20 76 61 72 69 6e 74 20 61 72 65   size varint are
17300 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a 20 20 20   one or more.   
17310 20 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 76   ** additional v
17320 61 72 69 6e 74 73 2c 20 6f 6e 65 20 70 65 72 20  arints, one per 
17330 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 20 20 69  column. */.    i
17340 20 2b 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28   += putVarint32(
17350 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c 20  &zNewRecord[i], 
17360 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 20 20  serial_type);   
17370 20 20 20 20 20 20 20 20 20 2f 2a 20 73 65 72 69           /* seri
17380 61 6c 20 74 79 70 65 20 2a 2f 0a 20 20 20 20 2f  al type */.    /
17390 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  * EVIDENCE-OF: R
173a0 2d 36 34 35 33 36 2d 35 31 37 32 38 20 54 68 65  -64536-51728 The
173b0 20 76 61 6c 75 65 73 20 66 6f 72 20 65 61 63 68   values for each
173c0 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 72   column in the r
173d0 65 63 6f 72 64 0a 20 20 20 20 2a 2a 20 69 6d 6d  ecord.    ** imm
173e0 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20  ediately follow 
173f0 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20  the header. */. 
17400 20 20 20 6a 20 2b 3d 20 73 71 6c 69 74 65 33 56     j += sqlite3V
17410 64 62 65 53 65 72 69 61 6c 50 75 74 28 26 7a 4e  dbeSerialPut(&zN
17420 65 77 52 65 63 6f 72 64 5b 6a 5d 2c 20 70 52 65  ewRecord[j], pRe
17430 63 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b  c, serial_type);
17440 20 2f 2a 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20   /* content */. 
17450 20 7d 77 68 69 6c 65 28 20 28 2b 2b 70 52 65 63   }while( (++pRec
17460 29 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 61 73  )<=pLast );.  as
17470 73 65 72 74 28 20 69 3d 3d 6e 48 64 72 20 29 3b  sert( i==nHdr );
17480 0a 20 20 61 73 73 65 72 74 28 20 6a 3d 3d 6e 42  .  assert( j==nB
17490 79 74 65 20 29 3b 0a 0a 20 20 61 73 73 65 72 74  yte );..  assert
174a0 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
174b0 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
174c0 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
174d0 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20   );.  pOut->n = 
174e0 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f  (int)nByte;.  pO
174f0 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
17500 42 6c 6f 62 3b 0a 20 20 69 66 28 20 6e 5a 65 72  Blob;.  if( nZer
17510 6f 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  o ){.    pOut->u
17520 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a  .nZero = nZero;.
17530 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
17540 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d  |= MEM_Zero;.  }
17550 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53  .  pOut->enc = S
17560 51 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20  QLITE_UTF8;  /* 
17570 49 6e 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62  In case the blob
17580 20 69 73 20 65 76 65 72 20 63 6f 6e 76 65 72 74   is ever convert
17590 65 64 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20  ed to text */.  
175a0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
175b0 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20  Op->p3, pOut);. 
175c0 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
175d0 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72  SIZE(pOut);.  br
175e0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
175f0 65 3a 20 43 6f 75 6e 74 20 50 31 20 50 32 20 2a  e: Count P1 P2 *
17600 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
17610 3a 20 72 5b 50 32 5d 3d 63 6f 75 6e 74 28 29 0a  : r[P2]=count().
17620 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20  **.** Store the 
17630 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  number of entrie
17640 73 20 28 61 6e 20 69 6e 74 65 67 65 72 20 76 61  s (an integer va
17650 6c 75 65 29 20 69 6e 20 74 68 65 20 74 61 62 6c  lue) in the tabl
17660 65 20 6f 72 20 69 6e 64 65 78 20 0a 2a 2a 20 6f  e or index .** o
17670 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72 20  pened by cursor 
17680 50 31 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  P1 in register P
17690 32 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  2.*/.#ifndef SQL
176a0 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f  ITE_OMIT_BTREECO
176b0 55 4e 54 0a 63 61 73 65 20 4f 50 5f 43 6f 75 6e  UNT.case OP_Coun
176c0 74 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20  t: {         /* 
176d0 6f 75 74 32 20 2a 2f 0a 20 20 69 36 34 20 6e 45  out2 */.  i64 nE
176e0 6e 74 72 79 3b 0a 20 20 42 74 43 75 72 73 6f 72  ntry;.  BtCursor
176f0 20 2a 70 43 72 73 72 3b 0a 0a 20 20 61 73 73 65   *pCrsr;..  asse
17700 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  rt( p->apCsr[pOp
17710 2d 3e 70 31 5d 2d 3e 65 43 75 72 54 79 70 65 3d  ->p1]->eCurType=
17720 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
17730 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 2d 3e 61  ;.  pCrsr = p->a
17740 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 75  pCsr[pOp->p1]->u
17750 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73  c.pCursor;.  ass
17760 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20  ert( pCrsr );.  
17770 6e 45 6e 74 72 79 20 3d 20 30 3b 20 20 2f 2a 20  nEntry = 0;  /* 
17780 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c  Not needed.  Onl
17790 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63  y used to silenc
177a0 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  e a warning. */.
177b0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
177c0 72 65 65 43 6f 75 6e 74 28 70 43 72 73 72 2c 20  reeCount(pCrsr, 
177d0 26 6e 45 6e 74 72 79 29 3b 0a 20 20 69 66 28 20  &nEntry);.  if( 
177e0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
177f0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
17800 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
17810 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
17820 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e   pOut->u.i = nEn
17830 74 72 79 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  try;.  break;.}.
17840 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64  #endif../* Opcod
17850 65 3a 20 53 61 76 65 70 6f 69 6e 74 20 50 31 20  e: Savepoint P1 
17860 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f  * * P4 *.**.** O
17870 70 65 6e 2c 20 72 65 6c 65 61 73 65 20 6f 72 20  pen, release or 
17880 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 73 61 76  rollback the sav
17890 65 70 6f 69 6e 74 20 6e 61 6d 65 64 20 62 79 20  epoint named by 
178a0 70 61 72 61 6d 65 74 65 72 20 50 34 2c 20 64 65  parameter P4, de
178b0 70 65 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68  pending.** on th
178c0 65 20 76 61 6c 75 65 20 6f 66 20 50 31 2e 20 54  e value of P1. T
178d0 6f 20 6f 70 65 6e 20 61 20 6e 65 77 20 73 61 76  o open a new sav
178e0 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54  epoint, P1==0. T
178f0 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69  o release (commi
17900 74 29 20 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e  t) an.** existin
17910 67 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d  g savepoint, P1=
17920 3d 31 2c 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61  =1, or to rollba
17930 63 6b 20 61 6e 20 65 78 69 73 74 69 6e 67 20 73  ck an existing s
17940 61 76 65 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a  avepoint P1==2..
17950 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 61 76 65 70  */.case OP_Savep
17960 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31  oint: {.  int p1
17970 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
17980 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
17990 75 65 20 6f 66 20 50 31 20 6f 70 65 72 61 6e 64  ue of P1 operand
179a0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d   */.  char *zNam
179b0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
179c0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
179d0 20 73 61 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20   savepoint */.  
179e0 69 6e 74 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76  int nName;.  Sav
179f0 65 70 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20  epoint *pNew;.  
17a00 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65  Savepoint *pSave
17a10 70 6f 69 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69  point;.  Savepoi
17a20 6e 74 20 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20  nt *pTmp;.  int 
17a30 69 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e  iSavepoint;.  in
17a40 74 20 69 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f  t ii;..  p1 = pO
17a50 70 2d 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d  p->p1;.  zName =
17a60 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f   pOp->p4.z;..  /
17a70 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68  * Assert that th
17a80 65 20 70 31 20 70 61 72 61 6d 65 74 65 72 20 69  e p1 parameter i
17a90 73 20 76 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68  s valid. Also th
17aa0 61 74 20 69 66 20 74 68 65 72 65 20 69 73 20 6e  at if there is n
17ab0 6f 20 6f 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e  o open.  ** tran
17ac0 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68  saction, then th
17ad0 65 72 65 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e  ere cannot be an
17ae0 79 20 73 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20  y savepoints. . 
17af0 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62   */.  assert( db
17b00 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20  ->pSavepoint==0 
17b10 7c 7c 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  || db->autoCommi
17b20 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  t==0 );.  assert
17b30 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
17b40 42 45 47 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50  BEGIN||p1==SAVEP
17b50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31  OINT_RELEASE||p1
17b60 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  ==SAVEPOINT_ROLL
17b70 42 41 43 4b 20 29 3b 0a 20 20 61 73 73 65 72 74  BACK );.  assert
17b80 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  ( db->pSavepoint
17b90 20 7c 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73 61   || db->isTransa
17ba0 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d  ctionSavepoint==
17bb0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 63  0 );.  assert( c
17bc0 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75  heckSavepointCou
17bd0 6e 74 28 64 62 29 20 29 3b 0a 20 20 61 73 73 65  nt(db) );.  asse
17be0 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
17bf0 20 29 3b 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53   );..  if( p1==S
17c00 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29  AVEPOINT_BEGIN )
17c10 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 56  {.    if( db->nV
17c20 64 62 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20  dbeWrite>0 ){.  
17c30 20 20 20 20 2f 2a 20 41 20 6e 65 77 20 73 61 76      /* A new sav
17c40 65 70 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65  epoint cannot be
17c50 20 63 72 65 61 74 65 64 20 69 66 20 74 68 65 72   created if ther
17c60 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69  e are active wri
17c70 74 65 20 0a 20 20 20 20 20 20 2a 2a 20 73 74 61  te .      ** sta
17c80 74 65 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70  tements (i.e. op
17c90 65 6e 20 72 65 61 64 2f 77 72 69 74 65 20 69 6e  en read/write in
17ca0 63 72 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68  cremental blob h
17cb0 61 6e 64 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a  andles)..      *
17cc0 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  /.      sqlite3V
17cd0 64 62 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e  dbeError(p, "can
17ce0 6e 6f 74 20 6f 70 65 6e 20 73 61 76 65 70 6f 69  not open savepoi
17cf0 6e 74 20 2d 20 53 51 4c 20 73 74 61 74 65 6d 65  nt - SQL stateme
17d00 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22  nts in progress"
17d10 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  );.      rc = SQ
17d20 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d  LITE_BUSY;.    }
17d30 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4e 61 6d  else{.      nNam
17d40 65 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65  e = sqlite3Strle
17d50 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a 0a 23 69 66  n30(zName);..#if
17d60 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
17d70 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
17d80 20 20 20 20 2f 2a 20 54 68 69 73 20 63 61 6c 6c      /* This call
17d90 20 69 73 20 4f 6b 20 65 76 65 6e 20 69 66 20 74   is Ok even if t
17da0 68 69 73 20 73 61 76 65 70 6f 69 6e 74 20 69 73  his savepoint is
17db0 20 61 63 74 75 61 6c 6c 79 20 61 20 74 72 61 6e   actually a tran
17dc0 73 61 63 74 69 6f 6e 0a 20 20 20 20 20 20 2a 2a  saction.      **
17dd0 20 73 61 76 65 70 6f 69 6e 74 20 28 61 6e 64 20   savepoint (and 
17de0 74 68 65 72 65 66 6f 72 65 20 73 68 6f 75 6c 64  therefore should
17df0 20 6e 6f 74 20 70 72 6f 6d 70 74 20 78 53 61 76   not prompt xSav
17e00 65 70 6f 69 6e 74 28 29 29 20 63 61 6c 6c 62 61  epoint()) callba
17e10 63 6b 73 2e 0a 20 20 20 20 20 20 2a 2a 20 49 66  cks..      ** If
17e20 20 74 68 69 73 20 69 73 20 61 20 74 72 61 6e 73   this is a trans
17e30 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
17e40 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2c 20 69   being opened, i
17e50 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 0a  t is guaranteed.
17e60 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68        ** that th
17e70 65 20 64 62 2d 3e 61 56 54 72 61 6e 73 5b 5d 20  e db->aVTrans[] 
17e80 61 72 72 61 79 20 69 73 20 65 6d 70 74 79 2e 20  array is empty. 
17e90 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
17ea0 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  ( db->autoCommit
17eb0 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 54 72 61  ==0 || db->nVTra
17ec0 6e 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 72  ns==0 );.      r
17ed0 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53  c = sqlite3VtabS
17ee0 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53 41 56  avepoint(db, SAV
17ef0 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 0a 20 20  EPOINT_BEGIN,.  
17f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 62                db
17f20 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 64 62 2d  ->nStatement+db-
17f30 3e 6e 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20  >nSavepoint);.  
17f40 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
17f50 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
17f60 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
17f70 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 2f  .#endif..      /
17f80 2a 20 43 72 65 61 74 65 20 61 20 6e 65 77 20 73  * Create a new s
17f90 61 76 65 70 6f 69 6e 74 20 73 74 72 75 63 74 75  avepoint structu
17fa0 72 65 2e 20 2a 2f 0a 20 20 20 20 20 20 70 4e 65  re. */.      pNe
17fb0 77 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  w = sqlite3DbMal
17fc0 6c 6f 63 52 61 77 4e 4e 28 64 62 2c 20 73 69 7a  locRawNN(db, siz
17fd0 65 6f 66 28 53 61 76 65 70 6f 69 6e 74 29 2b 6e  eof(Savepoint)+n
17fe0 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 20 20 69  Name+1);.      i
17ff0 66 28 20 70 4e 65 77 20 29 7b 0a 20 20 20 20 20  f( pNew ){.     
18000 20 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d     pNew->zName =
18010 20 28 63 68 61 72 20 2a 29 26 70 4e 65 77 5b 31   (char *)&pNew[1
18020 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 63 70  ];.        memcp
18030 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a  y(pNew->zName, z
18040 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a  Name, nName+1);.
18050 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20      .        /* 
18060 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f  If there is no o
18070 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  pen transaction,
18080 20 74 68 65 6e 20 6d 61 72 6b 20 74 68 69 73 20   then mark this 
18090 61 73 20 61 20 73 70 65 63 69 61 6c 0a 20 20 20  as a special.   
180a0 20 20 20 20 20 2a 2a 20 22 74 72 61 6e 73 61 63       ** "transac
180b0 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 22 2e  tion savepoint".
180c0 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
180d0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29  db->autoCommit )
180e0 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  {.          db->
180f0 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a  autoCommit = 0;.
18100 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73            db->is
18110 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
18120 6f 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20 20  oint = 1;.      
18130 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
18140 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e     db->nSavepoin
18150 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a  t++;.        }..
18160 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 20          /* Link 
18170 74 68 65 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  the new savepoin
18180 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62  t into the datab
18190 61 73 65 20 68 61 6e 64 6c 65 27 73 20 6c 69 73  ase handle's lis
181a0 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 4e  t. */.        pN
181b0 65 77 2d 3e 70 4e 65 78 74 20 3d 20 64 62 2d 3e  ew->pNext = db->
181c0 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20  pSavepoint;.    
181d0 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69      db->pSavepoi
181e0 6e 74 20 3d 20 70 4e 65 77 3b 0a 20 20 20 20 20  nt = pNew;.     
181f0 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72     pNew->nDeferr
18200 65 64 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65  edCons = db->nDe
18210 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20  ferredCons;.    
18220 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72      pNew->nDefer
18230 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d  redImmCons = db-
18240 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
18250 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  s;.      }.    }
18260 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 53  .  }else{.    iS
18270 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20  avepoint = 0;.. 
18280 20 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 6e     /* Find the n
18290 61 6d 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20  amed savepoint. 
182a0 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73  If there is no s
182b0 75 63 68 20 73 61 76 65 70 6f 69 6e 74 2c 20 74  uch savepoint, t
182c0 68 65 6e 20 61 6e 0a 20 20 20 20 2a 2a 20 61 6e  hen an.    ** an
182d0 20 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e   error is return
182e0 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20  ed to the user. 
182f0 20 2a 2f 0a 20 20 20 20 66 6f 72 28 0a 20 20 20   */.    for(.   
18300 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20     pSavepoint = 
18310 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20  db->pSavepoint; 
18320 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e  .      pSavepoin
18330 74 20 26 26 20 73 71 6c 69 74 65 33 53 74 72 49  t && sqlite3StrI
18340 43 6d 70 28 70 53 61 76 65 70 6f 69 6e 74 2d 3e  Cmp(pSavepoint->
18350 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20  zName, zName);. 
18360 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20       pSavepoint 
18370 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e  = pSavepoint->pN
18380 65 78 74 0a 20 20 20 20 29 7b 0a 20 20 20 20 20  ext.    ){.     
18390 20 69 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20   iSavepoint++;. 
183a0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 21 70 53     }.    if( !pS
183b0 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20  avepoint ){.    
183c0 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
183d0 6f 72 28 70 2c 20 22 6e 6f 20 73 75 63 68 20 73  or(p, "no such s
183e0 61 76 65 70 6f 69 6e 74 3a 20 25 73 22 2c 20 7a  avepoint: %s", z
183f0 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 72 63 20  Name);.      rc 
18400 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
18410 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 64 62      }else if( db
18420 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20 26  ->nVdbeWrite>0 &
18430 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  & p1==SAVEPOINT_
18440 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20  RELEASE ){.     
18450 20 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20 70 6f   /* It is not po
18460 73 73 69 62 6c 65 20 74 6f 20 72 65 6c 65 61 73  ssible to releas
18470 65 20 28 63 6f 6d 6d 69 74 29 20 61 20 73 61 76  e (commit) a sav
18480 65 70 6f 69 6e 74 20 69 66 20 74 68 65 72 65 20  epoint if there 
18490 61 72 65 20 0a 20 20 20 20 20 20 2a 2a 20 61 63  are .      ** ac
184a0 74 69 76 65 20 77 72 69 74 65 20 73 74 61 74 65  tive write state
184b0 6d 65 6e 74 73 2e 0a 20 20 20 20 20 20 2a 2f 0a  ments..      */.
184c0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
184d0 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f  eError(p, "canno
184e0 74 20 72 65 6c 65 61 73 65 20 73 61 76 65 70 6f  t release savepo
184f0 69 6e 74 20 2d 20 22 0a 20 20 20 20 20 20 20 20  int - ".        
18500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18510 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74    "SQL statement
18520 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b  s in progress");
18530 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
18540 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c  TE_BUSY;.    }el
18550 73 65 7b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 65  se{..      /* De
18560 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
18570 6f 72 20 6e 6f 74 20 74 68 69 73 20 69 73 20 61  or not this is a
18580 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76   transaction sav
18590 65 70 6f 69 6e 74 2e 20 49 66 20 73 6f 2c 0a 20  epoint. If so,. 
185a0 20 20 20 20 20 2a 2a 20 61 6e 64 20 74 68 69 73       ** and this
185b0 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 63 6f   is a RELEASE co
185c0 6d 6d 61 6e 64 2c 20 74 68 65 6e 20 74 68 65 20  mmand, then the 
185d0 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74  current transact
185e0 69 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 69 73  ion .      ** is
185f0 20 63 6f 6d 6d 69 74 74 65 64 2e 20 0a 20 20 20   committed. .   
18600 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20     */.      int 
18610 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20  isTransaction = 
18620 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78  pSavepoint->pNex
18630 74 3d 3d 30 20 26 26 20 64 62 2d 3e 69 73 54 72  t==0 && db->isTr
18640 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
18650 6e 74 3b 0a 20 20 20 20 20 20 69 66 28 20 69 73  nt;.      if( is
18660 54 72 61 6e 73 61 63 74 69 6f 6e 20 26 26 20 70  Transaction && p
18670 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  1==SAVEPOINT_REL
18680 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20  EASE ){.        
18690 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65  if( (rc = sqlite
186a0 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20  3VdbeCheckFk(p, 
186b0 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  1))!=SQLITE_OK )
186c0 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  {.          goto
186d0 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
186e0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
186f0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
18700 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   1;.        if( 
18710 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28  sqlite3VdbeHalt(
18720 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  p)==SQLITE_BUSY 
18730 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e  ){.          p->
18740 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d  pc = (int)(pOp -
18750 20 61 4f 70 29 3b 0a 20 20 20 20 20 20 20 20 20   aOp);.         
18760 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
18770 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 70  = 0;.          p
18780 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49  ->rc = rc = SQLI
18790 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20  TE_BUSY;.       
187a0 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
187b0 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  urn;.        }. 
187c0 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61         db->isTra
187d0 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
187e0 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 72  t = 0;.        r
187f0 63 20 3d 20 70 2d 3e 72 63 3b 0a 20 20 20 20 20  c = p->rc;.     
18800 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
18810 69 6e 74 20 69 73 53 63 68 65 6d 61 43 68 61 6e  int isSchemaChan
18820 67 65 3b 0a 20 20 20 20 20 20 20 20 69 53 61 76  ge;.        iSav
18830 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e 53 61  epoint = db->nSa
18840 76 65 70 6f 69 6e 74 20 2d 20 69 53 61 76 65 70  vepoint - iSavep
18850 6f 69 6e 74 20 2d 20 31 3b 0a 20 20 20 20 20 20  oint - 1;.      
18860 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f    if( p1==SAVEPO
18870 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a  INT_ROLLBACK ){.
18880 20 20 20 20 20 20 20 20 20 20 69 73 53 63 68 65            isSche
18890 6d 61 43 68 61 6e 67 65 20 3d 20 28 64 62 2d 3e  maChange = (db->
188a0 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 49  flags & SQLITE_I
188b0 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 21 3d 30  nternChanges)!=0
188c0 3b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28  ;.          for(
188d0 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62  ii=0; ii<db->nDb
188e0 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  ; ii++){.       
188f0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
18900 33 42 74 72 65 65 54 72 69 70 41 6c 6c 43 75 72  3BtreeTripAllCur
18910 73 6f 72 73 28 64 62 2d 3e 61 44 62 5b 69 69 5d  sors(db->aDb[ii]
18920 2e 70 42 74 2c 0a 20 20 20 20 20 20 20 20 20 20  .pBt,.          
18930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18940 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
18950 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41  ITE_ABORT_ROLLBA
18960 43 4b 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  CK,.            
18970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18980 20 20 20 20 20 20 20 20 20 20 20 69 73 53 63 68             isSch
18990 65 6d 61 43 68 61 6e 67 65 3d 3d 30 29 3b 0a 20  emaChange==0);. 
189a0 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72             if( r
189b0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
189c0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
189d0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
189e0 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73    }.        }els
189f0 65 7b 0a 20 20 20 20 20 20 20 20 20 20 69 73 53  e{.          isS
18a00 63 68 65 6d 61 43 68 61 6e 67 65 20 3d 20 30 3b  chemaChange = 0;
18a10 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
18a20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c     for(ii=0; ii<
18a30 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a  db->nDb; ii++){.
18a40 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73            rc = s
18a50 71 6c 69 74 65 33 42 74 72 65 65 53 61 76 65 70  qlite3BtreeSavep
18a60 6f 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d  oint(db->aDb[ii]
18a70 2e 70 42 74 2c 20 70 31 2c 20 69 53 61 76 65 70  .pBt, p1, iSavep
18a80 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20  oint);.         
18a90 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
18aa0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  OK ){.          
18ab0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
18ac0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
18ad0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
18ae0 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 73 53  .        if( isS
18af0 63 68 65 6d 61 43 68 61 6e 67 65 20 29 7b 0a 20  chemaChange ){. 
18b00 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
18b10 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74  ExpirePreparedSt
18b20 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20  atements(db);.  
18b30 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 52          sqlite3R
18b40 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66  esetAllSchemasOf
18b50 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a  Connection(db);.
18b60 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c            db->fl
18b70 61 67 73 20 3d 20 28 64 62 2d 3e 66 6c 61 67 73  ags = (db->flags
18b80 20 7c 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e   | SQLITE_Intern
18b90 43 68 61 6e 67 65 73 29 3b 0a 20 20 20 20 20 20  Changes);.      
18ba0 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20    }.      }.  . 
18bb0 20 20 20 20 20 2f 2a 20 52 65 67 61 72 64 6c 65       /* Regardle
18bc0 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 74 68  ss of whether th
18bd0 69 73 20 69 73 20 61 20 52 45 4c 45 41 53 45 20  is is a RELEASE 
18be0 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65 73  or ROLLBACK, des
18bf0 74 72 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20 20  troy all .      
18c00 2a 2a 20 73 61 76 65 70 6f 69 6e 74 73 20 6e 65  ** savepoints ne
18c10 73 74 65 64 20 69 6e 73 69 64 65 20 6f 66 20 74  sted inside of t
18c20 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69  he savepoint bei
18c30 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e 20  ng operated on. 
18c40 2a 2f 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20  */.      while( 
18c50 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21 3d  db->pSavepoint!=
18c60 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20  pSavepoint ){.  
18c70 20 20 20 20 20 20 70 54 6d 70 20 3d 20 64 62 2d        pTmp = db-
18c80 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20  >pSavepoint;.   
18c90 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f       db->pSavepo
18ca0 69 6e 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65 78  int = pTmp->pNex
18cb0 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  t;.        sqlit
18cc0 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 54 6d  e3DbFree(db, pTm
18cd0 70 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  p);.        db->
18ce0 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20  nSavepoint--;.  
18cf0 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20      }..      /* 
18d00 49 66 20 69 74 20 69 73 20 61 20 52 45 4c 45 41  If it is a RELEA
18d10 53 45 2c 20 74 68 65 6e 20 64 65 73 74 72 6f 79  SE, then destroy
18d20 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62   the savepoint b
18d30 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e  eing operated on
18d40 20 0a 20 20 20 20 20 20 2a 2a 20 74 6f 6f 2e 20   .      ** too. 
18d50 49 66 20 69 74 20 69 73 20 61 20 52 4f 4c 4c 42  If it is a ROLLB
18d60 41 43 4b 20 54 4f 2c 20 74 68 65 6e 20 73 65 74  ACK TO, then set
18d70 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64   the number of d
18d80 65 66 65 72 72 65 64 20 0a 20 20 20 20 20 20 2a  eferred .      *
18d90 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  * constraint vio
18da0 6c 61 74 69 6f 6e 73 20 70 72 65 73 65 6e 74 20  lations present 
18db0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
18dc0 74 6f 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f  to the value sto
18dd0 72 65 64 0a 20 20 20 20 20 20 2a 2a 20 77 68 65  red.      ** whe
18de0 6e 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  n the savepoint 
18df0 77 61 73 20 63 72 65 61 74 65 64 2e 20 20 2a 2f  was created.  */
18e00 0a 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53  .      if( p1==S
18e10 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
18e20 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
18e30 72 74 28 20 70 53 61 76 65 70 6f 69 6e 74 3d 3d  rt( pSavepoint==
18e40 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 29  db->pSavepoint )
18e50 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53  ;.        db->pS
18e60 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65  avepoint = pSave
18e70 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20 20  point->pNext;.  
18e80 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
18e90 72 65 65 28 64 62 2c 20 70 53 61 76 65 70 6f 69  ree(db, pSavepoi
18ea0 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  nt);.        if(
18eb0 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20   !isTransaction 
18ec0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  ){.          db-
18ed0 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20  >nSavepoint--;. 
18ee0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
18ef0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 64 62  else{.        db
18f00 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20  ->nDeferredCons 
18f10 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44  = pSavepoint->nD
18f20 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20  eferredCons;.   
18f30 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72       db->nDeferr
18f40 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 70 53 61 76  edImmCons = pSav
18f50 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65  epoint->nDeferre
18f60 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20  dImmCons;.      
18f70 7d 0a 0a 20 20 20 20 20 20 69 66 28 20 21 69 73  }..      if( !is
18f80 54 72 61 6e 73 61 63 74 69 6f 6e 20 7c 7c 20 70  Transaction || p
18f90 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  1==SAVEPOINT_ROL
18fa0 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20 20 20 20  LBACK ){.       
18fb0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
18fc0 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 70  bSavepoint(db, p
18fd0 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a  1, iSavepoint);.
18fe0 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
18ff0 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
19000 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
19010 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
19020 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20   }.  }.  if( rc 
19030 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
19040 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 62 72  _to_error;..  br
19050 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
19060 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20 50 31  e: AutoCommit P1
19070 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
19080 53 65 74 20 74 68 65 20 64 61 74 61 62 61 73 65  Set the database
19090 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61   auto-commit fla
190a0 67 20 74 6f 20 50 31 20 28 31 20 6f 72 20 30 29  g to P1 (1 or 0)
190b0 2e 20 49 66 20 50 32 20 69 73 20 74 72 75 65 2c  . If P2 is true,
190c0 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e   roll.** back an
190d0 79 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74 69  y currently acti
190e0 76 65 20 62 74 72 65 65 20 74 72 61 6e 73 61 63  ve btree transac
190f0 74 69 6f 6e 73 2e 20 49 66 20 74 68 65 72 65 20  tions. If there 
19100 61 72 65 20 61 6e 79 20 61 63 74 69 76 65 0a 2a  are any active.*
19110 2a 20 56 4d 73 20 28 61 70 61 72 74 20 66 72 6f  * VMs (apart fro
19120 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20 74 68 65  m this one), the
19130 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66 61 69  n a ROLLBACK fai
19140 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20 66 61  ls.  A COMMIT fa
19150 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72 65 20  ils if.** there 
19160 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74 69  are active writi
19170 6e 67 20 56 4d 73 20 6f 72 20 61 63 74 69 76 65  ng VMs or active
19180 20 56 4d 73 20 74 68 61 74 20 75 73 65 20 73 68   VMs that use sh
19190 61 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a  ared cache..**.*
191a0 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
191b0 6f 6e 20 63 61 75 73 65 73 20 74 68 65 20 56 4d  on causes the VM
191c0 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73   to halt..*/.cas
191d0 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a  e OP_AutoCommit:
191e0 20 7b 0a 20 20 69 6e 74 20 64 65 73 69 72 65 64   {.  int desired
191f0 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e  AutoCommit;.  in
19200 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a 0a 20 20  t iRollback;..  
19210 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
19220 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69  t = pOp->p1;.  i
19230 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f 70 2d 3e  Rollback = pOp->
19240 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65  p2;.  assert( de
19250 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d  siredAutoCommit=
19260 3d 31 20 7c 7c 20 64 65 73 69 72 65 64 41 75 74  =1 || desiredAut
19270 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20  oCommit==0 );.  
19280 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41  assert( desiredA
19290 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20  utoCommit==1 || 
192a0 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a  iRollback==0 );.
192b0 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 56    assert( db->nV
192c0 64 62 65 41 63 74 69 76 65 3e 30 20 29 3b 20 20  dbeActive>0 );  
192d0 2f 2a 20 41 74 20 6c 65 61 73 74 20 74 68 69 73  /* At least this
192e0 20 6f 6e 65 20 56 4d 20 69 73 20 61 63 74 69 76   one VM is activ
192f0 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  e */.  assert( p
19300 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a  ->bIsReader );..
19310 20 20 69 66 28 20 64 65 73 69 72 65 64 41 75 74    if( desiredAut
19320 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75 74  oCommit!=db->aut
19330 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69  oCommit ){.    i
19340 66 28 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a  f( iRollback ){.
19350 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 65        assert( de
19360 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d  siredAutoCommit=
19370 3d 31 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  =1 );.      sqli
19380 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64  te3RollbackAll(d
19390 62 2c 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f  b, SQLITE_ABORT_
193a0 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20 20 20 20  ROLLBACK);.     
193b0 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
193c0 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  = 1;.    }else i
193d0 66 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  f( desiredAutoCo
193e0 6d 6d 69 74 20 26 26 20 64 62 2d 3e 6e 56 64 62  mmit && db->nVdb
193f0 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20  eWrite>0 ){.    
19400 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73    /* If this ins
19410 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  truction impleme
19420 6e 74 73 20 61 20 43 4f 4d 4d 49 54 20 61 6e 64  nts a COMMIT and
19430 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65 20 77   other VMs are w
19440 72 69 74 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20  riting.      ** 
19450 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20  return an error 
19460 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20  indicating that 
19470 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75  the other VMs mu
19480 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73  st complete firs
19490 74 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  t. .      */.   
194a0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
194b0 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 63  ror(p, "cannot c
194c0 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63 74 69 6f  ommit transactio
194d0 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20 20 20  n - ".          
194e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194f0 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20  "SQL statements 
19500 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20  in progress");. 
19510 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
19520 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74  _BUSY;.      got
19530 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
19540 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 20  rror;.    }else 
19550 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65  if( (rc = sqlite
19560 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20  3VdbeCheckFk(p, 
19570 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  1))!=SQLITE_OK )
19580 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62  {.      goto vdb
19590 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 65  e_return;.    }e
195a0 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 61  lse{.      db->a
195b0 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29  utoCommit = (u8)
195c0 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
195d0 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  t;.    }.    if(
195e0 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
195f0 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59  (p)==SQLITE_BUSY
19600 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63 20   ){.      p->pc 
19610 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f  = (int)(pOp - aO
19620 70 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75  p);.      db->au
19630 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28  toCommit = (u8)(
19640 31 2d 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  1-desiredAutoCom
19650 6d 69 74 29 3b 0a 20 20 20 20 20 20 70 2d 3e 72  mit);.      p->r
19660 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  c = rc = SQLITE_
19670 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f  BUSY;.      goto
19680 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
19690 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20    }.    assert( 
196a0 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3d 3d  db->nStatement==
196b0 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 );.    sqlite3
196c0 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28  CloseSavepoints(
196d0 64 62 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e  db);.    if( p->
196e0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
196f0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
19700 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c  TE_DONE;.    }el
19710 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  se{.      rc = S
19720 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
19730 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65   }.    goto vdbe
19740 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73 65  _return;.  }else
19750 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
19760 65 45 72 72 6f 72 28 70 2c 0a 20 20 20 20 20 20  eError(p,.      
19770 20 20 28 21 64 65 73 69 72 65 64 41 75 74 6f 43    (!desiredAutoC
19780 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74 20 73  ommit)?"cannot s
19790 74 61 72 74 20 61 20 74 72 61 6e 73 61 63 74 69  tart a transacti
197a0 6f 6e 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e  on within a tran
197b0 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20  saction":(.     
197c0 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29 3f 22     (iRollback)?"
197d0 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20  cannot rollback 
197e0 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e  - no transaction
197f0 20 69 73 20 61 63 74 69 76 65 22 3a 0a 20 20 20   is active":.   
19800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19810 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d  "cannot commit -
19820 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20   no transaction 
19830 69 73 20 61 63 74 69 76 65 22 29 29 3b 0a 20 20  is active"));.  
19840 20 20 20 20 20 20 20 0a 20 20 20 20 72 63 20 3d         .    rc =
19850 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
19860 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
19870 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
19880 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
19890 70 63 6f 64 65 3a 20 54 72 61 6e 73 61 63 74 69  pcode: Transacti
198a0 6f 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50  on P1 P2 P3 P4 P
198b0 35 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20  5.**.** Begin a 
198c0 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 64  transaction on d
198d0 61 74 61 62 61 73 65 20 50 31 20 69 66 20 61 20  atabase P1 if a 
198e0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
198f0 6f 74 20 61 6c 72 65 61 64 79 0a 2a 2a 20 61 63  ot already.** ac
19900 74 69 76 65 2e 0a 2a 2a 20 49 66 20 50 32 20 69  tive..** If P2 i
19910 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
19920 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63   a write-transac
19930 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2c  tion is started,
19940 20 6f 72 20 69 66 20 61 20 0a 2a 2a 20 72 65 61   or if a .** rea
19950 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  d-transaction is
19960 20 61 6c 72 65 61 64 79 20 61 63 74 69 76 65 2c   already active,
19970 20 69 74 20 69 73 20 75 70 67 72 61 64 65 64 20   it is upgraded 
19980 74 6f 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73  to a write-trans
19990 61 63 74 69 6f 6e 2e 0a 2a 2a 20 49 66 20 50 32  action..** If P2
199a0 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61   is zero, then a
199b0 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69 6f   read-transactio
199c0 6e 20 69 73 20 73 74 61 72 74 65 64 2e 0a 2a 2a  n is started..**
199d0 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e  .** P1 is the in
199e0 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62  dex of the datab
199f0 61 73 65 20 66 69 6c 65 20 6f 6e 20 77 68 69 63  ase file on whic
19a00 68 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  h the transactio
19a10 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e  n is.** started.
19a20 20 20 49 6e 64 65 78 20 30 20 69 73 20 74 68 65    Index 0 is the
19a30 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
19a40 69 6c 65 20 61 6e 64 20 69 6e 64 65 78 20 31 20  ile and index 1 
19a50 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75  is the.** file u
19a60 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72  sed for temporar
19a70 79 20 74 61 62 6c 65 73 2e 20 20 49 6e 64 69 63  y tables.  Indic
19a80 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20  es of 2 or more 
19a90 61 72 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20  are used for.** 
19aa0 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
19ab0 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20 77  es..**.** If a w
19ac0 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e  rite-transaction
19ad0 20 69 73 20 73 74 61 72 74 65 64 20 61 6e 64 20   is started and 
19ae0 74 68 65 20 56 64 62 65 2e 75 73 65 73 53 74 6d  the Vdbe.usesStm
19af0 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67 20 69 73  tJournal flag is
19b00 0a 2a 2a 20 74 72 75 65 20 28 74 68 69 73 20 66  .** true (this f
19b10 6c 61 67 20 69 73 20 73 65 74 20 69 66 20 74 68  lag is set if th
19b20 65 20 56 64 62 65 20 6d 61 79 20 6d 6f 64 69 66  e Vdbe may modif
19b30 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  y more than one 
19b40 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a 2a 20 74  row and may.** t
19b50 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78  hrow an ABORT ex
19b60 63 65 70 74 69 6f 6e 29 2c 20 61 20 73 74 61 74  ception), a stat
19b70 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
19b80 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f 70  n may also be op
19b90 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70  ened..** More sp
19ba0 65 63 69 66 69 63 61 6c 6c 79 2c 20 61 20 73 74  ecifically, a st
19bb0 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
19bc0 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64 20 69 66  ion is opened if
19bd0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  f the database.*
19be0 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  * connection is 
19bf0 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74 20 69 6e  currently not in
19c00 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65   autocommit mode
19c10 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20 61 72  , or if there ar
19c20 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63 74 69 76  e other.** activ
19c30 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 41 20  e statements. A 
19c40 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
19c50 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20 74 68 65  ction allows the
19c60 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79   changes made by
19c70 20 74 68 69 73 0a 2a 2a 20 56 44 42 45 20 74 6f   this.** VDBE to
19c80 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20   be rolled back 
19c90 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 77  after an error w
19ca0 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f  ithout having to
19cb0 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a 2a   roll back the.*
19cc0 2a 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63  * entire transac
19cd0 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65 72 72 6f  tion. If no erro
19ce0 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  r is encountered
19cf0 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  , the statement 
19d00 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 77  transaction.** w
19d10 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ill automaticall
19d20 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68  y commit when th
19d30 65 20 56 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a  e VDBE halts..**
19d40 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65  .** If P5!=0 the
19d50 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 61 6c  n this opcode al
19d60 73 6f 20 63 68 65 63 6b 73 20 74 68 65 20 73 63  so checks the sc
19d70 68 65 6d 61 20 63 6f 6f 6b 69 65 20 61 67 61 69  hema cookie agai
19d80 6e 73 74 20 50 33 0a 2a 2a 20 61 6e 64 20 74 68  nst P3.** and th
19d90 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61 74  e schema generat
19da0 69 6f 6e 20 63 6f 75 6e 74 65 72 20 61 67 61 69  ion counter agai
19db0 6e 73 74 20 50 34 2e 0a 2a 2a 20 54 68 65 20 63  nst P4..** The c
19dc0 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 20 69 74  ookie changes it
19dd0 73 20 76 61 6c 75 65 20 77 68 65 6e 65 76 65 72  s value whenever
19de0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
19df0 68 65 6d 61 20 63 68 61 6e 67 65 73 2e 0a 2a 2a  hema changes..**
19e00 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20   This operation 
19e10 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 63  is used to detec
19e20 74 20 77 68 65 6e 20 74 68 61 74 20 74 68 65 20  t when that the 
19e30 63 6f 6f 6b 69 65 20 68 61 73 20 63 68 61 6e 67  cookie has chang
19e40 65 64 0a 2a 2a 20 61 6e 64 20 74 68 61 74 20 74  ed.** and that t
19e50 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65  he current proce
19e60 73 73 20 6e 65 65 64 73 20 74 6f 20 72 65 72 65  ss needs to rere
19e70 61 64 20 74 68 65 20 73 63 68 65 6d 61 2e 20 20  ad the schema.  
19e80 49 66 20 74 68 65 20 73 63 68 65 6d 61 0a 2a 2a  If the schema.**
19e90 20 63 6f 6f 6b 69 65 20 69 6e 20 50 33 20 64 69   cookie in P3 di
19ea0 66 66 65 72 73 20 66 72 6f 6d 20 74 68 65 20 73  ffers from the s
19eb0 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 69 6e 20  chema cookie in 
19ec0 74 68 65 20 64 61 74 61 62 61 73 65 20 68 65 61  the database hea
19ed0 64 65 72 20 6f 72 0a 2a 2a 20 69 66 20 74 68 65  der or.** if the
19ee0 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61 74 69   schema generati
19ef0 6f 6e 20 63 6f 75 6e 74 65 72 20 69 6e 20 50 34  on counter in P4
19f00 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68   differs from th
19f10 65 20 63 75 72 72 65 6e 74 0a 2a 2a 20 67 65 6e  e current.** gen
19f20 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2c  eration counter,
19f30 20 74 68 65 6e 20 61 6e 20 53 51 4c 49 54 45 5f   then an SQLITE_
19f40 53 43 48 45 4d 41 20 65 72 72 6f 72 20 69 73 20  SCHEMA error is 
19f50 72 61 69 73 65 64 20 61 6e 64 20 65 78 65 63 75  raised and execu
19f60 74 69 6f 6e 0a 2a 2a 20 68 61 6c 74 73 2e 20 20  tion.** halts.  
19f70 54 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70  The sqlite3_step
19f80 28 29 20 77 72 61 70 70 65 72 20 66 75 6e 63 74  () wrapper funct
19f90 69 6f 6e 20 6d 69 67 68 74 20 74 68 65 6e 20 72  ion might then r
19fa0 65 70 72 65 70 61 72 65 20 74 68 65 0a 2a 2a 20  eprepare the.** 
19fb0 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 72 65  statement and re
19fc0 72 75 6e 20 69 74 20 66 72 6f 6d 20 74 68 65 20  run it from the 
19fd0 62 65 67 69 6e 6e 69 6e 67 2e 0a 2a 2f 0a 63 61  beginning..*/.ca
19fe0 73 65 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f  se OP_Transactio
19ff0 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a 70 42  n: {.  Btree *pB
1a000 74 3b 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a  t;.  int iMeta;.
1a010 20 20 69 6e 74 20 69 47 65 6e 3b 0a 0a 20 20 61    int iGen;..  a
1a020 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
1a030 64 65 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  der );.  assert(
1a040 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
1a050 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b  || pOp->p2==0 );
1a060 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1a070 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1a080 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
1a090 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
1a0a0 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
1a0b0 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 69 66 28  Op->p1) );.  if(
1a0c0 20 70 4f 70 2d 3e 70 32 20 26 26 20 28 64 62 2d   pOp->p2 && (db-
1a0d0 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
1a0e0 51 75 65 72 79 4f 6e 6c 79 29 21 3d 30 20 29 7b  QueryOnly)!=0 ){
1a0f0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
1a100 5f 52 45 41 44 4f 4e 4c 59 3b 0a 20 20 20 20 67  _READONLY;.    g
1a110 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1a120 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 42  _error;.  }.  pB
1a130 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
1a140 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28  >p1].pBt;..  if(
1a150 20 70 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d   pBt ){.    rc =
1a160 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67   sqlite3BtreeBeg
1a170 69 6e 54 72 61 6e 73 28 70 42 74 2c 20 70 4f 70  inTrans(pBt, pOp
1a180 2d 3e 70 32 29 3b 0a 20 20 20 20 74 65 73 74 63  ->p2);.    testc
1a190 61 73 65 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ase( rc==SQLITE_
1a1a0 42 55 53 59 5f 53 4e 41 50 53 48 4f 54 20 29 3b  BUSY_SNAPSHOT );
1a1b0 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72  .    testcase( r
1a1c0 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 5f 52  c==SQLITE_BUSY_R
1a1d0 45 43 4f 56 45 52 59 20 29 3b 0a 20 20 20 20 69  ECOVERY );.    i
1a1e0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1a1f0 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 72   ){.      if( (r
1a200 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f  c&0xff)==SQLITE_
1a210 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20  BUSY ){.        
1a220 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f  p->pc = (int)(pO
1a230 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20 20  p - aOp);.      
1a240 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20    p->rc = rc;.  
1a250 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
1a260 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a  return;.      }.
1a270 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
1a280 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1a290 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 70 4f     }..    if( pO
1a2a0 70 2d 3e 70 32 20 26 26 20 70 2d 3e 75 73 65 73  p->p2 && p->uses
1a2b0 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20 20  StmtJournal .   
1a2c0 20 20 26 26 20 28 64 62 2d 3e 61 75 74 6f 43 6f    && (db->autoCo
1a2d0 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e  mmit==0 || db->n
1a2e0 56 64 62 65 52 65 61 64 3e 31 29 20 0a 20 20 20  VdbeRead>1) .   
1a2f0 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
1a300 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 73  ( sqlite3BtreeIs
1a310 49 6e 54 72 61 6e 73 28 70 42 74 29 20 29 3b 0a  InTrans(pBt) );.
1a320 20 20 20 20 20 20 69 66 28 20 70 2d 3e 69 53 74        if( p->iSt
1a330 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20 20  atement==0 ){.  
1a340 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62        assert( db
1a350 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30 20  ->nStatement>=0 
1a360 26 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e  && db->nSavepoin
1a370 74 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20  t>=0 );.        
1a380 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b  db->nStatement++
1a390 3b 20 0a 20 20 20 20 20 20 20 20 70 2d 3e 69 53  ; .        p->iS
1a3a0 74 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e  tatement = db->n
1a3b0 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e  Savepoint + db->
1a3c0 6e 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20  nStatement;.    
1a3d0 20 20 7d 0a 0a 20 20 20 20 20 20 72 63 20 3d 20    }..      rc = 
1a3e0 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
1a3f0 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49  oint(db, SAVEPOI
1a400 4e 54 5f 42 45 47 49 4e 2c 20 70 2d 3e 69 53 74  NT_BEGIN, p->iSt
1a410 61 74 65 6d 65 6e 74 2d 31 29 3b 0a 20 20 20 20  atement-1);.    
1a420 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1a430 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72  _OK ){.        r
1a440 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1a450 42 65 67 69 6e 53 74 6d 74 28 70 42 74 2c 20 70  BeginStmt(pBt, p
1a460 2d 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a 20  ->iStatement);. 
1a470 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
1a480 20 53 74 6f 72 65 20 74 68 65 20 63 75 72 72 65   Store the curre
1a490 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  nt value of the 
1a4a0 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 73  database handles
1a4b0 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72   deferred constr
1a4c0 61 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63 6f  aint.      ** co
1a4d0 75 6e 74 65 72 2e 20 49 66 20 74 68 65 20 73 74  unter. If the st
1a4e0 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
1a4f0 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20  ion needs to be 
1a500 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20 20  rolled back,.   
1a510 20 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20     ** the value 
1a520 6f 66 20 74 68 69 73 20 63 6f 75 6e 74 65 72 20  of this counter 
1a530 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65 73 74  needs to be rest
1a540 6f 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20 20  ored too.  */.  
1a550 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 43      p->nStmtDefC
1a560 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72  ons = db->nDefer
1a570 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 70  redCons;.      p
1a580 2d 3e 6e 53 74 6d 74 44 65 66 49 6d 6d 43 6f 6e  ->nStmtDefImmCon
1a590 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
1a5a0 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 7d 0a  dImmCons;.    }.
1a5b0 0a 20 20 20 20 2f 2a 20 47 61 74 68 65 72 20 74  .    /* Gather t
1a5c0 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  he schema versio
1a5d0 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 68 65  n number for che
1a5e0 63 6b 69 6e 67 3a 0a 20 20 20 20 2a 2a 20 49 4d  cking:.    ** IM
1a5f0 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a  PLEMENTATION-OF:
1a600 20 52 2d 30 33 31 38 39 2d 35 31 31 33 35 20 41   R-03189-51135 A
1a610 73 20 65 61 63 68 20 53 51 4c 20 73 74 61 74 65  s each SQL state
1a620 6d 65 6e 74 20 72 75 6e 73 2c 20 74 68 65 20 73  ment runs, the s
1a630 63 68 65 6d 61 0a 20 20 20 20 2a 2a 20 76 65 72  chema.    ** ver
1a640 73 69 6f 6e 20 69 73 20 63 68 65 63 6b 65 64 20  sion is checked 
1a650 74 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 74  to ensure that t
1a660 68 65 20 73 63 68 65 6d 61 20 68 61 73 20 6e 6f  he schema has no
1a670 74 20 63 68 61 6e 67 65 64 20 73 69 6e 63 65 20  t changed since 
1a680 74 68 65 0a 20 20 20 20 2a 2a 20 53 51 4c 20 73  the.    ** SQL s
1a690 74 61 74 65 6d 65 6e 74 20 77 61 73 20 70 72 65  tatement was pre
1a6a0 70 61 72 65 64 2e 0a 20 20 20 20 2a 2f 0a 20 20  pared..    */.  
1a6b0 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65    sqlite3BtreeGe
1a6c0 74 4d 65 74 61 28 70 42 74 2c 20 42 54 52 45 45  tMeta(pBt, BTREE
1a6d0 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 2c  _SCHEMA_VERSION,
1a6e0 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b   (u32 *)&iMeta);
1a6f0 0a 20 20 20 20 69 47 65 6e 20 3d 20 64 62 2d 3e  .    iGen = db->
1a700 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63  aDb[pOp->p1].pSc
1a710 68 65 6d 61 2d 3e 69 47 65 6e 65 72 61 74 69 6f  hema->iGeneratio
1a720 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  n;.  }else{.    
1a730 69 47 65 6e 20 3d 20 69 4d 65 74 61 20 3d 20 30  iGen = iMeta = 0
1a740 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
1a750 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f  pOp->p5==0 || pO
1a760 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
1a770 54 33 32 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  T32 );.  if( pOp
1a780 2d 3e 70 35 20 26 26 20 28 69 4d 65 74 61 21 3d  ->p5 && (iMeta!=
1a790 70 4f 70 2d 3e 70 33 20 7c 7c 20 69 47 65 6e 21  pOp->p3 || iGen!
1a7a0 3d 70 4f 70 2d 3e 70 34 2e 69 29 20 29 7b 0a 20  =pOp->p4.i) ){. 
1a7b0 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
1a7c0 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29  (db, p->zErrMsg)
1a7d0 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67  ;.    p->zErrMsg
1a7e0 20 3d 20 73 71 6c 69 74 65 33 44 62 53 74 72 44   = sqlite3DbStrD
1a7f0 75 70 28 64 62 2c 20 22 64 61 74 61 62 61 73 65  up(db, "database
1a800 20 73 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e   schema has chan
1a810 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66  ged");.    /* If
1a820 20 74 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b   the schema-cook
1a830 69 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ie from the data
1a840 62 61 73 65 20 66 69 6c 65 20 6d 61 74 63 68 65  base file matche
1a850 73 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20  s the cookie .  
1a860 20 20 2a 2a 20 73 74 6f 72 65 64 20 77 69 74 68    ** stored with
1a870 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72   the in-memory r
1a880 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
1a890 20 74 68 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a   the schema, do.
1a8a0 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61      ** not reloa
1a8b0 64 20 74 68 65 20 73 63 68 65 6d 61 20 66 72 6f  d the schema fro
1a8c0 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  m the database f
1a8d0 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20  ile..    **.    
1a8e0 2a 2a 20 49 66 20 76 69 72 74 75 61 6c 2d 74 61  ** If virtual-ta
1a8f0 62 6c 65 73 20 61 72 65 20 69 6e 20 75 73 65 2c  bles are in use,
1a900 20 74 68 69 73 20 69 73 20 6e 6f 74 20 6a 75 73   this is not jus
1a910 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f  t an optimizatio
1a920 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c  n..    ** Often,
1a930 20 76 2d 74 61 62 6c 65 73 20 73 74 6f 72 65 20   v-tables store 
1a940 74 68 65 69 72 20 64 61 74 61 20 69 6e 20 6f 74  their data in ot
1a950 68 65 72 20 53 51 4c 69 74 65 20 74 61 62 6c 65  her SQLite table
1a960 73 2c 20 77 68 69 63 68 0a 20 20 20 20 2a 2a 20  s, which.    ** 
1a970 61 72 65 20 71 75 65 72 69 65 64 20 66 72 6f 6d  are queried from
1a980 20 77 69 74 68 69 6e 20 78 4e 65 78 74 28 29 20   within xNext() 
1a990 61 6e 64 20 6f 74 68 65 72 20 76 2d 74 61 62 6c  and other v-tabl
1a9a0 65 20 6d 65 74 68 6f 64 73 20 75 73 69 6e 67 0a  e methods using.
1a9b0 20 20 20 20 2a 2a 20 70 72 65 70 61 72 65 64 20      ** prepared 
1a9c0 71 75 65 72 69 65 73 2e 20 49 66 20 73 75 63 68  queries. If such
1a9d0 20 61 20 71 75 65 72 79 20 69 73 20 6f 75 74 2d   a query is out-
1a9e0 6f 66 2d 64 61 74 65 2c 20 77 65 20 64 6f 20 6e  of-date, we do n
1a9f0 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a  ot want to.    *
1aa00 2a 20 64 69 73 63 61 72 64 20 74 68 65 20 64 61  * discard the da
1aa10 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20 61  tabase schema, a
1aa20 73 20 74 68 65 20 75 73 65 72 20 63 6f 64 65 20  s the user code 
1aa30 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65  implementing the
1aa40 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20  .    ** v-table 
1aa50 77 6f 75 6c 64 20 68 61 76 65 20 74 6f 20 62 65  would have to be
1aa60 20 72 65 61 64 79 20 66 6f 72 20 74 68 65 20 73   ready for the s
1aa70 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
1aa80 63 74 75 72 65 20 69 74 73 65 6c 66 0a 20 20 20  cture itself.   
1aa90 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61 6c 69   ** to be invali
1aaa0 64 61 74 65 64 20 77 68 65 6e 65 76 65 72 20 73  dated whenever s
1aab0 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69 73  qlite3_step() is
1aac0 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74   called from wit
1aad0 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d  hin .    ** a v-
1aae0 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20  table method..  
1aaf0 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d    */.    if( db-
1ab00 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53  >aDb[pOp->p1].pS
1ab10 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f  chema->schema_co
1ab20 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20  okie!=iMeta ){. 
1ab30 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65       sqlite3Rese
1ab40 74 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c 20 70  tOneSchema(db, p
1ab50 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 20  Op->p1);.    }. 
1ab60 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20     p->expired = 
1ab70 31 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  1;.    rc = SQLI
1ab80 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20  TE_SCHEMA;.  }. 
1ab90 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
1aba0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1abb0 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  r;.  break;.}../
1abc0 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 64 43 6f  * Opcode: ReadCo
1abd0 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a 20  okie P1 P2 P3 * 
1abe0 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f  *.**.** Read coo
1abf0 6b 69 65 20 6e 75 6d 62 65 72 20 50 33 20 66 72  kie number P3 fr
1ac00 6f 6d 20 64 61 74 61 62 61 73 65 20 50 31 20 61  om database P1 a
1ac10 6e 64 20 77 72 69 74 65 20 69 74 20 69 6e 74 6f  nd write it into
1ac20 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
1ac30 20 50 33 3d 3d 31 20 69 73 20 74 68 65 20 73 63   P3==1 is the sc
1ac40 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50  hema version.  P
1ac50 33 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61  3==2 is the data
1ac60 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20  base format..** 
1ac70 50 33 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63  P3==3 is the rec
1ac80 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63  ommended pager c
1ac90 61 63 68 65 20 73 69 7a 65 2c 20 61 6e 64 20 73  ache size, and s
1aca0 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20  o forth.  P1==0 
1acb0 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64  is.** the main d
1acc0 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
1acd0 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20 64 61   P1==1 is the da
1ace0 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64  tabase file used
1acf0 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d   to store.** tem
1ad00 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a  porary tables..*
1ad10 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73 74 20  *.** There must 
1ad20 62 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f  be a read-lock o
1ad30 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 28  n the database (
1ad40 65 69 74 68 65 72 20 61 20 74 72 61 6e 73 61 63  either a transac
1ad50 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20  tion.** must be 
1ad60 73 74 61 72 74 65 64 20 6f 72 20 74 68 65 72 65  started or there
1ad70 20 6d 75 73 74 20 62 65 20 61 6e 20 6f 70 65 6e   must be an open
1ad80 20 63 75 72 73 6f 72 29 20 62 65 66 6f 72 65 0a   cursor) before.
1ad90 2a 2a 20 65 78 65 63 75 74 69 6e 67 20 74 68 69  ** executing thi
1ada0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  s instruction..*
1adb0 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 64 43 6f  /.case OP_ReadCo
1adc0 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 20 20  okie: {         
1add0 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
1ade0 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20  .  int iMeta;.  
1adf0 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 69  int iDb;.  int i
1ae00 43 6f 6f 6b 69 65 3b 0a 0a 20 20 61 73 73 65 72  Cookie;..  asser
1ae10 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
1ae20 29 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  );.  iDb = pOp->
1ae30 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20  p1;.  iCookie = 
1ae40 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72  pOp->p3;.  asser
1ae50 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54  t( pOp->p3<SQLIT
1ae60 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29  E_N_BTREE_META )
1ae70 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e  ;.  assert( iDb>
1ae80 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44  =0 && iDb<db->nD
1ae90 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  b );.  assert( d
1aea0 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 21  b->aDb[iDb].pBt!
1aeb0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1aec0 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
1aed0 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b  reeMask, iDb) );
1aee0 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65  ..  sqlite3Btree
1aef0 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b  GetMeta(db->aDb[
1af00 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69  iDb].pBt, iCooki
1af10 65 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61  e, (u32 *)&iMeta
1af20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  );.  pOut = out2
1af30 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
1af40 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  p);.  pOut->u.i 
1af50 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b  = iMeta;.  break
1af60 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1af70 53 65 74 43 6f 6f 6b 69 65 20 50 31 20 50 32 20  SetCookie P1 P2 
1af80 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69  P3 * *.**.** Wri
1af90 74 65 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  te the integer v
1afa0 61 6c 75 65 20 50 33 20 69 6e 74 6f 20 63 6f 6f  alue P3 into coo
1afb0 6b 69 65 20 6e 75 6d 62 65 72 20 50 32 20 6f 66  kie number P2 of
1afc0 20 64 61 74 61 62 61 73 65 20 50 31 2e 0a 2a 2a   database P1..**
1afd0 20 50 32 3d 3d 31 20 69 73 20 74 68 65 20 73 63   P2==1 is the sc
1afe0 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50  hema version.  P
1aff0 32 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61  2==2 is the data
1b000 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20  base format..** 
1b010 50 32 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63  P2==3 is the rec
1b020 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63  ommended pager c
1b030 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c 20 61  ache .** size, a
1b040 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31  nd so forth.  P1
1b050 3d 3d 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20  ==0 is the main 
1b060 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
1b070 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20 0a  d P1==1 is the .
1b080 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ** database file
1b090 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
1b0a0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
1b0b0 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63  .**.** A transac
1b0c0 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73 74 61  tion must be sta
1b0d0 72 74 65 64 20 62 65 66 6f 72 65 20 65 78 65 63  rted before exec
1b0e0 75 74 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64  uting this opcod
1b0f0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  e..*/.case OP_Se
1b100 74 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20 44 62 20  tCookie: {.  Db 
1b110 2a 70 44 62 3b 0a 20 20 61 73 73 65 72 74 28 20  *pDb;.  assert( 
1b120 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54 45 5f 4e  pOp->p2<SQLITE_N
1b130 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20  _BTREE_META );. 
1b140 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1b150 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
1b160 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
1b170 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
1b180 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70  ->btreeMask, pOp
1b190 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72  ->p1) );.  asser
1b1a0 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
1b1b0 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62  0 );.  pDb = &db
1b1c0 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  ->aDb[pOp->p1];.
1b1d0 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70    assert( pDb->p
1b1e0 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  Bt!=0 );.  asser
1b1f0 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  t( sqlite3Schema
1b200 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 70 4f  MutexHeld(db, pO
1b210 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a 20 20 2f  p->p1, 0) );.  /
1b220 2a 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 75 74  * See note about
1b230 20 69 6e 64 65 78 20 73 68 69 66 74 69 6e 67 20   index shifting 
1b240 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65  on OP_ReadCookie
1b250 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   */.  rc = sqlit
1b260 65 33 42 74 72 65 65 55 70 64 61 74 65 4d 65 74  e3BtreeUpdateMet
1b270 61 28 70 44 62 2d 3e 70 42 74 2c 20 70 4f 70 2d  a(pDb->pBt, pOp-
1b280 3e 70 32 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a 20  >p2, pOp->p3);. 
1b290 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54   if( pOp->p2==BT
1b2a0 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49  REE_SCHEMA_VERSI
1b2b0 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65  ON ){.    /* Whe
1b2c0 6e 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f  n the schema coo
1b2d0 6b 69 65 20 63 68 61 6e 67 65 73 2c 20 72 65 63  kie changes, rec
1b2e0 6f 72 64 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b  ord the new cook
1b2f0 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f  ie internally */
1b300 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d  .    pDb->pSchem
1b310 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65  a->schema_cookie
1b320 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20   = pOp->p3;.    
1b330 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c  db->flags |= SQL
1b340 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65  ITE_InternChange
1b350 73 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  s;.  }else if( p
1b360 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 46 49  Op->p2==BTREE_FI
1b370 4c 45 5f 46 4f 52 4d 41 54 20 29 7b 0a 20 20 20  LE_FORMAT ){.   
1b380 20 2f 2a 20 52 65 63 6f 72 64 20 63 68 61 6e 67   /* Record chang
1b390 65 73 20 69 6e 20 74 68 65 20 66 69 6c 65 20 66  es in the file f
1b3a0 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44 62  ormat */.    pDb
1b3b0 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f  ->pSchema->file_
1b3c0 66 6f 72 6d 61 74 20 3d 20 70 4f 70 2d 3e 70 33  format = pOp->p3
1b3d0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
1b3e0 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f 2a  >p1==1 ){.    /*
1b3f0 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20   Invalidate all 
1b400 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
1b410 6e 74 73 20 77 68 65 6e 65 76 65 72 20 74 68 65  nts whenever the
1b420 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 0a 20   TEMP database. 
1b430 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 69 73 20     ** schema is 
1b440 63 68 61 6e 67 65 64 2e 20 20 54 69 63 6b 65 74  changed.  Ticket
1b450 20 23 31 36 34 34 20 2a 2f 0a 20 20 20 20 73 71   #1644 */.    sq
1b460 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
1b470 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62  redStatements(db
1b480 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65  );.    p->expire
1b490 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28  d = 0;.  }.  if(
1b4a0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
1b4b0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1b4c0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1b4d0 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64 20 50  code: OpenRead P
1b4e0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
1b4f0 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d   Synopsis: root=
1b500 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20  P2 iDb=P3.**.** 
1b510 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e 6c 79  Open a read-only
1b520 20 63 75 72 73 6f 72 20 66 6f 72 20 74 68 65 20   cursor for the 
1b530 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 77  database table w
1b540 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69  hose root page i
1b550 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64 61 74  s.** P2 in a dat
1b560 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65  abase file.  The
1b570 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
1b580 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
1b590 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65  P3. .** P3==0 me
1b5a0 61 6e 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74  ans the main dat
1b5b0 61 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d 65 61  abase, P3==1 mea
1b5c0 6e 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ns the database 
1b5d0 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74 65 6d  used for .** tem
1b5e0 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2c 20 61  porary tables, a
1b5f0 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73 20 75 73  nd P3>1 means us
1b600 65 64 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  ed the correspon
1b610 64 69 6e 67 20 61 74 74 61 63 68 65 64 0a 2a 2a  ding attached.**
1b620 20 64 61 74 61 62 61 73 65 2e 20 20 47 69 76 65   database.  Give
1b630 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20   the new cursor 
1b640 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6f 66  an identifier of
1b650 20 50 31 2e 20 20 54 68 65 20 50 31 0a 2a 2a 20   P1.  The P1.** 
1b660 76 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f 74 20  values need not 
1b670 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 62 75  be contiguous bu
1b680 74 20 61 6c 6c 20 50 31 20 76 61 6c 75 65 73 20  t all P1 values 
1b690 73 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c 6c 20  should be small 
1b6a0 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49 74 20  integers..** It 
1b6b0 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20  is an error for 
1b6c0 50 31 20 74 6f 20 62 65 20 6e 65 67 61 74 69 76  P1 to be negativ
1b6d0 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d  e..**.** If P5!=
1b6e0 30 20 74 68 65 6e 20 75 73 65 20 74 68 65 20 63  0 then use the c
1b6f0 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
1b700 65 72 20 50 32 20 61 73 20 74 68 65 20 72 6f 6f  er P2 as the roo
1b710 74 20 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a 20 74  t page, not.** t
1b720 68 65 20 76 61 6c 75 65 20 6f 66 20 50 32 20 69  he value of P2 i
1b730 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  tself..**.** The
1b740 72 65 20 77 69 6c 6c 20 62 65 20 61 20 72 65 61  re will be a rea
1b750 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61  d lock on the da
1b760 74 61 62 61 73 65 20 77 68 65 6e 65 76 65 72 20  tabase whenever 
1b770 74 68 65 72 65 20 69 73 20 61 6e 0a 2a 2a 20 6f  there is an.** o
1b780 70 65 6e 20 63 75 72 73 6f 72 2e 20 20 49 66 20  pen cursor.  If 
1b790 74 68 65 20 64 61 74 61 62 61 73 65 20 77 61 73  the database was
1b7a0 20 75 6e 6c 6f 63 6b 65 64 20 70 72 69 6f 72 20   unlocked prior 
1b7b0 74 6f 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  to this instruct
1b7c0 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61 20 72 65  ion.** then a re
1b7d0 61 64 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69  ad lock is acqui
1b7e0 72 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74  red as part of t
1b7f0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
1b800 20 20 41 20 72 65 61 64 0a 2a 2a 20 6c 6f 63 6b    A read.** lock
1b810 20 61 6c 6c 6f 77 73 20 6f 74 68 65 72 20 70 72   allows other pr
1b820 6f 63 65 73 73 65 73 20 74 6f 20 72 65 61 64 20  ocesses to read 
1b830 74 68 65 20 64 61 74 61 62 61 73 65 20 62 75 74  the database but
1b840 20 70 72 6f 68 69 62 69 74 73 0a 2a 2a 20 61 6e   prohibits.** an
1b850 79 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 20  y other process 
1b860 66 72 6f 6d 20 6d 6f 64 69 66 79 69 6e 67 20 74  from modifying t
1b870 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68  he database.  Th
1b880 65 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 0a 2a  e read lock is.*
1b890 2a 20 72 65 6c 65 61 73 65 64 20 77 68 65 6e 20  * released when 
1b8a0 61 6c 6c 20 63 75 72 73 6f 72 73 20 61 72 65 20  all cursors are 
1b8b0 63 6c 6f 73 65 64 2e 20 20 49 66 20 74 68 69 73  closed.  If this
1b8c0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 74   instruction att
1b8d0 65 6d 70 74 73 0a 2a 2a 20 74 6f 20 67 65 74 20  empts.** to get 
1b8e0 61 20 72 65 61 64 20 6c 6f 63 6b 20 62 75 74 20  a read lock but 
1b8f0 66 61 69 6c 73 2c 20 74 68 65 20 73 63 72 69 70  fails, the scrip
1b900 74 20 74 65 72 6d 69 6e 61 74 65 73 20 77 69 74  t terminates wit
1b910 68 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 42  h an.** SQLITE_B
1b920 55 53 59 20 65 72 72 6f 72 20 63 6f 64 65 2e 0a  USY error code..
1b930 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c  **.** The P4 val
1b940 75 65 20 6d 61 79 20 62 65 20 65 69 74 68 65 72  ue may be either
1b950 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f   an integer (P4_
1b960 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e  INT32) or a poin
1b970 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49  ter to.** a KeyI
1b980 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 28 50  nfo structure (P
1b990 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69  4_KEYINFO). If i
1b9a0 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  t is a pointer t
1b9b0 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20  o a KeyInfo .** 
1b9c0 73 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20  structure, then 
1b9d0 73 61 69 64 20 73 74 72 75 63 74 75 72 65 20 64  said structure d
1b9e0 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65  efines the conte
1b9f0 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67  nt and collating
1ba00 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66   .** sequence of
1ba10 20 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67   the index being
1ba20 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69   opened. Otherwi
1ba30 73 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20  se, if P4 is an 
1ba40 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75  integer .** valu
1ba50 65 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f 20  e, it is set to 
1ba60 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
1ba70 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
1ba80 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  le..**.** See al
1ba90 73 6f 3a 20 4f 70 65 6e 57 72 69 74 65 2c 20 52  so: OpenWrite, R
1baa0 65 6f 70 65 6e 49 64 78 0a 2a 2f 0a 2f 2a 20 4f  eopenIdx.*/./* O
1bab0 70 63 6f 64 65 3a 20 52 65 6f 70 65 6e 49 64 78  pcode: ReopenIdx
1bac0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
1bad0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f  ** Synopsis: roo
1bae0 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a  t=P2 iDb=P3.**.*
1baf0 2a 20 54 68 65 20 52 65 6f 70 65 6e 49 64 78 20  * The ReopenIdx 
1bb00 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 65 78 61  opcode works exa
1bb10 63 74 6c 79 20 6c 69 6b 65 20 52 65 61 64 4f 70  ctly like ReadOp
1bb20 65 6e 20 65 78 63 65 70 74 20 74 68 61 74 20 69  en except that i
1bb30 74 20 66 69 72 73 74 0a 2a 2a 20 63 68 65 63 6b  t first.** check
1bb40 73 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20  s to see if the 
1bb50 63 75 72 73 6f 72 20 6f 6e 20 50 31 20 69 73 20  cursor on P1 is 
1bb60 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 77 69 74  already open wit
1bb70 68 20 61 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a  h a root page.**
1bb80 20 6e 75 6d 62 65 72 20 6f 66 20 50 32 20 61 6e   number of P2 an
1bb90 64 20 69 66 20 69 74 20 69 73 20 74 68 69 73 20  d if it is this 
1bba0 6f 70 63 6f 64 65 20 62 65 63 6f 6d 65 73 20 61  opcode becomes a
1bbb0 20 6e 6f 2d 6f 70 2e 20 20 49 6e 20 6f 74 68 65   no-op.  In othe
1bbc0 72 20 77 6f 72 64 73 2c 0a 2a 2a 20 69 66 20 74  r words,.** if t
1bbd0 68 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c 72  he cursor is alr
1bbe0 65 61 64 79 20 6f 70 65 6e 2c 20 64 6f 20 6e 6f  eady open, do no
1bbf0 74 20 72 65 6f 70 65 6e 20 69 74 2e 0a 2a 2a 0a  t reopen it..**.
1bc00 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e 49 64 78  ** The ReopenIdx
1bc10 20 6f 70 63 6f 64 65 20 6d 61 79 20 6f 6e 6c 79   opcode may only
1bc20 20 62 65 20 75 73 65 64 20 77 69 74 68 20 50 35   be used with P5
1bc30 3d 3d 30 20 61 6e 64 20 77 69 74 68 20 50 34 20  ==0 and with P4 
1bc40 62 65 69 6e 67 0a 2a 2a 20 61 20 50 34 5f 4b 45  being.** a P4_KE
1bc50 59 49 4e 46 4f 20 6f 62 6a 65 63 74 2e 20 20 46  YINFO object.  F
1bc60 75 72 74 68 65 72 6d 6f 72 65 2c 20 74 68 65 20  urthermore, the 
1bc70 50 33 20 76 61 6c 75 65 20 6d 75 73 74 20 62 65  P3 value must be
1bc80 20 74 68 65 20 73 61 6d 65 20 61 73 0a 2a 2a 20   the same as.** 
1bc90 65 76 65 72 79 20 6f 74 68 65 72 20 52 65 6f 70  every other Reop
1bca0 65 6e 49 64 78 20 6f 72 20 4f 70 65 6e 52 65 61  enIdx or OpenRea
1bcb0 64 20 66 6f 72 20 74 68 65 20 73 61 6d 65 20 63  d for the same c
1bcc0 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 0a 2a 2a  ursor number..**
1bcd0 0a 2a 2a 20 53 65 65 20 74 68 65 20 4f 70 65 6e  .** See the Open
1bce0 52 65 61 64 20 6f 70 63 6f 64 65 20 64 6f 63 75  Read opcode docu
1bcf0 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 61 64  mentation for ad
1bd00 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
1bd10 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
1bd20 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20 50 31  de: OpenWrite P1
1bd30 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
1bd40 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50  Synopsis: root=P
1bd50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f  2 iDb=P3.**.** O
1bd60 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74 65  pen a read/write
1bd70 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50 31   cursor named P1
1bd80 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   on the table or
1bd90 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f   index whose roo
1bda0 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32 2e  t.** page is P2.
1bdb0 20 20 4f 72 20 69 66 20 50 35 21 3d 30 20 75 73    Or if P5!=0 us
1bdc0 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
1bdd0 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20   register P2 to 
1bde0 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74  find the.** root
1bdf0 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   page..**.** The
1be00 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65   P4 value may be
1be10 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67   either an integ
1be20 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72  er (P4_INT32) or
1be30 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a   a pointer to.**
1be40 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
1be50 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f  ture (P4_KEYINFO
1be60 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70 6f  ). If it is a po
1be70 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e  inter to a KeyIn
1be80 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  fo .** structure
1be90 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72 75  , then said stru
1bea0 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74 68  cture defines th
1beb0 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f  e content and co
1bec0 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75  llating .** sequ
1bed0 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65  ence of the inde
1bee0 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20  x being opened. 
1bef0 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34  Otherwise, if P4
1bf00 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a   is an integer .
1bf10 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20  ** value, it is 
1bf20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65  set to the numbe
1bf30 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
1bf40 74 68 65 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f  the table, or to
1bf50 20 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20   the.** largest 
1bf60 69 6e 64 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c  index of any col
1bf70 75 6d 6e 20 6f 66 20 74 68 65 20 74 61 62 6c 65  umn of the table
1bf80 20 74 68 61 74 20 69 73 20 61 63 74 75 61 6c 6c   that is actuall
1bf90 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  y used..**.** Th
1bfa0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77  is instruction w
1bfb0 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f  orks just like O
1bfc0 70 65 6e 52 65 61 64 20 65 78 63 65 70 74 20 74  penRead except t
1bfd0 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74 68 65  hat it opens the
1bfe0 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65   cursor.** in re
1bff0 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e 20 20  ad/write mode.  
1c000 46 6f 72 20 61 20 67 69 76 65 6e 20 74 61 62 6c  For a given tabl
1c010 65 2c 20 74 68 65 72 65 20 63 61 6e 20 62 65 20  e, there can be 
1c020 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65 61 64  one or more read
1c030 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73  -only.** cursors
1c040 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 65 61   or a single rea
1c050 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 62  d/write cursor b
1c060 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a  ut not both..**.
1c070 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e  ** See also Open
1c080 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  Read..*/.case OP
1c090 5f 52 65 6f 70 65 6e 49 64 78 3a 20 7b 0a 20 20  _ReopenIdx: {.  
1c0a0 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 4b 65  int nField;.  Ke
1c0b0 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
1c0c0 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 69 6e 74  .  int p2;.  int
1c0d0 20 69 44 62 3b 0a 20 20 69 6e 74 20 77 72 46 6c   iDb;.  int wrFl
1c0e0 61 67 3b 0a 20 20 42 74 72 65 65 20 2a 70 58 3b  ag;.  Btree *pX;
1c0f0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1c100 43 75 72 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a  Cur;.  Db *pDb;.
1c110 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1c120 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35  p5==0 || pOp->p5
1c130 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20  ==OPFLAG_SEEKEQ 
1c140 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1c150 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59  ->p4type==P4_KEY
1c160 49 4e 46 4f 20 29 3b 0a 20 20 70 43 75 72 20 3d  INFO );.  pCur =
1c170 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1c180 31 5d 3b 0a 20 20 69 66 28 20 70 43 75 72 20 26  1];.  if( pCur &
1c190 26 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74  & pCur->pgnoRoot
1c1a0 3d 3d 28 75 33 32 29 70 4f 70 2d 3e 70 32 20 29  ==(u32)pOp->p2 )
1c1b0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
1c1c0 75 72 2d 3e 69 44 62 3d 3d 70 4f 70 2d 3e 70 33  ur->iDb==pOp->p3
1c1d0 20 29 3b 20 20 20 20 20 20 2f 2a 20 47 75 61 72   );      /* Guar
1c1e0 61 6e 74 65 65 64 20 62 79 20 74 68 65 20 63 6f  anteed by the co
1c1f0 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a  de generator */.
1c200 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e 5f 63 75      goto open_cu
1c210 72 73 6f 72 5f 73 65 74 5f 68 69 6e 74 73 3b 0a  rsor_set_hints;.
1c220 20 20 7d 0a 20 20 2f 2a 20 49 66 20 74 68 65 20    }.  /* If the 
1c230 63 75 72 73 6f 72 20 69 73 20 6e 6f 74 20 63 75  cursor is not cu
1c240 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 6f 72 20  rrently open or 
1c250 69 73 20 6f 70 65 6e 20 6f 6e 20 61 20 64 69 66  is open on a dif
1c260 66 65 72 65 6e 74 0a 20 20 2a 2a 20 69 6e 64 65  ferent.  ** inde
1c270 78 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  x, then fall thr
1c280 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 4f 70 65  ough into OP_Ope
1c290 6e 52 65 61 64 20 74 6f 20 66 6f 72 63 65 20 61  nRead to force a
1c2a0 20 72 65 6f 70 65 6e 20 2a 2f 0a 63 61 73 65 20   reopen */.case 
1c2b0 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73  OP_OpenRead:.cas
1c2c0 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a 0a  e OP_OpenWrite:.
1c2d0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1c2e0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57  opcode==OP_OpenW
1c2f0 72 69 74 65 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  rite || pOp->p5=
1c300 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f  =0 || pOp->p5==O
1c310 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a  PFLAG_SEEKEQ );.
1c320 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
1c330 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73 65  Reader );.  asse
1c340 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
1c350 3d 4f 50 5f 4f 70 65 6e 52 65 61 64 20 7c 7c 20  =OP_OpenRead || 
1c360 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
1c370 52 65 6f 70 65 6e 49 64 78 0a 20 20 20 20 20 20  ReopenIdx.      
1c380 20 20 20 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e      || p->readOn
1c390 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28 20  ly==0 );..  if( 
1c3a0 70 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a 20 20  p->expired ){.  
1c3b0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41 42    rc = SQLITE_AB
1c3c0 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20  ORT_ROLLBACK;.  
1c3d0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1c3e0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a  _to_error;.  }..
1c3f0 20 20 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20    nField = 0;.  
1c400 70 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20  pKeyInfo = 0;.  
1c410 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  p2 = pOp->p2;.  
1c420 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  iDb = pOp->p3;. 
1c430 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
1c440 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
1c450 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61  ;.  assert( DbMa
1c460 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
1c470 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20 70  ask, iDb) );.  p
1c480 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44  Db = &db->aDb[iD
1c490 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e  b];.  pX = pDb->
1c4a0 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70  pBt;.  assert( p
1c4b0 58 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f  X!=0 );.  if( pO
1c4c0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70  p->opcode==OP_Op
1c4d0 65 6e 57 72 69 74 65 20 29 7b 0a 20 20 20 20 61  enWrite ){.    a
1c4e0 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 46 4f  ssert( OPFLAG_FO
1c4f0 52 44 45 4c 45 54 45 3d 3d 42 54 52 45 45 5f 46  RDELETE==BTREE_F
1c500 4f 52 44 45 4c 45 54 45 20 29 3b 0a 20 20 20 20  ORDELETE );.    
1c510 77 72 46 6c 61 67 20 3d 20 42 54 52 45 45 5f 57  wrFlag = BTREE_W
1c520 52 43 53 52 20 7c 20 28 70 4f 70 2d 3e 70 35 20  RCSR | (pOp->p5 
1c530 26 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45  & OPFLAG_FORDELE
1c540 54 45 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  TE);.    assert(
1c550 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75   sqlite3SchemaMu
1c560 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c  texHeld(db, iDb,
1c570 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20 70   0) );.    if( p
1c580 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c  Db->pSchema->fil
1c590 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69  e_format < p->mi
1c5a0 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
1c5b0 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e   ){.      p->min
1c5c0 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20  WriteFileFormat 
1c5d0 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e  = pDb->pSchema->
1c5e0 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20  file_format;.   
1c5f0 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
1c600 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a  wrFlag = 0;.  }.
1c610 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
1c620 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 29  OPFLAG_P2ISREG )
1c630 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32  {.    assert( p2
1c640 3e 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  >0 );.    assert
1c650 28 20 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ( p2<=(p->nMem+1
1c660 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
1c670 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26 61 4d  ;.    pIn2 = &aM
1c680 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61 73 73 65  em[p2];.    asse
1c690 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
1c6a0 49 6e 32 29 20 29 3b 0a 20 20 20 20 61 73 73 65  In2) );.    asse
1c6b0 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73  rt( (pIn2->flags
1c6c0 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
1c6d0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
1c6e0 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
1c6f0 49 6e 32 29 3b 0a 20 20 20 20 70 32 20 3d 20 28  In2);.    p2 = (
1c700 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  int)pIn2->u.i;. 
1c710 20 20 20 2f 2a 20 54 68 65 20 70 32 20 76 61 6c     /* The p2 val
1c720 75 65 20 61 6c 77 61 79 73 20 63 6f 6d 65 73 20  ue always comes 
1c730 66 72 6f 6d 20 61 20 70 72 69 6f 72 20 4f 50 5f  from a prior OP_
1c740 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70 63 6f  CreateTable opco
1c750 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a 20 74 68  de and.    ** th
1c760 61 74 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61  at opcode will a
1c770 6c 77 61 79 73 20 73 65 74 20 74 68 65 20 70 32  lways set the p2
1c780 20 76 61 6c 75 65 20 74 6f 20 32 20 6f 72 20 6d   value to 2 or m
1c790 6f 72 65 20 6f 72 20 65 6c 73 65 20 66 61 69 6c  ore or else fail
1c7a0 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68 65 72  ..    ** If ther
1c7b0 65 20 77 65 72 65 20 61 20 66 61 69 6c 75 72 65  e were a failure
1c7c0 2c 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  , the prepared s
1c7d0 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68  tatement would h
1c7e0 61 76 65 20 68 61 6c 74 65 64 0a 20 20 20 20 2a  ave halted.    *
1c7f0 2a 20 62 65 66 6f 72 65 20 72 65 61 63 68 69 6e  * before reachin
1c800 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  g this instructi
1c810 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 73 73 65 72  on. */.    asser
1c820 74 28 20 70 32 3e 3d 32 20 29 3b 0a 20 20 7d 0a  t( p2>=2 );.  }.
1c830 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
1c840 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 7b  e==P4_KEYINFO ){
1c850 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20  .    pKeyInfo = 
1c860 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
1c870 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b  ;.    assert( pK
1c880 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43  eyInfo->enc==ENC
1c890 28 64 62 29 20 29 3b 0a 20 20 20 20 61 73 73 65  (db) );.    asse
1c8a0 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62  rt( pKeyInfo->db
1c8b0 3d 3d 64 62 20 29 3b 0a 20 20 20 20 6e 46 69 65  ==db );.    nFie
1c8c0 6c 64 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e  ld = pKeyInfo->n
1c8d0 46 69 65 6c 64 2b 70 4b 65 79 49 6e 66 6f 2d 3e  Field+pKeyInfo->
1c8e0 6e 58 46 69 65 6c 64 3b 0a 20 20 7d 65 6c 73 65  nXField;.  }else
1c8f0 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
1c900 3d 3d 50 34 5f 49 4e 54 33 32 20 29 7b 0a 20 20  ==P4_INT32 ){.  
1c910 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e    nField = pOp->
1c920 70 34 2e 69 3b 0a 20 20 7d 0a 20 20 61 73 73 65  p4.i;.  }.  asse
1c930 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
1c940 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69 65  ;.  assert( nFie
1c950 6c 64 3e 3d 30 20 29 3b 0a 20 20 74 65 73 74 63  ld>=0 );.  testc
1c960 61 73 65 28 20 6e 46 69 65 6c 64 3d 3d 30 20 29  ase( nField==0 )
1c970 3b 20 20 2f 2a 20 54 61 62 6c 65 20 77 69 74 68  ;  /* Table with
1c980 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
1c990 20 4b 45 59 20 61 6e 64 20 6e 6f 74 68 69 6e 67   KEY and nothing
1c9a0 20 65 6c 73 65 20 2a 2f 0a 20 20 70 43 75 72 20   else */.  pCur 
1c9b0 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
1c9c0 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e 46 69  (p, pOp->p1, nFi
1c9d0 65 6c 64 2c 20 69 44 62 2c 20 43 55 52 54 59 50  eld, iDb, CURTYP
1c9e0 45 5f 42 54 52 45 45 29 3b 0a 20 20 69 66 28 20  E_BTREE);.  if( 
1c9f0 70 43 75 72 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  pCur==0 ) goto n
1ca00 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e  o_mem;.  pCur->n
1ca10 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43  ullRow = 1;.  pC
1ca20 75 72 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20  ur->isOrdered = 
1ca30 31 3b 0a 20 20 70 43 75 72 2d 3e 70 67 6e 6f 52  1;.  pCur->pgnoR
1ca40 6f 6f 74 20 3d 20 70 32 3b 0a 23 69 66 64 65 66  oot = p2;.#ifdef
1ca50 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
1ca60 70 43 75 72 2d 3e 77 72 46 6c 61 67 20 3d 20 77  pCur->wrFlag = w
1ca70 72 46 6c 61 67 3b 0a 23 65 6e 64 69 66 0a 20 20  rFlag;.#endif.  
1ca80 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1ca90 65 43 75 72 73 6f 72 28 70 58 2c 20 70 32 2c 20  eCursor(pX, p2, 
1caa0 77 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e 66 6f  wrFlag, pKeyInfo
1cab0 2c 20 70 43 75 72 2d 3e 75 63 2e 70 43 75 72 73  , pCur->uc.pCurs
1cac0 6f 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b 65  or);.  pCur->pKe
1cad0 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f  yInfo = pKeyInfo
1cae0 3b 0a 20 20 2f 2a 20 53 65 74 20 74 68 65 20 56  ;.  /* Set the V
1caf0 64 62 65 43 75 72 73 6f 72 2e 69 73 54 61 62 6c  dbeCursor.isTabl
1cb00 65 20 76 61 72 69 61 62 6c 65 2e 20 50 72 65 76  e variable. Prev
1cb10 69 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f 66  ious versions of
1cb20 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 75 73 65  .  ** SQLite use
1cb30 64 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74 68  d to check if th
1cb40 65 20 72 6f 6f 74 2d 70 61 67 65 20 66 6c 61 67  e root-page flag
1cb50 73 20 77 65 72 65 20 73 61 6e 65 20 61 74 20 74  s were sane at t
1cb60 68 69 73 20 70 6f 69 6e 74 0a 20 20 2a 2a 20 61  his point.  ** a
1cb70 6e 64 20 72 65 70 6f 72 74 20 64 61 74 61 62 61  nd report databa
1cb80 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 20 69 66  se corruption if
1cb90 20 74 68 65 79 20 77 65 72 65 20 6e 6f 74 2c 20   they were not, 
1cba0 62 75 74 20 74 68 69 73 20 63 68 65 63 6b 20 68  but this check h
1cbb0 61 73 0a 20 20 2a 2a 20 73 69 6e 63 65 20 6d 6f  as.  ** since mo
1cbc0 76 65 64 20 69 6e 74 6f 20 74 68 65 20 62 74 72  ved into the btr
1cbd0 65 65 20 6c 61 79 65 72 2e 20 20 2a 2f 20 20 0a  ee layer.  */  .
1cbe0 20 20 70 43 75 72 2d 3e 69 73 54 61 62 6c 65 20    pCur->isTable 
1cbf0 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d 50  = pOp->p4type!=P
1cc00 34 5f 4b 45 59 49 4e 46 4f 3b 0a 0a 6f 70 65 6e  4_KEYINFO;..open
1cc10 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68 69 6e 74  _cursor_set_hint
1cc20 73 3a 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46  s:.  assert( OPF
1cc30 4c 41 47 5f 42 55 4c 4b 43 53 52 3d 3d 42 54 52  LAG_BULKCSR==BTR
1cc40 45 45 5f 42 55 4c 4b 4c 4f 41 44 20 29 3b 0a 20  EE_BULKLOAD );. 
1cc50 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f   assert( OPFLAG_
1cc60 53 45 45 4b 45 51 3d 3d 42 54 52 45 45 5f 53 45  SEEKEQ==BTREE_SE
1cc70 45 4b 5f 45 51 20 29 3b 0a 20 20 74 65 73 74 63  EK_EQ );.  testc
1cc80 61 73 65 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f  ase( pOp->p5 & O
1cc90 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 29 3b  PFLAG_BULKCSR );
1cca0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
1ccb0 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e  NABLE_CURSOR_HIN
1ccc0 54 53 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  TS.  testcase( p
1ccd0 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f  Op->p2 & OPFLAG_
1cce0 53 45 45 4b 45 51 20 29 3b 0a 23 65 6e 64 69 66  SEEKEQ );.#endif
1ccf0 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  .  sqlite3BtreeC
1cd00 75 72 73 6f 72 48 69 6e 74 46 6c 61 67 73 28 70  ursorHintFlags(p
1cd10 43 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  Cur->uc.pCursor,
1cd20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd40 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c  (pOp->p5 & (OPFL
1cd50 41 47 5f 42 55 4c 4b 43 53 52 7c 4f 50 46 4c 41  AG_BULKCSR|OPFLA
1cd60 47 5f 53 45 45 4b 45 51 29 29 29 3b 0a 20 20 69  G_SEEKEQ)));.  i
1cd70 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
1cd80 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1cd90 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1cda0 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65  Opcode: OpenEphe
1cdb0 6d 65 72 61 6c 20 50 31 20 50 32 20 2a 20 50 34  meral P1 P2 * P4
1cdc0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
1cdd0 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a   nColumn=P2.**.*
1cde0 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72  * Open a new cur
1cdf0 73 6f 72 20 50 31 20 74 6f 20 61 20 74 72 61 6e  sor P1 to a tran
1ce00 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a 20  sient table..** 
1ce10 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c  The cursor is al
1ce20 77 61 79 73 20 6f 70 65 6e 65 64 20 72 65 61 64  ways opened read
1ce30 2f 77 72 69 74 65 20 65 76 65 6e 20 69 66 20 0a  /write even if .
1ce40 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ** the main data
1ce50 62 61 73 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c  base is read-onl
1ce60 79 2e 20 20 54 68 65 20 65 70 68 65 6d 65 72 61  y.  The ephemera
1ce70 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73 20 64 65  l.** table is de
1ce80 6c 65 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61  leted automatica
1ce90 6c 6c 79 20 77 68 65 6e 20 74 68 65 20 63 75 72  lly when the cur
1cea0 73 6f 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a  sor is closed..*
1ceb0 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e  *.** P2 is the n
1cec0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
1ced0 20 69 6e 20 74 68 65 20 65 70 68 65 6d 65 72 61   in the ephemera
1cee0 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20  l table..** The 
1cef0 63 75 72 73 6f 72 20 70 6f 69 6e 74 73 20 74 6f  cursor points to
1cf00 20 61 20 42 54 72 65 65 20 74 61 62 6c 65 20 69   a BTree table i
1cf10 66 20 50 34 3d 3d 30 20 61 6e 64 20 74 6f 20 61  f P4==0 and to a
1cf20 20 42 54 72 65 65 20 69 6e 64 65 78 0a 2a 2a 20   BTree index.** 
1cf30 69 66 20 50 34 20 69 73 20 6e 6f 74 20 30 2e 20  if P4 is not 0. 
1cf40 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55   If P4 is not NU
1cf50 4c 4c 2c 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  LL, it points to
1cf60 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
1cf70 74 75 72 65 0a 2a 2a 20 74 68 61 74 20 64 65 66  ture.** that def
1cf80 69 6e 65 73 20 74 68 65 20 66 6f 72 6d 61 74 20  ines the format 
1cf90 6f 66 20 6b 65 79 73 20 69 6e 20 74 68 65 20 69  of keys in the i
1cfa0 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ndex..**.** The 
1cfb0 50 35 20 70 61 72 61 6d 65 74 65 72 20 63 61 6e  P5 parameter can
1cfc0 20 62 65 20 61 20 6d 61 73 6b 20 6f 66 20 74 68   be a mask of th
1cfd0 65 20 42 54 52 45 45 5f 2a 20 66 6c 61 67 73 20  e BTREE_* flags 
1cfe0 64 65 66 69 6e 65 64 0a 2a 2a 20 69 6e 20 62 74  defined.** in bt
1cff0 72 65 65 2e 68 2e 20 20 54 68 65 73 65 20 66 6c  ree.h.  These fl
1d000 61 67 73 20 63 6f 6e 74 72 6f 6c 20 61 73 70 65  ags control aspe
1d010 63 74 73 20 6f 66 20 74 68 65 20 6f 70 65 72 61  cts of the opera
1d020 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 62  tion of.** the b
1d030 74 72 65 65 2e 20 20 54 68 65 20 42 54 52 45 45  tree.  The BTREE
1d040 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 61 6e  _OMIT_JOURNAL an
1d050 64 20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20 66  d BTREE_SINGLE f
1d060 6c 61 67 73 20 61 72 65 0a 2a 2a 20 61 64 64 65  lags are.** adde
1d070 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e  d automatically.
1d080 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .*/./* Opcode: O
1d090 70 65 6e 41 75 74 6f 69 6e 64 65 78 20 50 31 20  penAutoindex P1 
1d0a0 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
1d0b0 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50  opsis: nColumn=P
1d0c0 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  2.**.** This opc
1d0d0 6f 64 65 20 77 6f 72 6b 73 20 74 68 65 20 73 61  ode works the sa
1d0e0 6d 65 20 61 73 20 4f 50 5f 4f 70 65 6e 45 70 68  me as OP_OpenEph
1d0f0 65 6d 65 72 61 6c 2e 20 20 49 74 20 68 61 73 20  emeral.  It has 
1d100 61 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 6e  a.** different n
1d110 61 6d 65 20 74 6f 20 64 69 73 74 69 6e 67 75 69  ame to distingui
1d120 73 68 20 69 74 73 20 75 73 65 2e 20 20 54 61 62  sh its use.  Tab
1d130 6c 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e  les created usin
1d140 67 0a 2a 2a 20 62 79 20 74 68 69 73 20 6f 70 63  g.** by this opc
1d150 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64  ode will be used
1d160 20 66 6f 72 20 61 75 74 6f 6d 61 74 69 63 61 6c   for automatical
1d170 6c 79 20 63 72 65 61 74 65 64 20 74 72 61 6e 73  ly created trans
1d180 69 65 6e 74 0a 2a 2a 20 69 6e 64 69 63 65 73 20  ient.** indices 
1d190 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63 61 73  in joins..*/.cas
1d1a0 65 20 4f 50 5f 4f 70 65 6e 41 75 74 6f 69 6e 64  e OP_OpenAutoind
1d1b0 65 78 3a 20 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ex: .case OP_Ope
1d1c0 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b 0a 20 20  nEphemeral: {.  
1d1d0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b  VdbeCursor *pCx;
1d1e0 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  .  KeyInfo *pKey
1d1f0 49 6e 66 6f 3b 0a 0a 20 20 73 74 61 74 69 63 20  Info;..  static 
1d200 63 6f 6e 73 74 20 69 6e 74 20 76 66 73 46 6c 61  const int vfsFla
1d210 67 73 20 3d 20 0a 20 20 20 20 20 20 53 51 4c 49  gs = .      SQLI
1d220 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49 54  TE_OPEN_READWRIT
1d230 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
1d240 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20 7c 0a 20  _OPEN_CREATE |. 
1d250 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
1d260 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a 20 20 20  _EXCLUSIVE |.   
1d270 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 44     SQLITE_OPEN_D
1d280 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20  ELETEONCLOSE |. 
1d290 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
1d2a0 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42 3b 0a 20  _TRANSIENT_DB;. 
1d2b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1d2c0 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  >=0 );.  assert(
1d2d0 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20   pOp->p2>=0 );. 
1d2e0 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43   pCx = allocateC
1d2f0 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
1d300 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 43  , pOp->p2, -1, C
1d310 55 52 54 59 50 45 5f 42 54 52 45 45 29 3b 0a 20  URTYPE_BTREE);. 
1d320 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f   if( pCx==0 ) go
1d330 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78  to no_mem;.  pCx
1d340 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
1d350 20 70 43 78 2d 3e 69 73 45 70 68 65 6d 65 72 61   pCx->isEphemera
1d360 6c 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71  l = 1;.  rc = sq
1d370 6c 69 74 65 33 42 74 72 65 65 4f 70 65 6e 28 64  lite3BtreeOpen(d
1d380 62 2d 3e 70 56 66 73 2c 20 30 2c 20 64 62 2c 20  b->pVfs, 0, db, 
1d390 26 70 43 78 2d 3e 70 42 74 78 2c 20 0a 20 20 20  &pCx->pBtx, .   
1d3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d3b0 20 20 20 20 20 42 54 52 45 45 5f 4f 4d 49 54 5f       BTREE_OMIT_
1d3c0 4a 4f 55 52 4e 41 4c 20 7c 20 42 54 52 45 45 5f  JOURNAL | BTREE_
1d3d0 53 49 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e 70 35  SINGLE | pOp->p5
1d3e0 2c 20 76 66 73 46 6c 61 67 73 29 3b 0a 20 20 69  , vfsFlags);.  i
1d3f0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
1d400 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
1d410 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72  ite3BtreeBeginTr
1d420 61 6e 73 28 70 43 78 2d 3e 70 42 74 78 2c 20 31  ans(pCx->pBtx, 1
1d430 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d  );.  }.  if( rc=
1d440 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1d450 20 20 2f 2a 20 49 66 20 61 20 74 72 61 6e 73 69    /* If a transi
1d460 65 6e 74 20 69 6e 64 65 78 20 69 73 20 72 65 71  ent index is req
1d470 75 69 72 65 64 2c 20 63 72 65 61 74 65 20 69 74  uired, create it
1d480 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20   by calling.    
1d490 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  ** sqlite3BtreeC
1d4a0 72 65 61 74 65 54 61 62 6c 65 28 29 20 77 69 74  reateTable() wit
1d4b0 68 20 74 68 65 20 42 54 52 45 45 5f 42 4c 4f 42  h the BTREE_BLOB
1d4c0 4b 45 59 20 66 6c 61 67 20 62 65 66 6f 72 65 0a  KEY flag before.
1d4d0 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69      ** opening i
1d4e0 74 2e 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e  t. If a transien
1d4f0 74 20 74 61 62 6c 65 20 69 73 20 72 65 71 75 69  t table is requi
1d500 72 65 64 2c 20 6a 75 73 74 20 75 73 65 20 74 68  red, just use th
1d510 65 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74  e.    ** automat
1d520 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74  ically created t
1d530 61 62 6c 65 20 77 69 74 68 20 72 6f 6f 74 2d 70  able with root-p
1d540 61 67 65 20 31 20 28 61 6e 20 42 4c 4f 42 5f 49  age 1 (an BLOB_I
1d550 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a 20 20  NTKEY table)..  
1d560 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 70 43    */.    if( (pC
1d570 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b  x->pKeyInfo = pK
1d580 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34  eyInfo = pOp->p4
1d590 2e 70 4b 65 79 49 6e 66 6f 29 21 3d 30 20 29 7b  .pKeyInfo)!=0 ){
1d5a0 0a 20 20 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b  .      int pgno;
1d5b0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
1d5c0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b  Op->p4type==P4_K
1d5d0 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20  EYINFO );.      
1d5e0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1d5f0 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 43 78  eCreateTable(pCx
1d600 2d 3e 70 42 74 78 2c 20 26 70 67 6e 6f 2c 20 42  ->pBtx, &pgno, B
1d610 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 7c 20 70  TREE_BLOBKEY | p
1d620 4f 70 2d 3e 70 35 29 3b 20 0a 20 20 20 20 20 20  Op->p5); .      
1d630 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
1d640 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  K ){.        ass
1d650 65 72 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45  ert( pgno==MASTE
1d660 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20  R_ROOT+1 );.    
1d670 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79      assert( pKey
1d680 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a  Info->db==db );.
1d690 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1d6a0 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45  pKeyInfo->enc==E
1d6b0 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20 20 20  NC(db) );.      
1d6c0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1d6d0 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70  reeCursor(pCx->p
1d6e0 42 74 78 2c 20 70 67 6e 6f 2c 20 42 54 52 45 45  Btx, pgno, BTREE
1d6f0 5f 57 52 43 53 52 2c 0a 20 20 20 20 20 20 20 20  _WRCSR,.        
1d700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d710 20 20 20 20 20 20 20 20 70 4b 65 79 49 6e 66 6f          pKeyInfo
1d720 2c 20 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f  , pCx->uc.pCurso
1d730 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  r);.      }.    
1d740 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d    pCx->isTable =
1d750 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   0;.    }else{. 
1d760 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1d770 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43 78  3BtreeCursor(pCx
1d780 2d 3e 70 42 74 78 2c 20 4d 41 53 54 45 52 5f 52  ->pBtx, MASTER_R
1d790 4f 4f 54 2c 20 42 54 52 45 45 5f 57 52 43 53 52  OOT, BTREE_WRCSR
1d7a0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1d7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d7c0 30 2c 20 70 43 78 2d 3e 75 63 2e 70 43 75 72 73  0, pCx->uc.pCurs
1d7d0 6f 72 29 3b 0a 20 20 20 20 20 20 70 43 78 2d 3e  or);.      pCx->
1d7e0 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 20  isTable = 1;.   
1d7f0 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20   }.  }.  if( rc 
1d800 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
1d810 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 43 78  _to_error;.  pCx
1d820 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 28 70  ->isOrdered = (p
1d830 4f 70 2d 3e 70 35 21 3d 42 54 52 45 45 5f 55 4e  Op->p5!=BTREE_UN
1d840 4f 52 44 45 52 45 44 29 3b 0a 20 20 62 72 65 61  ORDERED);.  brea
1d850 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1d860 20 53 6f 72 74 65 72 4f 70 65 6e 20 50 31 20 50   SorterOpen P1 P
1d870 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
1d880 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b  This opcode work
1d890 73 20 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e 45 70  s like OP_OpenEp
1d8a0 68 65 6d 65 72 61 6c 20 65 78 63 65 70 74 20 74  hemeral except t
1d8b0 68 61 74 20 69 74 20 6f 70 65 6e 73 0a 2a 2a 20  hat it opens.** 
1d8c0 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65  a transient inde
1d8d0 78 20 74 68 61 74 20 69 73 20 73 70 65 63 69 66  x that is specif
1d8e0 69 63 61 6c 6c 79 20 64 65 73 69 67 6e 65 64 20  ically designed 
1d8f0 74 6f 20 73 6f 72 74 20 6c 61 72 67 65 0a 2a 2a  to sort large.**
1d900 20 74 61 62 6c 65 73 20 75 73 69 6e 67 20 61 6e   tables using an
1d910 20 65 78 74 65 72 6e 61 6c 20 6d 65 72 67 65 2d   external merge-
1d920 73 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d 2e 0a  sort algorithm..
1d930 2a 2a 0a 2a 2a 20 49 66 20 61 72 67 75 6d 65 6e  **.** If argumen
1d940 74 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  t P3 is non-zero
1d950 2c 20 74 68 65 6e 20 69 74 20 69 6e 64 69 63 61  , then it indica
1d960 74 65 73 20 74 68 61 74 20 74 68 65 20 73 6f 72  tes that the sor
1d970 74 65 72 20 6d 61 79 0a 2a 2a 20 61 73 73 75 6d  ter may.** assum
1d980 65 20 74 68 61 74 20 61 20 73 74 61 62 6c 65 20  e that a stable 
1d990 73 6f 72 74 20 63 6f 6e 73 69 64 65 72 69 6e 67  sort considering
1d9a0 20 74 68 65 20 66 69 72 73 74 20 50 33 20 66 69   the first P3 fi
1d9b0 65 6c 64 73 20 6f 66 20 65 61 63 68 0a 2a 2a 20  elds of each.** 
1d9c0 6b 65 79 20 69 73 20 73 75 66 66 69 63 69 65 6e  key is sufficien
1d9d0 74 20 74 6f 20 70 72 6f 64 75 63 65 20 74 68 65  t to produce the
1d9e0 20 72 65 71 75 69 72 65 64 20 72 65 73 75 6c 74   required result
1d9f0 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  s..*/.case OP_So
1da00 72 74 65 72 4f 70 65 6e 3a 20 7b 0a 20 20 56 64  rterOpen: {.  Vd
1da10 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a  beCursor *pCx;..
1da20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1da30 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  1>=0 );.  assert
1da40 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a  ( pOp->p2>=0 );.
1da50 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65    pCx = allocate
1da60 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
1da70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20  1, pOp->p2, -1, 
1da80 43 55 52 54 59 50 45 5f 53 4f 52 54 45 52 29 3b  CURTYPE_SORTER);
1da90 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20  .  if( pCx==0 ) 
1daa0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
1dab0 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70  Cx->pKeyInfo = p
1dac0 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b  Op->p4.pKeyInfo;
1dad0 0a 20 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e  .  assert( pCx->
1dae0 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62  pKeyInfo->db==db
1daf0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1db00 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63  x->pKeyInfo->enc
1db10 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 72  ==ENC(db) );.  r
1db20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
1db30 6f 72 74 65 72 49 6e 69 74 28 64 62 2c 20 70 4f  orterInit(db, pO
1db40 70 2d 3e 70 33 2c 20 70 43 78 29 3b 0a 20 20 69  p->p3, pCx);.  i
1db50 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
1db60 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1db70 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1db80 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63 65  Opcode: Sequence
1db90 54 65 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  Test P1 P2 * * *
1dba0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
1dbb0 28 20 63 75 72 73 6f 72 5b 50 31 5d 2e 63 74 72  ( cursor[P1].ctr
1dbc0 2b 2b 20 29 20 70 63 20 3d 20 50 32 0a 2a 2a 0a  ++ ) pc = P2.**.
1dbd0 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72 74 65  ** P1 is a sorte
1dbe0 72 20 63 75 72 73 6f 72 2e 20 49 66 20 74 68 65  r cursor. If the
1dbf0 20 73 65 71 75 65 6e 63 65 20 63 6f 75 6e 74 65   sequence counte
1dc00 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 7a  r is currently z
1dc10 65 72 6f 2c 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20  ero, jump.** to 
1dc20 50 32 2e 20 52 65 67 61 72 64 6c 65 73 73 20 6f  P2. Regardless o
1dc30 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  f whether or not
1dc40 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
1dc50 65 6e 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68  en, increment th
1dc60 65 0a 2a 2a 20 74 68 65 20 73 65 71 75 65 6e 63  e.** the sequenc
1dc70 65 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65  e value..*/.case
1dc80 20 4f 50 5f 53 65 71 75 65 6e 63 65 54 65 73 74   OP_SequenceTest
1dc90 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
1dca0 20 2a 70 43 3b 0a 20 20 61 73 73 65 72 74 28 20   *pC;.  assert( 
1dcb0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1dcc0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1dcd0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
1dce0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
1dcf0 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72  assert( isSorter
1dd00 28 70 43 29 20 29 3b 0a 20 20 69 66 28 20 28 70  (pC) );.  if( (p
1dd10 43 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 29 3d 3d  C->seqCount++)==
1dd20 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75  0 ){.    goto ju
1dd30 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
1dd40 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1dd50 6f 64 65 3a 20 4f 70 65 6e 50 73 65 75 64 6f 20  ode: OpenPseudo 
1dd60 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
1dd70 53 79 6e 6f 70 73 69 73 3a 20 50 33 20 63 6f 6c  Synopsis: P3 col
1dd80 75 6d 6e 73 20 69 6e 20 72 5b 50 32 5d 0a 2a 2a  umns in r[P2].**
1dd90 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63  .** Open a new c
1dda0 75 72 73 6f 72 20 74 68 61 74 20 70 6f 69 6e 74  ursor that point
1ddb0 73 20 74 6f 20 61 20 66 61 6b 65 20 74 61 62 6c  s to a fake tabl
1ddc0 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  e that contains 
1ddd0 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20  a single.** row 
1dde0 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20 63 6f  of data.  The co
1ddf0 6e 74 65 6e 74 20 6f 66 20 74 68 61 74 20 6f 6e  ntent of that on
1de00 65 20 72 6f 77 20 69 73 20 74 68 65 20 63 6f 6e  e row is the con
1de10 74 65 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a  tent of memory.*
1de20 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  * register P2.  
1de30 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
1de40 63 75 72 73 6f 72 20 50 31 20 62 65 63 6f 6d 65  cursor P1 become
1de50 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  s an alias for t
1de60 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f 62 20  he .** MEM_Blob 
1de70 63 6f 6e 74 65 6e 74 20 63 6f 6e 74 61 69 6e 65  content containe
1de80 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  d in register P2
1de90 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73 65 75 64 6f  ..**.** A pseudo
1dea0 2d 74 61 62 6c 65 20 63 72 65 61 74 65 64 20 62  -table created b
1deb0 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  y this opcode is
1dec0 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 61 20   used to hold a 
1ded0 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75  single.** row ou
1dee0 74 70 75 74 20 66 72 6f 6d 20 74 68 65 20 73 6f  tput from the so
1def0 72 74 65 72 20 73 6f 20 74 68 61 74 20 74 68 65  rter so that the
1df00 20 72 6f 77 20 63 61 6e 20 62 65 20 64 65 63 6f   row can be deco
1df10 6d 70 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a 20 69  mposed into.** i
1df20 6e 64 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e  ndividual column
1df30 73 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 43  s using the OP_C
1df40 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 20 20 54  olumn opcode.  T
1df50 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  he OP_Column opc
1df60 6f 64 65 0a 2a 2a 20 69 73 20 74 68 65 20 6f 6e  ode.** is the on
1df70 6c 79 20 63 75 72 73 6f 72 20 6f 70 63 6f 64 65  ly cursor opcode
1df80 20 74 68 61 74 20 77 6f 72 6b 73 20 77 69 74 68   that works with
1df90 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
1dfa0 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 74 68 65  .**.** P3 is the
1dfb0 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64   number of field
1dfc0 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 73  s in the records
1dfd0 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 73 74   that will be st
1dfe0 6f 72 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 70  ored by.** the p
1dff0 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a  seudo-table..*/.
1e000 63 61 73 65 20 4f 50 5f 4f 70 65 6e 50 73 65 75  case OP_OpenPseu
1e010 64 6f 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  do: {.  VdbeCurs
1e020 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65  or *pCx;..  asse
1e030 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
1e040 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1e050 3e 70 33 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20  >p3>=0 );.  pCx 
1e060 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
1e070 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  (p, pOp->p1, pOp
1e080 2d 3e 70 33 2c 20 2d 31 2c 20 43 55 52 54 59 50  ->p3, -1, CURTYP
1e090 45 5f 50 53 45 55 44 4f 29 3b 0a 20 20 69 66 28  E_PSEUDO);.  if(
1e0a0 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e   pCx==0 ) goto n
1e0b0 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75  o_mem;.  pCx->nu
1e0c0 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78  llRow = 1;.  pCx
1e0d0 2d 3e 75 63 2e 70 73 65 75 64 6f 54 61 62 6c 65  ->uc.pseudoTable
1e0e0 52 65 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  Reg = pOp->p2;. 
1e0f0 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20   pCx->isTable = 
1e100 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  1;.  assert( pOp
1e110 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 62 72 65  ->p5==0 );.  bre
1e120 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1e130 3a 20 43 6c 6f 73 65 20 50 31 20 2a 20 2a 20 2a  : Close P1 * * *
1e140 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61   *.**.** Close a
1e150 20 63 75 72 73 6f 72 20 70 72 65 76 69 6f 75 73   cursor previous
1e160 6c 79 20 6f 70 65 6e 65 64 20 61 73 20 50 31 2e  ly opened as P1.
1e170 20 20 49 66 20 50 31 20 69 73 20 6e 6f 74 0a 2a    If P1 is not.*
1e180 2a 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e  * currently open
1e190 2c 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  , this instructi
1e1a0 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  on is a no-op..*
1e1b0 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 6f 73 65 3a  /.case OP_Close:
1e1c0 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
1e1d0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1e1e0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1e1f0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72  .  sqlite3VdbeFr
1e200 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61  eeCursor(p, p->a
1e210 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a  pCsr[pOp->p1]);.
1e220 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e    p->apCsr[pOp->
1e230 70 31 5d 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b  p1] = 0;.  break
1e240 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  ;.}..#ifdef SQLI
1e250 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e  TE_ENABLE_COLUMN
1e260 5f 55 53 45 44 5f 4d 41 53 4b 0a 2f 2a 20 4f 70  _USED_MASK./* Op
1e270 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 73 55 73 65  code: ColumnsUse
1e280 64 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  d P1 * * P4 *.**
1e290 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
1e2a0 28 77 68 69 63 68 20 6f 6e 6c 79 20 65 78 69 73  (which only exis
1e2b0 74 73 20 69 66 20 53 51 4c 69 74 65 20 77 61 73  ts if SQLite was
1e2c0 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 0a 2a   compiled with.*
1e2d0 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
1e2e0 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f 4d 41 53 4b  COLUMN_USED_MASK
1e2f0 29 20 69 64 65 6e 74 69 66 69 65 73 20 77 68 69  ) identifies whi
1e300 63 68 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  ch columns of th
1e310 65 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e  e.** table or in
1e320 64 65 78 20 66 6f 72 20 63 75 72 73 6f 72 20 50  dex for cursor P
1e330 31 20 61 72 65 20 75 73 65 64 2e 20 20 50 34 20  1 are used.  P4 
1e340 69 73 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65  is a 64-bit inte
1e350 67 65 72 0a 2a 2a 20 28 50 34 5f 49 4e 54 36 34  ger.** (P4_INT64
1e360 29 20 69 6e 20 77 68 69 63 68 20 74 68 65 20 66  ) in which the f
1e370 69 72 73 74 20 36 33 20 62 69 74 73 20 61 72 65  irst 63 bits are
1e380 20 6f 6e 65 20 66 6f 72 20 65 61 63 68 20 6f 66   one for each of
1e390 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 36 33   the.** first 63
1e3a0 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20   columns of the 
1e3b0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 74  table or index t
1e3c0 68 61 74 20 61 72 65 20 61 63 74 75 61 6c 6c 79  hat are actually
1e3d0 20 75 73 65 64 0a 2a 2a 20 62 79 20 74 68 65 20   used.** by the 
1e3e0 63 75 72 73 6f 72 2e 20 20 54 68 65 20 68 69 67  cursor.  The hig
1e3f0 68 2d 6f 72 64 65 72 20 62 69 74 20 69 73 20 73  h-order bit is s
1e400 65 74 20 69 66 20 61 6e 79 20 63 6f 6c 75 6d 6e  et if any column
1e410 20 61 66 74 65 72 0a 2a 2a 20 74 68 65 20 36 34   after.** the 64
1e420 74 68 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 63  th is used..*/.c
1e430 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 73 55 73  ase OP_ColumnsUs
1e440 65 64 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  ed: {.  VdbeCurs
1e450 6f 72 20 2a 70 43 3b 0a 20 20 70 43 20 3d 20 70  or *pC;.  pC = p
1e460 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1e470 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1e480 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
1e490 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43 2d  E_BTREE );.  pC-
1e4a0 3e 6d 61 73 6b 55 73 65 64 20 3d 20 2a 28 75 36  >maskUsed = *(u6
1e4b0 34 2a 29 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b  4*)pOp->p4.pI64;
1e4c0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
1e4d0 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  if../* Opcode: S
1e4e0 65 65 6b 47 45 20 50 31 20 50 32 20 50 33 20 50  eekGE P1 P2 P3 P
1e4f0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
1e500 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
1e510 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
1e520 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
1e530 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
1e540 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
1e550 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
1e560 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
1e570 67 69 73 74 65 72 20 50 33 20 61 73 20 74 68 65  gister P3 as the
1e580 20 6b 65 79 2e 20 20 49 66 20 63 75 72 73 6f 72   key.  If cursor
1e590 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74   P1 refers .** t
1e5a0 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20  o an SQL index, 
1e5b0 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66  then P3 is the f
1e5c0 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79  irst in an array
1e5d0 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
1e5e0 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73   .** that are us
1e5f0 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65  ed as an unpacke
1e600 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a  d index key. .**
1e610 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63  .** Reposition c
1e620 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
1e630 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74    it points to t
1e640 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72  he smallest entr
1e650 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72  y that .** is gr
1e660 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
1e670 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76  ual to the key v
1e680 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
1e690 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a  re no records .*
1e6a0 2a 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  * greater than o
1e6b0 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
1e6c0 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74  ey and P2 is not
1e6d0 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70   zero, then jump
1e6e0 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66   to P2..**.** If
1e6f0 20 74 68 65 20 63 75 72 73 6f 72 20 50 31 20 77   the cursor P1 w
1e700 61 73 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20  as opened using 
1e710 74 68 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45  the OPFLAG_SEEKE
1e720 51 20 66 6c 61 67 2c 20 74 68 65 6e 20 74 68 69  Q flag, then thi
1e730 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 77 69 6c 6c  s.** opcode will
1e740 20 61 6c 77 61 79 73 20 6c 61 6e 64 20 6f 6e 20   always land on 
1e750 61 20 72 65 63 6f 72 64 20 74 68 61 74 20 65 71  a record that eq
1e760 75 61 6c 6c 79 20 65 71 75 61 6c 73 20 74 68 65  ually equals the
1e770 20 6b 65 79 2c 20 6f 72 0a 2a 2a 20 65 6c 73 65   key, or.** else
1e780 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
1e790 79 20 74 6f 20 50 32 2e 20 20 57 68 65 6e 20 74  y to P2.  When t
1e7a0 68 65 20 63 75 72 73 6f 72 20 69 73 20 4f 50 46  he cursor is OPF
1e7b0 4c 41 47 5f 53 45 45 4b 45 51 2c 20 74 68 69 73  LAG_SEEKEQ, this
1e7c0 0a 2a 2a 20 6f 70 63 6f 64 65 20 6d 75 73 74 20  .** opcode must 
1e7d0 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  be followed by a
1e7e0 6e 20 49 64 78 4c 45 20 6f 70 63 6f 64 65 20 77  n IdxLE opcode w
1e7f0 69 74 68 20 74 68 65 20 73 61 6d 65 20 61 72 67  ith the same arg
1e800 75 6d 65 6e 74 73 2e 0a 2a 2a 20 54 68 65 20 49  uments..** The I
1e810 64 78 4c 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c  dxLE opcode will
1e820 20 62 65 20 73 6b 69 70 70 65 64 20 69 66 20 74   be skipped if t
1e830 68 69 73 20 6f 70 63 6f 64 65 20 73 75 63 63 65  his opcode succe
1e840 65 64 73 2c 20 62 75 74 20 74 68 65 0a 2a 2a 20  eds, but the.** 
1e850 49 64 78 4c 45 20 6f 70 63 6f 64 65 20 77 69 6c  IdxLE opcode wil
1e860 6c 20 62 65 20 75 73 65 64 20 6f 6e 20 73 75 62  l be used on sub
1e870 73 65 71 75 65 6e 74 20 6c 6f 6f 70 20 69 74 65  sequent loop ite
1e880 72 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54  rations..**.** T
1e890 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
1e8a0 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e  s the cursor con
1e8b0 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20  figured to move 
1e8c0 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72  in forward order
1e8d0 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65  ,.** from the be
1e8e0 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74  ginning toward t
1e8f0 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65  he end.  In othe
1e900 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72  r words, the cur
1e910 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67  sor is.** config
1e920 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74  ured to use Next
1e930 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a  , not Prev..**.*
1e940 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
1e950 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65  d, NotFound, See
1e960 6b 4c 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65  kLt, SeekGt, See
1e970 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  kLe.*/./* Opcode
1e980 3a 20 53 65 65 6b 47 54 20 50 31 20 50 32 20 50  : SeekGT P1 P2 P
1e990 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
1e9a0 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
1e9b0 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  .**.** If cursor
1e9c0 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e   P1 refers to an
1e9d0 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72   SQL table (B-Tr
1e9e0 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74  ee that uses int
1e9f0 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20  eger keys), .** 
1ea00 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  use the value in
1ea10 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
1ea20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72  a key. If cursor
1ea30 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74   P1 refers .** t
1ea40 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20  o an SQL index, 
1ea50 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66  then P3 is the f
1ea60 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79  irst in an array
1ea70 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
1ea80 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73   .** that are us
1ea90 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65  ed as an unpacke
1eaa0 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a  d index key. .**
1eab0 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63  .** Reposition c
1eac0 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
1ead0 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74    it points to t
1eae0 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72  he smallest entr
1eaf0 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72  y that .** is gr
1eb00 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b  eater than the k
1eb10 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  ey value. If the
1eb20 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
1eb30 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 0a  s greater than .
1eb40 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  ** the key and P
1eb50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
1eb60 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
1eb70 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1eb80 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  e leaves the cur
1eb90 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74  sor configured t
1eba0 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72  o move in forwar
1ebb0 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d  d order,.** from
1ebc0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74   the beginning t
1ebd0 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20  oward the end.  
1ebe0 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
1ebf0 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a  the cursor is.**
1ec00 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75   configured to u
1ec10 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65  se Next, not Pre
1ec20 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  v..**.** See als
1ec30 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1ec40 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b  nd, SeekLt, Seek
1ec50 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a  Ge, SeekLe.*/./*
1ec60 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 54 20   Opcode: SeekLT 
1ec70 50 31 20 50 32 20 50 33 20 50 34 20 2a 20 0a 2a  P1 P2 P3 P4 * .*
1ec80 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
1ec90 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49  r[P3@P4].**.** I
1eca0 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1ecb0 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62  rs to an SQL tab
1ecc0 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20  le (B-Tree that 
1ecd0 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79  uses integer key
1ece0 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20  s), .** use the 
1ecf0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
1ed00 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49  r P3 as a key. I
1ed10 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1ed20 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
1ed30 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
1ed40 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
1ed50 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
1ed60 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
1ed70 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
1ed80 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
1ed90 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
1eda0 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
1edb0 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69   so that  it poi
1edc0 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65  nts to the large
1edd0 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
1ede0 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  * is less than t
1edf0 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
1ee00 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1ee10 63 6f 72 64 73 20 6c 65 73 73 20 74 68 61 6e 20  cords less than 
1ee20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20  .** the key and 
1ee30 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
1ee40 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
1ee50 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
1ee60 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
1ee70 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20  rsor configured 
1ee80 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72  to move in rever
1ee90 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f  se order,.** fro
1eea0 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64  m the end toward
1eeb0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20   the beginning. 
1eec0 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1eed0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
1eee0 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  * configured to 
1eef0 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65  use Prev, not Ne
1ef00 78 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  xt..**.** See al
1ef10 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
1ef20 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53 65 65  und, SeekGt, See
1ef30 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f  kGe, SeekLe.*/./
1ef40 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 45  * Opcode: SeekLE
1ef50 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
1ef60 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
1ef70 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49  r[P3@P4].**.** I
1ef80 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1ef90 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62  rs to an SQL tab
1efa0 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20  le (B-Tree that 
1efb0 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79  uses integer key
1efc0 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20  s), .** use the 
1efd0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
1efe0 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49  r P3 as a key. I
1eff0 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1f000 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
1f010 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
1f020 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
1f030 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
1f040 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
1f050 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
1f060 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
1f070 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
1f080 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
1f090 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
1f0a0 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73  ts to the larges
1f0b0 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  t entry that .**
1f0c0 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72   is less than or
1f0d0 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
1f0e0 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72  y value. If ther
1f0f0 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73  e are no records
1f100 20 0a 2a 2a 20 6c 65 73 73 20 74 68 61 6e 20 6f   .** less than o
1f110 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
1f120 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74  ey and P2 is not
1f130 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70   zero, then jump
1f140 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68   to P2..**.** Th
1f150 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
1f160 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66   the cursor conf
1f170 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69  igured to move i
1f180 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c  n reverse order,
1f190 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64  .** from the end
1f1a0 20 74 6f 77 61 72 64 20 74 68 65 20 62 65 67 69   toward the begi
1f1b0 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72  nning.  In other
1f1c0 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73   words, the curs
1f1d0 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  or is.** configu
1f1e0 72 65 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c  red to use Prev,
1f1f0 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a   not Next..**.**
1f200 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 50   If the cursor P
1f210 31 20 77 61 73 20 6f 70 65 6e 65 64 20 75 73 69  1 was opened usi
1f220 6e 67 20 74 68 65 20 4f 50 46 4c 41 47 5f 53 45  ng the OPFLAG_SE
1f230 45 4b 45 51 20 66 6c 61 67 2c 20 74 68 65 6e 20  EKEQ flag, then 
1f240 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 77  this.** opcode w
1f250 69 6c 6c 20 61 6c 77 61 79 73 20 6c 61 6e 64 20  ill always land 
1f260 6f 6e 20 61 20 72 65 63 6f 72 64 20 74 68 61 74  on a record that
1f270 20 65 71 75 61 6c 6c 79 20 65 71 75 61 6c 73 20   equally equals 
1f280 74 68 65 20 6b 65 79 2c 20 6f 72 0a 2a 2a 20 65  the key, or.** e
1f290 6c 73 65 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  lse jump immedia
1f2a0 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 57 68 65  tely to P2.  Whe
1f2b0 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  n the cursor is 
1f2c0 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 2c 20 74  OPFLAG_SEEKEQ, t
1f2d0 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 6d 75  his.** opcode mu
1f2e0 73 74 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62  st be followed b
1f2f0 79 20 61 6e 20 49 64 78 47 45 20 6f 70 63 6f 64  y an IdxGE opcod
1f300 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  e with the same 
1f310 61 72 67 75 6d 65 6e 74 73 2e 0a 2a 2a 20 54 68  arguments..** Th
1f320 65 20 49 64 78 47 45 20 6f 70 63 6f 64 65 20 77  e IdxGE opcode w
1f330 69 6c 6c 20 62 65 20 73 6b 69 70 70 65 64 20 69  ill be skipped i
1f340 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20 73 75  f this opcode su
1f350 63 63 65 65 64 73 2c 20 62 75 74 20 74 68 65 0a  cceeds, but the.
1f360 2a 2a 20 49 64 78 47 45 20 6f 70 63 6f 64 65 20  ** IdxGE opcode 
1f370 77 69 6c 6c 20 62 65 20 75 73 65 64 20 6f 6e 20  will be used on 
1f380 73 75 62 73 65 71 75 65 6e 74 20 6c 6f 6f 70 20  subsequent loop 
1f390 69 74 65 72 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a  iterations..**.*
1f3a0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
1f3b0 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65  d, NotFound, See
1f3c0 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65  kGt, SeekGe, See
1f3d0 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  kLt.*/.case OP_S
1f3e0 65 65 6b 4c 54 3a 20 20 20 20 20 20 20 20 20 2f  eekLT:         /
1f3f0 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
1f400 61 73 65 20 4f 50 5f 53 65 65 6b 4c 45 3a 20 20  ase OP_SeekLE:  
1f410 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1f420 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  in3 */.case OP_S
1f430 65 65 6b 47 45 3a 20 20 20 20 20 20 20 20 20 2f  eekGE:         /
1f440 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
1f450 61 73 65 20 4f 50 5f 53 65 65 6b 47 54 3a 20 7b  ase OP_SeekGT: {
1f460 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1f470 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73  in3 */.  int res
1f480 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43  ;           /* C
1f490 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73 75 6c 74  omparison result
1f4a0 20 2a 2f 0a 20 20 69 6e 74 20 6f 63 3b 20 20 20   */.  int oc;   
1f4b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f           /* Opco
1f4c0 64 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  de */.  VdbeCurs
1f4d0 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68  or *pC;    /* Th
1f4e0 65 20 63 75 72 73 6f 72 20 74 6f 20 73 65 65 6b  e cursor to seek
1f4f0 20 2a 2f 0a 20 20 55 6e 70 61 63 6b 65 64 52 65   */.  UnpackedRe
1f500 63 6f 72 64 20 72 3b 20 20 2f 2a 20 54 68 65 20  cord r;  /* The 
1f510 6b 65 79 20 74 6f 20 73 65 65 6b 20 66 6f 72 20  key to seek for 
1f520 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  */.  int nField;
1f530 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1f540 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 6f 72 20  r of columns or 
1f550 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 6b 65  fields in the ke
1f560 79 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65 79 3b  y */.  i64 iKey;
1f570 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1f580 20 72 6f 77 69 64 20 77 65 20 61 72 65 20 74 6f   rowid we are to
1f590 20 73 65 65 6b 20 74 6f 20 2a 2f 0a 20 20 69 6e   seek to */.  in
1f5a0 74 20 65 71 4f 6e 6c 79 3b 20 20 20 20 20 20 20  t eqOnly;       
1f5b0 20 2f 2a 20 4f 6e 6c 79 20 69 6e 74 65 72 65 73   /* Only interes
1f5c0 74 65 64 20 69 6e 20 3d 3d 20 72 65 73 75 6c 74  ted in == result
1f5d0 73 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  s */..  assert( 
1f5e0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1f5f0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1f600 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1f610 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70 43  p->p2!=0 );.  pC
1f620 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1f630 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1f640 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
1f650 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
1f660 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
1f670 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53  ;.  assert( OP_S
1f680 65 65 6b 4c 45 20 3d 3d 20 4f 50 5f 53 65 65 6b  eekLE == OP_Seek
1f690 4c 54 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74  LT+1 );.  assert
1f6a0 28 20 4f 50 5f 53 65 65 6b 47 45 20 3d 3d 20 4f  ( OP_SeekGE == O
1f6b0 50 5f 53 65 65 6b 4c 54 2b 32 20 29 3b 0a 20 20  P_SeekLT+2 );.  
1f6c0 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47  assert( OP_SeekG
1f6d0 54 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 33  T == OP_SeekLT+3
1f6e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1f6f0 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20  ->isOrdered );. 
1f700 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e   assert( pC->uc.
1f710 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
1f720 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  oc = pOp->opcode
1f730 3b 0a 20 20 65 71 4f 6e 6c 79 20 3d 20 30 3b 0a  ;.  eqOnly = 0;.
1f740 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
1f750 30 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  0;.#ifdef SQLITE
1f760 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65  _DEBUG.  pC->see
1f770 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64  kOp = pOp->opcod
1f780 65 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28  e;.#endif..  if(
1f790 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a   pC->isTable ){.
1f7a0 20 20 20 20 2f 2a 20 54 68 65 20 42 54 52 45 45      /* The BTREE
1f7b0 5f 53 45 45 4b 5f 45 51 20 66 6c 61 67 20 69 73  _SEEK_EQ flag is
1f7c0 20 6f 6e 6c 79 20 73 65 74 20 6f 6e 20 69 6e 64   only set on ind
1f7d0 65 78 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20  ex cursors */.  
1f7e0 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
1f7f0 33 42 74 72 65 65 43 75 72 73 6f 72 48 61 73 48  3BtreeCursorHasH
1f800 69 6e 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  int(pC->uc.pCurs
1f810 6f 72 2c 20 42 54 52 45 45 5f 53 45 45 4b 5f 45  or, BTREE_SEEK_E
1f820 51 29 3d 3d 30 20 29 3b 0a 0a 20 20 20 20 2f 2a  Q)==0 );..    /*
1f830 20 54 68 65 20 69 6e 70 75 74 20 76 61 6c 75 65   The input value
1f840 20 69 6e 20 50 33 20 6d 69 67 68 74 20 62 65 20   in P3 might be 
1f850 6f 66 20 61 6e 79 20 74 79 70 65 3a 20 69 6e 74  of any type: int
1f860 65 67 65 72 2c 20 72 65 61 6c 2c 20 73 74 72 69  eger, real, stri
1f870 6e 67 2c 0a 20 20 20 20 2a 2a 20 62 6c 6f 62 2c  ng,.    ** blob,
1f880 20 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69   or NULL.  But i
1f890 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 61 6e  t needs to be an
1f8a0 20 69 6e 74 65 67 65 72 20 62 65 66 6f 72 65 20   integer before 
1f8b0 77 65 20 63 61 6e 20 64 6f 0a 20 20 20 20 2a 2a  we can do.    **
1f8c0 20 74 68 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f   the seek, so co
1f8d0 6e 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20  nvert it. */.   
1f8e0 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
1f8f0 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 69 66 28 20  p->p3];.    if( 
1f900 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 28  (pIn3->flags & (
1f910 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
1f920 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f  |MEM_Str))==MEM_
1f930 53 74 72 20 29 7b 0a 20 20 20 20 20 20 61 70 70  Str ){.      app
1f940 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
1f950 79 28 70 49 6e 33 2c 20 30 29 3b 0a 20 20 20 20  y(pIn3, 0);.    
1f960 7d 0a 20 20 20 20 69 4b 65 79 20 3d 20 73 71 6c  }.    iKey = sql
1f970 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
1f980 28 70 49 6e 33 29 3b 0a 0a 20 20 20 20 2f 2a 20  (pIn3);..    /* 
1f990 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  If the P3 value 
1f9a0 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 63 6f 6e  could not be con
1f9b0 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69  verted into an i
1f9c0 6e 74 65 67 65 72 20 77 69 74 68 6f 75 74 0a 20  nteger without. 
1f9d0 20 20 20 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e     ** loss of in
1f9e0 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 6e 20  formation, then 
1f9f0 73 70 65 63 69 61 6c 20 70 72 6f 63 65 73 73 69  special processi
1fa00 6e 67 20 69 73 20 72 65 71 75 69 72 65 64 2e 2e  ng is required..
1fa10 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 70 49  . */.    if( (pI
1fa20 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
1fa30 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  Int)==0 ){.     
1fa40 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67   if( (pIn3->flag
1fa50 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30  s & MEM_Real)==0
1fa60 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49   ){.        /* I
1fa70 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 63  f the P3 value c
1fa80 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74  annot be convert
1fa90 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b 69 6e 64  ed into any kind
1faa0 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c 0a 20 20   of a number,.  
1fab0 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68        ** then th
1fac0 65 20 73 65 65 6b 20 69 73 20 6e 6f 74 20 70 6f  e seek is not po
1fad0 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75 6d 70 20  ssible, so jump 
1fae0 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 20 20 20  to P2 */.       
1faf0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
1fb00 28 31 2c 32 29 3b 20 67 6f 74 6f 20 6a 75 6d 70  (1,2); goto jump
1fb10 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 20 20  _to_p2;.        
1fb20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 0a  break;.      }..
1fb30 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20        /* If the 
1fb40 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b  approximation iK
1fb50 65 79 20 69 73 20 6c 61 72 67 65 72 20 74 68 61  ey is larger tha
1fb60 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72 65 61  n the actual rea
1fb70 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20 20 2a  l search.      *
1fb80 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69 74 75  * term, substitu
1fb90 74 65 20 3e 3d 20 66 6f 72 20 3e 20 61 6e 64 20  te >= for > and 
1fba0 3c 20 66 6f 72 20 3c 3d 2e 20 65 2e 67 2e 20 69  < for <=. e.g. i
1fbb0 66 20 74 68 65 20 73 65 61 72 63 68 20 74 65 72  f the search ter
1fbc0 6d 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 34 2e  m.      ** is 4.
1fbd0 39 20 61 6e 64 20 74 68 65 20 69 6e 74 65 67 65  9 and the intege
1fbe0 72 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20  r approximation 
1fbf0 35 3a 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20  5:.      **.    
1fc00 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78 20 3e    **        (x >
1fc10 20 20 34 2e 39 29 20 20 20 20 2d 3e 20 20 20 20    4.9)    ->    
1fc20 20 28 78 20 3e 3d 20 35 29 0a 20 20 20 20 20 20   (x >= 5).      
1fc30 2a 2a 20 20 20 20 20 20 20 20 28 78 20 3c 3d 20  **        (x <= 
1fc40 34 2e 39 29 20 20 20 20 2d 3e 20 20 20 20 20 28  4.9)    ->     (
1fc50 78 20 3c 20 20 35 29 0a 20 20 20 20 20 20 2a 2f  x <  5).      */
1fc60 0a 20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d  .      if( pIn3-
1fc70 3e 75 2e 72 3c 28 64 6f 75 62 6c 65 29 69 4b 65  >u.r<(double)iKe
1fc80 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  y ){.        ass
1fc90 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 45 3d 3d  ert( OP_SeekGE==
1fca0 28 4f 50 5f 53 65 65 6b 47 54 2d 31 29 20 29 3b  (OP_SeekGT-1) );
1fcb0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1fcc0 20 4f 50 5f 53 65 65 6b 4c 54 3d 3d 28 4f 50 5f   OP_SeekLT==(OP_
1fcd0 53 65 65 6b 4c 45 2d 31 29 20 29 3b 0a 20 20 20  SeekLE-1) );.   
1fce0 20 20 20 20 20 61 73 73 65 72 74 28 20 28 4f 50       assert( (OP
1fcf0 5f 53 65 65 6b 4c 45 20 26 20 30 78 30 30 30 31  _SeekLE & 0x0001
1fd00 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20 26 20  )==(OP_SeekGT & 
1fd10 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20 20 20  0x0001) );.     
1fd20 20 20 20 69 66 28 20 28 6f 63 20 26 20 30 78 30     if( (oc & 0x0
1fd30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54  001)==(OP_SeekGT
1fd40 20 26 20 30 78 30 30 30 31 29 20 29 20 6f 63 2d   & 0x0001) ) oc-
1fd50 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  -;.      }..    
1fd60 20 20 2f 2a 20 49 66 20 74 68 65 20 61 70 70 72    /* If the appr
1fd70 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69  oximation iKey i
1fd80 73 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e 20 74  s smaller than t
1fd90 68 65 20 61 63 74 75 61 6c 20 72 65 61 6c 20 73  he actual real s
1fda0 65 61 72 63 68 0a 20 20 20 20 20 20 2a 2a 20 74  earch.      ** t
1fdb0 65 72 6d 2c 20 73 75 62 73 74 69 74 75 74 65 20  erm, substitute 
1fdc0 3c 3d 20 66 6f 72 20 3c 20 61 6e 64 20 3e 20 66  <= for < and > f
1fdd0 6f 72 20 3e 3d 2e 20 20 2a 2f 0a 20 20 20 20 20  or >=.  */.     
1fde0 20 65 6c 73 65 20 69 66 28 20 70 49 6e 33 2d 3e   else if( pIn3->
1fdf0 75 2e 72 3e 28 64 6f 75 62 6c 65 29 69 4b 65 79  u.r>(double)iKey
1fe00 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
1fe10 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 3d 3d 28  rt( OP_SeekLE==(
1fe20 4f 50 5f 53 65 65 6b 4c 54 2b 31 29 20 29 3b 0a  OP_SeekLT+1) );.
1fe30 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1fe40 4f 50 5f 53 65 65 6b 47 54 3d 3d 28 4f 50 5f 53  OP_SeekGT==(OP_S
1fe50 65 65 6b 47 45 2b 31 29 20 29 3b 0a 20 20 20 20  eekGE+1) );.    
1fe60 20 20 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f      assert( (OP_
1fe70 53 65 65 6b 4c 54 20 26 20 30 78 30 30 30 31 29  SeekLT & 0x0001)
1fe80 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 20 26 20 30  ==(OP_SeekGE & 0
1fe90 78 30 30 30 31 29 20 29 3b 0a 20 20 20 20 20 20  x0001) );.      
1fea0 20 20 69 66 28 20 28 6f 63 20 26 20 30 78 30 30    if( (oc & 0x00
1feb0 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 20  01)==(OP_SeekLT 
1fec0 26 20 30 78 30 30 30 31 29 20 29 20 6f 63 2b 2b  & 0x0001) ) oc++
1fed0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20  ;.      }.    } 
1fee0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
1fef0 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
1ff00 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72  cked(pC->uc.pCur
1ff10 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 69 4b 65  sor, 0, (u64)iKe
1ff20 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20  y, 0, &res);.   
1ff30 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65   pC->movetoTarge
1ff40 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73  t = iKey;  /* Us
1ff50 65 64 20 62 79 20 4f 50 5f 44 65 6c 65 74 65 20  ed by OP_Delete 
1ff60 2a 2f 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53  */.    if( rc!=S
1ff70 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1ff80 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1ff90 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
1ffa0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
1ffb0 20 46 6f 72 20 61 20 63 75 72 73 6f 72 20 77 69   For a cursor wi
1ffc0 74 68 20 74 68 65 20 42 54 52 45 45 5f 53 45 45  th the BTREE_SEE
1ffd0 4b 5f 45 51 20 68 69 6e 74 2c 20 6f 6e 6c 79 20  K_EQ hint, only 
1ffe0 74 68 65 20 4f 50 5f 53 65 65 6b 47 45 20 61 6e  the OP_SeekGE an
1fff0 64 0a 20 20 20 20 2a 2a 20 4f 50 5f 53 65 65 6b  d.    ** OP_Seek
20000 4c 45 20 6f 70 63 6f 64 65 73 20 61 72 65 20 61  LE opcodes are a
20010 6c 6c 6f 77 65 64 2c 20 61 6e 64 20 74 68 65 73  llowed, and thes
20020 65 20 6d 75 73 74 20 62 65 20 69 6d 6d 65 64 69  e must be immedi
20030 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 65 64 0a 20  ately followed. 
20040 20 20 20 2a 2a 20 62 79 20 61 6e 20 4f 50 5f 49     ** by an OP_I
20050 64 78 47 54 20 6f 72 20 4f 50 5f 49 64 78 4c 54  dxGT or OP_IdxLT
20060 20 6f 70 63 6f 64 65 2c 20 72 65 73 70 65 63 74   opcode, respect
20070 69 76 65 6c 79 2c 20 77 69 74 68 20 74 68 65 20  ively, with the 
20080 73 61 6d 65 20 6b 65 79 2e 0a 20 20 20 20 2a 2f  same key..    */
20090 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
200a0 42 74 72 65 65 43 75 72 73 6f 72 48 61 73 48 69  BtreeCursorHasHi
200b0 6e 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  nt(pC->uc.pCurso
200c0 72 2c 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51  r, BTREE_SEEK_EQ
200d0 29 20 29 7b 0a 20 20 20 20 20 20 65 71 4f 6e 6c  ) ){.      eqOnl
200e0 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 61 73 73  y = 1;.      ass
200f0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
20100 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20 70  ==OP_SeekGE || p
20110 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
20120 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20 20 20 61  eekLE );.      a
20130 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 6f 70  ssert( pOp[1].op
20140 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 7c  code==OP_IdxLT |
20150 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d  | pOp[1].opcode=
20160 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20  =OP_IdxGT );.   
20170 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31     assert( pOp[1
20180 5d 2e 70 31 3d 3d 70 4f 70 5b 30 5d 2e 70 31 20  ].p1==pOp[0].p1 
20190 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
201a0 20 70 4f 70 5b 31 5d 2e 70 32 3d 3d 70 4f 70 5b   pOp[1].p2==pOp[
201b0 30 5d 2e 70 32 20 29 3b 0a 20 20 20 20 20 20 61  0].p2 );.      a
201c0 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 33  ssert( pOp[1].p3
201d0 3d 3d 70 4f 70 5b 30 5d 2e 70 33 20 29 3b 0a 20  ==pOp[0].p3 );. 
201e0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
201f0 5b 31 5d 2e 70 34 2e 69 3d 3d 70 4f 70 5b 30 5d  [1].p4.i==pOp[0]
20200 2e 70 34 2e 69 20 29 3b 0a 20 20 20 20 7d 0a 0a  .p4.i );.    }..
20210 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70      nField = pOp
20220 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 61 73 73 65  ->p4.i;.    asse
20230 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
20240 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20  =P4_INT32 );.   
20250 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e   assert( nField>
20260 30 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65 79 49  0 );.    r.pKeyI
20270 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
20280 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64  fo;.    r.nField
20290 20 3d 20 28 75 31 36 29 6e 46 69 65 6c 64 3b 0a   = (u16)nField;.
202a0 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74  .    /* The next
202b0 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65 20 63 6f   line of code co
202c0 6d 70 75 74 65 73 20 61 73 20 66 6f 6c 6c 6f 77  mputes as follow
202d0 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65 72 3a 0a  s, only faster:.
202e0 20 20 20 20 2a 2a 20 20 20 69 66 28 20 6f 63 3d      **   if( oc=
202f0 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 6f 63  =OP_SeekGT || oc
20300 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 7b 0a 20  ==OP_SeekLE ){. 
20310 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65 66 61     **     r.defa
20320 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20 20  ult_rc = -1;.   
20330 20 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20   **   }else{.   
20340 20 2a 2a 20 20 20 20 20 72 2e 64 65 66 61 75 6c   **     r.defaul
20350 74 5f 72 63 20 3d 20 2b 31 3b 0a 20 20 20 20 2a  t_rc = +1;.    *
20360 2a 20 20 20 7d 0a 20 20 20 20 2a 2f 0a 20 20 20  *   }.    */.   
20370 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
20380 28 28 31 20 26 20 28 6f 63 20 2d 20 4f 50 5f 53  ((1 & (oc - OP_S
20390 65 65 6b 4c 54 29 29 20 3f 20 2d 31 20 3a 20 2b  eekLT)) ? -1 : +
203a0 31 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  1);.    assert( 
203b0 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c  oc!=OP_SeekGT ||
203c0 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2d   r.default_rc==-
203d0 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  1 );.    assert(
203e0 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 45 20 7c   oc!=OP_SeekLE |
203f0 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d  | r.default_rc==
20400 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  -1 );.    assert
20410 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 45 20  ( oc!=OP_SeekGE 
20420 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d  || r.default_rc=
20430 3d 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  =+1 );.    asser
20440 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 54  t( oc!=OP_SeekLT
20450 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63   || r.default_rc
20460 3d 3d 2b 31 20 29 3b 0a 0a 20 20 20 20 72 2e 61  ==+1 );..    r.a
20470 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
20480 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c  >p3];.#ifdef SQL
20490 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b 20  ITE_DEBUG.    { 
204a0 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20  int i; for(i=0; 
204b0 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29  i<r.nField; i++)
204c0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
204d0 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20  lid(&r.aMem[i]) 
204e0 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20  ); }.#endif.    
204f0 72 2e 65 71 53 65 65 6e 20 3d 20 30 3b 0a 20 20  r.eqSeen = 0;.  
20500 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
20510 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
20520 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  d(pC->uc.pCursor
20530 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73  , &r, 0, 0, &res
20540 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53  );.    if( rc!=S
20550 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
20560 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
20570 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
20580 0a 20 20 20 20 69 66 28 20 65 71 4f 6e 6c 79 20  .    if( eqOnly 
20590 26 26 20 72 2e 65 71 53 65 65 6e 3d 3d 30 20 29  && r.eqSeen==0 )
205a0 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
205b0 72 65 73 21 3d 30 20 29 3b 0a 20 20 20 20 20 20  res!=0 );.      
205c0 67 6f 74 6f 20 73 65 65 6b 5f 6e 6f 74 5f 66 6f  goto seek_not_fo
205d0 75 6e 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  und;.    }.  }. 
205e0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
205f0 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  eto = 0;.  pC->c
20600 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
20610 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65 66  HE_STALE;.#ifdef
20620 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73   SQLITE_TEST.  s
20630 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f  qlite3_search_co
20640 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20  unt++;.#endif.  
20650 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47  if( oc>=OP_SeekG
20660 45 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63  E ){  assert( oc
20670 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20 6f  ==OP_SeekGE || o
20680 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 29 3b 0a  c==OP_SeekGT );.
20690 20 20 20 20 69 66 28 20 72 65 73 3c 30 20 7c 7c      if( res<0 ||
206a0 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d   (res==0 && oc==
206b0 4f 50 5f 53 65 65 6b 47 54 29 20 29 7b 0a 20 20  OP_SeekGT) ){.  
206c0 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20      res = 0;.   
206d0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
206e0 74 72 65 65 4e 65 78 74 28 70 43 2d 3e 75 63 2e  treeNext(pC->uc.
206f0 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
20700 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
20710 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
20720 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
20730 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  r;.    }else{.  
20740 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20      res = 0;.   
20750 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
20760 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53  assert( oc==OP_S
20770 65 65 6b 4c 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekLT || oc==OP_
20780 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20 69 66  SeekLE );.    if
20790 28 20 72 65 73 3e 30 20 7c 7c 20 28 72 65 73 3d  ( res>0 || (res=
207a0 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65  =0 && oc==OP_See
207b0 6b 4c 54 29 20 29 7b 0a 20 20 20 20 20 20 72 65  kLT) ){.      re
207c0 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20  s = 0;.      rc 
207d0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72  = sqlite3BtreePr
207e0 65 76 69 6f 75 73 28 70 43 2d 3e 75 63 2e 70 43  evious(pC->uc.pC
207f0 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20  ursor, &res);.  
20800 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
20810 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
20820 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
20830 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
20840 20 20 2f 2a 20 72 65 73 20 6d 69 67 68 74 20 62    /* res might b
20850 65 20 6e 65 67 61 74 69 76 65 20 62 65 63 61 75  e negative becau
20860 73 65 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  se the table is 
20870 65 6d 70 74 79 2e 20 20 43 68 65 63 6b 20 74 6f  empty.  Check to
20880 0a 20 20 20 20 20 20 2a 2a 20 73 65 65 20 69 66  .      ** see if
20890 20 74 68 69 73 20 69 73 20 74 68 65 20 63 61 73   this is the cas
208a0 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  e..      */.    
208b0 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 42    res = sqlite3B
208c0 74 72 65 65 45 6f 66 28 70 43 2d 3e 75 63 2e 70  treeEof(pC->uc.p
208d0 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20  Cursor);.    }. 
208e0 20 7d 0a 73 65 65 6b 5f 6e 6f 74 5f 66 6f 75 6e   }.seek_not_foun
208f0 64 3a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  d:.  assert( pOp
20900 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 56 64 62 65  ->p2>0 );.  Vdbe
20910 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21  BranchTaken(res!
20920 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73  =0,2);.  if( res
20930 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d   ){.    goto jum
20940 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65  p_to_p2;.  }else
20950 20 69 66 28 20 65 71 4f 6e 6c 79 20 29 7b 0a 20   if( eqOnly ){. 
20960 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31     assert( pOp[1
20970 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ].opcode==OP_Idx
20980 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63  LT || pOp[1].opc
20990 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b  ode==OP_IdxGT );
209a0 0a 20 20 20 20 70 4f 70 2b 2b 3b 20 2f 2a 20 53  .    pOp++; /* S
209b0 6b 69 70 20 74 68 65 20 4f 50 5f 49 64 78 4c 74  kip the OP_IdxLt
209c0 20 6f 72 20 4f 50 5f 49 64 78 47 54 20 74 68 61   or OP_IdxGT tha
209d0 74 20 66 6f 6c 6c 6f 77 73 20 2a 2f 0a 20 20 7d  t follows */.  }
209e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
209f0 4f 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20 50 31  Opcode: Found P1
20a00 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
20a10 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
20a20 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50  3@P4].**.** If P
20a30 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74  4==0 then regist
20a40 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c  er P3 holds a bl
20a50 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ob constructed b
20a60 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49  y MakeRecord.  I
20a70 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72  f.** P4>0 then r
20a80 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68  egister P3 is th
20a90 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65  e first of P4 re
20aa0 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72  gisters that for
20ab0 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a  m an unpacked.**
20ac0 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43   record..**.** C
20ad0 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61  ursor P1 is on a
20ae0 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20  n index btree.  
20af0 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64  If the record id
20b00 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61  entified by P3 a
20b10 6e 64 20 50 34 0a 2a 2a 20 69 73 20 61 20 70 72  nd P4.** is a pr
20b20 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72  efix of any entr
20b30 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a  y in P1 then a j
20b40 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50  ump is made to P
20b50 32 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 6c  2 and.** P1 is l
20b60 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  eft pointing at 
20b70 74 68 65 20 6d 61 74 63 68 69 6e 67 20 65 6e 74  the matching ent
20b80 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  ry..**.** This o
20b90 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20  peration leaves 
20ba0 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20  the cursor in a 
20bb0 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63  state where it c
20bc0 61 6e 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65  an be.** advance
20bd0 64 20 69 6e 20 74 68 65 20 66 6f 72 77 61 72 64  d in the forward
20be0 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 54 68 65   direction.  The
20bf0 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
20c00 6e 20 77 69 6c 6c 20 77 6f 72 6b 2c 0a 2a 2a 20  n will work,.** 
20c10 62 75 74 20 6e 6f 74 20 74 68 65 20 50 72 65 76  but not the Prev
20c20 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
20c30 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f  .** See also: No
20c40 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69  tFound, NoConfli
20c50 63 74 2c 20 4e 6f 74 45 78 69 73 74 73 2e 20 53  ct, NotExists. S
20c60 65 65 6b 47 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  eekGe.*/./* Opco
20c70 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20  de: NotFound P1 
20c80 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
20c90 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
20ca0 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  @P4].**.** If P4
20cb0 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  ==0 then registe
20cc0 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f  r P3 holds a blo
20cd0 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  b constructed by
20ce0 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66   MakeRecord.  If
20cf0 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65  .** P4>0 then re
20d00 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65  gister P3 is the
20d10 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67   first of P4 reg
20d20 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d  isters that form
20d30 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20   an unpacked.** 
20d40 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43  record..** .** C
20d50 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61  ursor P1 is on a
20d60 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20  n index btree.  
20d70 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64  If the record id
20d80 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61  entified by P3 a
20d90 6e 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f 74 20  nd P4.** is not 
20da0 74 68 65 20 70 72 65 66 69 78 20 6f 66 20 61 6e  the prefix of an
20db0 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68  y entry in P1 th
20dc0 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64  en a jump is mad
20dd0 65 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31 20  e to P2.  If P1 
20de0 0a 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e  .** does contain
20df0 20 61 6e 20 65 6e 74 72 79 20 77 68 6f 73 65 20   an entry whose 
20e00 70 72 65 66 69 78 20 6d 61 74 63 68 65 73 20 74  prefix matches t
20e10 68 65 20 50 33 2f 50 34 20 72 65 63 6f 72 64 20  he P3/P4 record 
20e20 74 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20  then control.** 
20e30 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f  falls through to
20e40 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
20e50 63 74 69 6f 6e 20 61 6e 64 20 50 31 20 69 73 20  ction and P1 is 
20e60 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
20e70 20 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69 6e 67   the.** matching
20e80 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68   entry..**.** Th
20e90 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61  is operation lea
20ea0 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69  ves the cursor i
20eb0 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20  n a state where 
20ec0 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20  it cannot be.** 
20ed0 61 64 76 61 6e 63 65 64 20 69 6e 20 65 69 74 68  advanced in eith
20ee0 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49  er direction.  I
20ef0 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
20f00 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76  he Next and Prev
20f10 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e  .** opcodes do n
20f20 6f 74 20 77 6f 72 6b 20 61 66 74 65 72 20 74 68  ot work after th
20f30 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a  is operation..**
20f40 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
20f50 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20  und, NotExists, 
20f60 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 2f 2a  NoConflict.*/./*
20f70 20 4f 70 63 6f 64 65 3a 20 4e 6f 43 6f 6e 66 6c   Opcode: NoConfl
20f80 69 63 74 20 50 31 20 50 32 20 50 33 20 50 34 20  ict P1 P2 P3 P4 
20f90 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
20fa0 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
20fb0 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20  * If P4==0 then 
20fc0 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64  register P3 hold
20fd0 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75  s a blob constru
20fe0 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f  cted by MakeReco
20ff0 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20  rd.  If.** P4>0 
21000 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
21010 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66   is the first of
21020 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68   P4 registers th
21030 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  at form an unpac
21040 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a  ked.** record..*
21050 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20  * .** Cursor P1 
21060 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62  is on an index b
21070 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65  tree.  If the re
21080 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20  cord identified 
21090 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20  by P3 and P4.** 
210a0 63 6f 6e 74 61 69 6e 73 20 61 6e 79 20 4e 55 4c  contains any NUL
210b0 4c 20 76 61 6c 75 65 2c 20 6a 75 6d 70 20 69 6d  L value, jump im
210c0 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
210d0 20 20 49 66 20 61 6c 6c 20 74 65 72 6d 73 20 6f    If all terms o
210e0 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20  f the.** record 
210f0 61 72 65 20 6e 6f 74 2d 4e 55 4c 4c 20 74 68 65  are not-NULL the
21100 6e 20 61 20 63 68 65 63 6b 20 69 73 20 64 6f 6e  n a check is don
21110 65 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69  e to determine i
21120 66 20 61 6e 79 20 72 6f 77 20 69 6e 20 74 68 65  f any row in the
21130 0a 2a 2a 20 50 31 20 69 6e 64 65 78 20 62 74 72  .** P1 index btr
21140 65 65 20 68 61 73 20 61 20 6d 61 74 63 68 69 6e  ee has a matchin
21150 67 20 6b 65 79 20 70 72 65 66 69 78 2e 20 20 49  g key prefix.  I
21160 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d  f there are no m
21170 61 74 63 68 65 73 2c 20 6a 75 6d 70 0a 2a 2a 20  atches, jump.** 
21180 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
21190 32 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20  2.  If there is 
211a0 61 20 6d 61 74 63 68 2c 20 66 61 6c 6c 20 74 68  a match, fall th
211b0 72 6f 75 67 68 20 61 6e 64 20 6c 65 61 76 65 20  rough and leave 
211c0 74 68 65 20 50 31 0a 2a 2a 20 63 75 72 73 6f 72  the P1.** cursor
211d0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65   pointing to the
211e0 20 6d 61 74 63 68 69 6e 67 20 72 6f 77 2e 0a 2a   matching row..*
211f0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
21200 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 4f   is similar to O
21210 50 5f 4e 6f 74 46 6f 75 6e 64 20 77 69 74 68 20  P_NotFound with 
21220 74 68 65 20 65 78 63 65 70 74 69 6f 6e 73 20 74  the exceptions t
21230 68 61 74 20 74 68 65 0a 2a 2a 20 62 72 61 6e 63  hat the.** branc
21240 68 20 69 73 20 61 6c 77 61 79 73 20 74 61 6b 65  h is always take
21250 6e 20 69 66 20 61 6e 79 20 70 61 72 74 20 6f 66  n if any part of
21260 20 74 68 65 20 73 65 61 72 63 68 20 6b 65 79 20   the search key 
21270 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  input is NULL..*
21280 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74  *.** This operat
21290 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63  ion leaves the c
212a0 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65  ursor in a state
212b0 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74   where it cannot
212c0 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20   be.** advanced 
212d0 69 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74  in either direct
212e0 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ion.  In other w
212f0 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61  ords, the Next a
21300 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64  nd Prev.** opcod
21310 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61  es do not work a
21320 66 74 65 72 20 74 68 69 73 20 6f 70 65 72 61 74  fter this operat
21330 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ion..**.** See a
21340 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 46  lso: NotFound, F
21350 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 0a  ound, NotExists.
21360 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 43 6f 6e  */.case OP_NoCon
21370 66 6c 69 63 74 3a 20 20 20 20 20 2f 2a 20 6a 75  flict:     /* ju
21380 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  mp, in3 */.case 
21390 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20 20 20  OP_NotFound:    
213a0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
213b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 75 6e 64  */.case OP_Found
213c0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
213d0 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74  mp, in3 */.  int
213e0 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b 0a   alreadyExists;.
213f0 20 20 69 6e 74 20 74 61 6b 65 4a 75 6d 70 3b 0a    int takeJump;.
21400 20 20 69 6e 74 20 69 69 3b 0a 20 20 56 64 62 65    int ii;.  Vdbe
21410 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e  Cursor *pC;.  in
21420 74 20 72 65 73 3b 0a 20 20 63 68 61 72 20 2a 70  t res;.  char *p
21430 46 72 65 65 3b 0a 20 20 55 6e 70 61 63 6b 65 64  Free;.  Unpacked
21440 52 65 63 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b  Record *pIdxKey;
21450 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
21460 64 20 72 3b 0a 20 20 63 68 61 72 20 61 54 65 6d  d r;.  char aTem
21470 70 52 65 63 5b 52 4f 55 4e 44 38 28 73 69 7a 65  pRec[ROUND8(size
21480 6f 66 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  of(UnpackedRecor
21490 64 29 29 20 2b 20 73 69 7a 65 6f 66 28 4d 65 6d  d)) + sizeof(Mem
214a0 29 2a 34 20 2b 20 37 5d 3b 0a 0a 23 69 66 64 65  )*4 + 7];..#ifde
214b0 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
214c0 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21  if( pOp->opcode!
214d0 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 29  =OP_NoConflict )
214e0 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63   sqlite3_found_c
214f0 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a  ount++;.#endif..
21500 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
21510 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
21520 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
21530 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
21540 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
21550 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
21560 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
21570 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23 69  ert( pC!=0 );.#i
21580 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
21590 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d  G.  pC->seekOp =
215a0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65   pOp->opcode;.#e
215b0 6e 64 69 66 0a 20 20 70 49 6e 33 20 3d 20 26 61  ndif.  pIn3 = &a
215c0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
215d0 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
215e0 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
215f0 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28  REE );.  assert(
21600 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21   pC->uc.pCursor!
21610 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
21620 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29  pC->isTable==0 )
21630 3b 0a 20 20 70 46 72 65 65 20 3d 20 30 3b 0a 20  ;.  pFree = 0;. 
21640 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30   if( pOp->p4.i>0
21650 20 29 7b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e   ){.    r.pKeyIn
21660 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
21670 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20  o;.    r.nField 
21680 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69  = (u16)pOp->p4.i
21690 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 70  ;.    r.aMem = p
216a0 49 6e 33 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  In3;.#ifdef SQLI
216b0 54 45 5f 44 45 42 55 47 0a 20 20 20 20 66 6f 72  TE_DEBUG.    for
216c0 28 69 69 3d 30 3b 20 69 69 3c 72 2e 6e 46 69 65  (ii=0; ii<r.nFie
216d0 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20  ld; ii++){.     
216e0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
216f0 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 69 5d 29  lid(&r.aMem[ii])
21700 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
21710 28 20 28 72 2e 61 4d 65 6d 5b 69 69 5d 2e 66 6c  ( (r.aMem[ii].fl
21720 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 29 3d  ags & MEM_Zero)=
21730 3d 30 20 7c 7c 20 72 2e 61 4d 65 6d 5b 69 69 5d  =0 || r.aMem[ii]
21740 2e 6e 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69  .n==0 );.      i
21750 66 28 20 69 69 20 29 20 52 45 47 49 53 54 45 52  f( ii ) REGISTER
21760 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2b 69  _TRACE(pOp->p3+i
21770 69 2c 20 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b  i, &r.aMem[ii]);
21780 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
21790 20 20 70 49 64 78 4b 65 79 20 3d 20 26 72 3b 0a    pIdxKey = &r;.
217a0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 64    }else{.    pId
217b0 78 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64  xKey = sqlite3Vd
217c0 62 65 41 6c 6c 6f 63 55 6e 70 61 63 6b 65 64 52  beAllocUnpackedR
217d0 65 63 6f 72 64 28 0a 20 20 20 20 20 20 20 20 70  ecord(.        p
217e0 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 61 54 65  C->pKeyInfo, aTe
217f0 6d 70 52 65 63 2c 20 73 69 7a 65 6f 66 28 61 54  mpRec, sizeof(aT
21800 65 6d 70 52 65 63 29 2c 20 26 70 46 72 65 65 0a  empRec), &pFree.
21810 20 20 20 20 29 3b 0a 20 20 20 20 69 66 28 20 70      );.    if( p
21820 49 64 78 4b 65 79 3d 3d 30 20 29 20 67 6f 74 6f  IdxKey==0 ) goto
21830 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73 73   no_mem;.    ass
21840 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73  ert( pIn3->flags
21850 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20   & MEM_Blob );. 
21860 20 20 20 28 76 6f 69 64 29 45 78 70 61 6e 64 42     (void)ExpandB
21870 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20 20 73  lob(pIn3);.    s
21880 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f 72 64  qlite3VdbeRecord
21890 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65 79 49  Unpack(pC->pKeyI
218a0 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70 49  nfo, pIn3->n, pI
218b0 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b 65 79 29 3b  n3->z, pIdxKey);
218c0 0a 20 20 7d 0a 20 20 70 49 64 78 4b 65 79 2d 3e  .  }.  pIdxKey->
218d0 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a  default_rc = 0;.
218e0 20 20 74 61 6b 65 4a 75 6d 70 20 3d 20 30 3b 0a    takeJump = 0;.
218f0 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
21900 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74  e==OP_NoConflict
21910 20 29 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20 74   ){.    /* For t
21920 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74  he OP_NoConflict
21930 20 6f 70 63 6f 64 65 2c 20 74 61 6b 65 20 74 68   opcode, take th
21940 65 20 6a 75 6d 70 20 69 66 20 61 6e 79 20 6f 66  e jump if any of
21950 20 74 68 65 0a 20 20 20 20 2a 2a 20 69 6e 70 75   the.    ** inpu
21960 74 20 66 69 65 6c 64 73 20 61 72 65 20 4e 55 4c  t fields are NUL
21970 4c 2c 20 73 69 6e 63 65 20 61 6e 79 20 6b 65 79  L, since any key
21980 20 77 69 74 68 20 61 20 4e 55 4c 4c 20 77 69 6c   with a NULL wil
21990 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a 20 63 6f 6e  l not.    ** con
219a0 66 6c 69 63 74 20 2a 2f 0a 20 20 20 20 66 6f 72  flict */.    for
219b0 28 69 69 3d 30 3b 20 69 69 3c 70 49 64 78 4b 65  (ii=0; ii<pIdxKe
219c0 79 2d 3e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29  y->nField; ii++)
219d0 7b 0a 20 20 20 20 20 20 69 66 28 20 70 49 64 78  {.      if( pIdx
219e0 4b 65 79 2d 3e 61 4d 65 6d 5b 69 69 5d 2e 66 6c  Key->aMem[ii].fl
219f0 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
21a00 7b 0a 20 20 20 20 20 20 20 20 74 61 6b 65 4a 75  {.        takeJu
21a10 6d 70 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  mp = 1;.        
21a20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
21a30 20 20 20 7d 0a 20 20 7d 0a 20 20 72 63 20 3d 20     }.  }.  rc = 
21a40 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
21a50 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75  toUnpacked(pC->u
21a60 63 2e 70 43 75 72 73 6f 72 2c 20 70 49 64 78 4b  c.pCursor, pIdxK
21a70 65 79 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b  ey, 0, 0, &res);
21a80 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  .  sqlite3DbFree
21a90 28 64 62 2c 20 70 46 72 65 65 29 3b 0a 20 20 69  (db, pFree);.  i
21aa0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
21ab0 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f   ){.    goto abo
21ac0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
21ad0 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52  .  }.  pC->seekR
21ae0 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 61  esult = res;.  a
21af0 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d 20 28  lreadyExists = (
21b00 72 65 73 3d 3d 30 29 3b 0a 20 20 70 43 2d 3e 6e  res==0);.  pC->n
21b10 75 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c 72 65 61  ullRow = 1-alrea
21b20 64 79 45 78 69 73 74 73 3b 0a 20 20 70 43 2d 3e  dyExists;.  pC->
21b30 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
21b40 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
21b50 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
21b60 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  ALE;.  if( pOp->
21b70 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64  opcode==OP_Found
21b80 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e   ){.    VdbeBran
21b90 63 68 54 61 6b 65 6e 28 61 6c 72 65 61 64 79 45  chTaken(alreadyE
21ba0 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20  xists!=0,2);.   
21bb0 20 69 66 28 20 61 6c 72 65 61 64 79 45 78 69 73   if( alreadyExis
21bc0 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  ts ) goto jump_t
21bd0 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  o_p2;.  }else{. 
21be0 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
21bf0 65 6e 28 74 61 6b 65 4a 75 6d 70 7c 7c 61 6c 72  en(takeJump||alr
21c00 65 61 64 79 45 78 69 73 74 73 3d 3d 30 2c 32 29  eadyExists==0,2)
21c10 3b 0a 20 20 20 20 69 66 28 20 74 61 6b 65 4a 75  ;.    if( takeJu
21c20 6d 70 20 7c 7c 20 21 61 6c 72 65 61 64 79 45 78  mp || !alreadyEx
21c30 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70  ists ) goto jump
21c40 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
21c50 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
21c60 65 3a 20 53 65 65 6b 52 6f 77 69 64 20 50 31 20  e: SeekRowid P1 
21c70 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
21c80 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b  opsis: intkey=r[
21c90 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  P3].**.** P1 is 
21ca0 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20 63  the index of a c
21cb0 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61 6e  ursor open on an
21cc0 20 53 51 4c 20 74 61 62 6c 65 20 62 74 72 65 65   SQL table btree
21cd0 20 28 77 69 74 68 20 69 6e 74 65 67 65 72 0a 2a   (with integer.*
21ce0 2a 20 6b 65 79 73 29 2e 20 20 49 66 20 72 65 67  * keys).  If reg
21cf0 69 73 74 65 72 20 50 33 20 64 6f 65 73 20 6e 6f  ister P3 does no
21d00 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
21d10 65 67 65 72 20 6f 72 20 69 66 20 50 31 20 64 6f  eger or if P1 do
21d20 65 73 20 6e 6f 74 0a 2a 2a 20 63 6f 6e 74 61 69  es not.** contai
21d30 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 20  n a record with 
21d40 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 6a 75  rowid P3 then ju
21d50 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
21d60 6f 20 50 32 2e 20 20 0a 2a 2a 20 4f 72 2c 20 69  o P2.  .** Or, i
21d70 66 20 50 32 20 69 73 20 30 2c 20 72 61 69 73 65  f P2 is 0, raise
21d80 20 61 6e 20 53 51 4c 49 54 45 5f 43 4f 52 52 55   an SQLITE_CORRU
21d90 50 54 20 65 72 72 6f 72 2e 20 49 66 20 50 31 20  PT error. If P1 
21da0 64 6f 65 73 20 63 6f 6e 74 61 69 6e 0a 2a 2a 20  does contain.** 
21db0 61 20 72 65 63 6f 72 64 20 77 69 74 68 20 72 6f  a record with ro
21dc0 77 69 64 20 50 33 20 74 68 65 6e 20 0a 2a 2a 20  wid P3 then .** 
21dd0 6c 65 61 76 65 20 74 68 65 20 63 75 72 73 6f 72  leave the cursor
21de0 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 61   pointing at tha
21df0 74 20 72 65 63 6f 72 64 20 61 6e 64 20 66 61 6c  t record and fal
21e00 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
21e10 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63   next.** instruc
21e20 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  tion..**.** The 
21e30 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70 63  OP_NotExists opc
21e40 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65  ode performs the
21e50 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 2c   same operation,
21e60 20 62 75 74 20 77 69 74 68 20 4f 50 5f 4e 6f 74   but with OP_Not
21e70 45 78 69 73 74 73 0a 2a 2a 20 74 68 65 20 50 33  Exists.** the P3
21e80 20 72 65 67 69 73 74 65 72 20 6d 75 73 74 20 62   register must b
21e90 65 20 67 75 61 72 61 6e 74 65 65 64 20 74 6f 20  e guaranteed to 
21ea0 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
21eb0 65 72 20 76 61 6c 75 65 2e 20 20 57 69 74 68 20  er value.  With 
21ec0 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 2c 20  this.** opcode, 
21ed0 72 65 67 69 73 74 65 72 20 50 33 20 6d 69 67 68  register P3 migh
21ee0 74 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e  t not contain an
21ef0 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20   integer..**.** 
21f00 54 68 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20  The OP_NotFound 
21f10 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20  opcode performs 
21f20 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69  the same operati
21f30 6f 6e 20 6f 6e 20 69 6e 64 65 78 20 62 74 72 65  on on index btre
21f40 65 73 0a 2a 2a 20 28 77 69 74 68 20 61 72 62 69  es.** (with arbi
21f50 74 72 61 72 79 20 6d 75 6c 74 69 2d 76 61 6c 75  trary multi-valu
21f60 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54  e keys)..**.** T
21f70 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
21f80 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20  s the cursor in 
21f90 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74  a state where it
21fa0 20 63 61 6e 6e 6f 74 20 62 65 20 61 64 76 61 6e   cannot be advan
21fb0 63 65 64 0a 2a 2a 20 69 6e 20 65 69 74 68 65 72  ced.** in either
21fc0 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20   direction.  In 
21fd0 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
21fe0 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76 20 6f   Next and Prev o
21ff0 70 63 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e  pcodes will.** n
22000 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e  ot work followin
22010 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a  g this opcode..*
22020 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
22030 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
22040 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 53 65 65 6b  NoConflict, Seek
22050 52 6f 77 69 64 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  Rowid.*/./* Opco
22060 64 65 3a 20 4e 6f 74 45 78 69 73 74 73 20 50 31  de: NotExists P1
22070 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
22080 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72  nopsis: intkey=r
22090 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  [P3].**.** P1 is
220a0 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20   the index of a 
220b0 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61  cursor open on a
220c0 6e 20 53 51 4c 20 74 61 62 6c 65 20 62 74 72 65  n SQL table btre
220d0 65 20 28 77 69 74 68 20 69 6e 74 65 67 65 72 0a  e (with integer.
220e0 2a 2a 20 6b 65 79 73 29 2e 20 20 50 33 20 69 73  ** keys).  P3 is
220f0 20 61 6e 20 69 6e 74 65 67 65 72 20 72 6f 77 69   an integer rowi
22100 64 2e 20 20 49 66 20 50 31 20 64 6f 65 73 20 6e  d.  If P1 does n
22110 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63  ot contain a rec
22120 6f 72 64 20 77 69 74 68 0a 2a 2a 20 72 6f 77 69  ord with.** rowi
22130 64 20 50 33 20 74 68 65 6e 20 6a 75 6d 70 20 69  d P3 then jump i
22140 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
22150 2e 20 20 4f 72 2c 20 69 66 20 50 32 20 69 73 20  .  Or, if P2 is 
22160 30 2c 20 72 61 69 73 65 20 61 6e 0a 2a 2a 20 53  0, raise an.** S
22170 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 65 72  QLITE_CORRUPT er
22180 72 6f 72 2e 20 49 66 20 50 31 20 64 6f 65 73 20  ror. If P1 does 
22190 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64  contain a record
221a0 20 77 69 74 68 20 72 6f 77 69 64 20 50 33 20 74   with rowid P3 t
221b0 68 65 6e 20 0a 2a 2a 20 6c 65 61 76 65 20 74 68  hen .** leave th
221c0 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e  e cursor pointin
221d0 67 20 61 74 20 74 68 61 74 20 72 65 63 6f 72 64  g at that record
221e0 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67   and fall throug
221f0 68 20 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a 2a  h to the next.**
22200 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
22210 0a 2a 2a 20 54 68 65 20 4f 50 5f 53 65 65 6b 52  .** The OP_SeekR
22220 6f 77 69 64 20 6f 70 63 6f 64 65 20 70 65 72 66  owid opcode perf
22230 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70  orms the same op
22240 65 72 61 74 69 6f 6e 20 62 75 74 20 61 6c 73 6f  eration but also
22250 20 61 6c 6c 6f 77 73 20 74 68 65 0a 2a 2a 20 50   allows the.** P
22260 33 20 72 65 67 69 73 74 65 72 20 74 6f 20 63 6f  3 register to co
22270 6e 74 61 69 6e 20 61 20 6e 6f 6e 2d 69 6e 74 65  ntain a non-inte
22280 67 65 72 20 76 61 6c 75 65 2c 20 69 6e 20 77 68  ger value, in wh
22290 69 63 68 20 63 61 73 65 20 74 68 65 20 6a 75 6d  ich case the jum
222a0 70 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 74  p is.** always t
222b0 61 6b 65 6e 2e 20 20 54 68 69 73 20 6f 70 63 6f  aken.  This opco
222c0 64 65 20 72 65 71 75 69 72 65 73 20 74 68 61 74  de requires that
222d0 20 50 33 20 61 6c 77 61 79 73 20 63 6f 6e 74 61   P3 always conta
222e0 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  in an integer..*
222f0 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 46  *.** The OP_NotF
22300 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70 65 72 66  ound opcode perf
22310 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70  orms the same op
22320 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64 65 78  eration on index
22330 20 62 74 72 65 65 73 0a 2a 2a 20 28 77 69 74 68   btrees.** (with
22340 20 61 72 62 69 74 72 61 72 79 20 6d 75 6c 74 69   arbitrary multi
22350 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a 2a 2a  -value keys)..**
22360 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
22370 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
22380 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65  r in a state whe
22390 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20  re it cannot be 
223a0 61 64 76 61 6e 63 65 64 0a 2a 2a 20 69 6e 20 65  advanced.** in e
223b0 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e  ither direction.
223c0 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
223d0 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50  , the Next and P
223e0 72 65 76 20 6f 70 63 6f 64 65 73 20 77 69 6c 6c  rev opcodes will
223f0 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 6c  .** not work fol
22400 6c 6f 77 69 6e 67 20 74 68 69 73 20 6f 70 63 6f  lowing this opco
22410 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  de..**.** See al
22420 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
22430 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c  und, NoConflict,
22440 20 53 65 65 6b 52 6f 77 69 64 0a 2a 2f 0a 63 61   SeekRowid.*/.ca
22450 73 65 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64 3a  se OP_SeekRowid:
22460 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
22470 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62 65  p, in3 */.  Vdbe
22480 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
22490 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
224a0 20 69 6e 74 20 72 65 73 3b 0a 20 20 75 36 34 20   int res;.  u64 
224b0 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20 3d 20  iKey;..  pIn3 = 
224c0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
224d0 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
224e0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
224f0 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66   ){.    applyAff
22500 69 6e 69 74 79 28 70 49 6e 33 2c 20 53 51 4c 49  inity(pIn3, SQLI
22510 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20  TE_AFF_NUMERIC, 
22520 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 69  encoding);.    i
22530 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  f( (pIn3->flags 
22540 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 20  & MEM_Int)==0 ) 
22550 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
22560 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  .  }.  /* Fall t
22570 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 4e  hrough into OP_N
22580 6f 74 45 78 69 73 74 73 20 2a 2f 0a 63 61 73 65  otExists */.case
22590 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20 20   OP_NotExists:  
225a0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
225b0 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20 3d   in3 */.  pIn3 =
225c0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
225d0 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d  .  assert( pIn3-
225e0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
225f0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
22600 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
22610 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
22620 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
22630 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
22640 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23  sert( pC!=0 );.#
22650 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
22660 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20  UG.  pC->seekOp 
22670 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 61 73  = 0;.#endif.  as
22680 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
22690 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  e );.  assert( p
226a0 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
226b0 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
226c0 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70  pCrsr = pC->uc.p
226d0 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74  Cursor;.  assert
226e0 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20  ( pCrsr!=0 );.  
226f0 72 65 73 20 3d 20 30 3b 0a 20 20 69 4b 65 79 20  res = 0;.  iKey 
22700 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72  = pIn3->u.i;.  r
22710 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
22720 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
22730 43 72 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30  Crsr, 0, iKey, 0
22740 2c 20 26 72 65 73 29 3b 0a 20 20 61 73 73 65 72  , &res);.  asser
22750 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
22760 20 7c 7c 20 72 65 73 3d 3d 30 20 29 3b 0a 20 20   || res==0 );.  
22770 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
22780 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73 65   = iKey;  /* Use
22790 64 20 62 79 20 4f 50 5f 44 65 6c 65 74 65 20 2a  d by OP_Delete *
227a0 2f 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  /.  pC->nullRow 
227b0 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
227c0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
227d0 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 64 65 66 65  TALE;.  pC->defe
227e0 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
227f0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
22800 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 70  n(res!=0,2);.  p
22810 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  C->seekResult = 
22820 72 65 73 3b 0a 20 20 69 66 28 20 72 65 73 21 3d  res;.  if( res!=
22830 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
22840 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
22850 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
22860 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63  2==0 ){.      rc
22870 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50   = SQLITE_CORRUP
22880 54 5f 42 4b 50 54 3b 0a 20 20 20 20 7d 65 6c 73  T_BKPT;.    }els
22890 65 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a 75  e{.      goto ju
228a0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a  mp_to_p2;.    }.
228b0 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67    }.  if( rc ) g
228c0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
228d0 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
228e0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
228f0 65 71 75 65 6e 63 65 20 50 31 20 50 32 20 2a 20  equence P1 P2 * 
22900 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
22910 20 72 5b 50 32 5d 3d 63 75 72 73 6f 72 5b 50 31   r[P2]=cursor[P1
22920 5d 2e 63 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69  ].ctr++.**.** Fi
22930 6e 64 20 74 68 65 20 6e 65 78 74 20 61 76 61 69  nd the next avai
22940 6c 61 62 6c 65 20 73 65 71 75 65 6e 63 65 20 6e  lable sequence n
22950 75 6d 62 65 72 20 66 6f 72 20 63 75 72 73 6f 72  umber for cursor
22960 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68   P1..** Write th
22970 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65  e sequence numbe
22980 72 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  r into register 
22990 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65 71 75 65  P2..** The seque
229a0 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68  nce number on th
229b0 65 20 63 75 72 73 6f 72 20 69 73 20 69 6e 63 72  e cursor is incr
229c0 65 6d 65 6e 74 65 64 20 61 66 74 65 72 20 74 68  emented after th
229d0 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f  is.** instructio
229e0 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  n.  .*/.case OP_
229f0 53 65 71 75 65 6e 63 65 3a 20 7b 20 20 20 20 20  Sequence: {     
22a00 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
22a10 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
22a20 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
22a30 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
22a40 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73   assert( p->apCs
22a50 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b  r[pOp->p1]!=0 );
22a60 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70  .  assert( p->ap
22a70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 65 43  Csr[pOp->p1]->eC
22a80 75 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f  urType!=CURTYPE_
22a90 56 54 41 42 20 29 3b 0a 20 20 70 4f 75 74 20 3d  VTAB );.  pOut =
22aa0 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
22ab0 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d  p, pOp);.  pOut-
22ac0 3e 75 2e 69 20 3d 20 70 2d 3e 61 70 43 73 72 5b  >u.i = p->apCsr[
22ad0 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f 75  pOp->p1]->seqCou
22ae0 6e 74 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  nt++;.  break;.}
22af0 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65  .../* Opcode: Ne
22b00 77 52 6f 77 69 64 20 50 31 20 50 32 20 50 33 20  wRowid P1 P2 P3 
22b10 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
22b20 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a   r[P2]=rowid.**.
22b30 2a 2a 20 47 65 74 20 61 20 6e 65 77 20 69 6e 74  ** Get a new int
22b40 65 67 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62  eger record numb
22b50 65 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64  er (a.k.a "rowid
22b60 22 29 20 75 73 65 64 20 61 73 20 74 68 65 20 6b  ") used as the k
22b70 65 79 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a  ey to a table..*
22b80 2a 20 54 68 65 20 72 65 63 6f 72 64 20 6e 75 6d  * The record num
22b90 62 65 72 20 69 73 20 6e 6f 74 20 70 72 65 76 69  ber is not previ
22ba0 6f 75 73 6c 79 20 75 73 65 64 20 61 73 20 61 20  ously used as a 
22bb0 6b 65 79 20 69 6e 20 74 68 65 20 64 61 74 61 62  key in the datab
22bc0 61 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61  ase.** table tha
22bd0 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e  t cursor P1 poin
22be0 74 73 20 74 6f 2e 20 20 54 68 65 20 6e 65 77 20  ts to.  The new 
22bf0 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73  record number is
22c00 20 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74   written.** writ
22c10 74 65 6e 20 74 6f 20 72 65 67 69 73 74 65 72 20  ten to register 
22c20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e  P2..**.** If P3>
22c30 30 20 74 68 65 6e 20 50 33 20 69 73 20 61 20 72  0 then P3 is a r
22c40 65 67 69 73 74 65 72 20 69 6e 20 74 68 65 20 72  egister in the r
22c50 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69  oot frame of thi
22c60 73 20 56 44 42 45 20 74 68 61 74 20 68 6f 6c 64  s VDBE that hold
22c70 73 20 0a 2a 2a 20 74 68 65 20 6c 61 72 67 65 73  s .** the larges
22c80 74 20 70 72 65 76 69 6f 75 73 6c 79 20 67 65 6e  t previously gen
22c90 65 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75  erated record nu
22ca0 6d 62 65 72 2e 20 4e 6f 20 6e 65 77 20 72 65 63  mber. No new rec
22cb0 6f 72 64 20 6e 75 6d 62 65 72 73 20 61 72 65 0a  ord numbers are.
22cc0 2a 2a 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65  ** allowed to be
22cd0 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20   less than this 
22ce0 76 61 6c 75 65 2e 20 57 68 65 6e 20 74 68 69 73  value. When this
22cf0 20 76 61 6c 75 65 20 72 65 61 63 68 65 73 20 69   value reaches i
22d00 74 73 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20  ts maximum, .** 
22d10 61 6e 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20 65  an SQLITE_FULL e
22d20 72 72 6f 72 20 69 73 20 67 65 6e 65 72 61 74 65  rror is generate
22d30 64 2e 20 54 68 65 20 50 33 20 72 65 67 69 73 74  d. The P3 regist
22d40 65 72 20 69 73 20 75 70 64 61 74 65 64 20 77 69  er is updated wi
22d50 74 68 20 74 68 65 20 27 0a 2a 2a 20 67 65 6e 65  th the '.** gene
22d60 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d  rated record num
22d70 62 65 72 2e 20 54 68 69 73 20 50 33 20 6d 65 63  ber. This P3 mec
22d80 68 61 6e 69 73 6d 20 69 73 20 75 73 65 64 20 74  hanism is used t
22d90 6f 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74  o help implement
22da0 20 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52   the.** AUTOINCR
22db0 45 4d 45 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a  EMENT feature..*
22dc0 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77  /.case OP_NewRow
22dd0 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  id: {           
22de0 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 36 34  /* out2 */.  i64
22df0 20 76 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   v;             
22e00 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72      /* The new r
22e10 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62 65 43 75  owid */.  VdbeCu
22e20 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20 20 20  rsor *pC;       
22e30 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66 20 74 61   /* Cursor of ta
22e40 62 6c 65 20 74 6f 20 67 65 74 20 74 68 65 20 6e  ble to get the n
22e50 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 6e  ew rowid */.  in
22e60 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20 20  t res;          
22e70 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f       /* Result o
22e80 66 20 61 6e 20 73 71 6c 69 74 65 33 42 74 72 65  f an sqlite3Btre
22e90 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 69 6e 74  eLast() */.  int
22ea0 20 63 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20   cnt;           
22eb0 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 74      /* Counter t
22ec0 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d 62  o limit the numb
22ed0 65 72 20 6f 66 20 73 65 61 72 63 68 65 73 20 2a  er of searches *
22ee0 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20  /.  Mem *pMem;  
22ef0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
22f00 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 6c  gister holding l
22f10 61 72 67 65 73 74 20 72 6f 77 69 64 20 66 6f 72  argest rowid for
22f20 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a   AUTOINCREMENT *
22f30 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70  /.  VdbeFrame *p
22f40 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a 20 52 6f  Frame;     /* Ro
22f50 6f 74 20 66 72 61 6d 65 20 6f 66 20 56 44 42 45  ot frame of VDBE
22f60 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a 20 20   */..  v = 0;.  
22f70 72 65 73 20 3d 20 30 3b 0a 20 20 70 4f 75 74 20  res = 0;.  pOut 
22f80 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
22f90 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65  (p, pOp);.  asse
22fa0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
22fb0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
22fc0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
22fd0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
22fe0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
22ff0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
23000 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
23010 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
23020 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
23030 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 7b  Cursor!=0 );.  {
23040 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74  .    /* The next
23050 20 72 6f 77 69 64 20 6f 72 20 72 65 63 6f 72 64   rowid or record
23060 20 6e 75 6d 62 65 72 20 28 64 69 66 66 65 72 65   number (differe
23070 6e 74 20 74 65 72 6d 73 20 66 6f 72 20 74 68 65  nt terms for the
23080 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74 68 69   same.    ** thi
23090 6e 67 29 20 69 73 20 6f 62 74 61 69 6e 65 64 20  ng) is obtained 
230a0 69 6e 20 61 20 74 77 6f 2d 73 74 65 70 20 61 6c  in a two-step al
230b0 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a  gorithm..    **.
230c0 20 20 20 20 2a 2a 20 46 69 72 73 74 20 77 65 20      ** First we 
230d0 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20  attempt to find 
230e0 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73  the largest exis
230f0 74 69 6e 67 20 72 6f 77 69 64 20 61 6e 64 20 61  ting rowid and a
23100 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 74 6f  dd one.    ** to
23110 20 74 68 61 74 2e 20 20 42 75 74 20 69 66 20 74   that.  But if t
23120 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73 74  he largest exist
23130 69 6e 67 20 72 6f 77 69 64 20 69 73 20 61 6c 72  ing rowid is alr
23140 65 61 64 79 20 74 68 65 20 6d 61 78 69 6d 75 6d  eady the maximum
23150 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74 69 76 65  .    ** positive
23160 20 69 6e 74 65 67 65 72 2c 20 77 65 20 68 61 76   integer, we hav
23170 65 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f 75 67  e to fall throug
23180 68 20 74 6f 20 74 68 65 20 73 65 63 6f 6e 64 0a  h to the second.
23190 20 20 20 20 2a 2a 20 70 72 6f 62 61 62 69 6c 69      ** probabili
231a0 73 74 69 63 20 61 6c 67 6f 72 69 74 68 6d 0a 20  stic algorithm. 
231b0 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65     **.    ** The
231c0 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69 74 68   second algorith
231d0 6d 20 69 73 20 74 6f 20 73 65 6c 65 63 74 20 61  m is to select a
231e0 20 72 6f 77 69 64 20 61 74 20 72 61 6e 64 6f 6d   rowid at random
231f0 20 61 6e 64 20 73 65 65 20 69 66 0a 20 20 20 20   and see if.    
23200 2a 2a 20 69 74 20 61 6c 72 65 61 64 79 20 65 78  ** it already ex
23210 69 73 74 73 20 69 6e 20 74 68 65 20 74 61 62 6c  ists in the tabl
23220 65 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e  e.  If it does n
23230 6f 74 20 65 78 69 73 74 2c 20 77 65 20 68 61 76  ot exist, we hav
23240 65 0a 20 20 20 20 2a 2a 20 73 75 63 63 65 65 64  e.    ** succeed
23250 65 64 2e 20 20 49 66 20 74 68 65 20 72 61 6e 64  ed.  If the rand
23260 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73 20 65 78  om rowid does ex
23270 69 73 74 2c 20 77 65 20 73 65 6c 65 63 74 20 61  ist, we select a
23280 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a 2a 20   new one.    ** 
23290 61 6e 64 20 74 72 79 20 61 67 61 69 6e 2c 20 75  and try again, u
232a0 70 20 74 6f 20 31 30 30 20 74 69 6d 65 73 2e 0a  p to 100 times..
232b0 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72      */.    asser
232c0 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
232d0 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
232e0 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a 23 20 20  _32BIT_ROWID.#  
232f0 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49   define MAX_ROWI
23300 44 20 30 78 37 66 66 66 66 66 66 66 0a 23 65 6c  D 0x7fffffff.#el
23310 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63  se.    /* Some c
23320 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69  ompilers complai
23330 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74  n about constant
23340 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 30 78  s of the form 0x
23350 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66  7fffffffffffffff
23360 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72 73 20  ..    ** Others 
23370 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 30  complain about 0
23380 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66  x7ffffffffffffff
23390 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  ffLL.  The follo
233a0 77 69 6e 67 20 6d 61 63 72 6f 20 73 65 65 6d 73  wing macro seems
233b0 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69  .    ** to provi
233c0 64 65 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20  de the constant 
233d0 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c  while making all
233e0 20 63 6f 6d 70 69 6c 65 72 73 20 68 61 70 70 79   compilers happy
233f0 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64 65 66  ..    */.#   def
23400 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 20 28  ine MAX_ROWID  (
23410 69 36 34 29 28 20 28 28 28 75 36 34 29 30 78 37  i64)( (((u64)0x7
23420 66 66 66 66 66 66 66 29 3c 3c 33 32 29 20 7c 20  fffffff)<<32) | 
23430 28 75 36 34 29 30 78 66 66 66 66 66 66 66 66 20  (u64)0xffffffff 
23440 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 69 66  ).#endif..    if
23450 28 20 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  ( !pC->useRandom
23460 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 72  Rowid ){.      r
23470 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
23480 4c 61 73 74 28 70 43 2d 3e 75 63 2e 70 43 75 72  Last(pC->uc.pCur
23490 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  sor, &res);.    
234a0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
234b0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67  _OK ){.        g
234c0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
234d0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
234e0 20 20 20 20 20 20 69 66 28 20 72 65 73 20 29 7b        if( res ){
234f0 0a 20 20 20 20 20 20 20 20 76 20 3d 20 31 3b 20  .        v = 1; 
23500 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 36 31 39 31    /* IMP: R-6191
23510 34 2d 34 38 30 37 34 20 2a 2f 0a 20 20 20 20 20  4-48074 */.     
23520 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
23530 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
23540 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69  treeCursorIsVali
23550 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  d(pC->uc.pCursor
23560 29 20 29 3b 0a 20 20 20 20 20 20 20 20 76 20 3d  ) );.        v =
23570 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74   sqlite3BtreeInt
23580 65 67 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70  egerKey(pC->uc.p
23590 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 20  Cursor);.       
235a0 20 69 66 28 20 76 3e 3d 4d 41 58 5f 52 4f 57 49   if( v>=MAX_ROWI
235b0 44 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70  D ){.          p
235c0 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
235d0 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d  d = 1;.        }
235e0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
235f0 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52  v++;   /* IMP: R
23600 2d 32 39 35 33 38 2d 33 34 39 38 37 20 2a 2f 0a  -29538-34987 */.
23610 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
23620 7d 0a 20 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66  }.    }..#ifndef
23630 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
23640 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 20 69  OINCREMENT.    i
23650 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
23660 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68      /* Assert th
23670 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64  at P3 is a valid
23680 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f   memory cell. */
23690 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
236a0 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20  Op->p3>0 );.    
236b0 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20    if( p->pFrame 
236c0 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70  ){.        for(p
236d0 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b  Frame=p->pFrame;
236e0 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74   pFrame->pParent
236f0 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d  ; pFrame=pFrame-
23700 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 20  >pParent);.     
23710 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61     /* Assert tha
23720 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20  t P3 is a valid 
23730 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a  memory cell. */.
23740 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
23750 70 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d 65 2d  pOp->p3<=pFrame-
23760 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20  >nMem );.       
23770 20 70 4d 65 6d 20 3d 20 26 70 46 72 61 6d 65 2d   pMem = &pFrame-
23780 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
23790 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
237a0 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74       /* Assert t
237b0 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69  hat P3 is a vali
237c0 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a  d memory cell. *
237d0 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  /.        assert
237e0 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  ( pOp->p3<=(p->n
237f0 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
23800 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70  or) );.        p
23810 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
23820 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65  >p3];.        me
23830 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
23840 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 7d  , pMem);.      }
23850 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
23860 65 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d 29 20  emIsValid(pMem) 
23870 29 3b 0a 0a 20 20 20 20 20 20 52 45 47 49 53 54  );..      REGIST
23880 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
23890 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 73  , pMem);.      s
238a0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
238b0 65 67 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a 20  egerify(pMem);. 
238c0 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4d       assert( (pM
238d0 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  em->flags & MEM_
238e0 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20 6d  Int)!=0 );  /* m
238f0 65 6d 28 50 33 29 20 68 6f 6c 64 73 20 61 6e 20  em(P3) holds an 
23900 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20 20 20 20  integer */.     
23910 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d   if( pMem->u.i==
23920 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20 70 43 2d  MAX_ROWID || pC-
23930 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
23940 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
23950 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f  SQLITE_FULL;   /
23960 2a 20 49 4d 50 3a 20 52 2d 31 37 38 31 37 2d 30  * IMP: R-17817-0
23970 30 36 33 30 20 2a 2f 0a 20 20 20 20 20 20 20 20  0630 */.        
23980 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
23990 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
239a0 0a 20 20 20 20 20 20 69 66 28 20 76 3c 70 4d 65  .      if( v<pMe
239b0 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20  m->u.i+1 ){.    
239c0 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e      v = pMem->u.
239d0 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20  i + 1;.      }. 
239e0 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d       pMem->u.i =
239f0 20 76 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66   v;.    }.#endif
23a00 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 75 73 65  .    if( pC->use
23a10 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20  RandomRowid ){. 
23a20 20 20 20 20 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e       /* IMPLEMEN
23a30 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30 37 36  TATION-OF: R-076
23a40 37 37 2d 34 31 38 38 31 20 49 66 20 74 68 65 20  77-41881 If the 
23a50 6c 61 72 67 65 73 74 20 52 4f 57 49 44 20 69 73  largest ROWID is
23a60 20 65 71 75 61 6c 20 74 6f 20 74 68 65 0a 20 20   equal to the.  
23a70 20 20 20 20 2a 2a 20 6c 61 72 67 65 73 74 20 70      ** largest p
23a80 6f 73 73 69 62 6c 65 20 69 6e 74 65 67 65 72 20  ossible integer 
23a90 28 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  (922337203685477
23aa0 35 38 30 37 29 20 74 68 65 6e 20 74 68 65 20 64  5807) then the d
23ab0 61 74 61 62 61 73 65 0a 20 20 20 20 20 20 2a 2a  atabase.      **
23ac0 20 65 6e 67 69 6e 65 20 73 74 61 72 74 73 20 70   engine starts p
23ad0 69 63 6b 69 6e 67 20 70 6f 73 69 74 69 76 65 20  icking positive 
23ae0 63 61 6e 64 69 64 61 74 65 20 52 4f 57 49 44 73  candidate ROWIDs
23af0 20 61 74 20 72 61 6e 64 6f 6d 20 75 6e 74 69 6c   at random until
23b00 0a 20 20 20 20 20 20 2a 2a 20 69 74 20 66 69 6e  .      ** it fin
23b10 64 73 20 6f 6e 65 20 74 68 61 74 20 69 73 20 6e  ds one that is n
23b20 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73  ot previously us
23b30 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  ed. */.      ass
23b40 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20  ert( pOp->p3==0 
23b50 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e 6e 6f 74  );  /* We cannot
23b60 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d 20 72 6f   be in random ro
23b70 77 69 64 20 6d 6f 64 65 20 69 66 20 74 68 69 73  wid mode if this
23b80 20 69 73 0a 20 20 20 20 20 20 20 20 20 20 20 20   is.            
23b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ba0 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e 43 52 45   ** an AUTOINCRE
23bb0 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a 2f 0a 20  MENT table. */. 
23bc0 20 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20       cnt = 0;.  
23bd0 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20      do{.        
23be0 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e 65  sqlite3_randomne
23bf0 73 73 28 73 69 7a 65 6f 66 28 76 29 2c 20 26 76  ss(sizeof(v), &v
23c00 29 3b 0a 20 20 20 20 20 20 20 20 76 20 26 3d 20  );.        v &= 
23c10 28 4d 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b 20  (MAX_ROWID>>1); 
23c20 76 2b 2b 3b 20 20 2f 2a 20 45 6e 73 75 72 65 20  v++;  /* Ensure 
23c30 74 68 61 74 20 76 20 69 73 20 67 72 65 61 74 65  that v is greate
23c40 72 20 74 68 61 6e 20 7a 65 72 6f 20 2a 2f 0a 20  r than zero */. 
23c50 20 20 20 20 20 7d 77 68 69 6c 65 28 20 20 28 28       }while(  ((
23c60 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
23c70 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
23c80 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
23c90 30 2c 20 28 75 36 34 29 76 2c 0a 20 20 20 20 20  0, (u64)v,.     
23ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23cc0 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 26              0, &
23cd0 72 65 73 29 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b  res))==SQLITE_OK
23ce0 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26  ).            &&
23cf0 20 28 72 65 73 3d 3d 30 29 0a 20 20 20 20 20 20   (res==0).      
23d00 20 20 20 20 20 20 26 26 20 28 2b 2b 63 6e 74 3c        && (++cnt<
23d10 31 30 30 29 29 3b 0a 20 20 20 20 20 20 69 66 28  100));.      if(
23d20 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
23d30 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
23d40 20 20 20 20 20 69 66 28 20 72 65 73 3d 3d 30 20       if( res==0 
23d50 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
23d60 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f  SQLITE_FULL;   /
23d70 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31 39 2d 35  * IMP: R-38219-5
23d80 33 30 30 32 20 2a 2f 0a 20 20 20 20 20 20 20 20  3002 */.        
23d90 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
23da0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
23db0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 76  .      assert( v
23dc0 3e 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20 52 2d  >0 );  /* EV: R-
23dd0 34 30 38 31 32 2d 30 33 35 37 30 20 2a 2f 0a 20  40812-03570 */. 
23de0 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66     }.    pC->def
23df0 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
23e00 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
23e10 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
23e20 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  LE;.  }.  pOut->
23e30 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b  u.i = v;.  break
23e40 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
23e50 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 20  Insert P1 P2 P3 
23e60 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
23e70 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 20  s: intkey=r[P3] 
23e80 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  data=r[P2].**.**
23e90 20 57 72 69 74 65 20 61 6e 20 65 6e 74 72 79 20   Write an entry 
23ea0 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 6f  into the table o
23eb0 66 20 63 75 72 73 6f 72 20 50 31 2e 20 20 41 20  f cursor P1.  A 
23ec0 6e 65 77 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20  new entry is.** 
23ed0 63 72 65 61 74 65 64 20 69 66 20 69 74 20 64 6f  created if it do
23ee0 65 73 6e 27 74 20 61 6c 72 65 61 64 79 20 65 78  esn't already ex
23ef0 69 73 74 20 6f 72 20 74 68 65 20 64 61 74 61 20  ist or the data 
23f00 66 6f 72 20 61 6e 20 65 78 69 73 74 69 6e 67 0a  for an existing.
23f10 2a 2a 20 65 6e 74 72 79 20 69 73 20 6f 76 65 72  ** entry is over
23f20 77 72 69 74 74 65 6e 2e 20 20 54 68 65 20 64 61  written.  The da
23f30 74 61 20 69 73 20 74 68 65 20 76 61 6c 75 65 20  ta is the value 
23f40 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20  MEM_Blob stored 
23f50 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e  in register.** n
23f60 75 6d 62 65 72 20 50 32 2e 20 54 68 65 20 6b 65  umber P2. The ke
23f70 79 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  y is stored in r
23f80 65 67 69 73 74 65 72 20 50 33 2e 20 54 68 65 20  egister P3. The 
23f90 6b 65 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61  key must.** be a
23fa0 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20   MEM_Int..**.** 
23fb0 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  If the OPFLAG_NC
23fc0 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 35  HANGE flag of P5
23fd0 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68   is set, then th
23fe0 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75  e row change cou
23ff0 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65  nt is.** increme
24000 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20  nted (otherwise 
24010 6e 6f 74 29 2e 20 20 49 66 20 74 68 65 20 4f 50  not).  If the OP
24020 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 66  FLAG_LASTROWID f
24030 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
24040 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64 20  ,.** then rowid 
24050 69 73 20 73 74 6f 72 65 64 20 66 6f 72 20 73 75  is stored for su
24060 62 73 65 71 75 65 6e 74 20 72 65 74 75 72 6e 20  bsequent return 
24070 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  by the.** sqlite
24080 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  3_last_insert_ro
24090 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 28  wid() function (
240a0 6f 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20  otherwise it is 
240b0 75 6e 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a  unmodified)..**.
240c0 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
240d0 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66  _USESEEKRESULT f
240e0 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
240f0 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  , the implementa
24100 74 69 6f 6e 20 6d 69 67 68 74 0a 2a 2a 20 72 75  tion might.** ru
24110 6e 20 66 61 73 74 65 72 20 62 79 20 61 76 6f 69  n faster by avoi
24120 64 69 6e 67 20 61 6e 20 75 6e 6e 65 63 65 73 73  ding an unnecess
24130 61 72 79 20 73 65 65 6b 20 6f 6e 20 63 75 72 73  ary seek on curs
24140 6f 72 20 50 31 2e 20 20 48 6f 77 65 76 65 72 2c  or P1.  However,
24150 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f 55  .** the OPFLAG_U
24160 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61  SESEEKRESULT fla
24170 67 20 6d 75 73 74 20 6f 6e 6c 79 20 62 65 20 73  g must only be s
24180 65 74 20 69 66 20 74 68 65 72 65 20 68 61 76 65  et if there have
24190 20 62 65 65 6e 20 6e 6f 20 70 72 69 6f 72 0a 2a   been no prior.*
241a0 2a 20 73 65 65 6b 73 20 6f 6e 20 74 68 65 20 63  * seeks on the c
241b0 75 72 73 6f 72 20 6f 72 20 69 66 20 74 68 65 20  ursor or if the 
241c0 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 65 65 6b  most recent seek
241d0 20 75 73 65 64 20 61 20 6b 65 79 20 65 71 75 61   used a key equa
241e0 6c 20 74 6f 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49  l to P3..**.** I
241f0 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55  f the OPFLAG_ISU
24200 50 44 41 54 45 20 66 6c 61 67 20 69 73 20 73 65  PDATE flag is se
24210 74 2c 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63  t, then this opc
24220 6f 64 65 20 69 73 20 70 61 72 74 20 6f 66 20 61  ode is part of a
24230 6e 0a 2a 2a 20 55 50 44 41 54 45 20 6f 70 65 72  n.** UPDATE oper
24240 61 74 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73  ation.  Otherwis
24250 65 20 28 69 66 20 74 68 65 20 66 6c 61 67 20 69  e (if the flag i
24260 73 20 63 6c 65 61 72 29 20 74 68 65 6e 20 74 68  s clear) then th
24270 69 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20  is opcode.** is 
24280 70 61 72 74 20 6f 66 20 61 6e 20 49 4e 53 45 52  part of an INSER
24290 54 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54 68  T operation.  Th
242a0 65 20 64 69 66 66 65 72 65 6e 63 65 20 69 73 20  e difference is 
242b0 6f 6e 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20 74  only important t
242c0 6f 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20  o.** the update 
242d0 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61  hook..**.** Para
242e0 6d 65 74 65 72 20 50 34 20 6d 61 79 20 70 6f 69  meter P4 may poi
242f0 6e 74 20 74 6f 20 61 20 54 61 62 6c 65 20 73 74  nt to a Table st
24300 72 75 63 74 75 72 65 2c 20 6f 72 20 6d 61 79 20  ructure, or may 
24310 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69  be NULL. If it i
24320 73 20 0a 2a 2a 20 6e 6f 74 20 4e 55 4c 4c 2c 20  s .** not NULL, 
24330 74 68 65 6e 20 74 68 65 20 75 70 64 61 74 65 2d  then the update-
24340 68 6f 6f 6b 20 28 73 71 6c 69 74 65 33 2e 78 55  hook (sqlite3.xU
24350 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 20 69  pdateCallback) i
24360 73 20 69 6e 76 6f 6b 65 64 20 0a 2a 2a 20 66 6f  s invoked .** fo
24370 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63 63 65 73  llowing a succes
24380 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a  sful insert..**.
24390 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f  ** (WARNING/TODO
243a0 3a 20 49 66 20 50 31 20 69 73 20 61 20 70 73 65  : If P1 is a pse
243b0 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20 50  udo-cursor and P
243c0 32 20 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79  2 is dynamically
243d0 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74  .** allocated, t
243e0 68 65 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f 66  hen ownership of
243f0 20 50 32 20 69 73 20 74 72 61 6e 73 66 65 72 72   P2 is transferr
24400 65 64 20 74 6f 20 74 68 65 20 70 73 65 75 64 6f  ed to the pseudo
24410 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72  -cursor.** and r
24420 65 67 69 73 74 65 72 20 50 32 20 62 65 63 6f 6d  egister P2 becom
24430 65 73 20 65 70 68 65 6d 65 72 61 6c 2e 20 20 49  es ephemeral.  I
24440 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  f the cursor is 
24450 63 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20  changed, the.** 
24460 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
24470 72 20 50 32 20 77 69 6c 6c 20 74 68 65 6e 20 63  r P2 will then c
24480 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75 72  hange.  Make sur
24490 65 20 74 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a  e this does not.
244a0 2a 2a 20 63 61 75 73 65 20 61 6e 79 20 70 72 6f  ** cause any pro
244b0 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68  blems.).**.** Th
244c0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
244d0 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62  nly works on tab
244e0 6c 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61  les.  The equiva
244f0 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  lent instruction
24500 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65 73 20  .** for indices 
24510 69 73 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e  is OP_IdxInsert.
24520 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
24530 6e 73 65 72 74 49 6e 74 20 50 31 20 50 32 20 50  nsertInt P1 P2 P
24540 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
24550 73 69 73 3a 20 69 6e 74 6b 65 79 3d 50 33 20 64  sis: intkey=P3 d
24560 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  ata=r[P2].**.** 
24570 54 68 69 73 20 77 6f 72 6b 73 20 65 78 61 63 74  This works exact
24580 6c 79 20 6c 69 6b 65 20 4f 50 5f 49 6e 73 65 72  ly like OP_Inser
24590 74 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  t except that th
245a0 65 20 6b 65 79 20 69 73 20 74 68 65 0a 2a 2a 20  e key is the.** 
245b0 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 33  integer value P3
245c0 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c 75 65 20  , not the value 
245d0 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 73  of the integer s
245e0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
245f0 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P3..*/.case OP
24600 5f 49 6e 73 65 72 74 3a 20 0a 63 61 73 65 20 4f  _Insert: .case O
24610 50 5f 49 6e 73 65 72 74 49 6e 74 3a 20 7b 0a 20  P_InsertInt: {. 
24620 20 4d 65 6d 20 2a 70 44 61 74 61 3b 20 20 20 20   Mem *pData;    
24630 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68     /* MEM cell h
24640 6f 6c 64 69 6e 67 20 64 61 74 61 20 66 6f 72 20  olding data for 
24650 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65  the record to be
24660 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 4d   inserted */.  M
24670 65 6d 20 2a 70 4b 65 79 3b 20 20 20 20 20 20 20  em *pKey;       
24680 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c   /* MEM cell hol
24690 64 69 6e 67 20 6b 65 79 20 20 66 6f 72 20 74 68  ding key  for th
246a0 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 56 64  e record */.  Vd
246b0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
246c0 2f 2a 20 43 75 72 73 6f 72 20 74 6f 20 74 61 62  /* Cursor to tab
246d0 6c 65 20 69 6e 74 6f 20 77 68 69 63 68 20 69 6e  le into which in
246e0 73 65 72 74 20 69 73 20 77 72 69 74 74 65 6e 20  sert is written 
246f0 2a 2f 0a 20 20 69 6e 74 20 73 65 65 6b 52 65 73  */.  int seekRes
24700 75 6c 74 3b 20 20 20 2f 2a 20 52 65 73 75 6c 74  ult;   /* Result
24710 20 6f 66 20 70 72 69 6f 72 20 73 65 65 6b 20 6f   of prior seek o
24720 72 20 30 20 69 66 20 6e 6f 20 55 53 45 53 45 45  r 0 if no USESEE
24730 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 2a 2f 0a  KRESULT flag */.
24740 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
24750 62 3b 20 20 2f 2a 20 64 61 74 61 62 61 73 65 20  b;  /* database 
24760 6e 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20 74  name - used by t
24770 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a  he update hook *
24780 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b  /.  Table *pTab;
24790 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 73        /* Table s
247a0 74 72 75 63 74 75 72 65 20 2d 20 75 73 65 64 20  tructure - used 
247b0 62 79 20 75 70 64 61 74 65 20 61 6e 64 20 70 72  by update and pr
247c0 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 73 20 2a  e-update hooks *
247d0 2f 0a 20 20 69 6e 74 20 6f 70 3b 20 20 20 20 20  /.  int op;     
247e0 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20        /* Opcode 
247f0 66 6f 72 20 75 70 64 61 74 65 20 68 6f 6f 6b 3a  for update hook:
24800 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 6f   SQLITE_UPDATE o
24810 72 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 20  r SQLITE_INSERT 
24820 2a 2f 0a 20 20 42 74 72 65 65 50 61 79 6c 6f 61  */.  BtreePayloa
24830 64 20 78 3b 20 20 20 2f 2a 20 50 61 79 6c 6f 61  d x;   /* Payloa
24840 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64  d to be inserted
24850 20 2a 2f 0a 0a 20 20 6f 70 20 3d 20 30 3b 0a 20   */..  op = 0;. 
24860 20 70 44 61 74 61 20 3d 20 26 61 4d 65 6d 5b 70   pData = &aMem[p
24870 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
24880 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
24890 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
248a0 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
248b0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 44 61 74   memIsValid(pDat
248c0 61 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  a) );.  pC = p->
248d0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
248e0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
248f0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
24900 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
24910 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73  PE_BTREE );.  as
24920 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75  sert( pC->uc.pCu
24930 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73  rsor!=0 );.  ass
24940 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
24950 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
24960 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41  p->p4type==P4_TA
24970 42 4c 45 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79  BLE || pOp->p4ty
24980 70 65 3e 3d 50 34 5f 53 54 41 54 49 43 20 29 3b  pe>=P4_STATIC );
24990 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
249a0 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61  E(pOp->p2, pData
249b0 29 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f  );..  if( pOp->o
249c0 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74  pcode==OP_Insert
249d0 20 29 7b 0a 20 20 20 20 70 4b 65 79 20 3d 20 26   ){.    pKey = &
249e0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
249f0 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 2d     assert( pKey-
24a00 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
24a10 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
24a20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4b 65 79 29  memIsValid(pKey)
24a30 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52   );.    REGISTER
24a40 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
24a50 70 4b 65 79 29 3b 0a 20 20 20 20 78 2e 6e 4b 65  pKey);.    x.nKe
24a60 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20  y = pKey->u.i;. 
24a70 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
24a80 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
24a90 3d 4f 50 5f 49 6e 73 65 72 74 49 6e 74 20 29 3b  =OP_InsertInt );
24aa0 0a 20 20 20 20 78 2e 6e 4b 65 79 20 3d 20 70 4f  .    x.nKey = pO
24ab0 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69 66  p->p3;.  }..  if
24ac0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
24ad0 34 5f 54 41 42 4c 45 20 26 26 20 48 41 53 5f 55  4_TABLE && HAS_U
24ae0 50 44 41 54 45 5f 48 4f 4f 4b 28 64 62 29 20 29  PDATE_HOOK(db) )
24af0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
24b00 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20  ->isTable );.   
24b10 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62   assert( pC->iDb
24b20 3e 3d 30 20 29 3b 0a 20 20 20 20 7a 44 62 20 3d  >=0 );.    zDb =
24b30 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62   db->aDb[pC->iDb
24b40 5d 2e 7a 44 62 53 4e 61 6d 65 3b 0a 20 20 20 20  ].zDbSName;.    
24b50 70 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  pTab = pOp->p4.p
24b60 54 61 62 3b 0a 20 20 20 20 61 73 73 65 72 74 28  Tab;.    assert(
24b70 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20   HasRowid(pTab) 
24b80 29 3b 0a 20 20 20 20 6f 70 20 3d 20 28 28 70 4f  );.    op = ((pO
24b90 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49  p->p5 & OPFLAG_I
24ba0 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54  SUPDATE) ? SQLIT
24bb0 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54  E_UPDATE : SQLIT
24bc0 45 5f 49 4e 53 45 52 54 29 3b 0a 20 20 7d 65 6c  E_INSERT);.  }el
24bd0 73 65 7b 0a 20 20 20 20 70 54 61 62 20 3d 20 30  se{.    pTab = 0
24be0 3b 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e  ; /* Not needed.
24bf0 20 20 53 69 6c 65 6e 63 65 20 61 20 63 6f 6d 69    Silence a comi
24c00 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  ler warning. */.
24c10 20 20 20 20 7a 44 62 20 3d 20 30 3b 20 20 2f 2a      zDb = 0;  /*
24c20 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69   Not needed.  Si
24c30 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65 72  lence a compiler
24c40 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 7d   warning. */.  }
24c50 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
24c60 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45  ENABLE_PREUPDATE
24c70 5f 48 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b  _HOOK.  /* Invok
24c80 65 20 74 68 65 20 70 72 65 2d 75 70 64 61 74 65  e the pre-update
24c90 20 68 6f 6f 6b 2c 20 69 66 20 61 6e 79 20 2a 2f   hook, if any */
24ca0 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 65 55  .  if( db->xPreU
24cb0 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 0a 20  pdateCallback . 
24cc0 20 20 26 26 20 70 4f 70 2d 3e 70 34 74 79 70 65    && pOp->p4type
24cd0 3d 3d 50 34 5f 54 41 42 4c 45 0a 20 20 20 26 26  ==P4_TABLE.   &&
24ce0 20 21 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46   !(pOp->p5 & OPF
24cf0 4c 41 47 5f 49 53 55 50 44 41 54 45 29 0a 20 20  LAG_ISUPDATE).  
24d00 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
24d10 62 65 50 72 65 55 70 64 61 74 65 48 6f 6f 6b 28  bePreUpdateHook(
24d20 70 2c 20 70 43 2c 20 53 51 4c 49 54 45 5f 49 4e  p, pC, SQLITE_IN
24d30 53 45 52 54 2c 20 7a 44 62 2c 20 70 54 61 62 2c  SERT, zDb, pTab,
24d40 20 78 2e 6e 4b 65 79 2c 20 70 4f 70 2d 3e 70 32   x.nKey, pOp->p2
24d50 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  );.  }.#endif.. 
24d60 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f   if( pOp->p5 & O
24d70 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20  PFLAG_NCHANGE ) 
24d80 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
24d90 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  if( pOp->p5 & OP
24da0 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 29  FLAG_LASTROWID )
24db0 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d   db->lastRowid =
24dc0 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 78 2e 6e   lastRowid = x.n
24dd0 4b 65 79 3b 0a 20 20 69 66 28 20 70 44 61 74 61  Key;.  if( pData
24de0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
24df0 6c 6c 20 29 7b 0a 20 20 20 20 78 2e 70 44 61 74  ll ){.    x.pDat
24e00 61 20 3d 20 30 3b 0a 20 20 20 20 78 2e 6e 44 61  a = 0;.    x.nDa
24e10 74 61 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b  ta = 0;.  }else{
24e20 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 44 61  .    assert( pDa
24e30 74 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  ta->flags & (MEM
24e40 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29  _Blob|MEM_Str) )
24e50 3b 0a 20 20 20 20 78 2e 70 44 61 74 61 20 3d 20  ;.    x.pData = 
24e60 70 44 61 74 61 2d 3e 7a 3b 0a 20 20 20 20 78 2e  pData->z;.    x.
24e70 6e 44 61 74 61 20 3d 20 70 44 61 74 61 2d 3e 6e  nData = pData->n
24e80 3b 0a 20 20 7d 0a 20 20 73 65 65 6b 52 65 73 75  ;.  }.  seekResu
24e90 6c 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26  lt = ((pOp->p5 &
24ea0 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
24eb0 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65  ESULT) ? pC->see
24ec0 6b 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20  kResult : 0);.  
24ed0 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73  if( pData->flags
24ee0 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20   & MEM_Zero ){. 
24ef0 20 20 20 78 2e 6e 5a 65 72 6f 20 3d 20 70 44 61     x.nZero = pDa
24f00 74 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d  ta->u.nZero;.  }
24f10 65 6c 73 65 7b 0a 20 20 20 20 78 2e 6e 5a 65 72  else{.    x.nZer
24f20 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 78 2e 70  o = 0;.  }.  x.p
24f30 4b 65 79 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20  Key = 0;.  rc = 
24f40 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65  sqlite3BtreeInse
24f50 72 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  rt(pC->uc.pCurso
24f60 72 2c 20 26 78 2c 0a 20 20 20 20 20 20 20 20 20  r, &x,.         
24f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f80 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c   (pOp->p5 & OPFL
24f90 41 47 5f 41 50 50 45 4e 44 29 21 3d 30 2c 20 73  AG_APPEND)!=0, s
24fa0 65 65 6b 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20  eekResult.  );. 
24fb0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
24fc0 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  eto = 0;.  pC->c
24fd0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
24fe0 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20  HE_STALE;..  /* 
24ff0 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74  Invoke the updat
25000 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72  e-hook if requir
25010 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 20  ed. */.  if( rc 
25020 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
25030 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28  _to_error;.  if(
25040 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
25050 62 61 63 6b 20 26 26 20 6f 70 20 29 7b 0a 20 20  back && op ){.  
25060 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c    db->xUpdateCal
25070 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74  lback(db->pUpdat
25080 65 41 72 67 2c 20 6f 70 2c 20 7a 44 62 2c 20 70  eArg, op, zDb, p
25090 54 61 62 2d 3e 7a 4e 61 6d 65 2c 20 78 2e 6e 4b  Tab->zName, x.nK
250a0 65 79 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ey);.  }.  break
250b0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
250c0 44 65 6c 65 74 65 20 50 31 20 50 32 20 50 33 20  Delete P1 P2 P3 
250d0 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44 65 6c 65  P4 P5.**.** Dele
250e0 74 65 20 74 68 65 20 72 65 63 6f 72 64 20 61 74  te the record at
250f0 20 77 68 69 63 68 20 74 68 65 20 50 31 20 63 75   which the P1 cu
25100 72 73 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c  rsor is currentl
25110 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a  y pointing..**.*
25120 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
25130 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 62 69 74  SAVEPOSITION bit
25140 20 6f 66 20 74 68 65 20 50 35 20 70 61 72 61 6d   of the P5 param
25150 65 74 65 72 20 69 73 20 73 65 74 2c 20 74 68 65  eter is set, the
25160 6e 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20  n.** the cursor 
25170 77 69 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f 69  will be left poi
25180 6e 74 69 6e 67 20 61 74 20 20 65 69 74 68 65 72  nting at  either
25190 20 74 68 65 20 6e 65 78 74 20 6f 72 20 74 68 65   the next or the
251a0 20 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65 63   previous.** rec
251b0 6f 72 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65  ord in the table
251c0 2e 20 49 66 20 69 74 20 69 73 20 6c 65 66 74 20  . If it is left 
251d0 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20  pointing at the 
251e0 6e 65 78 74 20 72 65 63 6f 72 64 2c 20 74 68 65  next record, the
251f0 6e 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e 65  n.** the next Ne
25200 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77  xt instruction w
25210 69 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e 20  ill be a no-op. 
25220 41 73 20 61 20 72 65 73 75 6c 74 2c 20 69 6e 20  As a result, in 
25230 74 68 69 73 20 63 61 73 65 0a 2a 2a 20 69 74 20  this case.** it 
25240 69 73 20 6f 6b 20 74 6f 20 64 65 6c 65 74 65 20  is ok to delete 
25250 61 20 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69  a record from wi
25260 74 68 69 6e 20 61 20 4e 65 78 74 20 6c 6f 6f 70  thin a Next loop
25270 2e 20 49 66 20 0a 2a 2a 20 4f 50 46 4c 41 47 5f  . If .** OPFLAG_
25280 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 62 69 74  SAVEPOSITION bit
25290 20 6f 66 20 50 35 20 69 73 20 63 6c 65 61 72 2c   of P5 is clear,
252a0 20 74 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72   then the cursor
252b0 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 6c 65 66 74   will be.** left
252c0 20 69 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64   in an undefined
252d0 20 73 74 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 49 66   state..**.** If
252e0 20 74 68 65 20 4f 50 46 4c 41 47 5f 41 55 58 44   the OPFLAG_AUXD
252f0 45 4c 45 54 45 20 62 69 74 20 69 73 20 73 65 74  ELETE bit is set
25300 20 6f 6e 20 50 35 2c 20 74 68 61 74 20 69 6e 64   on P5, that ind
25310 69 63 61 74 65 73 20 74 68 61 74 20 74 68 69 73  icates that this
25320 0a 2a 2a 20 64 65 6c 65 74 65 20 6f 6e 65 20 6f  .** delete one o
25330 66 20 73 65 76 65 72 61 6c 20 61 73 73 6f 63 69  f several associ
25340 61 74 65 64 20 77 69 74 68 20 64 65 6c 65 74 69  ated with deleti
25350 6e 67 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61  ng a table row a
25360 6e 64 20 61 6c 6c 20 69 74 73 0a 2a 2a 20 61 73  nd all its.** as
25370 73 6f 63 69 61 74 65 64 20 69 6e 64 65 78 20 65  sociated index e
25380 6e 74 72 69 65 73 2e 20 20 45 78 61 63 74 6c 79  ntries.  Exactly
25390 20 6f 6e 65 20 6f 66 20 74 68 6f 73 65 20 64 65   one of those de
253a0 6c 65 74 65 73 20 69 73 20 74 68 65 20 22 70 72  letes is the "pr
253b0 69 6d 61 72 79 22 0a 2a 2a 20 64 65 6c 65 74 65  imary".** delete
253c0 2e 20 20 54 68 65 20 6f 74 68 65 72 73 20 61 72  .  The others ar
253d0 65 20 61 6c 6c 20 6f 6e 20 4f 50 46 4c 41 47 5f  e all on OPFLAG_
253e0 46 4f 52 44 45 4c 45 54 45 20 63 75 72 73 6f 72  FORDELETE cursor
253f0 73 20 6f 72 20 65 6c 73 65 20 61 72 65 0a 2a 2a  s or else are.**
25400 20 6d 61 72 6b 65 64 20 77 69 74 68 20 74 68 65   marked with the
25410 20 41 55 58 44 45 4c 45 54 45 20 66 6c 61 67 2e   AUXDELETE flag.
25420 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
25430 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61  FLAG_NCHANGE fla
25440 67 20 6f 66 20 50 32 20 28 4e 42 3a 20 50 32 20  g of P2 (NB: P2 
25450 6e 6f 74 20 50 35 29 20 69 73 20 73 65 74 2c 20  not P5) is set, 
25460 74 68 65 6e 20 74 68 65 20 72 6f 77 0a 2a 2a 20  then the row.** 
25470 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 20  change count is 
25480 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68  incremented (oth
25490 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a  erwise not)..**.
254a0 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74 20 62  ** P1 must not b
254b0 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20  e pseudo-table. 
254c0 20 49 74 20 68 61 73 20 74 6f 20 62 65 20 61 20   It has to be a 
254d0 72 65 61 6c 20 74 61 62 6c 65 20 77 69 74 68 0a  real table with.
254e0 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  ** multiple rows
254f0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73  ..**.** If P4 is
25500 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20 69   not NULL then i
25510 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 54 61  t points to a Ta
25520 62 6c 65 20 6f 62 6a 65 63 74 2e 20 49 6e 20 74  ble object. In t
25530 68 69 73 20 63 61 73 65 20 65 69 74 68 65 72 20  his case either 
25540 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20 6f  .** the update o
25550 72 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f  r pre-update hoo
25560 6b 2c 20 6f 72 20 62 6f 74 68 2c 20 6d 61 79 20  k, or both, may 
25570 62 65 20 69 6e 76 6f 6b 65 64 2e 20 54 68 65 20  be invoked. The 
25580 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 0a 2a  P1 cursor must.*
25590 2a 20 68 61 76 65 20 62 65 65 6e 20 70 6f 73 69  * have been posi
255a0 74 69 6f 6e 65 64 20 75 73 69 6e 67 20 4f 50 5f  tioned using OP_
255b0 4e 6f 74 46 6f 75 6e 64 20 70 72 69 6f 72 20 74  NotFound prior t
255c0 6f 20 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20  o invoking this 
255d0 6f 70 63 6f 64 65 20 69 6e 20 0a 2a 2a 20 74 68  opcode in .** th
255e0 69 73 20 63 61 73 65 2e 20 53 70 65 63 69 66 69  is case. Specifi
255f0 63 61 6c 6c 79 2c 20 69 66 20 6f 6e 65 20 69 73  cally, if one is
25600 20 63 6f 6e 66 69 67 75 72 65 64 2c 20 74 68 65   configured, the
25610 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b   pre-update hook
25620 20 69 73 20 0a 2a 2a 20 69 6e 76 6f 6b 65 64 20   is .** invoked 
25630 69 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c  if P4 is not NUL
25640 4c 2e 20 54 68 65 20 75 70 64 61 74 65 2d 68 6f  L. The update-ho
25650 6f 6b 20 69 73 20 69 6e 76 6f 6b 65 64 20 69 66  ok is invoked if
25660 20 6f 6e 65 20 69 73 20 63 6f 6e 66 69 67 75 72   one is configur
25670 65 64 2c 20 0a 2a 2a 20 50 34 20 69 73 20 6e 6f  ed, .** P4 is no
25680 74 20 4e 55 4c 4c 2c 20 61 6e 64 20 74 68 65 20  t NULL, and the 
25690 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66  OPFLAG_NCHANGE f
256a0 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 50 32  lag is set in P2
256b0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
256c0 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 66  PFLAG_ISUPDATE f
256d0 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 50 32  lag is set in P2
256e0 2c 20 74 68 65 6e 20 50 33 20 63 6f 6e 74 61 69  , then P3 contai
256f0 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 0a 2a  ns the address.*
25700 2a 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20  * of the memory 
25710 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69  cell that contai
25720 6e 73 20 74 68 65 20 76 61 6c 75 65 20 74 68 61  ns the value tha
25730 74 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74  t the rowid of t
25740 68 65 20 72 6f 77 20 77 69 6c 6c 0a 2a 2a 20 62  he row will.** b
25750 65 20 73 65 74 20 74 6f 20 62 79 20 74 68 65 20  e set to by the 
25760 75 70 64 61 74 65 2e 0a 2a 2f 0a 63 61 73 65 20  update..*/.case 
25770 4f 50 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56  OP_Delete: {.  V
25780 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
25790 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
257a0 3b 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b  ;.  Table *pTab;
257b0 0a 20 20 69 6e 74 20 6f 70 66 6c 61 67 73 3b 0a  .  int opflags;.
257c0 0a 20 20 6f 70 66 6c 61 67 73 20 3d 20 70 4f 70  .  opflags = pOp
257d0 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
257e0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
257f0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
25800 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
25810 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
25820 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
25830 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
25840 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
25850 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65  _BTREE );.  asse
25860 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  rt( pC->uc.pCurs
25870 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  or!=0 );.  asser
25880 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
25890 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 0a 23 69 66  oveto==0 );..#if
258a0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
258b0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79  .  if( pOp->p4ty
258c0 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26 20  pe==P4_TABLE && 
258d0 48 61 73 52 6f 77 69 64 28 70 4f 70 2d 3e 70 34  HasRowid(pOp->p4
258e0 2e 70 54 61 62 29 20 26 26 20 70 4f 70 2d 3e 70  .pTab) && pOp->p
258f0 35 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49  5==0 ){.    /* I
25900 66 20 70 35 20 69 73 20 7a 65 72 6f 2c 20 74 68  f p5 is zero, th
25910 65 20 73 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e  e seek operation
25920 20 74 68 61 74 20 70 6f 73 69 74 69 6f 6e 65 64   that positioned
25930 20 74 68 65 20 63 75 72 73 6f 72 20 70 72 69 6f   the cursor prio
25940 72 20 74 6f 0a 20 20 20 20 2a 2a 20 4f 50 5f 44  r to.    ** OP_D
25950 65 6c 65 74 65 20 77 69 6c 6c 20 68 61 76 65 20  elete will have 
25960 61 6c 73 6f 20 73 65 74 20 74 68 65 20 70 43 2d  also set the pC-
25970 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 66 69  >movetoTarget fi
25980 65 6c 64 20 74 6f 20 74 68 65 20 72 6f 77 69 64  eld to the rowid
25990 20 6f 66 0a 20 20 20 20 2a 2a 20 74 68 65 20 72   of.    ** the r
259a0 6f 77 20 74 68 61 74 20 69 73 20 62 65 69 6e 67  ow that is being
259b0 20 64 65 6c 65 74 65 64 20 2a 2f 0a 20 20 20 20   deleted */.    
259c0 69 36 34 20 69 4b 65 79 20 3d 20 73 71 6c 69 74  i64 iKey = sqlit
259d0 65 33 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65  e3BtreeIntegerKe
259e0 79 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  y(pC->uc.pCursor
259f0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
25a00 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3d  C->movetoTarget=
25a10 3d 69 4b 65 79 20 29 3b 0a 20 20 7d 0a 23 65 6e  =iKey );.  }.#en
25a20 64 69 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65  dif..  /* If the
25a30 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 72 20   update-hook or 
25a40 70 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20  pre-update-hook 
25a50 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c  will be invoked,
25a60 20 73 65 74 20 7a 44 62 20 74 6f 0a 20 20 2a 2a   set zDb to.  **
25a70 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
25a80 20 64 62 20 74 6f 20 70 61 73 73 20 61 73 20 74   db to pass as t
25a90 6f 20 69 74 2e 20 41 6c 73 6f 20 73 65 74 20 6c  o it. Also set l
25aa0 6f 63 61 6c 20 70 54 61 62 20 74 6f 20 61 20 63  ocal pTab to a c
25ab0 6f 70 79 0a 20 20 2a 2a 20 6f 66 20 70 34 2e 70  opy.  ** of p4.p
25ac0 54 61 62 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66  Tab. Finally, if
25ad0 20 70 35 20 69 73 20 74 72 75 65 2c 20 69 6e 64   p5 is true, ind
25ae0 69 63 61 74 69 6e 67 20 74 68 61 74 20 74 68 69  icating that thi
25af0 73 20 63 75 72 73 6f 72 20 77 61 73 0a 20 20 2a  s cursor was.  *
25b00 2a 20 6c 61 73 74 20 6d 6f 76 65 64 20 77 69 74  * last moved wit
25b10 68 20 4f 50 5f 4e 65 78 74 20 6f 72 20 4f 50 5f  h OP_Next or OP_
25b20 50 72 65 76 2c 20 6e 6f 74 20 53 65 65 6b 20 6f  Prev, not Seek o
25b30 72 20 4e 6f 74 46 6f 75 6e 64 2c 20 73 65 74 20  r NotFound, set 
25b40 0a 20 20 2a 2a 20 56 64 62 65 43 75 72 73 6f 72  .  ** VdbeCursor
25b50 2e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 74 6f  .movetoTarget to
25b60 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
25b70 69 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f  id.  */.  if( pO
25b80 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41  p->p4type==P4_TA
25b90 42 4c 45 20 26 26 20 48 41 53 5f 55 50 44 41 54  BLE && HAS_UPDAT
25ba0 45 5f 48 4f 4f 4b 28 64 62 29 20 29 7b 0a 20 20  E_HOOK(db) ){.  
25bb0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44    assert( pC->iD
25bc0 62 3e 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65  b>=0 );.    asse
25bd0 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62  rt( pOp->p4.pTab
25be0 21 3d 30 20 29 3b 0a 20 20 20 20 7a 44 62 20 3d  !=0 );.    zDb =
25bf0 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62   db->aDb[pC->iDb
25c00 5d 2e 7a 44 62 53 4e 61 6d 65 3b 0a 20 20 20 20  ].zDbSName;.    
25c10 70 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  pTab = pOp->p4.p
25c20 54 61 62 3b 0a 20 20 20 20 69 66 28 20 28 70 4f  Tab;.    if( (pO
25c30 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 53  p->p5 & OPFLAG_S
25c40 41 56 45 50 4f 53 49 54 49 4f 4e 29 21 3d 30 20  AVEPOSITION)!=0 
25c50 26 26 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  && pC->isTable )
25c60 7b 0a 20 20 20 20 20 20 70 43 2d 3e 6d 6f 76 65  {.      pC->move
25c70 74 6f 54 61 72 67 65 74 20 3d 20 73 71 6c 69 74  toTarget = sqlit
25c80 65 33 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65  e3BtreeIntegerKe
25c90 79 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  y(pC->uc.pCursor
25ca0 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  );.    }.  }else
25cb0 7b 0a 20 20 20 20 7a 44 62 20 3d 20 30 3b 20 20  {.    zDb = 0;  
25cc0 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20   /* Not needed. 
25cd0 20 53 69 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69   Silence a compi
25ce0 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  ler warning. */.
25cf0 20 20 20 20 70 54 61 62 20 3d 20 30 3b 20 20 2f      pTab = 0;  /
25d00 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 53  * Not needed.  S
25d10 69 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65  ilence a compile
25d20 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  r warning. */.  
25d30 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
25d40 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54  _ENABLE_PREUPDAT
25d50 45 5f 48 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f  E_HOOK.  /* Invo
25d60 6b 65 20 74 68 65 20 70 72 65 2d 75 70 64 61 74  ke the pre-updat
25d70 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72  e-hook if requir
25d80 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d  ed. */.  if( db-
25d90 3e 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62  >xPreUpdateCallb
25da0 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 70  ack && pOp->p4.p
25db0 54 61 62 20 26 26 20 48 61 73 52 6f 77 69 64 28  Tab && HasRowid(
25dc0 70 54 61 62 29 20 29 7b 0a 20 20 20 20 61 73 73  pTab) ){.    ass
25dd0 65 72 74 28 20 21 28 6f 70 66 6c 61 67 73 20 26  ert( !(opflags &
25de0 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45   OPFLAG_ISUPDATE
25df0 29 20 7c 7c 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e  ) || (aMem[pOp->
25e00 70 33 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  p3].flags & MEM_
25e10 49 6e 74 29 20 29 3b 0a 20 20 20 20 73 71 6c 69  Int) );.    sqli
25e20 74 65 33 56 64 62 65 50 72 65 55 70 64 61 74 65  te3VdbePreUpdate
25e30 48 6f 6f 6b 28 70 2c 20 70 43 2c 0a 20 20 20 20  Hook(p, pC,.    
25e40 20 20 20 20 28 6f 70 66 6c 61 67 73 20 26 20 4f      (opflags & O
25e50 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20  PFLAG_ISUPDATE) 
25e60 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20  ? SQLITE_UPDATE 
25e70 3a 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c  : SQLITE_DELETE,
25e80 20 0a 20 20 20 20 20 20 20 20 7a 44 62 2c 20 70   .        zDb, p
25e90 54 61 62 2c 20 70 43 2d 3e 6d 6f 76 65 74 6f 54  Tab, pC->movetoT
25ea0 61 72 67 65 74 2c 0a 20 20 20 20 20 20 20 20 70  arget,.        p
25eb0 4f 70 2d 3e 70 33 0a 20 20 20 20 29 3b 0a 20 20  Op->p3.    );.  
25ec0 7d 0a 20 20 69 66 28 20 6f 70 66 6c 61 67 73 20  }.  if( opflags 
25ed0 26 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20  & OPFLAG_ISNOOP 
25ee0 29 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a  ) break;.#endif.
25ef0 20 0a 20 20 2f 2a 20 4f 6e 6c 79 20 66 6c 61 67   .  /* Only flag
25f00 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 73 65  s that can be se
25f10 74 20 61 72 65 20 53 41 56 45 50 4f 49 53 54 49  t are SAVEPOISTI
25f20 4f 4e 20 61 6e 64 20 41 55 58 44 45 4c 45 54 45  ON and AUXDELETE
25f30 20 2a 2f 20 0a 20 20 61 73 73 65 72 74 28 20 28   */ .  assert( (
25f40 70 4f 70 2d 3e 70 35 20 26 20 7e 28 4f 50 46 4c  pOp->p5 & ~(OPFL
25f50 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 7c  AG_SAVEPOSITION|
25f60 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45  OPFLAG_AUXDELETE
25f70 29 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ))==0 );.  asser
25f80 74 28 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f  t( OPFLAG_SAVEPO
25f90 53 49 54 49 4f 4e 3d 3d 42 54 52 45 45 5f 53 41  SITION==BTREE_SA
25fa0 56 45 50 4f 53 49 54 49 4f 4e 20 29 3b 0a 20 20  VEPOSITION );.  
25fb0 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 41  assert( OPFLAG_A
25fc0 55 58 44 45 4c 45 54 45 3d 3d 42 54 52 45 45 5f  UXDELETE==BTREE_
25fd0 41 55 58 44 45 4c 45 54 45 20 29 3b 0a 0a 23 69  AUXDELETE );..#i
25fe0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
25ff0 47 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d  G.  if( p->pFram
26000 65 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  e==0 ){.    if( 
26010 70 43 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 3d  pC->isEphemeral=
26020 3d 30 0a 20 20 20 20 20 20 20 20 26 26 20 28 70  =0.        && (p
26030 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
26040 41 55 58 44 45 4c 45 54 45 29 3d 3d 30 0a 20 20  AUXDELETE)==0.  
26050 20 20 20 20 20 20 26 26 20 28 70 43 2d 3e 77 72        && (pC->wr
26060 46 6c 61 67 20 26 20 4f 50 46 4c 41 47 5f 46 4f  Flag & OPFLAG_FO
26070 52 44 45 4c 45 54 45 29 3d 3d 30 0a 20 20 20 20  RDELETE)==0.    
26080 20 20 29 7b 0a 20 20 20 20 20 20 6e 45 78 74 72    ){.      nExtr
26090 61 44 65 6c 65 74 65 2b 2b 3b 0a 20 20 20 20 7d  aDelete++;.    }
260a0 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  .    if( pOp->p2
260b0 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47   & OPFLAG_NCHANG
260c0 45 20 29 7b 0a 20 20 20 20 20 20 6e 45 78 74 72  E ){.      nExtr
260d0 61 44 65 6c 65 74 65 2d 2d 3b 0a 20 20 20 20 7d  aDelete--;.    }
260e0 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 72  .  }.#endif..  r
260f0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
26100 44 65 6c 65 74 65 28 70 43 2d 3e 75 63 2e 70 43  Delete(pC->uc.pC
26110 75 72 73 6f 72 2c 20 70 4f 70 2d 3e 70 35 29 3b  ursor, pOp->p5);
26120 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
26130 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
26140 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75  ;.  pC->seekResu
26150 6c 74 20 3d 20 30 3b 0a 20 20 69 66 28 20 72 63  lt = 0;.  if( rc
26160 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
26170 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 2f  e_to_error;..  /
26180 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64  * Invoke the upd
26190 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75  ate-hook if requ
261a0 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 6f  ired. */.  if( o
261b0 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f  pflags & OPFLAG_
261c0 4e 43 48 41 4e 47 45 20 29 7b 0a 20 20 20 20 70  NCHANGE ){.    p
261d0 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 20  ->nChange++;.   
261e0 20 69 66 28 20 64 62 2d 3e 78 55 70 64 61 74 65   if( db->xUpdate
261f0 43 61 6c 6c 62 61 63 6b 20 26 26 20 48 61 73 52  Callback && HasR
26200 6f 77 69 64 28 70 54 61 62 29 20 29 7b 0a 20 20  owid(pTab) ){.  
26210 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43      db->xUpdateC
26220 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64  allback(db->pUpd
26230 61 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f 44  ateArg, SQLITE_D
26240 45 4c 45 54 45 2c 20 7a 44 62 2c 20 70 54 61 62  ELETE, zDb, pTab
26250 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20  ->zName,.       
26260 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72     pC->movetoTar
26270 67 65 74 29 3b 0a 20 20 20 20 20 20 61 73 73 65  get);.      asse
26280 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29  rt( pC->iDb>=0 )
26290 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 62  ;.    }.  }..  b
262a0 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64  reak;.}./* Opcod
262b0 65 3a 20 52 65 73 65 74 43 6f 75 6e 74 20 2a 20  e: ResetCount * 
262c0 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  * * * *.**.** Th
262d0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63  e value of the c
262e0 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73  hange counter is
262f0 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65 20 64   copied to the d
26300 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a  atabase handle.*
26310 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  * change counter
26320 20 28 72 65 74 75 72 6e 65 64 20 62 79 20 73 75   (returned by su
26330 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20 74  bsequent calls t
26340 6f 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65  o sqlite3_change
26350 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74 68  s())..** Then th
26360 65 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63  e VMs internal c
26370 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 72 65  hange counter re
26380 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54 68  sets to 0..** Th
26390 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72  is is used by tr
263a0 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a  igger programs..
263b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74  */.case OP_Reset
263c0 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69 74  Count: {.  sqlit
263d0 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73  e3VdbeSetChanges
263e0 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29  (db, p->nChange)
263f0 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d  ;.  p->nChange =
26400 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
26410 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65  /* Opcode: Sorte
26420 72 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50  rCompare P1 P2 P
26430 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  3 P4.** Synopsis
26440 3a 20 69 66 20 6b 65 79 28 50 31 29 21 3d 74 72  : if key(P1)!=tr
26450 69 6d 28 72 5b 50 33 5d 2c 50 34 29 20 67 6f 74  im(r[P3],P4) got
26460 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  o P2.**.** P1 is
26470 20 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72   a sorter cursor
26480 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  . This instructi
26490 6f 6e 20 63 6f 6d 70 61 72 65 73 20 61 20 70 72  on compares a pr
264a0 65 66 69 78 20 6f 66 20 74 68 65 0a 2a 2a 20 72  efix of the.** r
264b0 65 63 6f 72 64 20 62 6c 6f 62 20 69 6e 20 72 65  ecord blob in re
264c0 67 69 73 74 65 72 20 50 33 20 61 67 61 69 6e 73  gister P3 agains
264d0 74 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68  t a prefix of th
264e0 65 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  e entry that .**
264f0 20 74 68 65 20 73 6f 72 74 65 72 20 63 75 72 73   the sorter curs
26500 6f 72 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  or currently poi
26510 6e 74 73 20 74 6f 2e 20 20 4f 6e 6c 79 20 74 68  nts to.  Only th
26520 65 20 66 69 72 73 74 20 50 34 20 66 69 65 6c 64  e first P4 field
26530 73 0a 2a 2a 20 6f 66 20 72 5b 50 33 5d 20 61 6e  s.** of r[P3] an
26540 64 20 74 68 65 20 73 6f 72 74 65 72 20 72 65 63  d the sorter rec
26550 6f 72 64 20 61 72 65 20 63 6f 6d 70 61 72 65 64  ord are compared
26560 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65  ..**.** If eithe
26570 72 20 50 33 20 6f 72 20 74 68 65 20 73 6f 72 74  r P3 or the sort
26580 65 72 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e 55  er contains a NU
26590 4c 4c 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65  LL in one of the
265a0 69 72 20 73 69 67 6e 69 66 69 63 61 6e 74 0a 2a  ir significant.*
265b0 2a 20 66 69 65 6c 64 73 20 28 6e 6f 74 20 63 6f  * fields (not co
265c0 75 6e 74 69 6e 67 20 74 68 65 20 50 34 20 66 69  unting the P4 fi
265d0 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 20  elds at the end 
265e0 77 68 69 63 68 20 61 72 65 20 69 67 6e 6f 72 65  which are ignore
265f0 64 29 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63  d) then.** the c
26600 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 73 73  omparison is ass
26610 75 6d 65 64 20 74 6f 20 62 65 20 65 71 75 61 6c  umed to be equal
26620 2e 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68 72  ..**.** Fall thr
26630 6f 75 67 68 20 74 6f 20 6e 65 78 74 20 69 6e 73  ough to next ins
26640 74 72 75 63 74 69 6f 6e 20 69 66 20 74 68 65 20  truction if the 
26650 74 77 6f 20 72 65 63 6f 72 64 73 20 63 6f 6d 70  two records comp
26660 61 72 65 20 65 71 75 61 6c 20 74 6f 0a 2a 2a 20  are equal to.** 
26670 65 61 63 68 20 6f 74 68 65 72 2e 20 20 4a 75 6d  each other.  Jum
26680 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 79 20  p to P2 if they 
26690 61 72 65 20 64 69 66 66 65 72 65 6e 74 2e 0a 2a  are different..*
266a0 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
266b0 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 56 64 62  Compare: {.  Vdb
266c0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
266d0 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6e 4b  nt res;.  int nK
266e0 65 79 43 6f 6c 3b 0a 0a 20 20 70 43 20 3d 20 70  eyCol;..  pC = p
266f0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
26700 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f  ;.  assert( isSo
26710 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 61 73  rter(pC) );.  as
26720 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
26730 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
26740 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
26750 70 2d 3e 70 33 5d 3b 0a 20 20 6e 4b 65 79 43 6f  p->p3];.  nKeyCo
26760 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  l = pOp->p4.i;. 
26770 20 72 65 73 20 3d 20 30 3b 0a 20 20 72 63 20 3d   res = 0;.  rc =
26780 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
26790 65 72 43 6f 6d 70 61 72 65 28 70 43 2c 20 70 49  erCompare(pC, pI
267a0 6e 33 2c 20 6e 4b 65 79 43 6f 6c 2c 20 26 72 65  n3, nKeyCol, &re
267b0 73 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  s);.  VdbeBranch
267c0 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b  Taken(res!=0,2);
267d0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
267e0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
267f0 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 20 29  ror;.  if( res )
26800 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
26810 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f  ;.  break;.};../
26820 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72  * Opcode: Sorter
26830 44 61 74 61 20 50 31 20 50 32 20 50 33 20 2a 20  Data P1 P2 P3 * 
26840 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
26850 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20  [P2]=data.**.** 
26860 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73  Write into regis
26870 74 65 72 20 50 32 20 74 68 65 20 63 75 72 72 65  ter P2 the curre
26880 6e 74 20 73 6f 72 74 65 72 20 64 61 74 61 20 66  nt sorter data f
26890 6f 72 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72  or sorter cursor
268a0 20 50 31 2e 0a 2a 2a 20 54 68 65 6e 20 63 6c 65   P1..** Then cle
268b0 61 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 68 65  ar the column he
268c0 61 64 65 72 20 63 61 63 68 65 20 6f 6e 20 63 75  ader cache on cu
268d0 72 73 6f 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 54  rsor P3..**.** T
268e0 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f  his opcode is no
268f0 72 6d 61 6c 6c 79 20 75 73 65 20 74 6f 20 6d 6f  rmally use to mo
26900 76 65 20 61 20 72 65 63 6f 72 64 20 6f 75 74 20  ve a record out 
26910 6f 66 20 74 68 65 20 73 6f 72 74 65 72 20 61 6e  of the sorter an
26920 64 20 69 6e 74 6f 0a 2a 2a 20 61 20 72 65 67 69  d into.** a regi
26930 73 74 65 72 20 74 68 61 74 20 69 73 20 74 68 65  ster that is the
26940 20 73 6f 75 72 63 65 20 66 6f 72 20 61 20 70 73   source for a ps
26950 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f  eudo-table curso
26960 72 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 0a  r created using.
26970 2a 2a 20 4f 70 65 6e 50 73 65 75 64 6f 2e 20 20  ** OpenPseudo.  
26980 54 68 61 74 20 70 73 65 75 64 6f 2d 74 61 62 6c  That pseudo-tabl
26990 65 20 63 75 72 73 6f 72 20 69 73 20 74 68 65 20  e cursor is the 
269a0 6f 6e 65 20 74 68 61 74 20 69 73 20 69 64 65 6e  one that is iden
269b0 74 69 66 69 65 64 20 62 79 0a 2a 2a 20 70 61 72  tified by.** par
269c0 61 6d 65 74 65 72 20 50 33 2e 20 20 43 6c 65 61  ameter P3.  Clea
269d0 72 69 6e 67 20 74 68 65 20 50 33 20 63 6f 6c 75  ring the P3 colu
269e0 6d 6e 20 63 61 63 68 65 20 61 73 20 70 61 72 74  mn cache as part
269f0 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20   of this opcode 
26a00 73 61 76 65 73 0a 2a 2a 20 75 73 20 66 72 6f 6d  saves.** us from
26a10 20 68 61 76 69 6e 67 20 74 6f 20 69 73 73 75 65   having to issue
26a20 20 61 20 73 65 70 61 72 61 74 65 20 4e 75 6c 6c   a separate Null
26a30 52 6f 77 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  Row instruction 
26a40 74 6f 20 63 6c 65 61 72 20 74 68 61 74 20 63 61  to clear that ca
26a50 63 68 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  che..*/.case OP_
26a60 53 6f 72 74 65 72 44 61 74 61 3a 20 7b 0a 20 20  SorterData: {.  
26a70 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
26a80 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
26a90 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43 20 3d  pOp->p2];.  pC =
26aa0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
26ab0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73  1];.  assert( is
26ac0 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20  Sorter(pC) );.  
26ad0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
26ae0 53 6f 72 74 65 72 52 6f 77 6b 65 79 28 70 43 2c  SorterRowkey(pC,
26af0 20 70 4f 75 74 29 3b 0a 20 20 61 73 73 65 72 74   pOut);.  assert
26b00 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
26b10 7c 7c 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73 20  || (pOut->flags 
26b20 26 20 4d 45 4d 5f 42 6c 6f 62 29 20 29 3b 0a 20  & MEM_Blob) );. 
26b30 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
26b40 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
26b50 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69  ->nCursor );.  i
26b60 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
26b70 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
26b80 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  .  p->apCsr[pOp-
26b90 3e 70 33 5d 2d 3e 63 61 63 68 65 53 74 61 74 75  >p3]->cacheStatu
26ba0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
26bb0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
26bc0 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61 20  Opcode: RowData 
26bd0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
26be0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64  ynopsis: r[P2]=d
26bf0 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  ata.**.** Write 
26c00 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
26c10 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f   the complete ro
26c20 77 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74 68  w content for th
26c30 65 20 72 6f 77 20 61 74 20 0a 2a 2a 20 77 68 69  e row at .** whi
26c40 63 68 20 63 75 72 73 6f 72 20 50 31 20 69 73 20  ch cursor P1 is 
26c50 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
26c60 6e 67 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20  ng..** There is 
26c70 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f  no interpretatio
26c80 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20  n of the data.  
26c90 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73 74 20 63  .** It is just c
26ca0 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50  opied onto the P
26cb0 32 20 72 65 67 69 73 74 65 72 20 65 78 61 63 74  2 register exact
26cc0 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20  ly as .** it is 
26cd0 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74  found in the dat
26ce0 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  abase file..**.*
26cf0 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 69  * If cursor P1 i
26d00 73 20 61 6e 20 69 6e 64 65 78 2c 20 74 68 65 6e  s an index, then
26d10 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20   the content is 
26d20 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65 20 72  the key of the r
26d30 6f 77 2e 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  ow..** If cursor
26d40 20 50 32 20 69 73 20 61 20 74 61 62 6c 65 2c 20   P2 is a table, 
26d50 74 68 65 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74  then the content
26d60 20 65 78 74 72 61 63 74 65 64 20 69 73 20 74 68   extracted is th
26d70 65 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 49 66  e data..**.** If
26d80 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   the P1 cursor m
26d90 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20  ust be pointing 
26da0 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28  to a valid row (
26db0 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a  not a NULL row).
26dc0 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62  ** of a real tab
26dd0 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
26de0 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20  -table..*/.case 
26df0 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a 20 20  OP_RowData: {.  
26e00 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
26e10 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
26e20 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 0a 20 20 70  r;.  u32 n;..  p
26e30 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
26e40 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p2];.  memAbout
26e50 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
26e60 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  );..  assert( pO
26e70 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
26e80 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
26e90 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
26ea0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
26eb0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
26ec0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
26ed0 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
26ee0 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74  TREE );.  assert
26ef0 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d  ( isSorter(pC)==
26f00 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
26f10 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b  C->nullRow==0 );
26f20 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75  .  assert( pC->u
26f30 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  c.pCursor!=0 );.
26f40 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63    pCrsr = pC->uc
26f50 2e 70 43 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20  .pCursor;..  /* 
26f60 54 68 65 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f  The OP_RowData o
26f70 70 63 6f 64 65 73 20 61 6c 77 61 79 73 20 66 6f  pcodes always fo
26f80 6c 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74  llow OP_NotExist
26f90 73 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 53 65 65  s or.  ** OP_See
26fa0 6b 52 6f 77 69 64 20 6f 72 20 4f 50 5f 52 65 77  kRowid or OP_Rew
26fb0 69 6e 64 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68  ind/Op_Next with
26fc0 20 6e 6f 20 69 6e 74 65 72 76 65 6e 69 6e 67 20   no intervening 
26fd0 69 6e 73 74 72 75 63 74 69 6f 6e 73 0a 20 20 2a  instructions.  *
26fe0 2a 20 74 68 61 74 20 6d 69 67 68 74 20 69 6e 76  * that might inv
26ff0 61 6c 69 64 61 74 65 20 74 68 65 20 63 75 72 73  alidate the curs
27000 6f 72 2e 0a 20 20 2a 2a 20 49 66 20 74 68 69 73  or..  ** If this
27010 20 77 68 65 72 65 20 6e 6f 74 20 74 68 65 20 63   where not the c
27020 61 73 65 2c 20 6f 6e 20 6f 66 20 74 68 65 20 66  ase, on of the f
27030 6f 6c 6c 6f 77 69 6e 67 20 61 73 73 65 72 74 28  ollowing assert(
27040 29 73 0a 20 20 2a 2a 20 77 6f 75 6c 64 20 66 61  )s.  ** would fa
27050 69 6c 2e 20 20 53 68 6f 75 6c 64 20 74 68 69 73  il.  Should this
27060 20 65 76 65 72 20 63 68 61 6e 67 65 20 28 62 65   ever change (be
27070 63 61 75 73 65 20 6f 66 20 63 68 61 6e 67 65 73  cause of changes
27080 20 69 6e 20 74 68 65 20 63 6f 64 65 0a 20 20 2a   in the code.  *
27090 2a 20 67 65 6e 65 72 61 74 6f 72 29 20 74 68 65  * generator) the
270a0 6e 20 74 68 65 20 66 69 78 20 77 6f 75 6c 64 20  n the fix would 
270b0 62 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20 63  be to insert a c
270c0 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69  all to.  ** sqli
270d0 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
270e0 65 74 6f 28 29 2e 0a 20 20 2a 2f 0a 20 20 61 73  eto()..  */.  as
270f0 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
27100 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
27110 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
27120 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c  BtreeCursorIsVal
27130 69 64 28 70 43 72 73 72 29 20 29 3b 0a 23 69 66  id(pCrsr) );.#if
27140 20 30 20 20 2f 2a 20 4e 6f 74 20 72 65 71 75 69   0  /* Not requi
27150 72 65 64 20 64 75 65 20 74 6f 20 74 68 65 20 70  red due to the p
27160 72 65 76 69 6f 75 73 20 74 6f 20 61 73 73 65 72  revious to asser
27170 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 2a  t() statements *
27180 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
27190 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
271a0 28 70 43 29 3b 0a 20 20 69 66 28 20 72 63 21 3d  (pC);.  if( rc!=
271b0 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
271c0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
271d0 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 6e  ror;.#endif..  n
271e0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
271f0 61 79 6c 6f 61 64 53 69 7a 65 28 70 43 72 73 72  ayloadSize(pCrsr
27200 29 3b 0a 20 20 69 66 28 20 6e 3e 28 75 33 32 29  );.  if( n>(u32)
27210 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
27220 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
27230 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
27240 62 69 67 3b 0a 20 20 7d 0a 20 20 74 65 73 74 63  big;.  }.  testc
27250 61 73 65 28 20 6e 3d 3d 30 20 29 3b 0a 20 20 69  ase( n==0 );.  i
27260 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
27270 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28  mClearAndResize(
27280 70 4f 75 74 2c 20 4d 41 58 28 6e 2c 33 32 29 29  pOut, MAX(n,32))
27290 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f   ){.    goto no_
272a0 6d 65 6d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  mem;.  }.  pOut-
272b0 3e 6e 20 3d 20 6e 3b 0a 20 20 4d 65 6d 53 65 74  >n = n;.  MemSet
272c0 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
272d0 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 72 63 20 3d  EM_Blob);.  rc =
272e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 79   sqlite3BtreePay
272f0 6c 6f 61 64 28 70 43 72 73 72 2c 20 30 2c 20 6e  load(pCrsr, 0, n
27300 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 69 66  , pOut->z);.  if
27310 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
27320 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
27330 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51    pOut->enc = SQ
27340 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49  LITE_UTF8;  /* I
27350 6e 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20  n case the blob 
27360 69 73 20 65 76 65 72 20 63 61 73 74 20 74 6f 20  is ever cast to 
27370 74 65 78 74 20 2a 2f 0a 20 20 55 50 44 41 54 45  text */.  UPDATE
27380 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
27390 75 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  ut);.  REGISTER_
273a0 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
273b0 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
273c0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
273d0 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  id P1 P2 * * *.*
273e0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
273f0 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 53 74  ]=rowid.**.** St
27400 6f 72 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  ore in register 
27410 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68  P2 an integer wh
27420 69 63 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f  ich is the key o
27430 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72  f the table entr
27440 79 20 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20  y that.** P1 is 
27450 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20  currently point 
27460 74 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e  to..**.** P1 can
27470 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 6f 72   be either an or
27480 64 69 6e 61 72 79 20 74 61 62 6c 65 20 6f 72 20  dinary table or 
27490 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  a virtual table.
274a0 20 20 54 68 65 72 65 20 75 73 65 64 20 74 6f 0a    There used to.
274b0 2a 2a 20 62 65 20 61 20 73 65 70 61 72 61 74 65  ** be a separate
274c0 20 4f 50 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64   OP_VRowid opcod
274d0 65 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 76  e for use with v
274e0 69 72 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 62  irtual tables, b
274f0 75 74 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f  ut this.** one o
27500 70 63 6f 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20  pcode now works 
27510 66 6f 72 20 62 6f 74 68 20 74 61 62 6c 65 20 74  for both table t
27520 79 70 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ypes..*/.case OP
27530 5f 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20  _Rowid: {       
27540 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
27550 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  2 */.  VdbeCurso
27560 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 76 3b 0a  r *pC;.  i64 v;.
27570 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
27580 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73  pVtab;.  const s
27590 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
275a0 4d 6f 64 75 6c 65 3b 0a 0a 20 20 70 4f 75 74 20  Module;..  pOut 
275b0 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
275c0 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65  (p, pOp);.  asse
275d0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
275e0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
275f0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
27600 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
27610 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
27620 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
27630 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52  C->eCurType!=CUR
27640 54 59 50 45 5f 50 53 45 55 44 4f 20 7c 7c 20 70  TYPE_PSEUDO || p
27650 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20  C->nullRow );.  
27660 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  if( pC->nullRow 
27670 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  ){.    pOut->fla
27680 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
27690 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73     break;.  }els
276a0 65 20 69 66 28 20 70 43 2d 3e 64 65 66 65 72 72  e if( pC->deferr
276b0 65 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20  edMoveto ){.    
276c0 76 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61  v = pC->movetoTa
276d0 72 67 65 74 3b 0a 23 69 66 6e 64 65 66 20 53 51  rget;.#ifndef SQ
276e0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
276f0 4c 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69  LTABLE.  }else i
27700 66 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  f( pC->eCurType=
27710 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29 7b  =CURTYPE_VTAB ){
27720 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
27730 3e 75 63 2e 70 56 43 75 72 21 3d 30 20 29 3b 0a  >uc.pVCur!=0 );.
27740 20 20 20 20 70 56 74 61 62 20 3d 20 70 43 2d 3e      pVtab = pC->
27750 75 63 2e 70 56 43 75 72 2d 3e 70 56 74 61 62 3b  uc.pVCur->pVtab;
27760 0a 20 20 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70  .    pModule = p
27770 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
27780 20 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75     assert( pModu
27790 6c 65 2d 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20  le->xRowid );.  
277a0 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
277b0 78 52 6f 77 69 64 28 70 43 2d 3e 75 63 2e 70 56  xRowid(pC->uc.pV
277c0 43 75 72 2c 20 26 76 29 3b 0a 20 20 20 20 73 71  Cur, &v);.    sq
277d0 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
277e0 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrmsg(p, pVtab);
277f0 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
27800 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
27810 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 20 2f 2a  error;.#endif /*
27820 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
27830 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 20 20 7d  TUALTABLE */.  }
27840 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
27850 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
27860 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
27870 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
27880 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29  >uc.pCursor!=0 )
27890 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
278a0 65 33 56 64 62 65 43 75 72 73 6f 72 52 65 73 74  e3VdbeCursorRest
278b0 6f 72 65 28 70 43 29 3b 0a 20 20 20 20 69 66 28  ore(pC);.    if(
278c0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
278d0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
278e0 20 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52     if( pC->nullR
278f0 6f 77 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74  ow ){.      pOut
27900 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  ->flags = MEM_Nu
27910 6c 6c 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  ll;.      break;
27920 0a 20 20 20 20 7d 0a 20 20 20 20 76 20 3d 20 73  .    }.    v = s
27930 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67  qlite3BtreeInteg
27940 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70 43 75  erKey(pC->uc.pCu
27950 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 70 4f 75  rsor);.  }.  pOu
27960 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72  t->u.i = v;.  br
27970 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
27980 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31 20 2a 20  e: NullRow P1 * 
27990 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65  * * *.**.** Move
279a0 20 74 68 65 20 63 75 72 73 6f 72 20 50 31 20 74   the cursor P1 t
279b0 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e 20 20 41  o a null row.  A
279c0 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65  ny OP_Column ope
279d0 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68 61 74 20  rations.** that 
279e0 6f 63 63 75 72 20 77 68 69 6c 65 20 74 68 65 20  occur while the 
279f0 63 75 72 73 6f 72 20 69 73 20 6f 6e 20 74 68 65  cursor is on the
27a00 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c 6c 20 61   null row will a
27a10 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74 65 20 61  lways.** write a
27a20 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
27a30 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56  P_NullRow: {.  V
27a40 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  dbeCursor *pC;..
27a50 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
27a60 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
27a70 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
27a80 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
27a90 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
27aa0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d  ( pC!=0 );.  pC-
27ab0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
27ac0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
27ad0 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
27ae0 20 69 66 28 20 70 43 2d 3e 65 43 75 72 54 79 70   if( pC->eCurTyp
27af0 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
27b00 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
27b10 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d  pC->uc.pCursor!=
27b20 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 );.    sqlite3
27b30 42 74 72 65 65 43 6c 65 61 72 43 75 72 73 6f 72  BtreeClearCursor
27b40 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  (pC->uc.pCursor)
27b50 3b 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 4c 61 73  ../* Opcode: Las
27b70 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
27b80 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73  *.** The next us
27b90 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f  e of the Rowid o
27ba0 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 50 72 65 76  r Column or Prev
27bb0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72   instruction for
27bc0 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66   P1 .** will ref
27bd0 65 72 20 74 6f 20 74 68 65 20 6c 61 73 74 20 65  er to the last e
27be0 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61 74 61  ntry in the data
27bf0 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e  base table or in
27c00 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74  dex..** If the t
27c10 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73  able or index is
27c20 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c   empty and P2>0,
27c30 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64   then jump immed
27c40 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a  iately to P2..**
27c50 20 49 66 20 50 32 20 69 73 20 30 20 6f 72 20 69   If P2 is 0 or i
27c60 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
27c70 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74  ndex is not empt
27c80 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a  y, fall through.
27c90 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ** to the follow
27ca0 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ing instruction.
27cb0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
27cc0 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
27cd0 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20  rsor configured 
27ce0 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72  to move in rever
27cf0 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f  se order,.** fro
27d00 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64  m the end toward
27d10 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20   the beginning. 
27d20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
27d30 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
27d40 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  * configured to 
27d50 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65  use Prev, not Ne
27d60 78 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 20  xt..**.** If P3 
27d70 69 73 20 2d 31 2c 20 74 68 65 6e 20 74 68 65 20  is -1, then the 
27d80 63 75 72 73 6f 72 20 69 73 20 70 6f 73 69 74 69  cursor is positi
27d90 6f 6e 65 64 20 61 74 20 74 68 65 20 65 6e 64 20  oned at the end 
27da0 6f 66 20 74 68 65 20 62 74 72 65 65 0a 2a 2a 20  of the btree.** 
27db0 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 20  for the purpose 
27dc0 6f 66 20 61 70 70 65 6e 64 69 6e 67 20 61 20 6e  of appending a n
27dd0 65 77 20 65 6e 74 72 79 20 6f 6e 74 6f 20 74 68  ew entry onto th
27de0 65 20 62 74 72 65 65 2e 20 20 49 6e 20 74 68 61  e btree.  In tha
27df0 74 0a 2a 2a 20 63 61 73 65 20 50 32 20 6d 75 73  t.** case P2 mus
27e00 74 20 62 65 20 30 2e 20 20 49 74 20 69 73 20 61  t be 0.  It is a
27e10 73 73 75 6d 65 64 20 74 68 61 74 20 74 68 65 20  ssumed that the 
27e20 63 75 72 73 6f 72 20 69 73 20 75 73 65 64 20 6f  cursor is used o
27e30 6e 6c 79 20 66 6f 72 0a 2a 2a 20 61 70 70 65 6e  nly for.** appen
27e40 64 69 6e 67 20 61 6e 64 20 73 6f 20 69 66 20 74  ding and so if t
27e50 68 65 20 63 75 72 73 6f 72 20 69 73 20 76 61 6c  he cursor is val
27e60 69 64 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72  id, then the cur
27e70 73 6f 72 20 6d 75 73 74 20 61 6c 72 65 61 64 79  sor must already
27e80 0a 2a 2a 20 62 65 20 70 6f 69 6e 74 69 6e 67 20  .** be pointing 
27e90 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
27ea0 65 20 62 74 72 65 65 20 61 6e 64 20 73 6f 20 6e  e btree and so n
27eb0 6f 20 63 68 61 6e 67 65 73 20 61 72 65 20 6d 61  o changes are ma
27ec0 64 65 20 74 6f 0a 2a 2a 20 74 68 65 20 63 75 72  de to.** the cur
27ed0 73 6f 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  sor..*/.case OP_
27ee0 4c 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20 2f  Last: {        /
27ef0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65  * jump */.  Vdbe
27f00 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
27f10 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
27f20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73   int res;..  ass
27f30 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
27f40 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
27f50 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
27f60 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
27f70 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
27f80 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
27f90 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
27fa0 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
27fb0 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e   pCrsr = pC->uc.
27fc0 70 43 75 72 73 6f 72 3b 0a 20 20 72 65 73 20 3d  pCursor;.  res =
27fd0 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   0;.  assert( pC
27fe0 72 73 72 21 3d 30 20 29 3b 0a 20 20 70 43 2d 3e  rsr!=0 );.  pC->
27ff0 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 70 4f 70  seekResult = pOp
28000 2d 3e 70 33 3b 0a 23 69 66 64 65 66 20 53 51 4c  ->p3;.#ifdef SQL
28010 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e  ITE_DEBUG.  pC->
28020 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 4c 61 73 74  seekOp = OP_Last
28030 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70  ;.#endif.  if( p
28040 4f 70 2d 3e 70 33 3d 3d 30 20 7c 7c 20 21 73 71  Op->p3==0 || !sq
28050 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
28060 49 73 56 61 6c 69 64 4e 4e 28 70 43 72 73 72 29  IsValidNN(pCrsr)
28070 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
28080 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43  ite3BtreeLast(pC
28090 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  rsr, &res);.    
280a0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75  pC->nullRow = (u
280b0 38 29 72 65 73 3b 0a 20 20 20 20 70 43 2d 3e 64  8)res;.    pC->d
280c0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
280d0 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  0;.    pC->cache
280e0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
280f0 54 41 4c 45 3b 0a 20 20 20 20 69 66 28 20 72 63  TALE;.    if( rc
28100 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
28110 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
28120 69 66 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 7b  if( pOp->p2>0 ){
28130 0a 20 20 20 20 20 20 56 64 62 65 42 72 61 6e 63  .      VdbeBranc
28140 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29  hTaken(res!=0,2)
28150 3b 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 20  ;.      if( res 
28160 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
28170 32 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  2;.    }.  }else
28180 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
28190 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20 20 7d 0a  p->p2==0 );.  }.
281a0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
281b0 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50 31 20  Opcode: Sort P1 
281c0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
281d0 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20  his opcode does 
281e0 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65  exactly the same
281f0 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52 65 77   thing as OP_Rew
28200 69 6e 64 20 65 78 63 65 70 74 20 74 68 61 74 0a  ind except that.
28210 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73  ** it increments
28220 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64   an undocumented
28230 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
28240 20 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e   used for testin
28250 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67  g..**.** Sorting
28260 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68 65 64   is accomplished
28270 20 62 79 20 77 72 69 74 69 6e 67 20 72 65 63 6f   by writing reco
28280 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72 74 69  rds into a sorti
28290 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65  ng index,.** the
282a0 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68 61 74  n rewinding that
282b0 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61 79 69   index and playi
282c0 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20  ng it back from 
282d0 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20  beginning to.** 
282e0 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74 68 65  end.  We use the
282f0 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20   OP_Sort opcode 
28300 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f 52 65  instead of OP_Re
28310 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a  wind to do the.*
28320 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f 20 74  * rewinding so t
28330 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c 20 76  hat the global v
28340 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62 65 20  ariable will be 
28350 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a  incremented and.
28360 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65  ** regression te
28370 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d 69 6e  sts can determin
28380 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  e whether or not
28390 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 69   the optimizer i
283a0 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f  s.** correctly o
283b0 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f  ptimizing out so
283c0 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  rts..*/.case OP_
283d0 53 6f 72 74 65 72 53 6f 72 74 3a 20 20 20 20 2f  SorterSort:    /
283e0 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f  * jump */.case O
283f0 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20 20 20  P_Sort: {       
28400 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64   /* jump */.#ifd
28410 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
28420 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f   sqlite3_sort_co
28430 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33  unt++;.  sqlite3
28440 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b  _search_count--;
28450 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f  .#endif.  p->aCo
28460 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d  unter[SQLITE_STM
28470 54 53 54 41 54 55 53 5f 53 4f 52 54 5d 2b 2b 3b  TSTATUS_SORT]++;
28480 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
28490 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e  gh into OP_Rewin
284a0 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65  d */.}./* Opcode
284b0 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32 20 2a  : Rewind P1 P2 *
284c0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e   * *.**.** The n
284d0 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52  ext use of the R
284e0 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f  owid or Column o
284f0 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69  r Next instructi
28500 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69  on for P1 .** wi
28510 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  ll refer to the 
28520 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e 20 74  first entry in t
28530 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
28540 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49  e or index..** I
28550 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
28560 6e 64 65 78 20 69 73 20 65 6d 70 74 79 2c 20 6a  ndex is empty, j
28570 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
28580 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 74 68 65  to P2..** If the
28590 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
285a0 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61  is not empty, fa
285b0 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
285c0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 2a 2a 20  e following .** 
285d0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
285e0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
285f0 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
28600 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d   configured to m
28610 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f  ove in forward o
28620 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68  rder,.** from th
28630 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61  e beginning towa
28640 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20  rd the end.  In 
28650 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
28660 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f   cursor is.** co
28670 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20  nfigured to use 
28680 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a  Next, not Prev..
28690 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77 69 6e  */.case OP_Rewin
286a0 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  d: {        /* j
286b0 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
286c0 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
286d0 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
286e0 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74  t res;..  assert
286f0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
28700 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
28710 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
28720 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
28730 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
28740 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  );.  assert( isS
28750 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d  orter(pC)==(pOp-
28760 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74  >opcode==OP_Sort
28770 65 72 53 6f 72 74 29 20 29 3b 0a 20 20 72 65 73  erSort) );.  res
28780 20 3d 20 31 3b 0a 23 69 66 64 65 66 20 53 51 4c   = 1;.#ifdef SQL
28790 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e  ITE_DEBUG.  pC->
287a0 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 52 65 77 69  seekOp = OP_Rewi
287b0 6e 64 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28  nd;.#endif.  if(
287c0 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b   isSorter(pC) ){
287d0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
287e0 33 56 64 62 65 53 6f 72 74 65 72 52 65 77 69 6e  3VdbeSorterRewin
287f0 64 28 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 7d  d(pC, &res);.  }
28800 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
28810 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
28820 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
28830 0a 20 20 20 20 70 43 72 73 72 20 3d 20 70 43 2d  .    pCrsr = pC-
28840 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 20  >uc.pCursor;.   
28850 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29   assert( pCrsr )
28860 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
28870 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43 72  e3BtreeFirst(pCr
28880 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70  sr, &res);.    p
28890 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
288a0 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63  o = 0;.    pC->c
288b0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
288c0 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20  HE_STALE;.  }.  
288d0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
288e0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
288f0 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
28900 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 61 73 73  = (u8)res;.  ass
28910 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26  ert( pOp->p2>0 &
28920 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70  & pOp->p2<p->nOp
28930 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68   );.  VdbeBranch
28940 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b  Taken(res!=0,2);
28950 0a 20 20 69 66 28 20 72 65 73 20 29 20 67 6f 74  .  if( res ) got
28960 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
28970 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  break;.}../*.** 
28980 4f 70 63 6f 64 65 3a 20 45 73 74 52 6f 77 43 6e  Opcode: EstRowCn
28990 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 20 2a  t P1 P2 P3 * * *
289a0 0a 2a 2a 0a 2a 2a 20 45 73 74 69 6d 61 74 65 20  .**.** Estimate 
289b0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e  the number of en
289c0 74 72 69 65 73 20 69 6e 20 62 74 72 65 65 20 66  tries in btree f
289d0 6f 72 20 63 75 72 73 6f 72 20 50 31 20 64 6f 20  or cursor P1 do 
289e0 61 20 70 72 6f 70 6f 72 74 69 6f 6e 61 6c 0a 2a  a proportional.*
289f0 2a 20 73 65 65 6b 20 74 6f 20 6f 66 20 50 33 2e  * seek to of P3.
28a00 20 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75    Store the resu
28a10 6c 74 20 61 73 20 61 20 66 6c 6f 61 74 69 6e 67  lt as a floating
28a20 20 70 6f 69 6e 74 20 76 61 6c 75 65 20 69 6e 20   point value in 
28a30 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45  P2..*/.case OP_E
28a40 73 74 52 6f 77 43 6e 74 3a 20 7b 20 20 2f 2a 20  stRowCnt: {  /* 
28a50 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62 65 43 75  out2 */.  VdbeCu
28a60 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
28a70 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
28a80 6e 74 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33  nt rc;.  sqlite3
28a90 5f 75 69 6e 74 36 34 20 6e 20 3d 20 30 3b 0a 0a  _uint64 n = 0;..
28aa0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
28ab0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
28ac0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
28ad0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
28ae0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
28af0 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
28b00 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
28b10 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75  .  pCrsr = pC->u
28b20 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73  c.pCursor;.  ass
28b30 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20  ert( pCrsr );.  
28b40 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
28b50 65 4d 6f 76 65 74 6f 50 72 6f 70 6f 72 74 69 6f  eMovetoProportio
28b60 6e 61 6c 28 70 43 72 73 72 2c 20 70 4f 70 2d 3e  nal(pCrsr, pOp->
28b70 70 33 2c 20 26 6e 29 3b 0a 20 20 69 66 28 20 72  p3, &n);.  if( r
28b80 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
28b90 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70  ue_to_error;.  p
28ba0 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
28bb0 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
28bc0 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
28bd0 4d 5f 52 65 61 6c 3b 0a 20 20 70 4f 75 74 2d 3e  M_Real;.  pOut->
28be0 75 2e 72 20 3d 20 6e 3b 0a 20 20 70 43 2d 3e 6e  u.r = n;.  pC->n
28bf0 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70 43  ullRow = 0;.  pC
28c00 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
28c10 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
28c20 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
28c30 53 54 41 4c 45 3b 0a 20 20 62 72 65 61 6b 3b 0a  STALE;.  break;.
28c40 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65  }../* Opcode: Ne
28c50 78 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  xt P1 P2 P3 P4 P
28c60 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20  5.**.** Advance 
28c70 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
28c80 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74  t it points to t
28c90 68 65 20 6e 65 78 74 20 6b 65 79 2f 64 61 74 61  he next key/data
28ca0 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20   pair in its.** 
28cb0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20  table or index. 
28cc0 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
28cd0 20 6d 6f 72 65 20 6b 65 79 2f 76 61 6c 75 65 20   more key/value 
28ce0 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20  pairs then fall 
28cf0 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
28d00 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
28d10 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66  ruction.  But if
28d20 20 74 68 65 20 63 75 72 73 6f 72 20 61 64 76 61   the cursor adva
28d30 6e 63 65 20 77 61 73 20 73 75 63 63 65 73 73 66  nce was successf
28d40 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65  ul,.** jump imme
28d50 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
28d60 2a 0a 2a 2a 20 54 68 65 20 4e 65 78 74 20 6f 70  *.** The Next op
28d70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c  code is only val
28d80 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20  id following an 
28d90 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20  SeekGT, SeekGE, 
28da0 6f 72 0a 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 20  or.** OP_Rewind 
28db0 6f 70 63 6f 64 65 20 75 73 65 64 20 74 6f 20 70  opcode used to p
28dc0 6f 73 69 74 69 6f 6e 20 74 68 65 20 63 75 72 73  osition the curs
28dd0 6f 72 2e 20 20 4e 65 78 74 20 69 73 20 6e 6f 74  or.  Next is not
28de0 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66   allowed.** to f
28df0 6f 6c 6c 6f 77 20 53 65 65 6b 4c 54 2c 20 53 65  ollow SeekLT, Se
28e00 65 6b 4c 45 2c 20 6f 72 20 4f 50 5f 4c 61 73 74  ekLE, or OP_Last
28e10 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63  ..**.** The P1 c
28e20 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f  ursor must be fo
28e30 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  r a real table, 
28e40 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
28e50 6c 65 2e 20 20 50 31 20 6d 75 73 74 20 68 61 76  le.  P1 must hav
28e60 65 0a 2a 2a 20 62 65 65 6e 20 6f 70 65 6e 65 64  e.** been opened
28e70 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20 6f   prior to this o
28e80 70 63 6f 64 65 20 6f 72 20 74 68 65 20 70 72 6f  pcode or the pro
28e90 67 72 61 6d 20 77 69 6c 6c 20 73 65 67 66 61 75  gram will segfau
28ea0 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33  lt..**.** The P3
28eb0 20 76 61 6c 75 65 20 69 73 20 61 20 68 69 6e 74   value is a hint
28ec0 20 74 6f 20 74 68 65 20 62 74 72 65 65 20 69 6d   to the btree im
28ed0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49 66  plementation. If
28ee0 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a 20   P3==1, that.** 
28ef0 6d 65 61 6e 73 20 50 31 20 69 73 20 61 6e 20 53  means P1 is an S
28f00 51 4c 20 69 6e 64 65 78 20 61 6e 64 20 74 68 61  QL index and tha
28f10 74 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  t this instructi
28f20 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65 20 62 65  on could have be
28f30 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69 66  en.** omitted if
28f40 20 74 68 61 74 20 69 6e 64 65 78 20 68 61 64 20   that index had 
28f50 62 65 65 6e 20 75 6e 69 71 75 65 2e 20 20 50 33  been unique.  P3
28f60 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e 20 20   is usually 0.  
28f70 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20  P3 is.** always 
28f80 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a  either 0 or 1..*
28f90 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77 61 79  *.** P4 is alway
28fa0 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41 44 56  s of type P4_ADV
28fb0 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63 74 69  ANCE. The functi
28fc0 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74  on pointer point
28fd0 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42  s to.** sqlite3B
28fe0 74 72 65 65 4e 65 78 74 28 29 2e 0a 2a 2a 0a 2a  treeNext()..**.*
28ff0 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73 69 74  * If P5 is posit
29000 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d 70  ive and the jump
29010 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20   is taken, then 
29020 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a  event counter.**
29030 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e 20   number P5-1 in 
29040 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61  the prepared sta
29050 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65 6d  tement is increm
29060 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ented..**.** See
29070 20 61 6c 73 6f 3a 20 50 72 65 76 2c 20 4e 65 78   also: Prev, Nex
29080 74 49 66 4f 70 65 6e 0a 2a 2f 0a 2f 2a 20 4f 70  tIfOpen.*/./* Op
29090 63 6f 64 65 3a 20 4e 65 78 74 49 66 4f 70 65 6e  code: NextIfOpen
290a0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
290b0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
290c0 65 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  e works just lik
290d0 65 20 4e 65 78 74 20 65 78 63 65 70 74 20 74 68  e Next except th
290e0 61 74 20 69 66 20 63 75 72 73 6f 72 20 50 31 20  at if cursor P1 
290f0 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69  is not.** open i
29100 74 20 62 65 68 61 76 65 73 20 61 20 6e 6f 2d 6f  t behaves a no-o
29110 70 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  p..*/./* Opcode:
29120 20 50 72 65 76 20 50 31 20 50 32 20 50 33 20 50   Prev P1 P2 P3 P
29130 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 61 63 6b 20  4 P5.**.** Back 
29140 75 70 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  up cursor P1 so 
29150 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74  that it points t
29160 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 6b  o the previous k
29170 65 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20  ey/data pair in 
29180 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  its.** table or 
29190 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72 65  index.  If there
291a0 20 69 73 20 6e 6f 20 70 72 65 76 69 6f 75 73 20   is no previous 
291b0 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20  key/value pairs 
291c0 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
291d0 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c  h.** to the foll
291e0 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  owing instructio
291f0 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63  n.  But if the c
29200 75 72 73 6f 72 20 62 61 63 6b 75 70 20 77 61 73  ursor backup was
29210 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20   successful,.** 
29220 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
29230 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 0a 2a 2a   to P2..**.**.**
29240 20 54 68 65 20 50 72 65 76 20 6f 70 63 6f 64 65   The Prev opcode
29250 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 66   is only valid f
29260 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65 65 6b  ollowing an Seek
29270 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 0a 2a  LT, SeekLE, or.*
29280 2a 20 4f 50 5f 4c 61 73 74 20 6f 70 63 6f 64 65  * OP_Last opcode
29290 20 75 73 65 64 20 74 6f 20 70 6f 73 69 74 69 6f   used to positio
292a0 6e 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 50  n the cursor.  P
292b0 72 65 76 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77  rev is not allow
292c0 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20  ed.** to follow 
292d0 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20  SeekGT, SeekGE, 
292e0 6f 72 20 4f 50 5f 52 65 77 69 6e 64 2e 0a 2a 2a  or OP_Rewind..**
292f0 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f  .** The P1 curso
29300 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20  r must be for a 
29310 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
29320 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20  a pseudo-table. 
29330 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 6e 6f 74   If P1 is.** not
29340 20 6f 70 65 6e 20 74 68 65 6e 20 74 68 65 20 62   open then the b
29350 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66  ehavior is undef
29360 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ined..**.** The 
29370 50 33 20 76 61 6c 75 65 20 69 73 20 61 20 68 69  P3 value is a hi
29380 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65 65 20  nt to the btree 
29390 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20  implementation. 
293a0 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a  If P3==1, that.*
293b0 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20 61 6e  * means P1 is an
293c0 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64 20 74   SQL index and t
293d0 68 61 74 20 74 68 69 73 20 69 6e 73 74 72 75 63  hat this instruc
293e0 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65 20  tion could have 
293f0 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20  been.** omitted 
29400 69 66 20 74 68 61 74 20 69 6e 64 65 78 20 68 61  if that index ha
29410 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e 20 20  d been unique.  
29420 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e  P3 is usually 0.
29430 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79    P3 is.** alway
29440 73 20 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e  s either 0 or 1.
29450 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77  .**.** P4 is alw
29460 61 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41  ays of type P4_A
29470 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63  DVANCE. The func
29480 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69  tion pointer poi
29490 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65  nts to.** sqlite
294a0 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 29  3BtreePrevious()
294b0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  ..**.** If P5 is
294c0 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68   positive and th
294d0 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c  e jump is taken,
294e0 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e   then event coun
294f0 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35  ter.** number P5
29500 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70 61 72  -1 in the prepar
29510 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ed statement is 
29520 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2f 0a  incremented..*/.
29530 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 49  /* Opcode: PrevI
29540 66 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20 50  fOpen P1 P2 P3 P
29550 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  4 P5.**.** This 
29560 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73  opcode works jus
29570 74 20 6c 69 6b 65 20 50 72 65 76 20 65 78 63 65  t like Prev exce
29580 70 74 20 74 68 61 74 20 69 66 20 63 75 72 73 6f  pt that if curso
29590 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f  r P1 is not.** o
295a0 70 65 6e 20 69 74 20 62 65 68 61 76 65 73 20 61  pen it behaves a
295b0 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20   no-op..*/.case 
295c0 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 3a 20 7b  OP_SorterNext: {
295d0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56    /* jump */.  V
295e0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
295f0 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 70 43 20   int res;..  pC 
29600 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
29610 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69  p1];.  assert( i
29620 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20  sSorter(pC) );. 
29630 20 72 65 73 20 3d 20 30 3b 0a 20 20 72 63 20 3d   res = 0;.  rc =
29640 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
29650 65 72 4e 65 78 74 28 64 62 2c 20 70 43 2c 20 26  erNext(db, pC, &
29660 72 65 73 29 3b 0a 20 20 67 6f 74 6f 20 6e 65 78  res);.  goto nex
29670 74 5f 74 61 69 6c 3b 0a 63 61 73 65 20 4f 50 5f  t_tail;.case OP_
29680 50 72 65 76 49 66 4f 70 65 6e 3a 20 20 20 20 2f  PrevIfOpen:    /
29690 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f  * jump */.case O
296a0 50 5f 4e 65 78 74 49 66 4f 70 65 6e 3a 20 20 20  P_NextIfOpen:   
296b0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66   /* jump */.  if
296c0 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  ( p->apCsr[pOp->
296d0 70 31 5d 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a  p1]==0 ) break;.
296e0 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
296f0 68 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 65  h */.case OP_Pre
29700 76 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  v:          /* j
29710 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  ump */.case OP_N
29720 65 78 74 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  ext:          /*
29730 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72   jump */.  asser
29740 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
29750 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
29760 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
29770 20 70 4f 70 2d 3e 70 35 3c 41 72 72 61 79 53 69   pOp->p5<ArraySi
29780 7a 65 28 70 2d 3e 61 43 6f 75 6e 74 65 72 29 20  ze(p->aCounter) 
29790 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
297a0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 72  sr[pOp->p1];.  r
297b0 65 73 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  es = pOp->p3;.  
297c0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
297d0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
297e0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
297f0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
29800 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
29810 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61  YPE_BTREE );.  a
29820 73 73 65 72 74 28 20 72 65 73 3d 3d 30 20 7c 7c  ssert( res==0 ||
29830 20 28 72 65 73 3d 3d 31 20 26 26 20 70 43 2d 3e   (res==1 && pC->
29840 69 73 54 61 62 6c 65 3d 3d 30 29 20 29 3b 0a 20  isTable==0) );. 
29850 20 74 65 73 74 63 61 73 65 28 20 72 65 73 3d 3d   testcase( res==
29860 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  1 );.  assert( p
29870 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e  Op->opcode!=OP_N
29880 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78  ext || pOp->p4.x
29890 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33  Advance==sqlite3
298a0 42 74 72 65 65 4e 65 78 74 20 29 3b 0a 20 20 61  BtreeNext );.  a
298b0 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
298c0 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20 70  de!=OP_Prev || p
298d0 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d  Op->p4.xAdvance=
298e0 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65  =sqlite3BtreePre
298f0 76 69 6f 75 73 20 29 3b 0a 20 20 61 73 73 65 72  vious );.  asser
29900 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
29910 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 20 7c 7c  OP_NextIfOpen ||
29920 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63   pOp->p4.xAdvanc
29930 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 4e  e==sqlite3BtreeN
29940 65 78 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ext );.  assert(
29950 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
29960 5f 50 72 65 76 49 66 4f 70 65 6e 20 7c 7c 20 70  _PrevIfOpen || p
29970 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d  Op->p4.xAdvance=
29980 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65  =sqlite3BtreePre
29990 76 69 6f 75 73 29 3b 0a 0a 20 20 2f 2a 20 54 68  vious);..  /* Th
299a0 65 20 4e 65 78 74 20 6f 70 63 6f 64 65 20 69 73  e Next opcode is
299b0 20 6f 6e 6c 79 20 75 73 65 64 20 61 66 74 65 72   only used after
299c0 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c   SeekGT, SeekGE,
299d0 20 61 6e 64 20 52 65 77 69 6e 64 2e 0a 20 20 2a   and Rewind..  *
299e0 2a 20 54 68 65 20 50 72 65 76 20 6f 70 63 6f 64  * The Prev opcod
299f0 65 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 61  e is only used a
29a00 66 74 65 72 20 53 65 65 6b 4c 54 2c 20 53 65 65  fter SeekLT, See
29a10 6b 4c 45 2c 20 61 6e 64 20 4c 61 73 74 2e 20 2a  kLE, and Last. *
29a20 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
29a30 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74  >opcode!=OP_Next
29a40 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21   || pOp->opcode!
29a50 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 0a 20  =OP_NextIfOpen. 
29a60 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65        || pC->see
29a70 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c  kOp==OP_SeekGT |
29a80 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
29a90 5f 53 65 65 6b 47 45 0a 20 20 20 20 20 20 20 7c  _SeekGE.       |
29aa0 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
29ab0 5f 52 65 77 69 6e 64 20 7c 7c 20 70 43 2d 3e 73  _Rewind || pC->s
29ac0 65 65 6b 4f 70 3d 3d 4f 50 5f 46 6f 75 6e 64 29  eekOp==OP_Found)
29ad0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
29ae0 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76  >opcode!=OP_Prev
29af0 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21   || pOp->opcode!
29b00 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 0a 20  =OP_PrevIfOpen. 
29b10 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65        || pC->see
29b20 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c  kOp==OP_SeekLT |
29b30 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
29b40 5f 53 65 65 6b 4c 45 0a 20 20 20 20 20 20 20 7c  _SeekLE.       |
29b50 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
29b60 5f 4c 61 73 74 20 29 3b 0a 0a 20 20 72 63 20 3d  _Last );..  rc =
29b70 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63   pOp->p4.xAdvanc
29b80 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  e(pC->uc.pCursor
29b90 2c 20 26 72 65 73 29 3b 0a 6e 65 78 74 5f 74 61  , &res);.next_ta
29ba0 69 6c 3a 0a 20 20 70 43 2d 3e 63 61 63 68 65 53  il:.  pC->cacheS
29bb0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
29bc0 41 4c 45 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  ALE;.  VdbeBranc
29bd0 68 54 61 6b 65 6e 28 72 65 73 3d 3d 30 2c 32 29  hTaken(res==0,2)
29be0 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
29bf0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
29c00 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 3d  rror;.  if( res=
29c10 3d 30 20 29 7b 0a 20 20 20 20 70 43 2d 3e 6e 75  =0 ){.    pC->nu
29c20 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70  llRow = 0;.    p
29c30 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e  ->aCounter[pOp->
29c40 70 35 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51  p5]++;.#ifdef SQ
29c50 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73 71  LITE_TEST.    sq
29c60 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75  lite3_search_cou
29c70 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 20  nt++;.#endif.   
29c80 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
29c90 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69  _and_check_for_i
29ca0 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 65 6c 73  nterrupt;.  }els
29cb0 65 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52  e{.    pC->nullR
29cc0 6f 77 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 67 6f  ow = 1;.  }.  go
29cd0 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  to check_for_int
29ce0 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70  errupt;.}../* Op
29cf0 63 6f 64 65 3a 20 49 64 78 49 6e 73 65 72 74 20  code: IdxInsert 
29d00 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
29d10 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
29d20 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69  r[P2].**.** Regi
29d30 73 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61 6e  ster P2 holds an
29d40 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d   SQL index key m
29d50 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  ade using the.**
29d60 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74   MakeRecord inst
29d70 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73 20  ructions.  This 
29d80 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20 74 68  opcode writes th
29d90 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74  at key.** into t
29da0 68 65 20 69 6e 64 65 78 20 50 31 2e 20 20 44 61  he index P1.  Da
29db0 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74 72 79  ta for the entry
29dc0 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 49   is nil..**.** I
29dd0 66 20 50 34 20 69 73 20 6e 6f 74 20 7a 65 72 6f  f P4 is not zero
29de0 2c 20 74 68 65 6e 20 69 74 20 69 73 20 74 68 65  , then it is the
29df0 20 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c 75 65   number of value
29e00 73 20 69 6e 20 74 68 65 20 75 6e 70 61 63 6b 65  s in the unpacke
29e10 64 0a 2a 2a 20 6b 65 79 20 6f 66 20 72 65 67 28  d.** key of reg(
29e20 50 32 29 2e 20 20 49 6e 20 74 68 61 74 20 63 61  P2).  In that ca
29e30 73 65 2c 20 50 33 20 69 73 20 74 68 65 20 69 6e  se, P3 is the in
29e40 64 65 78 20 6f 66 20 74 68 65 20 66 69 72 73 74  dex of the first
29e50 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 66 6f 72   register.** for
29e60 20 74 68 65 20 75 6e 70 61 63 6b 65 64 20 6b 65   the unpacked ke
29e70 79 2e 20 20 54 68 65 20 61 76 61 69 6c 61 62 69  y.  The availabi
29e80 6c 69 74 79 20 6f 66 20 74 68 65 20 75 6e 70 61  lity of the unpa
29e90 63 6b 65 64 20 6b 65 79 20 63 61 6e 20 73 6f 6d  cked key can som
29ea0 65 74 69 6d 65 73 0a 2a 2a 20 62 65 20 61 6e 20  etimes.** be an 
29eb0 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 2a 2a  optimization..**
29ec0 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68  .** If P5 has th
29ed0 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20  e OPFLAG_APPEND 
29ee0 62 69 74 20 73 65 74 2c 20 74 68 61 74 20 69 73  bit set, that is
29ef0 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62   a hint to the b
29f00 2d 74 72 65 65 20 6c 61 79 65 72 0a 2a 2a 20 74  -tree layer.** t
29f10 68 61 74 20 74 68 69 73 20 69 6e 73 65 72 74 20  hat this insert 
29f20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20  is likely to be 
29f30 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a  an append..**.**
29f40 20 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f   If P5 has the O
29f50 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62 69  PFLAG_NCHANGE bi
29f60 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20  t set, then the 
29f70 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69  change counter i
29f80 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64  s.** incremented
29f90 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63   by this instruc
29fa0 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 20 4f 50  tion.  If the OP
29fb0 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62 69 74  FLAG_NCHANGE bit
29fc0 20 69 73 20 63 6c 65 61 72 2c 0a 2a 2a 20 74 68   is clear,.** th
29fd0 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f  en the change co
29fe0 75 6e 74 65 72 20 69 73 20 75 6e 63 68 61 6e 67  unter is unchang
29ff0 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ed..**.** If the
2a000 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
2a010 45 53 55 4c 54 20 66 6c 61 67 20 6f 66 20 50 35  ESULT flag of P5
2a020 20 69 73 20 73 65 74 2c 20 74 68 65 20 69 6d 70   is set, the imp
2a030 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68  lementation migh
2a040 74 0a 2a 2a 20 72 75 6e 20 66 61 73 74 65 72 20  t.** run faster 
2a050 62 79 20 61 76 6f 69 64 69 6e 67 20 61 6e 20 75  by avoiding an u
2a060 6e 6e 65 63 65 73 73 61 72 79 20 73 65 65 6b 20  nnecessary seek 
2a070 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 20 20 48  on cursor P1.  H
2a080 6f 77 65 76 65 72 2c 0a 2a 2a 20 74 68 65 20 4f  owever,.** the O
2a090 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
2a0a0 55 4c 54 20 66 6c 61 67 20 6d 75 73 74 20 6f 6e  ULT flag must on
2a0b0 6c 79 20 62 65 20 73 65 74 20 69 66 20 74 68 65  ly be set if the
2a0c0 72 65 20 68 61 76 65 20 62 65 65 6e 20 6e 6f 20  re have been no 
2a0d0 70 72 69 6f 72 0a 2a 2a 20 73 65 65 6b 73 20 6f  prior.** seeks o
2a0e0 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6f 72 20  n the cursor or 
2a0f0 69 66 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  if the most rece
2a100 6e 74 20 73 65 65 6b 20 75 73 65 64 20 61 20 6b  nt seek used a k
2a110 65 79 20 65 71 75 69 76 61 6c 65 6e 74 0a 2a 2a  ey equivalent.**
2a120 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 54   to P2. .**.** T
2a130 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
2a140 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69  only works for i
2a150 6e 64 69 63 65 73 2e 20 20 54 68 65 20 65 71 75  ndices.  The equ
2a160 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74  ivalent instruct
2a170 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65  ion.** for table
2a180 73 20 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a  s is OP_Insert..
2a190 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  */./* Opcode: So
2a1a0 72 74 65 72 49 6e 73 65 72 74 20 50 31 20 50 32  rterInsert P1 P2
2a1b0 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
2a1c0 69 73 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a  is: key=r[P2].**
2a1d0 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 32 20  .** Register P2 
2a1e0 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20 69 6e 64  holds an SQL ind
2a1f0 65 78 20 6b 65 79 20 6d 61 64 65 20 75 73 69 6e  ex key made usin
2a200 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63  g the.** MakeRec
2a210 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 73  ord instructions
2a220 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  .  This opcode w
2a230 72 69 74 65 73 20 74 68 61 74 20 6b 65 79 0a 2a  rites that key.*
2a240 2a 20 69 6e 74 6f 20 74 68 65 20 73 6f 72 74 65  * into the sorte
2a250 72 20 50 31 2e 20 20 44 61 74 61 20 66 6f 72 20  r P1.  Data for 
2a260 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e 69 6c  the entry is nil
2a270 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
2a280 74 65 72 49 6e 73 65 72 74 3a 20 20 20 20 20 20  terInsert:      
2a290 20 2f 2a 20 69 6e 32 20 2a 2f 0a 63 61 73 65 20   /* in2 */.case 
2a2a0 4f 50 5f 49 64 78 49 6e 73 65 72 74 3a 20 7b 20  OP_IdxInsert: { 
2a2b0 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f         /* in2 */
2a2c0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2a2d0 43 3b 0a 20 20 42 74 72 65 65 50 61 79 6c 6f 61  C;.  BtreePayloa
2a2e0 64 20 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  d x;..  assert( 
2a2f0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
2a300 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
2a310 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
2a320 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
2a330 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
2a340 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72  .  assert( isSor
2a350 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f  ter(pC)==(pOp->o
2a360 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72  pcode==OP_Sorter
2a370 49 6e 73 65 72 74 29 20 29 3b 0a 20 20 70 49 6e  Insert) );.  pIn
2a380 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
2a390 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  2];.  assert( pI
2a3a0 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n2->flags & MEM_
2a3b0 42 6c 6f 62 20 29 3b 0a 20 20 69 66 28 20 70 4f  Blob );.  if( pO
2a3c0 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e  p->p5 & OPFLAG_N
2a3d0 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61  CHANGE ) p->nCha
2a3e0 6e 67 65 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28  nge++;.  assert(
2a3f0 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
2a400 55 52 54 59 50 45 5f 42 54 52 45 45 20 7c 7c 20  URTYPE_BTREE || 
2a410 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2a420 53 6f 72 74 65 72 49 6e 73 65 72 74 20 29 3b 0a  SorterInsert );.
2a430 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
2a440 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 72 63  Table==0 );.  rc
2a450 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49   = ExpandBlob(pI
2a460 6e 32 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  n2);.  if( rc ) 
2a470 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2a480 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 70  o_error;.  if( p
2a490 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
2a4a0 6f 72 74 65 72 49 6e 73 65 72 74 20 29 7b 0a 20  orterInsert ){. 
2a4b0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
2a4c0 64 62 65 53 6f 72 74 65 72 57 72 69 74 65 28 70  dbeSorterWrite(p
2a4d0 43 2c 20 70 49 6e 32 29 3b 0a 20 20 7d 65 6c 73  C, pIn2);.  }els
2a4e0 65 7b 0a 20 20 20 20 78 2e 6e 4b 65 79 20 3d 20  e{.    x.nKey = 
2a4f0 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20 20 78 2e 70  pIn2->n;.    x.p
2a500 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20  Key = pIn2->z;. 
2a510 20 20 20 78 2e 61 4d 65 6d 20 3d 20 61 4d 65 6d     x.aMem = aMem
2a520 20 2b 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20   + pOp->p3;.    
2a530 78 2e 6e 4d 65 6d 20 3d 20 28 75 31 36 29 70 4f  x.nMem = (u16)pO
2a540 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 72 63 20  p->p4.i;.    rc 
2a550 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
2a560 73 65 72 74 28 70 43 2d 3e 75 63 2e 70 43 75 72  sert(pC->uc.pCur
2a570 73 6f 72 2c 20 26 78 2c 0a 20 20 20 20 20 20 20  sor, &x,.       
2a580 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46    (pOp->p5 & OPF
2a590 4c 41 47 5f 41 50 50 45 4e 44 29 21 3d 30 2c 20  LAG_APPEND)!=0, 
2a5a0 0a 20 20 20 20 20 20 20 20 28 28 70 4f 70 2d 3e  .        ((pOp->
2a5b0 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53  p5 & OPFLAG_USES
2a5c0 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d  EEKRESULT) ? pC-
2a5d0 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29  >seekResult : 0)
2a5e0 0a 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20  .        );.    
2a5f0 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
2a600 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
2a610 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
2a620 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
2a630 4c 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63  LE;.  }.  if( rc
2a640 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2a650 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
2a660 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2a670 3a 20 49 64 78 44 65 6c 65 74 65 20 50 31 20 50  : IdxDelete P1 P
2a680 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
2a690 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 40 50  psis: key=r[P2@P
2a6a0 33 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e  3].**.** The con
2a6b0 74 65 6e 74 20 6f 66 20 50 33 20 72 65 67 69 73  tent of P3 regis
2a6c0 74 65 72 73 20 73 74 61 72 74 69 6e 67 20 61 74  ters starting at
2a6d0 20 72 65 67 69 73 74 65 72 20 50 32 20 66 6f 72   register P2 for
2a6e0 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61 63 6b 65 64  m.** an unpacked
2a6f0 20 69 6e 64 65 78 20 6b 65 79 2e 20 54 68 69 73   index key. This
2a700 20 6f 70 63 6f 64 65 20 72 65 6d 6f 76 65 73 20   opcode removes 
2a710 74 68 61 74 20 65 6e 74 72 79 20 66 72 6f 6d 20  that entry from 
2a720 74 68 65 20 0a 2a 2a 20 69 6e 64 65 78 20 6f 70  the .** index op
2a730 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72 20 50  ened by cursor P
2a740 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  1..*/.case OP_Id
2a750 78 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62  xDelete: {.  Vdb
2a760 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
2a770 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
2a780 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70    int res;.  Unp
2a790 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a  ackedRecord r;..
2a7a0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2a7b0 33 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  3>0 );.  assert(
2a7c0 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f   pOp->p2>0 && pO
2a7d0 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 3c 3d 28  p->p2+pOp->p3<=(
2a7e0 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
2a7f0 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 61  Cursor)+1 );.  a
2a800 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2a810 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
2a820 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
2a830 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2a840 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2a850 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
2a860 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
2a870 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
2a880 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75  .  pCrsr = pC->u
2a890 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73  c.pCursor;.  ass
2a8a0 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b  ert( pCrsr!=0 );
2a8b0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2a8c0 70 35 3d 3d 30 20 29 3b 0a 20 20 72 2e 70 4b 65  p5==0 );.  r.pKe
2a8d0 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79  yInfo = pC->pKey
2a8e0 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64  Info;.  r.nField
2a8f0 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b   = (u16)pOp->p3;
2a900 0a 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20  .  r.default_rc 
2a910 3d 20 30 3b 0a 20 20 72 2e 61 4d 65 6d 20 3d 20  = 0;.  r.aMem = 
2a920 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
2a930 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
2a940 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
2a950 64 28 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20  d(pCrsr, &r, 0, 
2a960 30 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20  0, &res);.  if( 
2a970 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
2a980 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2a990 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20  if( res==0 ){.  
2a9a0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
2a9b0 72 65 65 44 65 6c 65 74 65 28 70 43 72 73 72 2c  reeDelete(pCrsr,
2a9c0 20 42 54 52 45 45 5f 41 55 58 44 45 4c 45 54 45   BTREE_AUXDELETE
2a9d0 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  );.    if( rc ) 
2a9e0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2a9f0 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 61  o_error;.  }.  a
2aa00 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
2aa10 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
2aa20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
2aa30 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
2aa40 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c  .  pC->seekResul
2aa50 74 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  t = 0;.  break;.
2aa60 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
2aa70 65 6b 20 50 31 20 2a 20 50 33 20 50 34 20 2a 0a  ek P1 * P3 P4 *.
2aa80 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 4d 6f 76  ** Synopsis: Mov
2aa90 65 20 50 33 20 74 6f 20 50 31 2e 72 6f 77 69 64  e P3 to P1.rowid
2aaa0 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20  .**.** P1 is an 
2aab0 6f 70 65 6e 20 69 6e 64 65 78 20 63 75 72 73 6f  open index curso
2aac0 72 20 61 6e 64 20 50 33 20 69 73 20 61 20 63 75  r and P3 is a cu
2aad0 72 73 6f 72 20 6f 6e 20 74 68 65 20 63 6f 72 72  rsor on the corr
2aae0 65 73 70 6f 6e 64 69 6e 67 0a 2a 2a 20 74 61 62  esponding.** tab
2aaf0 6c 65 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  le.  This opcode
2ab00 20 64 6f 65 73 20 61 20 64 65 66 65 72 72 65 64   does a deferred
2ab10 20 73 65 65 6b 20 6f 66 20 74 68 65 20 50 33 20   seek of the P3 
2ab20 74 61 62 6c 65 20 63 75 72 73 6f 72 0a 2a 2a 20  table cursor.** 
2ab30 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74 20  to the row that 
2ab40 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
2ab50 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 6f  he current row o
2ab60 66 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  f P1..**.** This
2ab70 20 69 73 20 61 20 64 65 66 65 72 72 65 64 20 73   is a deferred s
2ab80 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63  eek.  Nothing ac
2ab90 74 75 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 75  tually happens u
2aba0 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73  ntil.** the curs
2abb0 6f 72 20 69 73 20 75 73 65 64 20 74 6f 20 72 65  or is used to re
2abc0 61 64 20 61 20 72 65 63 6f 72 64 2e 20 20 54 68  ad a record.  Th
2abd0 61 74 20 77 61 79 2c 20 69 66 20 6e 6f 20 72 65  at way, if no re
2abe0 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f  ads.** occur, no
2abf0 20 75 6e 6e 65 63 65 73 73 61 72 79 20 49 2f 4f   unnecessary I/O
2ac00 20 68 61 70 70 65 6e 73 2e 0a 2a 2a 0a 2a 2a 20   happens..**.** 
2ac10 50 34 20 6d 61 79 20 62 65 20 61 6e 20 61 72 72  P4 may be an arr
2ac20 61 79 20 6f 66 20 69 6e 74 65 67 65 72 73 20 28  ay of integers (
2ac30 74 79 70 65 20 50 34 5f 49 4e 54 41 52 52 41 59  type P4_INTARRAY
2ac40 29 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 2a 2a 20  ) containing.** 
2ac50 6f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61  one entry for ea
2ac60 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  ch column in the
2ac70 20 50 33 20 74 61 62 6c 65 2e 20 20 49 66 20 61   P3 table.  If a
2ac80 72 72 61 79 20 65 6e 74 72 79 20 61 28 69 29 0a  rray entry a(i).
2ac90 2a 2a 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  ** is non-zero, 
2aca0 74 68 65 6e 20 72 65 61 64 69 6e 67 20 63 6f 6c  then reading col
2acb0 75 6d 6e 20 61 28 69 29 2d 31 20 66 72 6f 6d 20  umn a(i)-1 from 
2acc0 63 75 72 73 6f 72 20 50 33 20 69 73 20 0a 2a 2a  cursor P3 is .**
2acd0 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 70   equivalent to p
2ace0 65 72 66 6f 72 6d 69 6e 67 20 74 68 65 20 64 65  erforming the de
2acf0 66 65 72 72 65 64 20 73 65 65 6b 20 61 6e 64 20  ferred seek and 
2ad00 74 68 65 6e 20 72 65 61 64 69 6e 67 20 63 6f 6c  then reading col
2ad10 75 6d 6e 20 69 20 0a 2a 2a 20 66 72 6f 6d 20 50  umn i .** from P
2ad20 31 2e 20 20 54 68 69 73 20 69 6e 66 6f 72 6d 61  1.  This informa
2ad30 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69  tion is stored i
2ad40 6e 20 50 33 20 61 6e 64 20 75 73 65 64 20 74 6f  n P3 and used to
2ad50 20 72 65 64 69 72 65 63 74 0a 2a 2a 20 72 65 61   redirect.** rea
2ad60 64 73 20 61 67 61 69 6e 73 74 20 50 33 20 6f 76  ds against P3 ov
2ad70 65 72 20 74 6f 20 50 31 2c 20 74 68 75 73 20 70  er to P1, thus p
2ad80 6f 73 73 69 62 6c 79 20 61 76 6f 69 64 69 6e 67  ossibly avoiding
2ad90 20 74 68 65 20 6e 65 65 64 20 74 6f 0a 2a 2a 20   the need to.** 
2ada0 73 65 65 6b 20 61 6e 64 20 72 65 61 64 20 63 75  seek and read cu
2adb0 72 73 6f 72 20 50 33 2e 0a 2a 2f 0a 2f 2a 20 4f  rsor P3..*/./* O
2adc0 70 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64 20  pcode: IdxRowid 
2add0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
2ade0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
2adf0 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  owid.**.** Write
2ae00 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
2ae10 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69  2 an integer whi
2ae20 63 68 20 69 73 20 74 68 65 20 6c 61 73 74 20 65  ch is the last e
2ae30 6e 74 72 79 20 69 6e 20 74 68 65 20 72 65 63 6f  ntry in the reco
2ae40 72 64 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64  rd at.** the end
2ae50 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65   of the index ke
2ae60 79 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20  y pointed to by 
2ae70 63 75 72 73 6f 72 20 50 31 2e 20 20 54 68 69 73  cursor P1.  This
2ae80 20 69 6e 74 65 67 65 72 20 73 68 6f 75 6c 64 20   integer should 
2ae90 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64 20  be.** the rowid 
2aea0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74  of the table ent
2aeb0 72 79 20 74 6f 20 77 68 69 63 68 20 74 68 69 73  ry to which this
2aec0 20 69 6e 64 65 78 20 65 6e 74 72 79 20 70 6f 69   index entry poi
2aed0 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  nts..**.** See a
2aee0 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65  lso: Rowid, Make
2aef0 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20  Record..*/.case 
2af00 4f 50 5f 53 65 65 6b 3a 0a 63 61 73 65 20 4f 50  OP_Seek:.case OP
2af10 5f 49 64 78 52 6f 77 69 64 3a 20 7b 20 20 20 20  _IdxRowid: {    
2af20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
2af30 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  2 */.  VdbeCurso
2af40 72 20 2a 70 43 3b 20 20 20 20 20 20 20 20 20 20  r *pC;          
2af50 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 31 20        /* The P1 
2af60 69 6e 64 65 78 20 63 75 72 73 6f 72 20 2a 2f 0a  index cursor */.
2af70 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 54    VdbeCursor *pT
2af80 61 62 43 75 72 3b 20 20 20 20 20 20 20 20 20 20  abCur;          
2af90 20 2f 2a 20 54 68 65 20 50 32 20 74 61 62 6c 65   /* The P2 table
2afa0 20 63 75 72 73 6f 72 20 28 4f 50 5f 53 65 65 6b   cursor (OP_Seek
2afb0 20 6f 6e 6c 79 29 20 2a 2f 0a 20 20 69 36 34 20   only) */.  i64 
2afc0 72 6f 77 69 64 3b 20 20 20 20 20 20 20 20 20 20  rowid;          
2afd0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f             /* Ro
2afe0 77 69 64 20 74 68 61 74 20 50 31 20 63 75 72 72  wid that P1 curr
2aff0 65 6e 74 20 70 6f 69 6e 74 73 20 74 6f 20 2a 2f  ent points to */
2b000 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
2b010 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
2b020 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
2b030 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
2b040 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2b050 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
2b060 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
2b070 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
2b080 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  EE );.  assert( 
2b090 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d  pC->uc.pCursor!=
2b0a0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
2b0b0 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b  C->isTable==0 );
2b0c0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
2b0d0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
2b0e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 21 70   );.  assert( !p
2b0f0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 7c 7c 20 70 4f  C->nullRow || pO
2b100 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
2b110 78 52 6f 77 69 64 20 29 3b 0a 0a 20 20 2f 2a 20  xRowid );..  /* 
2b120 54 68 65 20 49 64 78 52 6f 77 69 64 20 61 6e 64  The IdxRowid and
2b130 20 53 65 65 6b 20 6f 70 63 6f 64 65 73 20 61 72   Seek opcodes ar
2b140 65 20 63 6f 6d 62 69 6e 65 64 20 62 65 63 61 75  e combined becau
2b150 73 65 20 6f 66 20 74 68 65 20 63 6f 6d 6d 6f 6e  se of the common
2b160 61 6c 69 74 79 0a 20 20 2a 2a 20 6f 66 20 73 71  ality.  ** of sq
2b170 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 52  lite3VdbeCursorR
2b180 65 73 74 6f 72 65 28 29 20 61 6e 64 20 73 71 6c  estore() and sql
2b190 69 74 65 33 56 64 62 65 49 64 78 52 6f 77 69 64  ite3VdbeIdxRowid
2b1a0 28 29 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  (). */.  rc = sq
2b1b0 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 52  lite3VdbeCursorR
2b1c0 65 73 74 6f 72 65 28 70 43 29 3b 0a 0a 20 20 2f  estore(pC);..  /
2b1d0 2a 20 73 71 6c 69 74 65 33 56 62 65 43 75 72 73  * sqlite3VbeCurs
2b1e0 6f 72 52 65 73 74 6f 72 65 28 29 20 63 61 6e 20  orRestore() can 
2b1f0 6f 6e 6c 79 20 66 61 69 6c 20 69 66 20 74 68 65  only fail if the
2b200 20 72 65 63 6f 72 64 20 68 61 73 20 62 65 65 6e   record has been
2b210 20 64 65 6c 65 74 65 64 0a 20 20 2a 2a 20 6f 75   deleted.  ** ou
2b220 74 20 66 72 6f 6d 20 75 6e 64 65 72 20 74 68 65  t from under the
2b230 20 63 75 72 73 6f 72 2e 20 20 54 68 61 74 20 77   cursor.  That w
2b240 69 6c 6c 20 6e 65 76 65 72 20 68 61 70 70 65 6e  ill never happen
2b250 73 20 66 6f 72 20 61 6e 20 49 64 78 52 6f 77 69  s for an IdxRowi
2b260 64 0a 20 20 2a 2a 20 6f 72 20 53 65 65 6b 20 6f  d.  ** or Seek o
2b270 70 63 6f 64 65 20 2a 2f 0a 20 20 69 66 28 20 4e  pcode */.  if( N
2b280 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f  EVER(rc!=SQLITE_
2b290 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  OK) ) goto abort
2b2a0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a  _due_to_error;..
2b2b0 20 20 69 66 28 20 21 70 43 2d 3e 6e 75 6c 6c 52    if( !pC->nullR
2b2c0 6f 77 20 29 7b 0a 20 20 20 20 72 6f 77 69 64 20  ow ){.    rowid 
2b2d0 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65  = 0;  /* Not nee
2b2e0 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20  ded.  Only used 
2b2f0 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72  to silence a war
2b300 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20  ning. */.    rc 
2b310 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78  = sqlite3VdbeIdx
2b320 52 6f 77 69 64 28 64 62 2c 20 70 43 2d 3e 75 63  Rowid(db, pC->uc
2b330 2e 70 43 75 72 73 6f 72 2c 20 26 72 6f 77 69 64  .pCursor, &rowid
2b340 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53  );.    if( rc!=S
2b350 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
2b360 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
2b370 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
2b380 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  .    if( pOp->op
2b390 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 20 29 7b  code==OP_Seek ){
2b3a0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
2b3b0 4f 70 2d 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70  Op->p3>=0 && pOp
2b3c0 2d 3e 70 33 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p3<p->nCursor 
2b3d0 29 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75 72  );.      pTabCur
2b3e0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
2b3f0 3e 70 33 5d 3b 0a 20 20 20 20 20 20 61 73 73 65  >p3];.      asse
2b400 72 74 28 20 70 54 61 62 43 75 72 21 3d 30 20 29  rt( pTabCur!=0 )
2b410 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
2b420 70 54 61 62 43 75 72 2d 3e 65 43 75 72 54 79 70  pTabCur->eCurTyp
2b430 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
2b440 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
2b450 28 20 70 54 61 62 43 75 72 2d 3e 75 63 2e 70 43  ( pTabCur->uc.pC
2b460 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20  ursor!=0 );.    
2b470 20 20 61 73 73 65 72 74 28 20 70 54 61 62 43 75    assert( pTabCu
2b480 72 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  r->isTable );.  
2b490 20 20 20 20 70 54 61 62 43 75 72 2d 3e 6e 75 6c      pTabCur->nul
2b4a0 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20  lRow = 0;.      
2b4b0 70 54 61 62 43 75 72 2d 3e 6d 6f 76 65 74 6f 54  pTabCur->movetoT
2b4c0 61 72 67 65 74 20 3d 20 72 6f 77 69 64 3b 0a 20  arget = rowid;. 
2b4d0 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e 64 65       pTabCur->de
2b4e0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31  ferredMoveto = 1
2b4f0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
2b500 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
2b510 49 4e 54 41 52 52 41 59 20 7c 7c 20 70 4f 70 2d  INTARRAY || pOp-
2b520 3e 70 34 2e 61 69 3d 3d 30 20 29 3b 0a 20 20 20  >p4.ai==0 );.   
2b530 20 20 20 70 54 61 62 43 75 72 2d 3e 61 41 6c 74     pTabCur->aAlt
2b540 4d 61 70 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69  Map = pOp->p4.ai
2b550 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75 72 2d  ;.      pTabCur-
2b560 3e 70 41 6c 74 43 75 72 73 6f 72 20 3d 20 70 43  >pAltCursor = pC
2b570 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
2b580 20 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72     pOut = out2Pr
2b590 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
2b5a0 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 75 2e  ;.      pOut->u.
2b5b0 69 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 20  i = rowid;.     
2b5c0 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
2b5d0 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a 20 20  EM_Int;.    }.  
2b5e0 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
2b5f0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
2b600 4f 50 5f 49 64 78 52 6f 77 69 64 20 29 3b 0a 20  OP_IdxRowid );. 
2b610 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2b620 6d 53 65 74 4e 75 6c 6c 28 26 61 4d 65 6d 5b 70  mSetNull(&aMem[p
2b630 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 7d 0a 20 20  Op->p2]);.  }.  
2b640 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2b650 6f 64 65 3a 20 49 64 78 47 45 20 50 31 20 50 32  ode: IdxGE P1 P2
2b660 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
2b670 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
2b680 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  P4].**.** The P4
2b690 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73   register values
2b6a0 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
2b6b0 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  P3 form an unpac
2b6c0 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65  ked index .** ke
2b6d0 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65  y that omits the
2b6e0 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 43   PRIMARY KEY.  C
2b6f0 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
2b700 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68  value against th
2b710 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74  e index .** that
2b720 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
2b730 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
2b740 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41  noring the PRIMA
2b750 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20  RY KEY or ROWID 
2b760 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74 20 74 68  .** fields at th
2b770 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  e end..**.** If 
2b780 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74  the P1 index ent
2b790 72 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ry is greater th
2b7a0 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
2b7b0 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20  he key value.** 
2b7c0 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
2b7d0 20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c    Otherwise fall
2b7e0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
2b7f0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
2b800 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
2b810 49 64 78 47 54 20 50 31 20 50 32 20 50 33 20 50  IdxGT P1 P2 P3 P
2b820 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
2b830 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
2b840 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69  *.** The P4 regi
2b850 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69  ster values begi
2b860 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f  nning with P3 fo
2b870 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  rm an unpacked i
2b880 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61  ndex .** key tha
2b890 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d  t omits the PRIM
2b8a0 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72  ARY KEY.  Compar
2b8b0 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65  e this key value
2b8c0 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64   against the ind
2b8d0 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69  ex .** that P1 i
2b8e0 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
2b8f0 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
2b900 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  g the PRIMARY KE
2b910 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66  Y or ROWID .** f
2b920 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64  ields at the end
2b930 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
2b940 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
2b950 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
2b960 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74  e key value.** t
2b970 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  hen jump to P2. 
2b980 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
2b990 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
2b9a0 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
2b9b0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
2b9c0 64 78 4c 54 20 50 31 20 50 32 20 50 33 20 50 34  dxLT P1 P2 P3 P4
2b9d0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
2b9e0 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
2b9f0 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
2ba00 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
2ba10 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
2ba20 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
2ba30 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
2ba40 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41   omits the PRIMA
2ba50 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e  RY KEY or ROWID.
2ba60 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
2ba70 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
2ba80 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68  .** the index th
2ba90 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  at P1 is current
2baa0 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20  ly pointing to, 
2bab0 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49  ignoring the PRI
2bac0 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52  MARY KEY or.** R
2bad0 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69  OWID on the P1 i
2bae0 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ndex..**.** If t
2baf0 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
2bb00 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  y is less than t
2bb10 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65  he key value the
2bb20 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
2bb30 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
2bb40 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
2bb50 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
2bb60 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
2bb70 64 78 4c 45 20 50 31 20 50 32 20 50 33 20 50 34  dxLE P1 P2 P3 P4
2bb80 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
2bb90 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
2bba0 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
2bbb0 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
2bbc0 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
2bbd0 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
2bbe0 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
2bbf0 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41   omits the PRIMA
2bc00 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e  RY KEY or ROWID.
2bc10 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
2bc20 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
2bc30 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68  .** the index th
2bc40 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  at P1 is current
2bc50 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20  ly pointing to, 
2bc60 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49  ignoring the PRI
2bc70 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52  MARY KEY or.** R
2bc80 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69  OWID on the P1 i
2bc90 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ndex..**.** If t
2bca0 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
2bcb0 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  y is less than o
2bcc0 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
2bcd0 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75  ey value then ju
2bce0 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 4f 74 68  mp.** to P2. Oth
2bcf0 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
2bd00 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
2bd10 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
2bd20 63 61 73 65 20 4f 50 5f 49 64 78 4c 45 3a 20 20  case OP_IdxLE:  
2bd30 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
2bd40 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 54  */.case OP_IdxGT
2bd50 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
2bd60 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  mp */.case OP_Id
2bd70 78 4c 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  xLT:          /*
2bd80 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
2bd90 5f 49 64 78 47 45 3a 20 20 7b 20 20 20 20 20 20  _IdxGE:  {      
2bda0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64   /* jump */.  Vd
2bdb0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
2bdc0 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63  int res;.  Unpac
2bdd0 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20  kedRecord r;..  
2bde0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2bdf0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
2be00 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
2be10 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
2be20 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2be30 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
2be40 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64  t( pC->isOrdered
2be50 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2be60 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
2be70 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61  YPE_BTREE );.  a
2be80 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
2be90 75 72 73 6f 72 21 3d 30 29 3b 0a 20 20 61 73 73  ursor!=0);.  ass
2bea0 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
2beb0 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
2bec0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d  assert( pOp->p5=
2bed0 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31  =0 || pOp->p5==1
2bee0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
2bef0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
2bf00 54 33 32 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49  T32 );.  r.pKeyI
2bf10 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
2bf20 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d  fo;.  r.nField =
2bf30 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b   (u16)pOp->p4.i;
2bf40 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
2bf50 64 65 3c 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20  de<OP_IdxLT ){. 
2bf60 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
2bf70 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45  opcode==OP_IdxLE
2bf80 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
2bf90 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20  =OP_IdxGT );.   
2bfa0 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
2bfb0 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  -1;.  }else{.   
2bfc0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
2bfd0 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c  code==OP_IdxGE |
2bfe0 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
2bff0 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72  P_IdxLT );.    r
2c000 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b  .default_rc = 0;
2c010 0a 20 20 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d 20  .  }.  r.aMem = 
2c020 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
2c030 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
2c040 42 55 47 0a 20 20 7b 20 69 6e 74 20 69 3b 20 66  BUG.  { int i; f
2c050 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65  or(i=0; i<r.nFie
2c060 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28  ld; i++) assert(
2c070 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61   memIsValid(&r.a
2c080 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e  Mem[i]) ); }.#en
2c090 64 69 66 0a 20 20 72 65 73 20 3d 20 30 3b 20 20  dif.  res = 0;  
2c0a0 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
2c0b0 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c  Only used to sil
2c0c0 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20  ence a warning. 
2c0d0 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
2c0e0 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61  3VdbeIdxKeyCompa
2c0f0 72 65 28 64 62 2c 20 70 43 2c 20 26 72 2c 20 26  re(db, pC, &r, &
2c100 72 65 73 29 3b 0a 20 20 61 73 73 65 72 74 28 20  res);.  assert( 
2c110 28 4f 50 5f 49 64 78 4c 45 26 31 29 3d 3d 28 4f  (OP_IdxLE&1)==(O
2c120 50 5f 49 64 78 4c 54 26 31 29 20 26 26 20 28 4f  P_IdxLT&1) && (O
2c130 50 5f 49 64 78 47 45 26 31 29 3d 3d 28 4f 50 5f  P_IdxGE&1)==(OP_
2c140 49 64 78 47 54 26 31 29 20 29 3b 0a 20 20 69 66  IdxGT&1) );.  if
2c150 28 20 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 26 31  ( (pOp->opcode&1
2c160 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29 20  )==(OP_IdxLT&1) 
2c170 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
2c180 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
2c190 64 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  dxLE || pOp->opc
2c1a0 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b  ode==OP_IdxLT );
2c1b0 0a 20 20 20 20 72 65 73 20 3d 20 2d 72 65 73 3b  .    res = -res;
2c1c0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
2c1d0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
2c1e0 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70  e==OP_IdxGE || p
2c1f0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
2c200 64 78 47 54 20 29 3b 0a 20 20 20 20 72 65 73 2b  dxGT );.    res+
2c210 2b 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61  +;.  }.  VdbeBra
2c220 6e 63 68 54 61 6b 65 6e 28 72 65 73 3e 30 2c 32  nchTaken(res>0,2
2c230 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
2c240 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2c250 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73  error;.  if( res
2c260 3e 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  >0 ) goto jump_t
2c270 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  o_p2;.  break;.}
2c280 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73  ../* Opcode: Des
2c290 74 72 6f 79 20 50 31 20 50 32 20 50 33 20 2a 20  troy P1 P2 P3 * 
2c2a0 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61  *.**.** Delete a
2c2b0 6e 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73  n entire databas
2c2c0 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
2c2d0 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65   whose root page
2c2e0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
2c2f0 0a 2a 2a 20 66 69 6c 65 20 69 73 20 67 69 76 65  .** file is give
2c300 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54  n by P1..**.** T
2c310 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64  he table being d
2c320 65 73 74 72 6f 79 65 64 20 69 73 20 69 6e 20 74  estroyed is in t
2c330 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
2c340 20 66 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20   file if P3==0. 
2c350 20 49 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65   If.** P3==1 the
2c360 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62  n the table to b
2c370 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68  e clear is in th
2c380 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  e auxiliary data
2c390 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61  base file.** tha
2c3a0 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  t is used to sto
2c3b0 72 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65  re tables create
2c3c0 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45   using CREATE TE
2c3d0 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a  MPORARY TABLE..*
2c3e0 2a 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55  *.** If AUTOVACU
2c3f0 55 4d 20 69 73 20 65 6e 61 62 6c 65 64 20 74 68  UM is enabled th
2c400 65 6e 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c  en it is possibl
2c410 65 20 74 68 61 74 20 61 6e 6f 74 68 65 72 20 72  e that another r
2c420 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68  oot page.** migh
2c430 74 20 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20  t be moved into 
2c440 74 68 65 20 6e 65 77 6c 79 20 64 65 6c 65 74 65  the newly delete
2c450 64 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f  d root page in o
2c460 72 64 65 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c  rder to keep all
2c470 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 73 20 63  .** root pages c
2c480 6f 6e 74 69 67 75 6f 75 73 20 61 74 20 74 68 65  ontiguous at the
2c490 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
2c4a0 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65  e database.  The
2c4b0 20 66 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65   former.** value
2c4c0 20 6f 66 20 74 68 65 20 72 6f 6f 74 20 70 61 67   of the root pag
2c4d0 65 20 74 68 61 74 20 6d 6f 76 65 64 20 2d 20 69  e that moved - i
2c4e0 74 73 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20  ts value before 
2c4f0 74 68 65 20 6d 6f 76 65 20 6f 63 63 75 72 72 65  the move occurre
2c500 64 20 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64  d -.** is stored
2c510 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
2c520 20 20 49 66 20 6e 6f 20 70 61 67 65 20 0a 2a 2a    If no page .**
2c530 20 6d 6f 76 65 6d 65 6e 74 20 77 61 73 20 72 65   movement was re
2c540 71 75 69 72 65 64 20 28 62 65 63 61 75 73 65 20  quired (because 
2c550 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
2c560 64 72 6f 70 70 65 64 20 77 61 73 20 61 6c 72 65  dropped was alre
2c570 61 64 79 20 0a 2a 2a 20 74 68 65 20 6c 61 73 74  ady .** the last
2c580 20 6f 6e 65 20 69 6e 20 74 68 65 20 64 61 74 61   one in the data
2c590 62 61 73 65 29 20 74 68 65 6e 20 61 20 7a 65 72  base) then a zer
2c5a0 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  o is stored in r
2c5b0 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 49  egister P2..** I
2c5c0 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20  f AUTOVACUUM is 
2c5d0 64 69 73 61 62 6c 65 64 20 74 68 65 6e 20 61 20  disabled then a 
2c5e0 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69  zero is stored i
2c5f0 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
2c600 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43  *.** See also: C
2c610 6c 65 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lear.*/.case OP_
2c620 44 65 73 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f  Destroy: {     /
2c630 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20  * out2 */.  int 
2c640 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69 44  iMoved;.  int iD
2c650 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  b;..  assert( p-
2c660 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
2c670 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2c680 31 3e 31 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  1>1 );.  pOut = 
2c690 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
2c6a0 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e  , pOp);.  pOut->
2c6b0 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
2c6c0 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62  ;.  if( db->nVdb
2c6d0 65 52 65 61 64 20 3e 20 64 62 2d 3e 6e 56 44 65  eRead > db->nVDe
2c6e0 73 74 72 6f 79 2b 31 20 29 7b 0a 20 20 20 20 72  stroy+1 ){.    r
2c6f0 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  c = SQLITE_LOCKE
2c700 44 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72 41  D;.    p->errorA
2c710 63 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74  ction = OE_Abort
2c720 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  ;.    goto abort
2c730 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
2c740 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 44 62 20   }else{.    iDb 
2c750 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61  = pOp->p3;.    a
2c760 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
2c770 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
2c780 69 44 62 29 20 29 3b 0a 20 20 20 20 69 4d 6f 76  iDb) );.    iMov
2c790 65 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  ed = 0;  /* Not 
2c7a0 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 74 6f  needed.  Only to
2c7b0 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69   silence a warni
2c7c0 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20  ng. */.    rc = 
2c7d0 73 71 6c 69 74 65 33 42 74 72 65 65 44 72 6f 70  sqlite3BtreeDrop
2c7e0 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44  Table(db->aDb[iD
2c7f0 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c  b].pBt, pOp->p1,
2c800 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70   &iMoved);.    p
2c810 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
2c820 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  _Int;.    pOut->
2c830 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 20 20  u.i = iMoved;.  
2c840 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2c850 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2c860 6f 72 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  or;.#ifndef SQLI
2c870 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
2c880 55 4d 0a 20 20 20 20 69 66 28 20 69 4d 6f 76 65  UM.    if( iMove
2c890 64 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71  d!=0 ){.      sq
2c8a0 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76  lite3RootPageMov
2c8b0 65 64 28 64 62 2c 20 69 44 62 2c 20 69 4d 6f 76  ed(db, iDb, iMov
2c8c0 65 64 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  ed, pOp->p1);.  
2c8d0 20 20 20 20 2f 2a 20 41 6c 6c 20 4f 50 5f 44 65      /* All OP_De
2c8e0 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73  stroy operations
2c8f0 20 6f 63 63 75 72 20 6f 6e 20 74 68 65 20 73 61   occur on the sa
2c900 6d 65 20 62 74 72 65 65 20 2a 2f 0a 20 20 20 20  me btree */.    
2c910 20 20 61 73 73 65 72 74 28 20 72 65 73 65 74 53    assert( resetS
2c920 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 30 20  chemaOnFault==0 
2c930 7c 7c 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e  || resetSchemaOn
2c940 46 61 75 6c 74 3d 3d 69 44 62 2b 31 20 29 3b 0a  Fault==iDb+1 );.
2c950 20 20 20 20 20 20 72 65 73 65 74 53 63 68 65 6d        resetSchem
2c960 61 4f 6e 46 61 75 6c 74 20 3d 20 69 44 62 2b 31  aOnFault = iDb+1
2c970 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
2c980 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
2c990 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72 20  * Opcode: Clear 
2c9a0 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44  P1 P2 P3.**.** D
2c9b0 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e  elete all conten
2c9c0 74 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ts of the databa
2c9d0 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  se table or inde
2c9e0 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67  x whose root pag
2c9f0 65 0a 2a 2a 20 69 6e 20 74 68 65 20 64 61 74 61  e.** in the data
2ca00 62 61 73 65 20 66 69 6c 65 20 69 73 20 67 69 76  base file is giv
2ca10 65 6e 20 62 79 20 50 31 2e 20 20 42 75 74 2c 20  en by P1.  But, 
2ca20 75 6e 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c 20  unlike Destroy, 
2ca30 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65  do not.** remove
2ca40 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
2ca50 64 65 78 20 66 72 6f 6d 20 74 68 65 20 64 61 74  dex from the dat
2ca60 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  abase file..**.*
2ca70 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e  * The table bein
2ca80 67 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68  g clear is in th
2ca90 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
2caa0 66 69 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20 20  file if P2==0.  
2cab0 49 66 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e  If.** P2==1 then
2cac0 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65   the table to be
2cad0 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65   clear is in the
2cae0 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
2caf0 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74  ase file.** that
2cb00 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
2cb10 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20  e tables create 
2cb20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d  using CREATE TEM
2cb30 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a  PORARY TABLE..**
2cb40 0a 2a 2a 20 49 66 20 74 68 65 20 50 33 20 76 61  .** If the P3 va
2cb50 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  lue is non-zero,
2cb60 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
2cb70 72 65 66 65 72 72 65 64 20 74 6f 20 6d 75 73 74  referred to must
2cb80 20 62 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79   be an.** intkey
2cb90 20 74 61 62 6c 65 20 28 61 6e 20 53 51 4c 20 74   table (an SQL t
2cba0 61 62 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64  able, not an ind
2cbb0 65 78 29 2e 20 49 6e 20 74 68 69 73 20 63 61 73  ex). In this cas
2cbc0 65 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65  e the row change
2cbd0 20 0a 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e   .** count is in
2cbe0 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65  cremented by the
2cbf0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
2cc00 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  in the table bei
2cc10 6e 67 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20  ng cleared. .** 
2cc20 49 66 20 50 33 20 69 73 20 67 72 65 61 74 65 72  If P3 is greater
2cc30 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e   than zero, then
2cc40 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65   the value store
2cc50 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
2cc60 20 69 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72   is.** also incr
2cc70 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e  emented by the n
2cc80 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
2cc90 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
2cca0 20 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20   cleared..**.** 
2ccb0 53 65 65 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f  See also: Destro
2ccc0 79 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65  y.*/.case OP_Cle
2ccd0 61 72 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61  ar: {.  int nCha
2cce0 6e 67 65 3b 0a 20 0a 20 20 6e 43 68 61 6e 67 65  nge;. .  nChange
2ccf0 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
2cd00 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
2cd10 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61  ;.  assert( DbMa
2cd20 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
2cd30 61 73 6b 2c 20 70 4f 70 2d 3e 70 32 29 20 29 3b  ask, pOp->p2) );
2cd40 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
2cd50 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65 28 0a  treeClearTable(.
2cd60 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f        db->aDb[pO
2cd70 70 2d 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d  p->p2].pBt, pOp-
2cd80 3e 70 31 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20  >p1, (pOp->p3 ? 
2cd90 26 6e 43 68 61 6e 67 65 20 3a 20 30 29 0a 20 20  &nChange : 0).  
2cda0 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  );.  if( pOp->p3
2cdb0 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e   ){.    p->nChan
2cdc0 67 65 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20  ge += nChange;. 
2cdd0 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30     if( pOp->p3>0
2cde0 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
2cdf0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
2ce00 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a  em[pOp->p3]) );.
2ce10 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
2ce20 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b  Change(p, &aMem[
2ce30 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20  pOp->p3]);.     
2ce40 20 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75   aMem[pOp->p3].u
2ce50 2e 69 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20  .i += nChange;. 
2ce60 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72     }.  }.  if( r
2ce70 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
2ce80 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62  ue_to_error;.  b
2ce90 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2cea0 64 65 3a 20 52 65 73 65 74 53 6f 72 74 65 72 20  de: ResetSorter 
2ceb0 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
2cec0 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74   Delete all cont
2ced0 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 65 70  ents from the ep
2cee0 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 6f 72  hemeral table or
2cef0 20 73 6f 72 74 65 72 0a 2a 2a 20 74 68 61 74 20   sorter.** that 
2cf00 69 73 20 6f 70 65 6e 20 6f 6e 20 63 75 72 73 6f  is open on curso
2cf10 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P1..**.** This
2cf20 20 6f 70 63 6f 64 65 20 6f 6e 6c 79 20 77 6f 72   opcode only wor
2cf30 6b 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20 75  ks for cursors u
2cf40 73 65 64 20 66 6f 72 20 73 6f 72 74 69 6e 67 20  sed for sorting 
2cf50 61 6e 64 0a 2a 2a 20 6f 70 65 6e 65 64 20 77 69  and.** opened wi
2cf60 74 68 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  th OP_OpenEpheme
2cf70 72 61 6c 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72  ral or OP_Sorter
2cf80 4f 70 65 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  Open..*/.case OP
2cf90 5f 52 65 73 65 74 53 6f 72 74 65 72 3a 20 7b 0a  _ResetSorter: {.
2cfa0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
2cfb0 3b 0a 20 0a 20 20 61 73 73 65 72 74 28 20 70 4f  ;. .  assert( pO
2cfc0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
2cfd0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
2cfe0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
2cff0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
2d000 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
2d010 20 69 66 28 20 69 73 53 6f 72 74 65 72 28 70 43   if( isSorter(pC
2d020 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  ) ){.    sqlite3
2d030 56 64 62 65 53 6f 72 74 65 72 52 65 73 65 74 28  VdbeSorterReset(
2d040 64 62 2c 20 70 43 2d 3e 75 63 2e 70 53 6f 72 74  db, pC->uc.pSort
2d050 65 72 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  er);.  }else{.  
2d060 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
2d070 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
2d080 42 54 52 45 45 20 29 3b 0a 20 20 20 20 61 73 73  BTREE );.    ass
2d090 65 72 74 28 20 70 43 2d 3e 69 73 45 70 68 65 6d  ert( pC->isEphem
2d0a0 65 72 61 6c 20 29 3b 0a 20 20 20 20 72 63 20 3d  eral );.    rc =
2d0b0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65   sqlite3BtreeCle
2d0c0 61 72 54 61 62 6c 65 4f 66 43 75 72 73 6f 72 28  arTableOfCursor(
2d0d0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  pC->uc.pCursor);
2d0e0 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
2d0f0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2d100 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65  error;.  }.  bre
2d110 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2d120 3a 20 43 72 65 61 74 65 54 61 62 6c 65 20 50 31  : CreateTable P1
2d130 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
2d140 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f  opsis: r[P2]=roo
2d150 74 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41  t iDb=P1.**.** A
2d160 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 74 61  llocate a new ta
2d170 62 6c 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20  ble in the main 
2d180 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
2d190 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65   P1==0 or in the
2d1a0 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61  .** auxiliary da
2d1b0 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
2d1c0 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74  1==1 or in an at
2d1d0 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  tached database 
2d1e0 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69  if.** P1>1.  Wri
2d1f0 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  te the root page
2d200 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e   number of the n
2d210 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a  ew table into.**
2d220 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a   register P2.**.
2d230 2a 2a 20 54 68 65 20 64 69 66 66 65 72 65 6e 63  ** The differenc
2d240 65 20 62 65 74 77 65 65 6e 20 61 20 74 61 62 6c  e between a tabl
2d250 65 20 61 6e 64 20 61 6e 20 69 6e 64 65 78 20 69  e and an index i
2d260 73 20 74 68 69 73 3a 20 20 41 20 74 61 62 6c 65  s this:  A table
2d270 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20 61 20   must.** have a 
2d280 34 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20 6b  4-byte integer k
2d290 65 79 20 61 6e 64 20 63 61 6e 20 68 61 76 65 20  ey and can have 
2d2a0 61 72 62 69 74 72 61 72 79 20 64 61 74 61 2e 20  arbitrary data. 
2d2b0 20 41 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 61 73   An index.** has
2d2c0 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 6b 65   an arbitrary ke
2d2d0 79 20 62 75 74 20 6e 6f 20 64 61 74 61 2e 0a 2a  y but no data..*
2d2e0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43  *.** See also: C
2d2f0 72 65 61 74 65 49 6e 64 65 78 0a 2a 2f 0a 2f 2a  reateIndex.*/./*
2d300 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65 49   Opcode: CreateI
2d310 6e 64 65 78 20 50 31 20 50 32 20 2a 20 2a 20 2a  ndex P1 P2 * * *
2d320 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
2d330 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31 0a  P2]=root iDb=P1.
2d340 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61  **.** Allocate a
2d350 20 6e 65 77 20 69 6e 64 65 78 20 69 6e 20 74 68   new index in th
2d360 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
2d370 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72  file if P1==0 or
2d380 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c   in the.** auxil
2d390 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69  iary database fi
2d3a0 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69  le if P1==1 or i
2d3b0 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  n an attached da
2d3c0 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e  tabase if.** P1>
2d3d0 31 2e 20 20 57 72 69 74 65 20 74 68 65 20 72 6f  1.  Write the ro
2d3e0 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f  ot page number o
2d3f0 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20  f the new table 
2d400 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
2d410 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64   P2..**.** See d
2d420 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20  ocumentation on 
2d430 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 66  OP_CreateTable f
2d440 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
2d450 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  formation..*/.ca
2d460 73 65 20 4f 50 5f 43 72 65 61 74 65 49 6e 64 65  se OP_CreateInde
2d470 78 3a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  x:            /*
2d480 20 6f 75 74 32 20 2a 2f 0a 63 61 73 65 20 4f 50   out2 */.case OP
2d490 5f 43 72 65 61 74 65 54 61 62 6c 65 3a 20 7b 20  _CreateTable: { 
2d4a0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
2d4b0 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a   */.  int pgno;.
2d4c0 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20 44    int flags;.  D
2d4d0 62 20 2a 70 44 62 3b 0a 0a 20 20 70 4f 75 74 20  b *pDb;..  pOut 
2d4e0 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
2d4f0 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 67 6e 6f  (p, pOp);.  pgno
2d500 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
2d510 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
2d520 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
2d530 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
2d540 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
2d550 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a  sk, pOp->p1) );.
2d560 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
2d570 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44  dOnly==0 );.  pD
2d580 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70  b = &db->aDb[pOp
2d590 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2d5a0 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a   pDb->pBt!=0 );.
2d5b0 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
2d5c0 65 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  e==OP_CreateTabl
2d5d0 65 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67  e ){.    /* flag
2d5e0 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59  s = BTREE_INTKEY
2d5f0 3b 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d  ; */.    flags =
2d600 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20   BTREE_INTKEY;. 
2d610 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67   }else{.    flag
2d620 73 20 3d 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45  s = BTREE_BLOBKE
2d630 59 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  Y;.  }.  rc = sq
2d640 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65  lite3BtreeCreate
2d650 54 61 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20  Table(pDb->pBt, 
2d660 26 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20  &pgno, flags);. 
2d670 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
2d680 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2d690 72 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  r;.  pOut->u.i =
2d6a0 20 70 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a   pgno;.  break;.
2d6b0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61  }../* Opcode: Pa
2d6c0 72 73 65 53 63 68 65 6d 61 20 50 31 20 2a 20 2a  rseSchema P1 * *
2d6d0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64   P4 *.**.** Read
2d6e0 20 61 6e 64 20 70 61 72 73 65 20 61 6c 6c 20 65   and parse all e
2d6f0 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20  ntries from the 
2d700 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 74 61  SQLITE_MASTER ta
2d710 62 6c 65 20 6f 66 20 64 61 74 61 62 61 73 65 20  ble of database 
2d720 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63 68  P1.** that match
2d730 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   the WHERE claus
2d740 65 20 50 34 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69  e P4. .**.** Thi
2d750 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73  s opcode invokes
2d760 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20 63   the parser to c
2d770 72 65 61 74 65 20 61 20 6e 65 77 20 76 69 72 74  reate a new virt
2d780 75 61 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20  ual machine,.** 
2d790 74 68 65 6e 20 72 75 6e 73 20 74 68 65 20 6e 65  then runs the ne
2d7a0 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  w virtual machin
2d7b0 65 2e 20 20 49 74 20 69 73 20 74 68 75 73 20 61  e.  It is thus a
2d7c0 20 72 65 2d 65 6e 74 72 61 6e 74 20 6f 70 63 6f   re-entrant opco
2d7d0 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  de..*/.case OP_P
2d7e0 61 72 73 65 53 63 68 65 6d 61 3a 20 7b 0a 20 20  arseSchema: {.  
2d7f0 69 6e 74 20 69 44 62 3b 0a 20 20 63 6f 6e 73 74  int iDb;.  const
2d800 20 63 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b 0a   char *zMaster;.
2d810 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20    char *zSql;.  
2d820 49 6e 69 74 44 61 74 61 20 69 6e 69 74 44 61 74  InitData initDat
2d830 61 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20 70 72 65  a;..  /* Any pre
2d840 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
2d850 74 68 61 74 20 69 6e 76 6f 6b 65 73 20 74 68 69  that invokes thi
2d860 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 68 6f  s opcode will ho
2d870 6c 64 20 6d 75 74 65 78 65 73 0a 20 20 2a 2a 20  ld mutexes.  ** 
2d880 6f 6e 20 65 76 65 72 79 20 62 74 72 65 65 2e 20  on every btree. 
2d890 20 54 68 69 73 20 69 73 20 61 20 70 72 65 72 65   This is a prere
2d8a0 71 75 69 73 69 74 65 20 66 6f 72 20 69 6e 76 6f  quisite for invo
2d8b0 6b 69 6e 67 20 0a 20 20 2a 2a 20 73 71 6c 69 74  king .  ** sqlit
2d8c0 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 29  e3InitCallback()
2d8d0 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  ..  */.#ifdef SQ
2d8e0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f 72  LITE_DEBUG.  for
2d8f0 28 69 44 62 3d 30 3b 20 69 44 62 3c 64 62 2d 3e  (iDb=0; iDb<db->
2d900 6e 44 62 3b 20 69 44 62 2b 2b 29 7b 0a 20 20 20  nDb; iDb++){.   
2d910 20 61 73 73 65 72 74 28 20 69 44 62 3d 3d 31 20   assert( iDb==1 
2d920 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65 48  || sqlite3BtreeH
2d930 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d 3e 61 44  oldsMutex(db->aD
2d940 62 5b 69 44 62 5d 2e 70 42 74 29 20 29 3b 0a 20  b[iDb].pBt) );. 
2d950 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69 44 62   }.#endif..  iDb
2d960 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73   = pOp->p1;.  as
2d970 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20  sert( iDb>=0 && 
2d980 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  iDb<db->nDb );. 
2d990 20 61 73 73 65 72 74 28 20 44 62 48 61 73 50 72   assert( DbHasPr
2d9a0 6f 70 65 72 74 79 28 64 62 2c 20 69 44 62 2c 20  operty(db, iDb, 
2d9b0 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29  DB_SchemaLoaded)
2d9c0 20 29 3b 0a 20 20 2f 2a 20 55 73 65 64 20 74 6f   );.  /* Used to
2d9d0 20 62 65 20 61 20 63 6f 6e 64 69 74 69 6f 6e 61   be a conditiona
2d9e0 6c 20 2a 2f 20 7b 0a 20 20 20 20 7a 4d 61 73 74  l */ {.    zMast
2d9f0 65 72 20 3d 20 53 43 48 45 4d 41 5f 54 41 42 4c  er = SCHEMA_TABL
2da00 45 28 69 44 62 29 3b 0a 20 20 20 20 69 6e 69 74  E(iDb);.    init
2da10 44 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20  Data.db = db;.  
2da20 20 20 69 6e 69 74 44 61 74 61 2e 69 44 62 20 3d    initData.iDb =
2da30 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20 20 69 6e   pOp->p1;.    in
2da40 69 74 44 61 74 61 2e 70 7a 45 72 72 4d 73 67 20  itData.pzErrMsg 
2da50 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20  = &p->zErrMsg;. 
2da60 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65     zSql = sqlite
2da70 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20 20 20  3MPrintf(db,.   
2da80 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65      "SELECT name
2da90 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c 20  , rootpage, sql 
2daa0 46 52 4f 4d 20 27 25 71 27 2e 25 73 20 57 48 45  FROM '%q'.%s WHE
2dab0 52 45 20 25 73 20 4f 52 44 45 52 20 42 59 20 72  RE %s ORDER BY r
2dac0 6f 77 69 64 22 2c 0a 20 20 20 20 20 20 20 64 62  owid",.       db
2dad0 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 44 62 53 4e  ->aDb[iDb].zDbSN
2dae0 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f  ame, zMaster, pO
2daf0 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66  p->p4.z);.    if
2db00 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20  ( zSql==0 ){.   
2db10 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e     rc = SQLITE_N
2db20 4f 4d 45 4d 5f 42 4b 50 54 3b 0a 20 20 20 20 7d  OMEM_BKPT;.    }
2db30 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65  else{.      asse
2db40 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73  rt( db->init.bus
2db50 79 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 64 62  y==0 );.      db
2db60 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b  ->init.busy = 1;
2db70 0a 20 20 20 20 20 20 69 6e 69 74 44 61 74 61 2e  .      initData.
2db80 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
2db90 20 20 20 20 20 20 61 73 73 65 72 74 28 20 21 64        assert( !d
2dba0 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
2dbb0 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  );.      rc = sq
2dbc0 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20 7a  lite3_exec(db, z
2dbd0 53 71 6c 2c 20 73 71 6c 69 74 65 33 49 6e 69 74  Sql, sqlite3Init
2dbe0 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44  Callback, &initD
2dbf0 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 20 20 69  ata, 0);.      i
2dc00 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
2dc10 20 29 20 72 63 20 3d 20 69 6e 69 74 44 61 74 61   ) rc = initData
2dc20 2e 72 63 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  .rc;.      sqlit
2dc30 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a 53 71  e3DbFree(db, zSq
2dc40 6c 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e  l);.      db->in
2dc50 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20 20  it.busy = 0;.   
2dc60 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20   }.  }.  if( rc 
2dc70 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 65  ){.    sqlite3Re
2dc80 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43  setAllSchemasOfC
2dc90 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20  onnection(db);. 
2dca0 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
2dcb0 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 20  E_NOMEM ){.     
2dcc0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
2dcd0 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f    }.    goto abo
2dce0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2dcf0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a  .  }.  break;  .
2dd00 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  }..#if !defined(
2dd10 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c  SQLITE_OMIT_ANAL
2dd20 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  YZE)./* Opcode: 
2dd30 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20 50 31 20  LoadAnalysis P1 
2dd40 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65  * * * *.**.** Re
2dd50 61 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  ad the sqlite_st
2dd60 61 74 31 20 74 61 62 6c 65 20 66 6f 72 20 64 61  at1 table for da
2dd70 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 6c 6f  tabase P1 and lo
2dd80 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a  ad the content.*
2dd90 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 20  * of that table 
2dda0 69 6e 74 6f 20 74 68 65 20 69 6e 74 65 72 6e 61  into the interna
2ddb0 6c 20 69 6e 64 65 78 20 68 61 73 68 20 74 61 62  l index hash tab
2ddc0 6c 65 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63  le.  This will c
2ddd0 61 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c  ause.** the anal
2dde0 79 73 69 73 20 74 6f 20 62 65 20 75 73 65 64 20  ysis to be used 
2ddf0 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20 61  when preparing a
2de00 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20 71 75  ll subsequent qu
2de10 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  eries..*/.case O
2de20 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20  P_LoadAnalysis: 
2de30 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  {.  assert( pOp-
2de40 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
2de50 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72  1<db->nDb );.  r
2de60 63 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c 79  c = sqlite3Analy
2de70 73 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70 2d  sisLoad(db, pOp-
2de80 3e 70 31 29 3b 0a 20 20 69 66 28 20 72 63 20 29  >p1);.  if( rc )
2de90 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2dea0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
2deb0 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  k;  .}.#endif /*
2dec0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2ded0 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 20 2a  _OMIT_ANALYZE) *
2dee0 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72  /../* Opcode: Dr
2def0 6f 70 54 61 62 6c 65 20 50 31 20 2a 20 2a 20 50  opTable P1 * * P
2df00 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65  4 *.**.** Remove
2df10 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69   the internal (i
2df20 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73  n-memory) data s
2df30 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64  tructures that d
2df40 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74  escribe.** the t
2df50 61 62 6c 65 20 6e 61 6d 65 64 20 50 34 20 69 6e  able named P4 in
2df60 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54   database P1.  T
2df70 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66  his is called af
2df80 74 65 72 20 61 20 74 61 62 6c 65 0a 2a 2a 20 69  ter a table.** i
2df90 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64  s dropped from d
2dfa0 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44  isk (using the D
2dfb0 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 20 69  estroy opcode) i
2dfc0 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20  n order to keep 
2dfd0 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  .** the internal
2dfe0 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2dff0 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  of the.** schema
2e000 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68   consistent with
2e010 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b   what is on disk
2e020 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f  ..*/.case OP_Dro
2e030 70 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c 69  pTable: {.  sqli
2e040 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
2e050 74 65 54 61 62 6c 65 28 64 62 2c 20 70 4f 70 2d  teTable(db, pOp-
2e060 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
2e070 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2e080 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e 64 65  Opcode: DropInde
2e090 78 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  x P1 * * P4 *.**
2e0a0 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69  .** Remove the i
2e0b0 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f  nternal (in-memo
2e0c0 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75  ry) data structu
2e0d0 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62  res that describ
2e0e0 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 6e  e.** the index n
2e0f0 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62  amed P4 in datab
2e100 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73  ase P1.  This is
2e110 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 6e   called after an
2e120 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20 64 72 6f   index.** is dro
2e130 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28  pped from disk (
2e140 75 73 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f  using the Destro
2e150 79 20 6f 70 63 6f 64 65 29 0a 2a 2a 20 69 6e 20  y opcode).** in 
2e160 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68  order to keep th
2e170 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65  e internal repre
2e180 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
2e190 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69  .** schema consi
2e1a0 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20  stent with what 
2e1b0 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63  is on disk..*/.c
2e1c0 61 73 65 20 4f 50 5f 44 72 6f 70 49 6e 64 65 78  ase OP_DropIndex
2e1d0 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c  : {.  sqlite3Unl
2e1e0 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65  inkAndDeleteInde
2e1f0 78 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  x(db, pOp->p1, p
2e200 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65  Op->p4.z);.  bre
2e210 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2e220 3a 20 44 72 6f 70 54 72 69 67 67 65 72 20 50 31  : DropTrigger P1
2e230 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
2e240 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72  Remove the inter
2e250 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20  nal (in-memory) 
2e260 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20  data structures 
2e270 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a  that describe.**
2e280 20 74 68 65 20 74 72 69 67 67 65 72 20 6e 61 6d   the trigger nam
2e290 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73  ed P4 in databas
2e2a0 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63  e P1.  This is c
2e2b0 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 72  alled after a tr
2e2c0 69 67 67 65 72 0a 2a 2a 20 69 73 20 64 72 6f 70  igger.** is drop
2e2d0 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75  ped from disk (u
2e2e0 73 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79  sing the Destroy
2e2f0 20 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72 64 65   opcode) in orde
2e300 72 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68  r to keep .** th
2e310 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65  e internal repre
2e320 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
2e330 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69  .** schema consi
2e340 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20  stent with what 
2e350 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63  is on disk..*/.c
2e360 61 73 65 20 4f 50 5f 44 72 6f 70 54 72 69 67 67  ase OP_DropTrigg
2e370 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55  er: {.  sqlite3U
2e380 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
2e390 69 67 67 65 72 28 64 62 2c 20 70 4f 70 2d 3e 70  igger(db, pOp->p
2e3a0 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  1, pOp->p4.z);. 
2e3b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e   break;.}...#ifn
2e3c0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2e3d0 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a  INTEGRITY_CHECK.
2e3e0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67  /* Opcode: Integ
2e3f0 72 69 74 79 43 6b 20 50 31 20 50 32 20 50 33 20  rityCk P1 P2 P3 
2e400 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61  P4 P5.**.** Do a
2e410 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66 20 74 68  n analysis of th
2e420 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e  e currently open
2e430 20 64 61 74 61 62 61 73 65 2e 20 20 53 74 6f 72   database.  Stor
2e440 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72  e in.** register
2e450 20 50 31 20 74 68 65 20 74 65 78 74 20 6f 66 20   P1 the text of 
2e460 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an error message
2e470 20 64 65 73 63 72 69 62 69 6e 67 20 61 6e 79 20   describing any 
2e480 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20  problems..** If 
2e490 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61 72 65 20  no problems are 
2e4a0 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20 61 20 4e  found, store a N
2e4b0 55 4c 4c 20 69 6e 20 72 65 67 69 73 74 65 72 20  ULL in register 
2e4c0 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65  P1..**.** The re
2e4d0 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69  gister P3 contai
2e4e0 6e 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e  ns the maximum n
2e4f0 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65 64  umber of allowed
2e500 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d   errors..** At m
2e510 6f 73 74 20 72 65 67 28 50 33 29 20 65 72 72 6f  ost reg(P3) erro
2e520 72 73 20 77 69 6c 6c 20 62 65 20 72 65 70 6f 72  rs will be repor
2e530 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72  ted..** In other
2e540 20 77 6f 72 64 73 2c 20 74 68 65 20 61 6e 61 6c   words, the anal
2e550 79 73 69 73 20 73 74 6f 70 73 20 61 73 20 73 6f  ysis stops as so
2e560 6f 6e 20 61 73 20 72 65 67 28 50 31 29 20 65 72  on as reg(P1) er
2e570 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73 65 65  rors are .** see
2e580 6e 2e 20 20 52 65 67 28 50 31 29 20 69 73 20 75  n.  Reg(P1) is u
2e590 70 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20  pdated with the 
2e5a0 6e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  number of errors
2e5b0 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a   remaining..**.*
2e5c0 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67 65 20  * The root page 
2e5d0 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20 74  numbers of all t
2e5e0 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64 61 74  ables in the dat
2e5f0 61 62 61 73 65 20 61 72 65 20 69 6e 74 65 67 65  abase are intege
2e600 72 73 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20  rs.** stored in 
2e610 50 34 5f 49 4e 54 41 52 52 41 59 20 61 72 67 75  P4_INTARRAY argu
2e620 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  ment..**.** If P
2e630 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  5 is not zero, t
2e640 68 65 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65  he check is done
2e650 20 6f 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72   on the auxiliar
2e660 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69  y database.** fi
2e670 6c 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e  le, not the main
2e680 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
2e690 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
2e6a0 65 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70  e is used to imp
2e6b0 6c 65 6d 65 6e 74 20 74 68 65 20 69 6e 74 65 67  lement the integ
2e6c0 72 69 74 79 5f 63 68 65 63 6b 20 70 72 61 67 6d  rity_check pragm
2e6d0 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  a..*/.case OP_In
2e6e0 74 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69  tegrityCk: {.  i
2e6f0 6e 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f  nt nRoot;      /
2e700 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c  * Number of tabl
2e710 65 73 20 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e  es to check.  (N
2e720 75 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20 70 61  umber of root pa
2e730 67 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a  ges.) */.  int *
2e740 61 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72  aRoot;     /* Ar
2e750 72 61 79 20 6f 66 20 72 6f 6f 74 70 61 67 65 20  ray of rootpage 
2e760 6e 75 6d 62 65 72 73 20 66 6f 72 20 74 61 62 6c  numbers for tabl
2e770 65 73 20 74 6f 20 62 65 20 63 68 65 63 6b 65 64  es to be checked
2e780 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20   */.  int nErr; 
2e790 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
2e7a0 6f 66 20 65 72 72 6f 72 73 20 72 65 70 6f 72 74  of errors report
2e7b0 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b  ed */.  char *z;
2e7c0 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
2e7d0 6f 66 20 74 68 65 20 65 72 72 6f 72 20 72 65 70  of the error rep
2e7e0 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e  ort */.  Mem *pn
2e7f0 45 72 72 3b 20 20 20 20 20 2f 2a 20 52 65 67 69  Err;     /* Regi
2e800 73 74 65 72 20 6b 65 65 70 69 6e 67 20 74 72 61  ster keeping tra
2e810 63 6b 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d  ck of errors rem
2e820 61 69 6e 69 6e 67 20 2a 2f 0a 0a 20 20 61 73 73  aining */..  ass
2e830 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
2e840 72 20 29 3b 0a 20 20 6e 52 6f 6f 74 20 3d 20 70  r );.  nRoot = p
2e850 4f 70 2d 3e 70 32 3b 0a 20 20 61 52 6f 6f 74 20  Op->p2;.  aRoot 
2e860 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20  = pOp->p4.ai;.  
2e870 61 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20  assert( nRoot>0 
2e880 29 3b 0a 20 20 61 73 73 65 72 74 28 20 61 52 6f  );.  assert( aRo
2e890 6f 74 5b 6e 52 6f 6f 74 5d 3d 3d 30 20 29 3b 0a  ot[nRoot]==0 );.
2e8a0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2e8b0 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
2e8c0 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
2e8d0 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 6e  nCursor) );.  pn
2e8e0 45 72 72 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Err = &aMem[pOp-
2e8f0 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p3];.  assert( 
2e900 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20  (pnErr->flags & 
2e910 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20  MEM_Int)!=0 );. 
2e920 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d   assert( (pnErr-
2e930 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74  >flags & (MEM_St
2e940 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20  r|MEM_Blob))==0 
2e950 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  );.  pIn1 = &aMe
2e960 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
2e970 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62  sert( pOp->p5<db
2e980 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
2e990 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
2e9a0 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d  >btreeMask, pOp-
2e9b0 3e 70 35 29 20 29 3b 0a 20 20 7a 20 3d 20 73 71  >p5) );.  z = sq
2e9c0 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67 72  lite3BtreeIntegr
2e9d0 69 74 79 43 68 65 63 6b 28 64 62 2d 3e 61 44 62  ityCheck(db->aDb
2e9e0 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 61  [pOp->p5].pBt, a
2e9f0 52 6f 6f 74 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20  Root, nRoot,.   
2ea00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ea10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69                (i
2ea20 6e 74 29 70 6e 45 72 72 2d 3e 75 2e 69 2c 20 26  nt)pnErr->u.i, &
2ea30 6e 45 72 72 29 3b 0a 20 20 70 6e 45 72 72 2d 3e  nErr);.  pnErr->
2ea40 75 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a 20 20 73  u.i -= nErr;.  s
2ea50 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
2ea60 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 69 66  Null(pIn1);.  if
2ea70 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20 20 20  ( nErr==0 ){.   
2ea80 20 61 73 73 65 72 74 28 20 7a 3d 3d 30 20 29 3b   assert( z==0 );
2ea90 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 3d 3d  .  }else if( z==
2eaa0 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  0 ){.    goto no
2eab0 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  _mem;.  }else{. 
2eac0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2ead0 6d 53 65 74 53 74 72 28 70 49 6e 31 2c 20 7a 2c  mSetStr(pIn1, z,
2eae0 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38   -1, SQLITE_UTF8
2eaf0 2c 20 73 71 6c 69 74 65 33 5f 66 72 65 65 29 3b  , sqlite3_free);
2eb00 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d 41  .  }.  UPDATE_MA
2eb10 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29  X_BLOBSIZE(pIn1)
2eb20 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43  ;.  sqlite3VdbeC
2eb30 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 49  hangeEncoding(pI
2eb40 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  n1, encoding);. 
2eb50 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2eb60 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2eb70 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 20  INTEGRITY_CHECK 
2eb80 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  */../* Opcode: R
2eb90 6f 77 53 65 74 41 64 64 20 50 31 20 50 32 20 2a  owSetAdd P1 P2 *
2eba0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2ebb0 3a 20 72 6f 77 73 65 74 28 50 31 29 3d 72 5b 50  : rowset(P1)=r[P
2ebc0 32 5d 0a 2a 2a 0a 2a 2a 20 49 6e 73 65 72 74 20  2].**.** Insert 
2ebd0 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  the integer valu
2ebe0 65 20 68 65 6c 64 20 62 79 20 72 65 67 69 73 74  e held by regist
2ebf0 65 72 20 50 32 20 69 6e 74 6f 20 61 20 62 6f 6f  er P2 into a boo
2ec00 6c 65 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 65  lean index.** he
2ec10 6c 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ld in register P
2ec20 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 61 73 73 65  1..**.** An asse
2ec30 72 74 69 6f 6e 20 66 61 69 6c 73 20 69 66 20 50  rtion fails if P
2ec40 32 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65  2 is not an inte
2ec50 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ger..*/.case OP_
2ec60 52 6f 77 53 65 74 41 64 64 3a 20 7b 20 20 20 20  RowSetAdd: {    
2ec70 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e 32 20 2a     /* in1, in2 *
2ec80 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
2ec90 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e  [pOp->p1];.  pIn
2eca0 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
2ecb0 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  2];.  assert( (p
2ecc0 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In2->flags & MEM
2ecd0 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 69 66  _Int)!=0 );.  if
2ece0 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
2ecf0 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
2ed00 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
2ed10 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70  beMemSetRowSet(p
2ed20 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20 28 70  In1);.    if( (p
2ed30 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
2ed40 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f  _RowSet)==0 ) go
2ed50 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
2ed60 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e   sqlite3RowSetIn
2ed70 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f  sert(pIn1->u.pRo
2ed80 77 53 65 74 2c 20 70 49 6e 32 2d 3e 75 2e 69 29  wSet, pIn2->u.i)
2ed90 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2eda0 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 52   Opcode: RowSetR
2edb0 65 61 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ead P1 P2 P3 * *
2edc0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
2edd0 50 33 5d 3d 72 6f 77 73 65 74 28 50 31 29 0a 2a  P3]=rowset(P1).*
2ede0 2a 0a 2a 2a 20 45 78 74 72 61 63 74 20 74 68 65  *.** Extract the
2edf0 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20   smallest value 
2ee00 66 72 6f 6d 20 62 6f 6f 6c 65 61 6e 20 69 6e 64  from boolean ind
2ee10 65 78 20 50 31 20 61 6e 64 20 70 75 74 20 74 68  ex P1 and put th
2ee20 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 0a 2a 2a  at value into.**
2ee30 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 20 4f   register P3.  O
2ee40 72 2c 20 69 66 20 62 6f 6f 6c 65 61 6e 20 69 6e  r, if boolean in
2ee50 64 65 78 20 50 31 20 69 73 20 69 6e 69 74 69 61  dex P1 is initia
2ee60 6c 6c 79 20 65 6d 70 74 79 2c 20 6c 65 61 76 65  lly empty, leave
2ee70 20 50 33 0a 2a 2a 20 75 6e 63 68 61 6e 67 65 64   P3.** unchanged
2ee80 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 69 6e 73   and jump to ins
2ee90 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a  truction P2..*/.
2eea0 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 52 65  case OP_RowSetRe
2eeb0 61 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a  ad: {       /* j
2eec0 75 6d 70 2c 20 69 6e 31 2c 20 6f 75 74 33 20 2a  ump, in1, out3 *
2eed0 2f 0a 20 20 69 36 34 20 76 61 6c 3b 0a 0a 20 20  /.  i64 val;..  
2eee0 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
2eef0 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p1];.  if( (pI
2ef00 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
2ef10 52 6f 77 53 65 74 29 3d 3d 30 20 0a 20 20 20 7c  RowSet)==0 .   |
2ef20 7c 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e  | sqlite3RowSetN
2ef30 65 78 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77  ext(pIn1->u.pRow
2ef40 53 65 74 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20  Set, &val)==0.  
2ef50 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 62 6f  ){.    /* The bo
2ef60 6f 6c 65 61 6e 20 69 6e 64 65 78 20 69 73 20 65  olean index is e
2ef70 6d 70 74 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69  mpty */.    sqli
2ef80 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
2ef90 6c 28 70 49 6e 31 29 3b 0a 20 20 20 20 56 64 62  l(pIn1);.    Vdb
2efa0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32  eBranchTaken(1,2
2efb0 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  );.    goto jump
2efc0 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b  _to_p2_and_check
2efd0 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a  _for_interrupt;.
2efe0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
2eff0 41 20 76 61 6c 75 65 20 77 61 73 20 70 75 6c 6c  A value was pull
2f000 65 64 20 66 72 6f 6d 20 74 68 65 20 69 6e 64 65  ed from the inde
2f010 78 20 2a 2f 0a 20 20 20 20 56 64 62 65 42 72 61  x */.    VdbeBra
2f020 6e 63 68 54 61 6b 65 6e 28 30 2c 32 29 3b 0a 20  nchTaken(0,2);. 
2f030 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2f040 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b  mSetInt64(&aMem[
2f050 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c 29 3b 0a  pOp->p3], val);.
2f060 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b    }.  goto check
2f070 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a  _for_interrupt;.
2f080 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  }../* Opcode: Ro
2f090 77 53 65 74 54 65 73 74 20 50 31 20 50 32 20 50  wSetTest P1 P2 P
2f0a0 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  3 P4.** Synopsis
2f0b0 3a 20 69 66 20 72 5b 50 33 5d 20 69 6e 20 72 6f  : if r[P3] in ro
2f0c0 77 73 65 74 28 50 31 29 20 67 6f 74 6f 20 50 32  wset(P1) goto P2
2f0d0 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
2f0e0 50 33 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f  P3 is assumed to
2f0f0 20 68 6f 6c 64 20 61 20 36 34 2d 62 69 74 20 69   hold a 64-bit i
2f100 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 49 66  nteger value. If
2f110 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20   register P1.** 
2f120 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77 53 65  contains a RowSe
2f130 74 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 61  t object and tha
2f140 74 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  t RowSet object 
2f150 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68 65 20  contains.** the 
2f160 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 50 33  value held in P3
2f170 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67 69 73 74  , jump to regist
2f180 65 72 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  er P2. Otherwise
2f190 2c 20 69 6e 73 65 72 74 20 74 68 65 0a 2a 2a 20  , insert the.** 
2f1a0 69 6e 74 65 67 65 72 20 69 6e 20 50 33 20 69 6e  integer in P3 in
2f1b0 74 6f 20 74 68 65 20 52 6f 77 53 65 74 20 61 6e  to the RowSet an
2f1c0 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20 74 6f  d continue on to
2f1d0 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f 70 63   the.** next opc
2f1e0 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52  ode..**.** The R
2f1f0 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 69 73 20  owSet object is 
2f200 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72 20 74 68  optimized for th
2f210 65 20 63 61 73 65 20 77 68 65 72 65 20 73 75 63  e case where suc
2f220 63 65 73 73 69 76 65 20 73 65 74 73 0a 2a 2a 20  cessive sets.** 
2f230 6f 66 20 69 6e 74 65 67 65 72 73 2c 20 77 68 65  of integers, whe
2f240 72 65 20 65 61 63 68 20 73 65 74 20 63 6f 6e 74  re each set cont
2f250 61 69 6e 73 20 6e 6f 20 64 75 70 6c 69 63 61 74  ains no duplicat
2f260 65 73 2e 20 45 61 63 68 20 73 65 74 0a 2a 2a 20  es. Each set.** 
2f270 6f 66 20 76 61 6c 75 65 73 20 69 73 20 69 64 65  of values is ide
2f280 6e 74 69 66 69 65 64 20 62 79 20 61 20 75 6e 69  ntified by a uni
2f290 71 75 65 20 50 34 20 76 61 6c 75 65 2e 20 54 68  que P4 value. Th
2f2a0 65 20 66 69 72 73 74 20 73 65 74 0a 2a 2a 20 6d  e first set.** m
2f2b0 75 73 74 20 68 61 76 65 20 50 34 3d 3d 30 2c 20  ust have P4==0, 
2f2c0 74 68 65 20 66 69 6e 61 6c 20 73 65 74 20 50 34  the final set P4
2f2d0 3d 2d 31 2e 20 20 50 34 20 6d 75 73 74 20 62 65  =-1.  P4 must be
2f2e0 20 65 69 74 68 65 72 20 2d 31 20 6f 72 0a 2a 2a   either -1 or.**
2f2f0 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 2e 20 20   non-negative.  
2f300 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65  For non-negative
2f310 20 76 61 6c 75 65 73 20 6f 66 20 50 34 20 6f 6e   values of P4 on
2f320 6c 79 20 74 68 65 20 6c 6f 77 65 72 20 34 0a 2a  ly the lower 4.*
2f330 2a 20 62 69 74 73 20 61 72 65 20 73 69 67 6e 69  * bits are signi
2f340 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  ficant..**.** Th
2f350 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d 69  is allows optimi
2f360 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20 77 68 65  zations: (a) whe
2f370 6e 20 50 34 3d 3d 30 20 74 68 65 72 65 20 69 73  n P4==0 there is
2f380 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65 73 74   no need to test
2f390 0a 2a 2a 20 74 68 65 20 72 6f 77 73 65 74 20 6f  .** the rowset o
2f3a0 62 6a 65 63 74 20 66 6f 72 20 50 33 2c 20 61 73  bject for P3, as
2f3b0 20 69 74 20 69 73 20 67 75 61 72 61 6e 74 65 65   it is guarantee
2f3c0 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61 69 6e  d not to contain
2f3d0 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68 65 6e   it,.** (b) when
2f3e0 20 50 34 3d 3d 2d 31 20 74 68 65 72 65 20 69 73   P4==-1 there is
2f3f0 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e 73 65   no need to inse
2f400 72 74 20 74 68 65 20 76 61 6c 75 65 2c 20 61 73  rt the value, as
2f410 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65   it will.** neve
2f420 72 20 62 65 20 74 65 73 74 65 64 20 66 6f 72 2c  r be tested for,
2f430 20 61 6e 64 20 28 63 29 20 77 68 65 6e 20 61 20   and (c) when a 
2f440 76 61 6c 75 65 20 74 68 61 74 20 69 73 20 70 61  value that is pa
2f450 72 74 20 6f 66 20 73 65 74 20 58 20 69 73 0a 2a  rt of set X is.*
2f460 2a 20 69 6e 73 65 72 74 65 64 2c 20 74 68 65 72  * inserted, ther
2f470 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20  e is no need to 
2f480 73 65 61 72 63 68 20 74 6f 20 73 65 65 20 69 66  search to see if
2f490 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20   the same value 
2f4a0 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c  was.** previousl
2f4b0 79 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61  y inserted as pa
2f4c0 72 74 20 6f 66 20 73 65 74 20 58 20 28 6f 6e 6c  rt of set X (onl
2f4d0 79 20 69 66 20 69 74 20 77 61 73 20 70 72 65 76  y if it was prev
2f4e0 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65 72 74  iously.** insert
2f4f0 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 6f  ed as part of so
2f500 6d 65 20 6f 74 68 65 72 20 73 65 74 29 2e 0a 2a  me other set)..*
2f510 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74  /.case OP_RowSet
2f520 54 65 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20  Test: {         
2f530 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
2f540 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
2f550 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a 20 20 69  .  int iSet;.  i
2f560 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20 20 70 49  nt exists;..  pI
2f570 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
2f580 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61  p1];.  pIn3 = &a
2f590 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
2f5a0 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69  iSet = pOp->p4.i
2f5b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33  ;.  assert( pIn3
2f5c0 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20  ->flags&MEM_Int 
2f5d0 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 72  );..  /* If ther
2f5e0 65 20 69 73 20 61 6e 79 74 68 69 6e 67 20 6f 74  e is anything ot
2f5f0 68 65 72 20 74 68 61 6e 20 61 20 72 6f 77 73 65  her than a rowse
2f600 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f  t object in memo
2f610 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a  ry cell P1,.  **
2f620 20 64 65 6c 65 74 65 20 69 74 20 6e 6f 77 20 61   delete it now a
2f630 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 50 31  nd initialize P1
2f640 20 77 69 74 68 20 61 6e 20 65 6d 70 74 79 20 72   with an empty r
2f650 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28  owset.  */.  if(
2f660 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
2f670 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
2f680 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
2f690 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49  eMemSetRowSet(pI
2f6a0 6e 31 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49  n1);.    if( (pI
2f6b0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
2f6c0 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74  RowSet)==0 ) got
2f6d0 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20  o no_mem;.  }.. 
2f6e0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
2f6f0 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
2f700 3b 0a 20 20 61 73 73 65 72 74 28 20 69 53 65 74  ;.  assert( iSet
2f710 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20  ==-1 || iSet>=0 
2f720 29 3b 0a 20 20 69 66 28 20 69 53 65 74 20 29 7b  );.  if( iSet ){
2f730 0a 20 20 20 20 65 78 69 73 74 73 20 3d 20 73 71  .    exists = sq
2f740 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28  lite3RowSetTest(
2f750 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c  pIn1->u.pRowSet,
2f760 20 69 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69   iSet, pIn3->u.i
2f770 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  );.    VdbeBranc
2f780 68 54 61 6b 65 6e 28 65 78 69 73 74 73 21 3d 30  hTaken(exists!=0
2f790 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 65 78 69  ,2);.    if( exi
2f7a0 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  sts ) goto jump_
2f7b0 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 69 66 28  to_p2;.  }.  if(
2f7c0 20 69 53 65 74 3e 3d 30 20 29 7b 0a 20 20 20 20   iSet>=0 ){.    
2f7d0 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73  sqlite3RowSetIns
2f7e0 65 72 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77  ert(pIn1->u.pRow
2f7f0 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b  Set, pIn3->u.i);
2f800 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2f810 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2f820 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 0a 2f  _OMIT_TRIGGER../
2f830 2a 20 4f 70 63 6f 64 65 3a 20 50 72 6f 67 72 61  * Opcode: Progra
2f840 6d 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  m P1 P2 P3 P4 P5
2f850 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74  .**.** Execute t
2f860 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
2f870 61 6d 20 70 61 73 73 65 64 20 61 73 20 50 34 20  am passed as P4 
2f880 28 74 79 70 65 20 50 34 5f 53 55 42 50 52 4f 47  (type P4_SUBPROG
2f890 52 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20  RAM). .**.** P1 
2f8a0 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64  contains the add
2f8b0 72 65 73 73 20 6f 66 20 74 68 65 20 6d 65 6d 6f  ress of the memo
2f8c0 72 79 20 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e  ry cell that con
2f8d0 74 61 69 6e 73 20 74 68 65 20 66 69 72 73 74 20  tains the first 
2f8e0 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20  memory .** cell 
2f8f0 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 76  in an array of v
2f900 61 6c 75 65 73 20 75 73 65 64 20 61 73 20 61 72  alues used as ar
2f910 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 73  guments to the s
2f920 75 62 2d 70 72 6f 67 72 61 6d 2e 20 50 32 20 0a  ub-program. P2 .
2f930 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  ** contains the 
2f940 61 64 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20  address to jump 
2f950 74 6f 20 69 66 20 74 68 65 20 73 75 62 2d 70 72  to if the sub-pr
2f960 6f 67 72 61 6d 20 74 68 72 6f 77 73 20 61 6e 20  ogram throws an 
2f970 49 47 4e 4f 52 45 20 0a 2a 2a 20 65 78 63 65 70  IGNORE .** excep
2f980 74 69 6f 6e 20 75 73 69 6e 67 20 74 68 65 20 52  tion using the R
2f990 41 49 53 45 28 29 20 66 75 6e 63 74 69 6f 6e 2e  AISE() function.
2f9a0 20 52 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e   Register P3 con
2f9b0 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73  tains the addres
2f9c0 73 20 0a 2a 2a 20 6f 66 20 61 20 6d 65 6d 6f 72  s .** of a memor
2f9d0 79 20 63 65 6c 6c 20 69 6e 20 74 68 69 73 20 28  y cell in this (
2f9e0 74 68 65 20 70 61 72 65 6e 74 29 20 56 4d 20 74  the parent) VM t
2f9f0 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 61  hat is used to a
2fa00 6c 6c 6f 63 61 74 65 20 74 68 65 20 0a 2a 2a 20  llocate the .** 
2fa10 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20  memory required 
2fa20 62 79 20 74 68 65 20 73 75 62 2d 76 64 62 65 20  by the sub-vdbe 
2fa30 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a  at runtime..**.*
2fa40 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
2fa50 72 20 74 6f 20 74 68 65 20 56 4d 20 63 6f 6e 74  r to the VM cont
2fa60 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67  aining the trigg
2fa70 65 72 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a  er program..**.*
2fa80 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a  * If P5 is non-z
2fa90 65 72 6f 2c 20 74 68 65 6e 20 72 65 63 75 72 73  ero, then recurs
2faa0 69 76 65 20 70 72 6f 67 72 61 6d 20 69 6e 76 6f  ive program invo
2fab0 63 61 74 69 6f 6e 20 69 73 20 65 6e 61 62 6c 65  cation is enable
2fac0 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72  d..*/.case OP_Pr
2fad0 6f 67 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20  ogram: {        
2fae0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74  /* jump */.  int
2faf0 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   nMem;          
2fb00 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
2fb10 66 20 6d 65 6d 6f 72 79 20 72 65 67 69 73 74 65  f memory registe
2fb20 72 73 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72  rs for sub-progr
2fb30 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74  am */.  int nByt
2fb40 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
2fb50 2f 2a 20 42 79 74 65 73 20 6f 66 20 72 75 6e 74  /* Bytes of runt
2fb60 69 6d 65 20 73 70 61 63 65 20 72 65 71 75 69 72  ime space requir
2fb70 65 64 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72  ed for sub-progr
2fb80 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 74  am */.  Mem *pRt
2fb90 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2fba0 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 61  /* Register to a
2fbb0 6c 6c 6f 63 61 74 65 20 72 75 6e 74 69 6d 65 20  llocate runtime 
2fbc0 73 70 61 63 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a  space */.  Mem *
2fbd0 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  pMem;           
2fbe0 20 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 69 74     /* Used to it
2fbf0 65 72 61 74 65 20 74 68 72 6f 75 67 68 20 6d 65  erate through me
2fc00 6d 6f 72 79 20 63 65 6c 6c 73 20 2a 2f 0a 20 20  mory cells */.  
2fc10 4d 65 6d 20 2a 70 45 6e 64 3b 20 20 20 20 20 20  Mem *pEnd;      
2fc20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20          /* Last 
2fc30 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 6e  memory cell in n
2fc40 65 77 20 61 72 72 61 79 20 2a 2f 0a 20 20 56 64  ew array */.  Vd
2fc50 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
2fc60 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 76 64 62        /* New vdb
2fc70 65 20 66 72 61 6d 65 20 74 6f 20 65 78 65 63 75  e frame to execu
2fc80 74 65 20 69 6e 20 2a 2f 0a 20 20 53 75 62 50 72  te in */.  SubPr
2fc90 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b  ogram *pProgram;
2fca0 20 20 20 2f 2a 20 53 75 62 2d 70 72 6f 67 72 61     /* Sub-progra
2fcb0 6d 20 74 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a  m to execute */.
2fcc0 20 20 76 6f 69 64 20 2a 74 3b 20 20 20 20 20 20    void *t;      
2fcd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b            /* Tok
2fce0 65 6e 20 69 64 65 6e 74 69 66 79 69 6e 67 20 74  en identifying t
2fcf0 72 69 67 67 65 72 20 2a 2f 0a 0a 20 20 70 50 72  rigger */..  pPr
2fd00 6f 67 72 61 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e  ogram = pOp->p4.
2fd10 70 50 72 6f 67 72 61 6d 3b 0a 20 20 70 52 74 20  pProgram;.  pRt 
2fd20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
2fd30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 50 72 6f  ;.  assert( pPro
2fd40 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20  gram->nOp>0 );. 
2fd50 20 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 70 35   .  /* If the p5
2fd60 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 2c 20   flag is clear, 
2fd70 74 68 65 6e 20 72 65 63 75 72 73 69 76 65 20 69  then recursive i
2fd80 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69  nvocation of tri
2fd90 67 67 65 72 73 20 69 73 20 0a 20 20 2a 2a 20 64  ggers is .  ** d
2fda0 69 73 61 62 6c 65 64 20 66 6f 72 20 62 61 63 6b  isabled for back
2fdb0 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c  wards compatibil
2fdc0 69 74 79 20 28 70 35 20 69 73 20 73 65 74 20 69  ity (p5 is set i
2fdd0 66 20 74 68 69 73 20 73 75 62 2d 70 72 6f 67 72  f this sub-progr
2fde0 61 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c  am.  ** is reall
2fdf0 79 20 61 20 74 72 69 67 67 65 72 2c 20 6e 6f 74  y a trigger, not
2fe00 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 61   a foreign key a
2fe10 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66  ction, and the f
2fe20 6c 61 67 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64  lag set.  ** and
2fe30 20 63 6c 65 61 72 65 64 20 62 79 20 74 68 65 20   cleared by the 
2fe40 22 50 52 41 47 4d 41 20 72 65 63 75 72 73 69 76  "PRAGMA recursiv
2fe50 65 5f 74 72 69 67 67 65 72 73 22 20 63 6f 6d 6d  e_triggers" comm
2fe60 61 6e 64 20 69 73 20 63 6c 65 61 72 29 2e 0a 20  and is clear).. 
2fe70 20 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69 73 20   ** .  ** It is 
2fe80 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61  recursive invoca
2fe90 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73  tion of triggers
2fea0 2c 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76  , at the SQL lev
2feb0 65 6c 2c 20 74 68 61 74 20 69 73 20 0a 20 20 2a  el, that is .  *
2fec0 2a 20 64 69 73 61 62 6c 65 64 2e 20 49 6e 20 73  * disabled. In s
2fed0 6f 6d 65 20 63 61 73 65 73 20 61 20 73 69 6e 67  ome cases a sing
2fee0 6c 65 20 74 72 69 67 67 65 72 20 6d 61 79 20 67  le trigger may g
2fef0 65 6e 65 72 61 74 65 20 6d 6f 72 65 20 74 68 61  enerate more tha
2ff00 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50  n one .  ** SubP
2ff10 72 6f 67 72 61 6d 20 28 69 66 20 74 68 65 20 74  rogram (if the t
2ff20 72 69 67 67 65 72 20 6d 61 79 20 62 65 20 65 78  rigger may be ex
2ff30 65 63 75 74 65 64 20 77 69 74 68 20 6d 6f 72 65  ecuted with more
2ff40 20 74 68 61 6e 20 6f 6e 65 20 64 69 66 66 65 72   than one differ
2ff50 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e  ent .  ** ON CON
2ff60 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 29  FLICT algorithm)
2ff70 2e 20 53 75 62 50 72 6f 67 72 61 6d 20 73 74 72  . SubProgram str
2ff80 75 63 74 75 72 65 73 20 61 73 73 6f 63 69 61 74  uctures associat
2ff90 65 64 20 77 69 74 68 20 61 0a 20 20 2a 2a 20 73  ed with a.  ** s
2ffa0 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20 61 6c  ingle trigger al
2ffb0 6c 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  l have the same 
2ffc0 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 53 75  value for the Su
2ffd0 62 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a  bProgram.token .
2ffe0 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e 20 20    ** variable.  
2fff0 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  */.  if( pOp->p5
30000 20 29 7b 0a 20 20 20 20 74 20 3d 20 70 50 72 6f   ){.    t = pPro
30010 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20  gram->token;.   
30020 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70   for(pFrame=p->p
30030 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 20 26 26  Frame; pFrame &&
30040 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d   pFrame->token!=
30050 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65  t; pFrame=pFrame
30060 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20  ->pParent);.    
30070 69 66 28 20 70 46 72 61 6d 65 20 29 20 62 72 65  if( pFrame ) bre
30080 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70  ak;.  }..  if( p
30090 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c  ->nFrame>=db->aL
300a0 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
300b0 54 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48 5d  T_TRIGGER_DEPTH]
300c0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
300d0 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73  ITE_ERROR;.    s
300e0 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
300f0 70 2c 20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76  p, "too many lev
30100 65 6c 73 20 6f 66 20 74 72 69 67 67 65 72 20 72  els of trigger r
30110 65 63 75 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20  ecursion");.    
30120 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
30130 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20  o_error;.  }..  
30140 2f 2a 20 52 65 67 69 73 74 65 72 20 70 52 74 20  /* Register pRt 
30150 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
30160 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75   the memory requ
30170 69 72 65 64 20 74 6f 20 73 61 76 65 20 74 68 65  ired to save the
30180 20 73 74 61 74 65 0a 20 20 2a 2a 20 6f 66 20 74   state.  ** of t
30190 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 67 72  he current progr
301a0 61 6d 2c 20 61 6e 64 20 74 68 65 20 6d 65 6d 6f  am, and the memo
301b0 72 79 20 72 65 71 75 69 72 65 64 20 61 74 20 72  ry required at r
301c0 75 6e 74 69 6d 65 20 74 6f 20 65 78 65 63 75 74  untime to execut
301d0 65 0a 20 20 2a 2a 20 74 68 65 20 74 72 69 67 67  e.  ** the trigg
301e0 65 72 20 70 72 6f 67 72 61 6d 2e 20 49 66 20 74  er program. If t
301f0 68 69 73 20 74 72 69 67 67 65 72 20 68 61 73 20  his trigger has 
30200 62 65 65 6e 20 66 69 72 65 64 20 62 65 66 6f 72  been fired befor
30210 65 2c 20 74 68 65 6e 20 70 52 74 20 0a 20 20 2a  e, then pRt .  *
30220 2a 20 69 73 20 61 6c 72 65 61 64 79 20 61 6c 6c  * is already all
30230 6f 63 61 74 65 64 2e 20 4f 74 68 65 72 77 69 73  ocated. Otherwis
30240 65 2c 20 69 74 20 6d 75 73 74 20 62 65 20 69 6e  e, it must be in
30250 69 74 69 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20  itialized.  */. 
30260 20 69 66 28 20 28 70 52 74 2d 3e 66 6c 61 67 73   if( (pRt->flags
30270 26 4d 45 4d 5f 46 72 61 6d 65 29 3d 3d 30 20 29  &MEM_Frame)==0 )
30280 7b 0a 20 20 20 20 2f 2a 20 53 75 62 50 72 6f 67  {.    /* SubProg
30290 72 61 6d 2e 6e 4d 65 6d 20 69 73 20 73 65 74 20  ram.nMem is set 
302a0 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  to the number of
302b0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73   memory cells us
302c0 65 64 20 62 79 20 74 68 65 20 0a 20 20 20 20 2a  ed by the .    *
302d0 2a 20 70 72 6f 67 72 61 6d 20 73 74 6f 72 65 64  * program stored
302e0 20 69 6e 20 53 75 62 50 72 6f 67 72 61 6d 2e 61   in SubProgram.a
302f0 4f 70 2e 20 41 73 20 77 65 6c 6c 20 61 73 20 74  Op. As well as t
30300 68 65 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79  hese, one memory
30310 0a 20 20 20 20 2a 2a 20 63 65 6c 6c 20 69 73 20  .    ** cell is 
30320 72 65 71 75 69 72 65 64 20 66 6f 72 20 65 61 63  required for eac
30330 68 20 63 75 72 73 6f 72 20 75 73 65 64 20 62 79  h cursor used by
30340 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 53 65   the program. Se
30350 74 20 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a 20 76  t local.    ** v
30360 61 72 69 61 62 6c 65 20 6e 4d 65 6d 20 28 61 6e  ariable nMem (an
30370 64 20 6c 61 74 65 72 2c 20 56 64 62 65 46 72 61  d later, VdbeFra
30380 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d 29 20 74 6f  me.nChildMem) to
30390 20 74 68 69 73 20 76 61 6c 75 65 2e 0a 20 20 20   this value..   
303a0 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d 20 70   */.    nMem = p
303b0 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20  Program->nMem + 
303c0 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a  pProgram->nCsr;.
303d0 20 20 20 20 61 73 73 65 72 74 28 20 6e 4d 65 6d      assert( nMem
303e0 3e 30 20 29 3b 0a 20 20 20 20 69 66 28 20 70 50  >0 );.    if( pP
303f0 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 30 20  rogram->nCsr==0 
30400 29 20 6e 4d 65 6d 2b 2b 3b 0a 20 20 20 20 6e 42  ) nMem++;.    nB
30410 79 74 65 20 3d 20 52 4f 55 4e 44 38 28 73 69 7a  yte = ROUND8(siz
30420 65 6f 66 28 56 64 62 65 46 72 61 6d 65 29 29 0a  eof(VdbeFrame)).
30430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20                + 
30440 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d 65  nMem * sizeof(Me
30450 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  m).             
30460 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73   + pProgram->nCs
30470 72 20 2a 20 73 69 7a 65 6f 66 28 56 64 62 65 43  r * sizeof(VdbeC
30480 75 72 73 6f 72 20 2a 29 3b 0a 20 20 20 20 70 46  ursor *);.    pF
30490 72 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 44 62  rame = sqlite3Db
304a0 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c 20 6e  MallocZero(db, n
304b0 42 79 74 65 29 3b 0a 20 20 20 20 69 66 28 20 21  Byte);.    if( !
304c0 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20  pFrame ){.      
304d0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
304e0 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64   }.    sqlite3Vd
304f0 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 52 74  beMemRelease(pRt
30500 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66 6c 61 67  );.    pRt->flag
30510 73 20 3d 20 4d 45 4d 5f 46 72 61 6d 65 3b 0a 20  s = MEM_Frame;. 
30520 20 20 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65     pRt->u.pFrame
30530 20 3d 20 70 46 72 61 6d 65 3b 0a 0a 20 20 20 20   = pFrame;..    
30540 70 46 72 61 6d 65 2d 3e 76 20 3d 20 70 3b 0a 20  pFrame->v = p;. 
30550 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c     pFrame->nChil
30560 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20 20 20  dMem = nMem;.   
30570 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43   pFrame->nChildC
30580 73 72 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  sr = pProgram->n
30590 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Csr;.    pFrame-
305a0 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  >pc = (int)(pOp 
305b0 2d 20 61 4f 70 29 3b 0a 20 20 20 20 70 46 72 61  - aOp);.    pFra
305c0 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d  me->aMem = p->aM
305d0 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  em;.    pFrame->
305e0 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a  nMem = p->nMem;.
305f0 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 70 43 73      pFrame->apCs
30600 72 20 3d 20 70 2d 3e 61 70 43 73 72 3b 0a 20 20  r = p->apCsr;.  
30610 20 20 70 46 72 61 6d 65 2d 3e 6e 43 75 72 73 6f    pFrame->nCurso
30620 72 20 3d 20 70 2d 3e 6e 43 75 72 73 6f 72 3b 0a  r = p->nCursor;.
30630 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f 70 20      pFrame->aOp 
30640 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 70 46  = p->aOp;.    pF
30650 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20 70 2d 3e 6e  rame->nOp = p->n
30660 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  Op;.    pFrame->
30670 74 6f 6b 65 6e 20 3d 20 70 50 72 6f 67 72 61 6d  token = pProgram
30680 2d 3e 74 6f 6b 65 6e 3b 0a 23 69 66 64 65 66 20  ->token;.#ifdef 
30690 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
306a0 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20  MT_SCANSTATUS.  
306b0 20 20 70 46 72 61 6d 65 2d 3e 61 6e 45 78 65 63    pFrame->anExec
306c0 20 3d 20 70 2d 3e 61 6e 45 78 65 63 3b 0a 23 65   = p->anExec;.#e
306d0 6e 64 69 66 0a 0a 20 20 20 20 70 45 6e 64 20 3d  ndif..    pEnd =
306e0 20 26 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70   &VdbeFrameMem(p
306f0 46 72 61 6d 65 29 5b 70 46 72 61 6d 65 2d 3e 6e  Frame)[pFrame->n
30700 43 68 69 6c 64 4d 65 6d 5d 3b 0a 20 20 20 20 66  ChildMem];.    f
30710 6f 72 28 70 4d 65 6d 3d 56 64 62 65 46 72 61 6d  or(pMem=VdbeFram
30720 65 4d 65 6d 28 70 46 72 61 6d 65 29 3b 20 70 4d  eMem(pFrame); pM
30730 65 6d 21 3d 70 45 6e 64 3b 20 70 4d 65 6d 2b 2b  em!=pEnd; pMem++
30740 29 7b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 66  ){.      pMem->f
30750 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66  lags = MEM_Undef
30760 69 6e 65 64 3b 0a 20 20 20 20 20 20 70 4d 65 6d  ined;.      pMem
30770 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 7d  ->db = db;.    }
30780 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 46  .  }else{.    pF
30790 72 61 6d 65 20 3d 20 70 52 74 2d 3e 75 2e 70 46  rame = pRt->u.pF
307a0 72 61 6d 65 3b 0a 20 20 20 20 61 73 73 65 72 74  rame;.    assert
307b0 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d  ( pProgram->nMem
307c0 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d  +pProgram->nCsr=
307d0 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d  =pFrame->nChildM
307e0 65 6d 20 0a 20 20 20 20 20 20 20 20 7c 7c 20 28  em .        || (
307f0 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d  pProgram->nCsr==
30800 30 20 26 26 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  0 && pProgram->n
30810 4d 65 6d 2b 31 3d 3d 70 46 72 61 6d 65 2d 3e 6e  Mem+1==pFrame->n
30820 43 68 69 6c 64 4d 65 6d 29 20 29 3b 0a 20 20 20  ChildMem) );.   
30830 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61   assert( pProgra
30840 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d  m->nCsr==pFrame-
30850 3e 6e 43 68 69 6c 64 43 73 72 20 29 3b 0a 20 20  >nChildCsr );.  
30860 20 20 61 73 73 65 72 74 28 20 28 69 6e 74 29 28    assert( (int)(
30870 70 4f 70 20 2d 20 61 4f 70 29 3d 3d 70 46 72 61  pOp - aOp)==pFra
30880 6d 65 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20  me->pc );.  }.. 
30890 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20   p->nFrame++;.  
308a0 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20  pFrame->pParent 
308b0 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70  = p->pFrame;.  p
308c0 46 72 61 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64  Frame->lastRowid
308d0 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20   = lastRowid;.  
308e0 70 46 72 61 6d 65 2d 3e 6e 43 68 61 6e 67 65 20  pFrame->nChange 
308f0 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20  = p->nChange;.  
30900 70 46 72 61 6d 65 2d 3e 6e 44 62 43 68 61 6e 67  pFrame->nDbChang
30910 65 20 3d 20 70 2d 3e 64 62 2d 3e 6e 43 68 61 6e  e = p->db->nChan
30920 67 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 46  ge;.  assert( pF
30930 72 61 6d 65 2d 3e 70 41 75 78 44 61 74 61 3d 3d  rame->pAuxData==
30940 30 20 29 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70  0 );.  pFrame->p
30950 41 75 78 44 61 74 61 20 3d 20 70 2d 3e 70 41 75  AuxData = p->pAu
30960 78 44 61 74 61 3b 0a 20 20 70 2d 3e 70 41 75 78  xData;.  p->pAux
30970 44 61 74 61 20 3d 20 30 3b 0a 20 20 70 2d 3e 6e  Data = 0;.  p->n
30980 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 70 2d  Change = 0;.  p-
30990 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65  >pFrame = pFrame
309a0 3b 0a 20 20 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d  ;.  p->aMem = aM
309b0 65 6d 20 3d 20 56 64 62 65 46 72 61 6d 65 4d 65  em = VdbeFrameMe
309c0 6d 28 70 46 72 61 6d 65 29 3b 0a 20 20 70 2d 3e  m(pFrame);.  p->
309d0 6e 4d 65 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e  nMem = pFrame->n
309e0 43 68 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e  ChildMem;.  p->n
309f0 43 75 72 73 6f 72 20 3d 20 28 75 31 36 29 70 46  Cursor = (u16)pF
30a00 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b  rame->nChildCsr;
30a10 0a 20 20 70 2d 3e 61 70 43 73 72 20 3d 20 28 56  .  p->apCsr = (V
30a20 64 62 65 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d  dbeCursor **)&aM
30a30 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 3b 0a 20 20 70  em[p->nMem];.  p
30a40 2d 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50  ->aOp = aOp = pP
30a50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70  rogram->aOp;.  p
30a60 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d  ->nOp = pProgram
30a70 2d 3e 6e 4f 70 3b 0a 23 69 66 64 65 66 20 53 51  ->nOp;.#ifdef SQ
30a80 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54  LITE_ENABLE_STMT
30a90 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20 70 2d  _SCANSTATUS.  p-
30aa0 3e 61 6e 45 78 65 63 20 3d 20 30 3b 0a 23 65 6e  >anExec = 0;.#en
30ab0 64 69 66 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70  dif.  pOp = &aOp
30ac0 5b 2d 31 5d 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a  [-1];..  break;.
30ad0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61  }../* Opcode: Pa
30ae0 72 61 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ram P1 P2 * * *.
30af0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
30b00 65 20 69 73 20 6f 6e 6c 79 20 65 76 65 72 20 70  e is only ever p
30b10 72 65 73 65 6e 74 20 69 6e 20 73 75 62 2d 70 72  resent in sub-pr
30b20 6f 67 72 61 6d 73 20 63 61 6c 6c 65 64 20 76 69  ograms called vi
30b30 61 20 74 68 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f  a the .** OP_Pro
30b40 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e  gram instruction
30b50 2e 20 43 6f 70 79 20 61 20 76 61 6c 75 65 20 63  . Copy a value c
30b60 75 72 72 65 6e 74 6c 79 20 73 74 6f 72 65 64 20  urrently stored 
30b70 69 6e 20 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20  in a memory .** 
30b80 63 65 6c 6c 20 6f 66 20 74 68 65 20 63 61 6c 6c  cell of the call
30b90 69 6e 67 20 28 70 61 72 65 6e 74 29 20 66 72 61  ing (parent) fra
30ba0 6d 65 20 74 6f 20 63 65 6c 6c 20 50 32 20 69 6e  me to cell P2 in
30bb0 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61   the current fra
30bc0 6d 65 73 20 0a 2a 2a 20 61 64 64 72 65 73 73 20  mes .** address 
30bd0 73 70 61 63 65 2e 20 54 68 69 73 20 69 73 20 75  space. This is u
30be0 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70  sed by trigger p
30bf0 72 6f 67 72 61 6d 73 20 74 6f 20 61 63 63 65 73  rograms to acces
30c00 73 20 74 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20  s the new.* .** 
30c10 61 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c 75 65 73  and old.* values
30c20 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 64 64 72  ..**.** The addr
30c30 65 73 73 20 6f 66 20 74 68 65 20 63 65 6c 6c 20  ess of the cell 
30c40 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 66 72  in the parent fr
30c50 61 6d 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ame is determine
30c60 64 20 62 79 20 61 64 64 69 6e 67 0a 2a 2a 20 74  d by adding.** t
30c70 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
30c80 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  P1 argument to t
30c90 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
30ca0 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  P1 argument to t
30cb0 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f 50  he.** calling OP
30cc0 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63  _Program instruc
30cd0 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
30ce0 5f 50 61 72 61 6d 3a 20 7b 20 20 20 20 20 20 20  _Param: {       
30cf0 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
30d00 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
30d10 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a  me;.  Mem *pIn;.
30d20 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
30d30 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
30d40 0a 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70  .  pFrame = p->p
30d50 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20 3d 20 26  Frame;.  pIn = &
30d60 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70  pFrame->aMem[pOp
30d70 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65 2d 3e 61  ->p1 + pFrame->a
30d80 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63 5d 2e 70  Op[pFrame->pc].p
30d90 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69 74 65 33  1];   .  sqlite3
30da0 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
30db0 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c 20 4d 45  py(pOut, pIn, ME
30dc0 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62 72 65 61  M_Ephem);.  brea
30dd0 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  k;.}..#endif /* 
30de0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
30df0 4d 49 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a  MIT_TRIGGER */..
30e00 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
30e10 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a  MIT_FOREIGN_KEY.
30e20 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 43 6f 75  /* Opcode: FkCou
30e30 6e 74 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a  nter P1 P2 * * *
30e40 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 66 6b  .** Synopsis: fk
30e50 63 74 72 5b 50 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a  ctr[P1]+=P2.**.*
30e60 2a 20 49 6e 63 72 65 6d 65 6e 74 20 61 20 22 63  * Increment a "c
30e70 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65  onstraint counte
30e80 72 22 20 62 79 20 50 32 20 28 50 32 20 6d 61 79  r" by P2 (P2 may
30e90 20 62 65 20 6e 65 67 61 74 69 76 65 20 6f 72 20   be negative or 
30ea0 70 6f 73 69 74 69 76 65 29 2e 0a 2a 2a 20 49 66  positive)..** If
30eb0 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c   P1 is non-zero,
30ec0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
30ed0 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72  nstraint counter
30ee0 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
30ef0 0a 2a 2a 20 28 64 65 66 65 72 72 65 64 20 66 6f  .** (deferred fo
30f00 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
30f10 61 69 6e 74 73 29 2e 20 4f 74 68 65 72 77 69 73  aints). Otherwis
30f20 65 2c 20 69 66 20 50 31 20 69 73 20 7a 65 72 6f  e, if P1 is zero
30f30 2c 20 74 68 65 20 0a 2a 2a 20 73 74 61 74 65 6d  , the .** statem
30f40 65 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69  ent counter is i
30f50 6e 63 72 65 6d 65 6e 74 65 64 20 28 69 6d 6d 65  ncremented (imme
30f60 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65  diate foreign ke
30f70 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a  y constraints)..
30f80 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 43 6f 75  */.case OP_FkCou
30f90 6e 74 65 72 3a 20 7b 0a 20 20 69 66 28 20 64 62  nter: {.  if( db
30fa0 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
30fb0 5f 44 65 66 65 72 46 4b 73 20 29 7b 0a 20 20 20  _DeferFKs ){.   
30fc0 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
30fd0 6d 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32  mCons += pOp->p2
30fe0 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f  ;.  }else if( pO
30ff0 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 64 62 2d  p->p1 ){.    db-
31000 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 2b  >nDeferredCons +
31010 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c  = pOp->p2;.  }el
31020 73 65 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b 43 6f  se{.    p->nFkCo
31030 6e 73 74 72 61 69 6e 74 20 2b 3d 20 70 4f 70 2d  nstraint += pOp-
31040 3e 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  >p2;.  }.  break
31050 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
31060 46 6b 49 66 5a 65 72 6f 20 50 31 20 50 32 20 2a  FkIfZero P1 P2 *
31070 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
31080 3a 20 69 66 20 66 6b 63 74 72 5b 50 31 5d 3d 3d  : if fkctr[P1]==
31090 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  0 goto P2.**.** 
310a0 54 68 69 73 20 6f 70 63 6f 64 65 20 74 65 73 74  This opcode test
310b0 73 20 69 66 20 61 20 66 6f 72 65 69 67 6e 20 6b  s if a foreign k
310c0 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f  ey constraint-co
310d0 75 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e 74  unter is current
310e0 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20 73  ly zero..** If s
310f0 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  o, jump to instr
31100 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72  uction P2. Other
31110 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75  wise, fall throu
31120 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 0a  gh to the next .
31130 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ** instruction..
31140 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e  **.** If P1 is n
31150 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  on-zero, then th
31160 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
31170 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  if the database 
31180 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74  constraint-count
31190 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f 20 28 74  er.** is zero (t
311a0 68 65 20 6f 6e 65 20 74 68 61 74 20 63 6f 75 6e  he one that coun
311b0 74 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73  ts deferred cons
311c0 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
311d0 73 29 2e 20 49 66 20 50 31 20 69 73 0a 2a 2a 20  s). If P1 is.** 
311e0 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d 70 20 69  zero, the jump i
311f0 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 73  s taken if the s
31200 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73 74 72 61  tatement constra
31210 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 7a  int-counter is z
31220 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69 61 74  ero.** (immediat
31230 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  e foreign key co
31240 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
31250 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ons)..*/.case OP
31260 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20  _FkIfZero: {    
31270 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
31280 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b    if( pOp->p1 ){
31290 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
312a0 61 6b 65 6e 28 64 62 2d 3e 6e 44 65 66 65 72 72  aken(db->nDeferr
312b0 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d  edCons==0 && db-
312c0 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
312d0 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66  s==0, 2);.    if
312e0 28 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  ( db->nDeferredC
312f0 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44  ons==0 && db->nD
31300 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d  eferredImmCons==
31310 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  0 ) goto jump_to
31320 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  _p2;.  }else{.  
31330 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
31340 6e 28 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69  n(p->nFkConstrai
31350 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65  nt==0 && db->nDe
31360 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30  ferredImmCons==0
31370 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20 70 2d  , 2);.    if( p-
31380 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d  >nFkConstraint==
31390 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72  0 && db->nDeferr
313a0 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 67  edImmCons==0 ) g
313b0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
313c0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
313d0 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66  endif /* #ifndef
313e0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
313f0 45 49 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66  EIGN_KEY */..#if
31400 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
31410 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f  _AUTOINCREMENT./
31420 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78  * Opcode: MemMax
31430 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
31440 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d  Synopsis: r[P1]=
31450 6d 61 78 28 72 5b 50 31 5d 2c 72 5b 50 32 5d 29  max(r[P1],r[P2])
31460 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 72  .**.** P1 is a r
31470 65 67 69 73 74 65 72 20 69 6e 20 74 68 65 20 72  egister in the r
31480 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69  oot frame of thi
31490 73 20 56 4d 20 28 74 68 65 20 72 6f 6f 74 20 66  s VM (the root f
314a0 72 61 6d 65 20 69 73 0a 2a 2a 20 64 69 66 66 65  rame is.** diffe
314b0 72 65 6e 74 20 66 72 6f 6d 20 74 68 65 20 63 75  rent from the cu
314c0 72 72 65 6e 74 20 66 72 61 6d 65 20 69 66 20 74  rrent frame if t
314d0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
314e0 69 73 20 62 65 69 6e 67 20 65 78 65 63 75 74 65  is being execute
314f0 64 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 73 75  d.** within a su
31500 62 2d 70 72 6f 67 72 61 6d 29 2e 20 53 65 74 20  b-program). Set 
31510 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67  the value of reg
31520 69 73 74 65 72 20 50 31 20 74 6f 20 74 68 65 20  ister P1 to the 
31530 6d 61 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69  maximum of .** i
31540 74 73 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65  ts current value
31550 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 69   and the value i
31560 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
31570 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
31580 63 74 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20  ction throws an 
31590 65 72 72 6f 72 20 69 66 20 74 68 65 20 6d 65 6d  error if the mem
315a0 6f 72 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20  ory cell is not 
315b0 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20  initially.** an 
315c0 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65  integer..*/.case
315d0 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20   OP_MemMax: {   
315e0 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20       /* in2 */. 
315f0 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
31600 6d 65 3b 0a 20 20 69 66 28 20 70 2d 3e 70 46 72  me;.  if( p->pFr
31610 61 6d 65 20 29 7b 0a 20 20 20 20 66 6f 72 28 70  ame ){.    for(p
31620 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b  Frame=p->pFrame;
31630 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74   pFrame->pParent
31640 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d  ; pFrame=pFrame-
31650 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 70  >pParent);.    p
31660 49 6e 31 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61  In1 = &pFrame->a
31670 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
31680 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31 20  }else{.    pIn1 
31690 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
316a0 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
316b0 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29  memIsValid(pIn1)
316c0 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
316d0 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
316e0 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26  In1);.  pIn2 = &
316f0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
31700 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
31710 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b  ntegerify(pIn2);
31720 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
31730 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20 20  <pIn2->u.i){.   
31740 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 49 6e   pIn1->u.i = pIn
31750 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 62 72  2->u.i;.  }.  br
31760 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
31770 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
31780 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f  OINCREMENT */../
31790 2a 20 4f 70 63 6f 64 65 3a 20 49 66 50 6f 73 20  * Opcode: IfPos 
317a0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
317b0 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
317c0 31 5d 3e 30 20 74 68 65 6e 20 72 5b 50 31 5d 2d  1]>0 then r[P1]-
317d0 3d 50 33 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  =P3, goto P2.**.
317e0 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31 20 6d  ** Register P1 m
317f0 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69  ust contain an i
31800 6e 74 65 67 65 72 2e 0a 2a 2a 20 49 66 20 74 68  nteger..** If th
31810 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  e value of regis
31820 74 65 72 20 50 31 20 69 73 20 31 20 6f 72 20 67  ter P1 is 1 or g
31830 72 65 61 74 65 72 2c 20 73 75 62 74 72 61 63 74  reater, subtract
31840 20 50 33 20 66 72 6f 6d 20 74 68 65 0a 2a 2a 20   P3 from the.** 
31850 76 61 6c 75 65 20 69 6e 20 50 31 20 61 6e 64 20  value in P1 and 
31860 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
31870 2a 20 49 66 20 74 68 65 20 69 6e 69 74 69 61 6c  * If the initial
31880 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
31890 65 72 20 50 31 20 69 73 20 6c 65 73 73 20 74 68  er P1 is less th
318a0 61 6e 20 31 2c 20 74 68 65 6e 20 74 68 65 0a 2a  an 1, then the.*
318b0 2a 20 76 61 6c 75 65 20 69 73 20 75 6e 63 68 61  * value is uncha
318c0 6e 67 65 64 20 61 6e 64 20 63 6f 6e 74 72 6f 6c  nged and control
318d0 20 70 61 73 73 65 73 20 74 68 72 6f 75 67 68 20   passes through 
318e0 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
318f0 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
31900 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20   OP_IfPos: {    
31910 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
31920 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
31930 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
31940 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
31950 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  gs&MEM_Int );.  
31960 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
31970 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 2c 20 32 29   pIn1->u.i>0, 2)
31980 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e  ;.  if( pIn1->u.
31990 69 3e 30 20 29 7b 0a 20 20 20 20 70 49 6e 31 2d  i>0 ){.    pIn1-
319a0 3e 75 2e 69 20 2d 3d 20 70 4f 70 2d 3e 70 33 3b  >u.i -= pOp->p3;
319b0 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  .    goto jump_t
319c0 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  o_p2;.  }.  brea
319d0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
319e0 20 4f 66 66 73 65 74 4c 69 6d 69 74 20 50 31 20   OffsetLimit P1 
319f0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
31a00 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e  opsis: if r[P1]>
31a10 30 20 74 68 65 6e 20 72 5b 50 32 5d 3d 72 5b 50  0 then r[P2]=r[P
31a20 31 5d 2b 6d 61 78 28 30 2c 72 5b 50 33 5d 29 20  1]+max(0,r[P3]) 
31a30 65 6c 73 65 20 72 5b 50 32 5d 3d 28 2d 31 29 0a  else r[P2]=(-1).
31a40 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
31a50 65 20 70 65 72 66 6f 72 6d 73 20 61 20 63 6f 6d  e performs a com
31a60 6d 6f 6e 6c 79 20 75 73 65 64 20 63 6f 6d 70 75  monly used compu
31a70 74 61 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65  tation associate
31a80 64 20 77 69 74 68 0a 2a 2a 20 4c 49 4d 49 54 20  d with.** LIMIT 
31a90 61 6e 64 20 4f 46 46 53 45 54 20 70 72 6f 63 65  and OFFSET proce
31aa0 73 73 2e 20 20 72 5b 50 31 5d 20 68 6f 6c 64 73  ss.  r[P1] holds
31ab0 20 74 68 65 20 6c 69 6d 69 74 20 63 6f 75 6e 74   the limit count
31ac0 65 72 2e 20 20 72 5b 50 33 5d 0a 2a 2a 20 68 6f  er.  r[P3].** ho
31ad0 6c 64 73 20 74 68 65 20 6f 66 66 73 65 74 20 63  lds the offset c
31ae0 6f 75 6e 74 65 72 2e 20 20 54 68 65 20 6f 70 63  ounter.  The opc
31af0 6f 64 65 20 63 6f 6d 70 75 74 65 73 20 74 68 65  ode computes the
31b00 20 63 6f 6d 62 69 6e 65 64 20 76 61 6c 75 65 0a   combined value.
31b10 2a 2a 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20  ** of the LIMIT 
31b20 61 6e 64 20 4f 46 46 53 45 54 20 61 6e 64 20 73  and OFFSET and s
31b30 74 6f 72 65 73 20 74 68 61 74 20 76 61 6c 75 65  tores that value
31b40 20 69 6e 20 72 5b 50 32 5d 2e 20 20 54 68 65 20   in r[P2].  The 
31b50 72 5b 50 32 5d 0a 2a 2a 20 76 61 6c 75 65 20 63  r[P2].** value c
31b60 6f 6d 70 75 74 65 64 20 69 73 20 74 68 65 20 74  omputed is the t
31b70 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 72  otal number of r
31b80 6f 77 73 20 74 68 61 74 20 77 69 6c 6c 20 6e 65  ows that will ne
31b90 65 64 20 74 6f 20 62 65 0a 2a 2a 20 76 69 73 69  ed to be.** visi
31ba0 74 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ted in order to 
31bb0 63 6f 6d 70 6c 65 74 65 20 74 68 65 20 71 75 65  complete the que
31bc0 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 72 5b 50  ry..**.** If r[P
31bd0 33 5d 20 69 73 20 7a 65 72 6f 20 6f 72 20 6e 65  3] is zero or ne
31be0 67 61 74 69 76 65 2c 20 74 68 61 74 20 6d 65 61  gative, that mea
31bf0 6e 73 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4f  ns there is no O
31c00 46 46 53 45 54 0a 2a 2a 20 61 6e 64 20 72 5b 50  FFSET.** and r[P
31c10 32 5d 20 69 73 20 73 65 74 20 74 6f 20 62 65 20  2] is set to be 
31c20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
31c30 20 4c 49 4d 49 54 2c 20 72 5b 50 31 5d 2e 0a 2a   LIMIT, r[P1]..*
31c40 2a 0a 2a 2a 20 69 66 20 72 5b 50 31 5d 20 69 73  *.** if r[P1] is
31c50 20 7a 65 72 6f 20 6f 72 20 6e 65 67 61 74 69 76   zero or negativ
31c60 65 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68  e, that means th
31c70 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 0a  ere is no LIMIT.
31c80 2a 2a 20 61 6e 64 20 72 5b 50 32 5d 20 69 73 20  ** and r[P2] is 
31c90 73 65 74 20 74 6f 20 2d 31 2e 20 0a 2a 2a 0a 2a  set to -1. .**.*
31ca0 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 72 5b 50  * Otherwise, r[P
31cb0 32 5d 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  2] is set to the
31cc0 20 73 75 6d 20 6f 66 20 72 5b 50 31 5d 20 61 6e   sum of r[P1] an
31cd0 64 20 72 5b 50 33 5d 2e 0a 2a 2f 0a 63 61 73 65  d r[P3]..*/.case
31ce0 20 4f 50 5f 4f 66 66 73 65 74 4c 69 6d 69 74 3a   OP_OffsetLimit:
31cf0 20 7b 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6f 75   {    /* in1, ou
31d00 74 32 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 36 34  t2, in3 */.  i64
31d10 20 78 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   x;.  pIn1 = &aM
31d20 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
31d30 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
31d40 3e 70 33 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  >p3];.  pOut = o
31d50 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
31d60 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28   pOp);.  assert(
31d70 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
31d80 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65  EM_Int );.  asse
31d90 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  rt( pIn3->flags 
31da0 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 78  & MEM_Int );.  x
31db0 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20   = pIn1->u.i;.  
31dc0 69 66 28 20 78 3c 3d 30 20 7c 7c 20 73 71 6c 69  if( x<=0 || sqli
31dd0 74 65 33 41 64 64 49 6e 74 36 34 28 26 78 2c 20  te3AddInt64(&x, 
31de0 70 49 6e 33 2d 3e 75 2e 69 3e 30 3f 70 49 6e 33  pIn3->u.i>0?pIn3
31df0 2d 3e 75 2e 69 3a 30 29 20 29 7b 0a 20 20 20 20  ->u.i:0) ){.    
31e00 2f 2a 20 49 66 20 74 68 65 20 4c 49 4d 49 54 20  /* If the LIMIT 
31e10 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20  is less than or 
31e20 65 71 75 61 6c 20 74 6f 20 7a 65 72 6f 2c 20 6c  equal to zero, l
31e30 6f 6f 70 20 66 6f 72 65 76 65 72 2e 20 20 54 68  oop forever.  Th
31e40 69 73 0a 20 20 20 20 2a 2a 20 69 73 20 64 6f 63  is.    ** is doc
31e50 75 6d 65 6e 74 65 64 2e 20 20 42 75 74 20 61 6c  umented.  But al
31e60 73 6f 2c 20 69 66 20 74 68 65 20 4c 49 4d 49 54  so, if the LIMIT
31e70 2b 4f 46 46 53 45 54 20 65 78 63 65 65 64 73 20  +OFFSET exceeds 
31e80 32 5e 36 33 20 74 68 65 6e 0a 20 20 20 20 2a 2a  2^63 then.    **
31e90 20 61 6c 73 6f 20 6c 6f 6f 70 20 66 6f 72 65 76   also loop forev
31ea0 65 72 2e 20 20 54 68 69 73 20 69 73 20 75 6e 64  er.  This is und
31eb0 6f 63 75 6d 65 6e 74 65 64 2e 20 20 49 6e 20 66  ocumented.  In f
31ec0 61 63 74 2c 20 6f 6e 65 20 63 6f 75 6c 64 20 61  act, one could a
31ed0 72 67 75 65 0a 20 20 20 20 2a 2a 20 74 68 61 74  rgue.    ** that
31ee0 20 74 68 65 20 6c 6f 6f 70 20 73 68 6f 75 6c 64   the loop should
31ef0 20 74 65 72 6d 69 6e 61 74 65 2e 20 20 42 75 74   terminate.  But
31f00 20 61 73 73 75 6d 69 6e 67 20 31 20 62 69 6c 6c   assuming 1 bill
31f10 69 6f 6e 20 69 74 65 72 61 74 69 6f 6e 73 0a 20  ion iterations. 
31f20 20 20 20 2a 2a 20 70 65 72 20 73 65 63 6f 6e 64     ** per second
31f30 20 28 66 61 72 20 65 78 63 65 65 64 69 6e 67 20   (far exceeding 
31f40 74 68 65 20 63 61 70 61 62 69 6c 69 74 69 65 73  the capabilities
31f50 20 6f 66 20 61 6e 79 20 63 75 72 72 65 6e 74 20   of any current 
31f60 68 61 72 64 77 61 72 65 29 0a 20 20 20 20 2a 2a  hardware).    **
31f70 20 69 74 20 77 6f 75 6c 64 20 74 61 6b 65 20 6e   it would take n
31f80 65 61 72 6c 79 20 33 30 30 20 79 65 61 72 73 20  early 300 years 
31f90 74 6f 20 61 63 74 75 61 6c 6c 79 20 72 65 61 63  to actually reac
31fa0 68 20 74 68 65 20 6c 69 6d 69 74 2e 20 20 53 6f  h the limit.  So
31fb0 0a 20 20 20 20 2a 2a 20 6c 6f 6f 70 69 6e 67 20  .    ** looping 
31fc0 66 6f 72 65 76 65 72 20 69 73 20 61 20 72 65 61  forever is a rea
31fd0 73 6f 6e 61 62 6c 65 20 61 70 70 72 6f 78 69 6d  sonable approxim
31fe0 61 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 70 4f  ation. */.    pO
31ff0 75 74 2d 3e 75 2e 69 20 3d 20 2d 31 3b 0a 20 20  ut->u.i = -1;.  
32000 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d  }else{.    pOut-
32010 3e 75 2e 69 20 3d 20 78 3b 0a 20 20 7d 0a 20 20  >u.i = x;.  }.  
32020 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
32030 6f 64 65 3a 20 49 66 4e 6f 74 5a 65 72 6f 20 50  ode: IfNotZero P
32040 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
32050 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
32060 5d 21 3d 30 20 74 68 65 6e 20 72 5b 50 31 5d 2d  ]!=0 then r[P1]-
32070 3d 50 33 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  =P3, goto P2.**.
32080 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31 20 6d  ** Register P1 m
32090 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69  ust contain an i
320a0 6e 74 65 67 65 72 2e 20 20 49 66 20 74 68 65 20  nteger.  If the 
320b0 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
320c0 74 65 72 20 50 31 20 69 73 0a 2a 2a 20 69 6e 69  ter P1 is.** ini
320d0 74 69 61 6c 6c 79 20 6e 6f 6e 7a 65 72 6f 2c 20  tially nonzero, 
320e0 74 68 65 6e 20 73 75 62 74 72 61 63 74 20 50 33  then subtract P3
320f0 20 66 72 6f 6d 20 74 68 65 20 76 61 6c 75 65 20   from the value 
32100 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
32110 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 50 32  nd.** jump to P2
32120 2e 20 20 49 66 20 72 65 67 69 73 74 65 72 20 50  .  If register P
32130 31 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 7a  1 is initially z
32140 65 72 6f 2c 20 6c 65 61 76 65 20 69 74 20 75 6e  ero, leave it un
32150 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 66  changed.** and f
32160 61 6c 6c 20 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a  all through..*/.
32170 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 5a 65 72  case OP_IfNotZer
32180 6f 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  o: {        /* j
32190 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
321a0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
321b0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
321c0 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
321d0 6e 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  nt );.  VdbeBran
321e0 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e  chTaken(pIn1->u.
321f0 69 3c 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70  i<0, 2);.  if( p
32200 49 6e 31 2d 3e 75 2e 69 20 29 7b 0a 20 20 20 20  In1->u.i ){.    
32210 20 70 49 6e 31 2d 3e 75 2e 69 20 2d 3d 20 70 4f   pIn1->u.i -= pO
32220 70 2d 3e 70 33 3b 0a 20 20 20 20 20 67 6f 74 6f  p->p3;.     goto
32230 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
32240 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
32250 4f 70 63 6f 64 65 3a 20 44 65 63 72 4a 75 6d 70  Opcode: DecrJump
32260 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a  Zero P1 P2 * * *
32270 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
32280 20 28 2d 2d 72 5b 50 31 5d 29 3d 3d 30 20 67 6f   (--r[P1])==0 go
32290 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69  to P2.**.** Regi
322a0 73 74 65 72 20 50 31 20 6d 75 73 74 20 68 6f 6c  ster P1 must hol
322b0 64 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 44  d an integer.  D
322c0 65 63 72 65 6d 65 6e 74 20 74 68 65 20 76 61 6c  ecrement the val
322d0 75 65 20 69 6e 20 50 31 0a 2a 2a 20 61 6e 64 20  ue in P1.** and 
322e0 6a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  jump to P2 if th
322f0 65 20 6e 65 77 20 76 61 6c 75 65 20 69 73 20 65  e new value is e
32300 78 61 63 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2f 0a  xactly zero..*/.
32310 63 61 73 65 20 4f 50 5f 44 65 63 72 4a 75 6d 70  case OP_DecrJump
32320 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 2f 2a 20  Zero: {      /* 
32330 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  jump, in1 */.  p
32340 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
32350 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
32360 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
32370 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49 6e  Int );.  if( pIn
32380 31 2d 3e 75 2e 69 3e 53 4d 41 4c 4c 45 53 54 5f  1->u.i>SMALLEST_
32390 49 4e 54 36 34 20 29 20 70 49 6e 31 2d 3e 75 2e  INT64 ) pIn1->u.
323a0 69 2d 2d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  i--;.  VdbeBranc
323b0 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69  hTaken(pIn1->u.i
323c0 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70  ==0, 2);.  if( p
323d0 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 20 67 6f  In1->u.i==0 ) go
323e0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
323f0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f   break;.}.../* O
32400 70 63 6f 64 65 3a 20 41 67 67 53 74 65 70 30 20  pcode: AggStep0 
32410 2a 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  * P2 P3 P4 P5.**
32420 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d   Synopsis: accum
32430 3d 72 5b 50 33 5d 20 73 74 65 70 28 72 5b 50 32  =r[P3] step(r[P2
32440 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63  @P5]).**.** Exec
32450 75 74 65 20 74 68 65 20 73 74 65 70 20 66 75 6e  ute the step fun
32460 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67  ction for an agg
32470 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20  regate.  The.** 
32480 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20  function has P5 
32490 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34 20  arguments.   P4 
324a0 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
324b0 74 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73  the FuncDef.** s
324c0 74 72 75 63 74 75 72 65 20 74 68 61 74 20 73 70  tructure that sp
324d0 65 63 69 66 69 65 73 20 74 68 65 20 66 75 6e 63  ecifies the func
324e0 74 69 6f 6e 2e 20 20 52 65 67 69 73 74 65 72 20  tion.  Register 
324f0 50 33 20 69 73 20 74 68 65 0a 2a 2a 20 61 63 63  P3 is the.** acc
32500 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20  umulator..**.** 
32510 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73  The P5 arguments
32520 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20   are taken from 
32530 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20  register P2 and 
32540 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72  its.** successor
32550 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  s..*/./* Opcode:
32560 20 41 67 67 53 74 65 70 20 2a 20 50 32 20 50 33   AggStep * P2 P3
32570 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
32580 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20  is: accum=r[P3] 
32590 73 74 65 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a  step(r[P2@P5]).*
325a0 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65  *.** Execute the
325b0 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66   step function f
325c0 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e  or an aggregate.
325d0 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f    The.** functio
325e0 6e 20 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e  n has P5 argumen
325f0 74 73 2e 20 20 20 50 34 20 69 73 20 61 20 70 6f  ts.   P4 is a po
32600 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69  inter to an sqli
32610 74 65 33 5f 63 6f 6e 74 65 78 74 0a 2a 2a 20 6f  te3_context.** o
32620 62 6a 65 63 74 20 74 68 61 74 20 69 73 20 75 73  bject that is us
32630 65 64 20 74 6f 20 72 75 6e 20 74 68 65 20 66 75  ed to run the fu
32640 6e 63 74 69 6f 6e 2e 20 20 52 65 67 69 73 74 65  nction.  Registe
32650 72 20 50 33 20 69 73 0a 2a 2a 20 61 73 20 74 68  r P3 is.** as th
32660 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a  e accumulator..*
32670 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75  *.** The P5 argu
32680 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20  ments are taken 
32690 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32  from register P2
326a0 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63   and its.** succ
326b0 65 73 73 6f 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  essors..**.** Th
326c0 69 73 20 6f 70 63 6f 64 65 20 69 73 20 69 6e 69  is opcode is ini
326d0 74 69 61 6c 6c 79 20 63 6f 64 65 64 20 61 73 20  tially coded as 
326e0 4f 50 5f 41 67 67 53 74 65 70 30 2e 20 20 4f 6e  OP_AggStep0.  On
326f0 20 66 69 72 73 74 20 65 76 61 6c 75 61 74 69 6f   first evaluatio
32700 6e 2c 0a 2a 2a 20 74 68 65 20 46 75 6e 63 44 65  n,.** the FuncDe
32710 66 20 73 74 6f 72 65 64 20 69 6e 20 50 34 20 69  f stored in P4 i
32720 73 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  s converted into
32730 20 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74   an sqlite3_cont
32740 65 78 74 20 61 6e 64 0a 2a 2a 20 74 68 65 20 6f  ext and.** the o
32750 70 63 6f 64 65 20 69 73 20 63 68 61 6e 67 65 64  pcode is changed
32760 2e 20 20 49 6e 20 74 68 69 73 20 77 61 79 2c 20  .  In this way, 
32770 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  the initializati
32780 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 71 6c  on of the.** sql
32790 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 6e 6c  ite3_context onl
327a0 79 20 68 61 70 70 65 6e 73 20 6f 6e 63 65 2c 20  y happens once, 
327b0 69 6e 73 74 65 61 64 20 6f 66 20 6f 6e 20 65 61  instead of on ea
327c0 63 68 20 63 61 6c 6c 20 74 6f 20 74 68 65 0a 2a  ch call to the.*
327d0 2a 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 2e  * step function.
327e0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 53  .*/.case OP_AggS
327f0 74 65 70 30 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b  tep0: {.  int n;
32800 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
32810 78 74 20 2a 70 43 74 78 3b 0a 0a 20 20 61 73 73  xt *pCtx;..  ass
32820 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
32830 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 3b 0a  ==P4_FUNCDEF );.
32840 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20    n = pOp->p5;. 
32850 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
32860 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28  >0 && pOp->p3<=(
32870 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
32880 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73  Cursor) );.  ass
32890 65 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f  ert( n==0 || (pO
328a0 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p2>0 && pOp->
328b0 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  p2+n<=(p->nMem+1
328c0 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31   - p->nCursor)+1
328d0 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
328e0 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c  Op->p3<pOp->p2 |
328f0 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e  | pOp->p3>=pOp->
32900 70 32 2b 6e 20 29 3b 0a 20 20 70 43 74 78 20 3d  p2+n );.  pCtx =
32910 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
32920 52 61 77 4e 4e 28 64 62 2c 20 73 69 7a 65 6f 66  RawNN(db, sizeof
32930 28 2a 70 43 74 78 29 20 2b 20 28 6e 2d 31 29 2a  (*pCtx) + (n-1)*
32940 73 69 7a 65 6f 66 28 73 71 6c 69 74 65 33 5f 76  sizeof(sqlite3_v
32950 61 6c 75 65 2a 29 29 3b 0a 20 20 69 66 28 20 70  alue*));.  if( p
32960 43 74 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  Ctx==0 ) goto no
32970 5f 6d 65 6d 3b 0a 20 20 70 43 74 78 2d 3e 70 4d  _mem;.  pCtx->pM
32980 65 6d 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e  em = 0;.  pCtx->
32990 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e  pFunc = pOp->p4.
329a0 70 46 75 6e 63 3b 0a 20 20 70 43 74 78 2d 3e 69  pFunc;.  pCtx->i
329b0 4f 70 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d  Op = (int)(pOp -
329c0 20 61 4f 70 29 3b 0a 20 20 70 43 74 78 2d 3e 70   aOp);.  pCtx->p
329d0 56 64 62 65 20 3d 20 70 3b 0a 20 20 70 43 74 78  Vdbe = p;.  pCtx
329e0 2d 3e 61 72 67 63 20 3d 20 6e 3b 0a 20 20 70 4f  ->argc = n;.  pO
329f0 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 46  p->p4type = P4_F
32a00 55 4e 43 43 54 58 3b 0a 20 20 70 4f 70 2d 3e 70  UNCCTX;.  pOp->p
32a10 34 2e 70 43 74 78 20 3d 20 70 43 74 78 3b 0a 20  4.pCtx = pCtx;. 
32a20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f   pOp->opcode = O
32a30 50 5f 41 67 67 53 74 65 70 3b 0a 20 20 2f 2a 20  P_AggStep;.  /* 
32a40 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74  Fall through int
32a50 6f 20 4f 50 5f 41 67 67 53 74 65 70 20 2a 2f 0a  o OP_AggStep */.
32a60 7d 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65  }.case OP_AggSte
32a70 70 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  p: {.  int i;.  
32a80 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
32a90 2a 70 43 74 78 3b 0a 20 20 4d 65 6d 20 2a 70 4d  *pCtx;.  Mem *pM
32aa0 65 6d 3b 0a 20 20 4d 65 6d 20 74 3b 0a 0a 20 20  em;.  Mem t;..  
32ab0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
32ac0 79 70 65 3d 3d 50 34 5f 46 55 4e 43 43 54 58 20  ype==P4_FUNCCTX 
32ad0 29 3b 0a 20 20 70 43 74 78 20 3d 20 70 4f 70 2d  );.  pCtx = pOp-
32ae0 3e 70 34 2e 70 43 74 78 3b 0a 20 20 70 4d 65 6d  >p4.pCtx;.  pMem
32af0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
32b00 5d 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73  ];..  /* If this
32b10 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 73   function is ins
32b20 69 64 65 20 6f 66 20 61 20 74 72 69 67 67 65 72  ide of a trigger
32b30 2c 20 74 68 65 20 72 65 67 69 73 74 65 72 20 61  , the register a
32b40 72 72 61 79 20 69 6e 20 61 4d 65 6d 5b 5d 0a 20  rray in aMem[]. 
32b50 20 2a 2a 20 6d 69 67 68 74 20 63 68 61 6e 67 65   ** might change
32b60 20 66 72 6f 6d 20 6f 6e 65 20 65 76 61 6c 75 61   from one evalua
32b70 74 69 6f 6e 20 74 6f 20 74 68 65 20 6e 65 78 74  tion to the next
32b80 2e 20 20 54 68 65 20 6e 65 78 74 20 62 6c 6f 63  .  The next bloc
32b90 6b 20 6f 66 20 63 6f 64 65 0a 20 20 2a 2a 20 63  k of code.  ** c
32ba0 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20  hecks to see if 
32bb0 74 68 65 20 72 65 67 69 73 74 65 72 20 61 72 72  the register arr
32bc0 61 79 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20  ay has changed, 
32bd0 61 6e 64 20 69 66 20 73 6f 20 69 74 0a 20 20 2a  and if so it.  *
32be0 2a 20 72 65 69 6e 69 74 69 61 6c 69 7a 65 73 20  * reinitializes 
32bf0 74 68 65 20 72 65 6c 61 76 61 6e 74 20 70 61 72  the relavant par
32c00 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ts of the sqlite
32c10 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74  3_context object
32c20 20 2a 2f 0a 20 20 69 66 28 20 70 43 74 78 2d 3e   */.  if( pCtx->
32c30 70 4d 65 6d 20 21 3d 20 70 4d 65 6d 20 29 7b 0a  pMem != pMem ){.
32c40 20 20 20 20 70 43 74 78 2d 3e 70 4d 65 6d 20 3d      pCtx->pMem =
32c50 20 70 4d 65 6d 3b 0a 20 20 20 20 66 6f 72 28 69   pMem;.    for(i
32c60 3d 70 43 74 78 2d 3e 61 72 67 63 2d 31 3b 20 69  =pCtx->argc-1; i
32c70 3e 3d 30 3b 20 69 2d 2d 29 20 70 43 74 78 2d 3e  >=0; i--) pCtx->
32c80 61 72 67 76 5b 69 5d 20 3d 20 26 61 4d 65 6d 5b  argv[i] = &aMem[
32c90 70 4f 70 2d 3e 70 32 2b 69 5d 3b 0a 20 20 7d 0a  pOp->p2+i];.  }.
32ca0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
32cb0 45 42 55 47 0a 20 20 66 6f 72 28 69 3d 30 3b 20  EBUG.  for(i=0; 
32cc0 69 3c 70 43 74 78 2d 3e 61 72 67 63 3b 20 69 2b  i<pCtx->argc; i+
32cd0 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  +){.    assert( 
32ce0 6d 65 6d 49 73 56 61 6c 69 64 28 70 43 74 78 2d  memIsValid(pCtx-
32cf0 3e 61 72 67 76 5b 69 5d 29 20 29 3b 0a 20 20 20  >argv[i]) );.   
32d00 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
32d10 70 4f 70 2d 3e 70 32 2b 69 2c 20 70 43 74 78 2d  pOp->p2+i, pCtx-
32d20 3e 61 72 67 76 5b 69 5d 29 3b 0a 20 20 7d 0a 23  >argv[i]);.  }.#
32d30 65 6e 64 69 66 0a 0a 20 20 70 4d 65 6d 2d 3e 6e  endif..  pMem->n
32d40 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  ++;.  sqlite3Vdb
32d50 65 4d 65 6d 49 6e 69 74 28 26 74 2c 20 64 62 2c  eMemInit(&t, db,
32d60 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 70 43   MEM_Null);.  pC
32d70 74 78 2d 3e 70 4f 75 74 20 3d 20 26 74 3b 0a 20  tx->pOut = &t;. 
32d80 20 70 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41   pCtx->fErrorOrA
32d90 75 78 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e  ux = 0;.  pCtx->
32da0 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a 20 20  skipFlag = 0;.  
32db0 28 70 43 74 78 2d 3e 70 46 75 6e 63 2d 3e 78 53  (pCtx->pFunc->xS
32dc0 46 75 6e 63 29 28 70 43 74 78 2c 70 43 74 78 2d  Func)(pCtx,pCtx-
32dd0 3e 61 72 67 63 2c 70 43 74 78 2d 3e 61 72 67 76  >argc,pCtx->argv
32de0 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35  ); /* IMP: R-245
32df0 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20 69 66  05-23230 */.  if
32e00 28 20 70 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72  ( pCtx->fErrorOr
32e10 41 75 78 20 29 7b 0a 20 20 20 20 69 66 28 20 70  Aux ){.    if( p
32e20 43 74 78 2d 3e 69 73 45 72 72 6f 72 20 29 7b 0a  Ctx->isError ){.
32e30 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
32e40 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20  eError(p, "%s", 
32e50 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
32e60 78 74 28 26 74 29 29 3b 0a 20 20 20 20 20 20 72  xt(&t));.      r
32e70 63 20 3d 20 70 43 74 78 2d 3e 69 73 45 72 72 6f  c = pCtx->isErro
32e80 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  r;.    }.    sql
32e90 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
32ea0 73 65 28 26 74 29 3b 0a 20 20 20 20 69 66 28 20  se(&t);.    if( 
32eb0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
32ec0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
32ed0 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
32ee0 74 28 20 74 2e 66 6c 61 67 73 3d 3d 4d 45 4d 5f  t( t.flags==MEM_
32ef0 4e 75 6c 6c 20 29 3b 0a 20 20 7d 0a 20 20 69 66  Null );.  }.  if
32f00 28 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67  ( pCtx->skipFlag
32f10 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
32f20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d  pOp[-1].opcode==
32f30 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20  OP_CollSeq );.  
32f40 20 20 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 31    i = pOp[-1].p1
32f50 3b 0a 20 20 20 20 69 66 28 20 69 20 29 20 73 71  ;.    if( i ) sq
32f60 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
32f70 6e 74 36 34 28 26 61 4d 65 6d 5b 69 5d 2c 20 31  nt64(&aMem[i], 1
32f80 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
32f90 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67  }../* Opcode: Ag
32fa0 67 46 69 6e 61 6c 20 50 31 20 50 32 20 2a 20 50  gFinal P1 P2 * P
32fb0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
32fc0 20 61 63 63 75 6d 3d 72 5b 50 31 5d 20 4e 3d 50   accum=r[P1] N=P
32fd0 32 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  2.**.** Execute 
32fe0 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 20 66 75  the finalizer fu
32ff0 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67  nction for an ag
33000 67 72 65 67 61 74 65 2e 20 20 50 31 20 69 73 0a  gregate.  P1 is.
33010 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f  ** the memory lo
33020 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 74  cation that is t
33030 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 66  he accumulator f
33040 6f 72 20 74 68 65 20 61 67 67 72 65 67 61 74 65  or the aggregate
33050 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68  ..**.** P2 is th
33060 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
33070 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65 20 73  ments that the s
33080 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b  tep function tak
33090 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20  es and.** P4 is 
330a0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
330b0 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74 68 69   FuncDef for thi
330c0 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65  s function.  The
330d0 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20   P2.** argument 
330e0 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20 74  is not used by t
330f0 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49 74 20  his opcode.  It 
33100 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f  is only there to
33110 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a   disambiguate.**
33120 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20   functions that 
33130 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69 6e 67  can take varying
33140 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72 67 75   numbers of argu
33150 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50  ments.  The.** P
33160 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e  4 argument is on
33170 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20 74 68  ly needed for th
33180 65 20 64 65 67 65 6e 65 72 61 74 65 20 63 61 73  e degenerate cas
33190 65 20 77 68 65 72 65 0a 2a 2a 20 74 68 65 20 73  e where.** the s
331a0 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 77 61 73  tep function was
331b0 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20   not previously 
331c0 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  called..*/.case 
331d0 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20  OP_AggFinal: {. 
331e0 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73   Mem *pMem;.  as
331f0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
33200 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e  && pOp->p1<=(p->
33210 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
33220 73 6f 72 29 20 29 3b 0a 20 20 70 4d 65 6d 20 3d  sor) );.  pMem =
33230 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
33240 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d  .  assert( (pMem
33250 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f  ->flags & ~(MEM_
33260 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d  Null|MEM_Agg))==
33270 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
33280 74 65 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69  te3VdbeMemFinali
33290 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34  ze(pMem, pOp->p4
332a0 2e 70 46 75 6e 63 29 3b 0a 20 20 69 66 28 20 72  .pFunc);.  if( r
332b0 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  c ){.    sqlite3
332c0 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73  VdbeError(p, "%s
332d0 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ", sqlite3_value
332e0 5f 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20  _text(pMem));.  
332f0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
33300 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20  _to_error;.  }. 
33310 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
33320 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c  geEncoding(pMem,
33330 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50   encoding);.  UP
33340 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
33350 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20 73  E(pMem);.  if( s
33360 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f  qlite3VdbeMemToo
33370 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20  Big(pMem) ){.   
33380 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
33390 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23   }.  break;.}..#
333a0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
333b0 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65  IT_WAL./* Opcode
333c0 3a 20 43 68 65 63 6b 70 6f 69 6e 74 20 50 31 20  : Checkpoint P1 
333d0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
333e0 43 68 65 63 6b 70 6f 69 6e 74 20 64 61 74 61 62  Checkpoint datab
333f0 61 73 65 20 50 31 2e 20 54 68 69 73 20 69 73 20  ase P1. This is 
33400 61 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69 73  a no-op if P1 is
33410 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 69   not currently i
33420 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20 50  n.** WAL mode. P
33430 61 72 61 6d 65 74 65 72 20 50 32 20 69 73 20 6f  arameter P2 is o
33440 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 48 45  ne of SQLITE_CHE
33450 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 2c  CKPOINT_PASSIVE,
33460 20 46 55 4c 4c 2c 0a 2a 2a 20 52 45 53 54 41 52   FULL,.** RESTAR
33470 54 2c 20 6f 72 20 54 52 55 4e 43 41 54 45 2e 20  T, or TRUNCATE. 
33480 20 57 72 69 74 65 20 31 20 6f 72 20 30 20 69 6e   Write 1 or 0 in
33490 74 6f 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68  to mem[P3] if th
334a0 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 72 65 74  e checkpoint ret
334b0 75 72 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42  urns.** SQLITE_B
334c0 55 53 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70  USY or not, resp
334d0 65 63 74 69 76 65 6c 79 2e 20 20 57 72 69 74 65  ectively.  Write
334e0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   the number of p
334f0 61 67 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57  ages in the.** W
33500 41 4c 20 61 66 74 65 72 20 74 68 65 20 63 68 65  AL after the che
33510 63 6b 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d  ckpoint into mem
33520 5b 50 33 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e  [P3+1] and the n
33530 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 0a 2a  umber of pages.*
33540 2a 20 69 6e 20 74 68 65 20 57 41 4c 20 74 68 61  * in the WAL tha
33550 74 20 68 61 76 65 20 62 65 65 6e 20 63 68 65 63  t have been chec
33560 6b 70 6f 69 6e 74 65 64 20 61 66 74 65 72 20 74  kpointed after t
33570 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a  he checkpoint.**
33580 20 63 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20   completes into 
33590 6d 65 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65  mem[P3+2].  Howe
335a0 76 65 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c  ver on an error,
335b0 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a   mem[P3+1] and.*
335c0 2a 20 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20  * mem[P3+2] are 
335d0 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d  initialized to -
335e0 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68  1..*/.case OP_Ch
335f0 65 63 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e  eckpoint: {.  in
33600 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  t i;            
33610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
33620 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f   Loop counter */
33630 0a 20 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20  .  int aRes[3]; 
33640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33650 20 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f     /* Results */
33660 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20  .  Mem *pMem;   
33670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33680 20 20 20 2f 2a 20 57 72 69 74 65 20 72 65 73 75     /* Write resu
33690 6c 74 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61  lts here */..  a
336a0 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
336b0 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 52 65 73 5b  ly==0 );.  aRes[
336c0 30 5d 20 3d 20 30 3b 0a 20 20 61 52 65 73 5b 31  0] = 0;.  aRes[1
336d0 5d 20 3d 20 61 52 65 73 5b 32 5d 20 3d 20 2d 31  ] = aRes[2] = -1
336e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
336f0 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43  >p2==SQLITE_CHEC
33700 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 0a 20  KPOINT_PASSIVE. 
33710 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32        || pOp->p2
33720 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  ==SQLITE_CHECKPO
33730 49 4e 54 5f 46 55 4c 4c 0a 20 20 20 20 20 20 20  INT_FULL.       
33740 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  || pOp->p2==SQLI
33750 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45  TE_CHECKPOINT_RE
33760 53 54 41 52 54 0a 20 20 20 20 20 20 20 7c 7c 20  START.       || 
33770 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
33780 43 48 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43  CHECKPOINT_TRUNC
33790 41 54 45 0a 20 20 29 3b 0a 20 20 72 63 20 3d 20  ATE.  );.  rc = 
337a0 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e  sqlite3Checkpoin
337b0 74 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  t(db, pOp->p1, p
337c0 4f 70 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31 5d  Op->p2, &aRes[1]
337d0 2c 20 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20 69  , &aRes[2]);.  i
337e0 66 28 20 72 63 20 29 7b 0a 20 20 20 20 69 66 28  f( rc ){.    if(
337f0 20 72 63 21 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc!=SQLITE_BUSY
33800 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
33810 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
33820 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
33830 20 20 20 20 61 52 65 73 5b 30 5d 20 3d 20 31 3b      aRes[0] = 1;
33840 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 2c 20  .  }.  for(i=0, 
33850 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pMem = &aMem[pOp
33860 2d 3e 70 33 5d 3b 20 69 3c 33 3b 20 69 2b 2b 2c  ->p3]; i<3; i++,
33870 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 73 71   pMem++){.    sq
33880 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
33890 6e 74 36 34 28 70 4d 65 6d 2c 20 28 69 36 34 29  nt64(pMem, (i64)
338a0 61 52 65 73 5b 69 5d 29 3b 0a 20 20 7d 20 20 20  aRes[i]);.  }   
338b0 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 20 20 0a   .  break;.};  .
338c0 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
338d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47  SQLITE_OMIT_PRAG
338e0 4d 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 6f  MA./* Opcode: Jo
338f0 75 72 6e 61 6c 4d 6f 64 65 20 50 31 20 50 32 20  urnalMode P1 P2 
33900 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 61  P3 * *.**.** Cha
33910 6e 67 65 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20  nge the journal 
33920 6d 6f 64 65 20 6f 66 20 64 61 74 61 62 61 73 65  mode of database
33930 20 50 31 20 74 6f 20 50 33 2e 20 50 33 20 6d 75   P1 to P3. P3 mu
33940 73 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  st be one of the
33950 0a 2a 2a 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  .** PAGER_JOURNA
33960 4c 4d 4f 44 45 5f 58 58 58 20 76 61 6c 75 65 73  LMODE_XXX values
33970 2e 20 49 66 20 63 68 61 6e 67 69 6e 67 20 62 65  . If changing be
33980 74 77 65 65 6e 20 74 68 65 20 76 61 72 69 6f 75  tween the variou
33990 73 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6d 6f  s rollback.** mo
339a0 64 65 73 20 28 64 65 6c 65 74 65 2c 20 74 72 75  des (delete, tru
339b0 6e 63 61 74 65 2c 20 70 65 72 73 69 73 74 2c 20  ncate, persist, 
339c0 6f 66 66 20 61 6e 64 20 6d 65 6d 6f 72 79 29 2c  off and memory),
339d0 20 74 68 69 73 20 69 73 20 61 20 73 69 6d 70 6c   this is a simpl
339e0 65 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20  e.** operation. 
339f0 4e 6f 20 49 4f 20 69 73 20 72 65 71 75 69 72 65  No IO is require
33a00 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 68 61 6e  d..**.** If chan
33a10 67 69 6e 67 20 69 6e 74 6f 20 6f 72 20 6f 75 74  ging into or out
33a20 20 6f 66 20 57 41 4c 20 6d 6f 64 65 20 74 68 65   of WAL mode the
33a30 20 70 72 6f 63 65 64 75 72 65 20 69 73 20 6d 6f   procedure is mo
33a40 72 65 20 63 6f 6d 70 6c 69 63 61 74 65 64 2e 0a  re complicated..
33a50 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 73 74  **.** Write a st
33a60 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20  ring containing 
33a70 74 68 65 20 66 69 6e 61 6c 20 6a 6f 75 72 6e 61  the final journa
33a80 6c 2d 6d 6f 64 65 20 74 6f 20 72 65 67 69 73 74  l-mode to regist
33a90 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
33aa0 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 3a 20 7b  P_JournalMode: {
33ab0 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
33ac0 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20   Btree *pBt;    
33ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ae0 20 2f 2a 20 42 74 72 65 65 20 74 6f 20 63 68 61   /* Btree to cha
33af0 6e 67 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65  nge journal mode
33b00 20 6f 66 20 2a 2f 0a 20 20 50 61 67 65 72 20 2a   of */.  Pager *
33b10 70 50 61 67 65 72 3b 20 20 20 20 20 20 20 20 20  pPager;         
33b20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65           /* Page
33b30 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  r associated wit
33b40 68 20 70 42 74 20 2a 2f 0a 20 20 69 6e 74 20 65  h pBt */.  int e
33b50 4e 65 77 3b 20 20 20 20 20 20 20 20 20 20 20 20  New;            
33b60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65             /* Ne
33b70 77 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a  w journal mode *
33b80 2f 0a 20 20 69 6e 74 20 65 4f 6c 64 3b 20 20 20  /.  int eOld;   
33b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ba0 20 20 20 20 2f 2a 20 54 68 65 20 6f 6c 64 20 6a      /* The old j
33bb0 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 23  ournal mode */.#
33bc0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
33bd0 49 54 5f 57 41 4c 0a 20 20 63 6f 6e 73 74 20 63  IT_WAL.  const c
33be0 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 20  har *zFilename; 
33bf0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
33c00 20 6f 66 20 64 61 74 61 62 61 73 65 20 66 69 6c   of database fil
33c10 65 20 66 6f 72 20 70 50 61 67 65 72 20 2a 2f 0a  e for pPager */.
33c20 23 65 6e 64 69 66 0a 0a 20 20 70 4f 75 74 20 3d  #endif..  pOut =
33c30 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
33c40 70 2c 20 70 4f 70 29 3b 0a 20 20 65 4e 65 77 20  p, pOp);.  eNew 
33c50 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73  = pOp->p3;.  ass
33c60 65 72 74 28 20 65 4e 65 77 3d 3d 50 41 47 45 52  ert( eNew==PAGER
33c70 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c  _JOURNALMODE_DEL
33c80 45 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65  ETE .       || e
33c90 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
33ca0 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45 20  ALMODE_TRUNCATE 
33cb0 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
33cc0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
33cd0 44 45 5f 50 45 52 53 49 53 54 20 0a 20 20 20 20  DE_PERSIST .    
33ce0 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
33cf0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46  R_JOURNALMODE_OF
33d00 46 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77  F.       || eNew
33d10 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
33d20 4f 44 45 5f 4d 45 4d 4f 52 59 0a 20 20 20 20 20  ODE_MEMORY.     
33d30 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
33d40 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
33d50 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
33d60 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
33d70 44 45 5f 51 55 45 52 59 0a 20 20 29 3b 0a 20 20  DE_QUERY.  );.  
33d80 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
33d90 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
33da0 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
33db0 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
33dc0 30 20 29 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62  0 );..  pBt = db
33dd0 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
33de0 42 74 3b 0a 20 20 70 50 61 67 65 72 20 3d 20 73  Bt;.  pPager = s
33df0 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72  qlite3BtreePager
33e00 28 70 42 74 29 3b 0a 20 20 65 4f 6c 64 20 3d 20  (pBt);.  eOld = 
33e10 73 71 6c 69 74 65 33 50 61 67 65 72 47 65 74 4a  sqlite3PagerGetJ
33e20 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65  ournalMode(pPage
33e30 72 29 3b 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d  r);.  if( eNew==
33e40 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
33e50 45 5f 51 55 45 52 59 20 29 20 65 4e 65 77 20 3d  E_QUERY ) eNew =
33e60 20 65 4f 6c 64 3b 0a 20 20 69 66 28 20 21 73 71   eOld;.  if( !sq
33e70 6c 69 74 65 33 50 61 67 65 72 4f 6b 54 6f 43 68  lite3PagerOkToCh
33e80 61 6e 67 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28  angeJournalMode(
33e90 70 50 61 67 65 72 29 20 29 20 65 4e 65 77 20 3d  pPager) ) eNew =
33ea0 20 65 4f 6c 64 3b 0a 0a 23 69 66 6e 64 65 66 20   eOld;..#ifndef 
33eb0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
33ec0 20 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 73 71    zFilename = sq
33ed0 6c 69 74 65 33 50 61 67 65 72 46 69 6c 65 6e 61  lite3PagerFilena
33ee0 6d 65 28 70 50 61 67 65 72 2c 20 31 29 3b 0a 0a  me(pPager, 1);..
33ef0 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f    /* Do not allo
33f00 77 20 61 20 74 72 61 6e 73 69 74 69 6f 6e 20 74  w a transition t
33f10 6f 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57  o journal_mode=W
33f20 41 4c 20 66 6f 72 20 61 20 64 61 74 61 62 61 73  AL for a databas
33f30 65 0a 20 20 2a 2a 20 69 6e 20 74 65 6d 70 6f 72  e.  ** in tempor
33f40 61 72 79 20 73 74 6f 72 61 67 65 20 6f 72 20 69  ary storage or i
33f50 66 20 74 68 65 20 56 46 53 20 64 6f 65 73 20 6e  f the VFS does n
33f60 6f 74 20 73 75 70 70 6f 72 74 20 73 68 61 72 65  ot support share
33f70 64 20 6d 65 6d 6f 72 79 20 0a 20 20 2a 2f 0a 20  d memory .  */. 
33f80 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52   if( eNew==PAGER
33f90 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
33fa0 0a 20 20 20 26 26 20 28 73 71 6c 69 74 65 33 53  .   && (sqlite3S
33fb0 74 72 6c 65 6e 33 30 28 7a 46 69 6c 65 6e 61 6d  trlen30(zFilenam
33fc0 65 29 3d 3d 30 20 20 20 20 20 20 20 20 20 20 20  e)==0           
33fd0 2f 2a 20 54 65 6d 70 20 66 69 6c 65 20 2a 2f 0a  /* Temp file */.
33fe0 20 20 20 20 20 20 20 7c 7c 20 21 73 71 6c 69 74         || !sqlit
33ff0 65 33 50 61 67 65 72 57 61 6c 53 75 70 70 6f 72  e3PagerWalSuppor
34000 74 65 64 28 70 50 61 67 65 72 29 29 20 20 20 2f  ted(pPager))   /
34010 2a 20 4e 6f 20 73 68 61 72 65 64 2d 6d 65 6d 6f  * No shared-memo
34020 72 79 20 73 75 70 70 6f 72 74 20 2a 2f 0a 20 20  ry support */.  
34030 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20 65 4f  ){.    eNew = eO
34040 6c 64 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 28  ld;.  }..  if( (
34050 65 4e 65 77 21 3d 65 4f 6c 64 29 0a 20 20 20 26  eNew!=eOld).   &
34060 26 20 28 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a  & (eOld==PAGER_J
34070 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 7c  OURNALMODE_WAL |
34080 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
34090 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 29 0a 20  URNALMODE_WAL). 
340a0 20 29 7b 0a 20 20 20 20 69 66 28 20 21 64 62 2d   ){.    if( !db-
340b0 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20 64  >autoCommit || d
340c0 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31 20 29  b->nVdbeRead>1 )
340d0 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
340e0 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20  ITE_ERROR;.     
340f0 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
34100 72 28 70 2c 0a 20 20 20 20 20 20 20 20 20 20 22  r(p,.          "
34110 63 61 6e 6e 6f 74 20 63 68 61 6e 67 65 20 25 73  cannot change %s
34120 20 77 61 6c 20 6d 6f 64 65 20 66 72 6f 6d 20 77   wal mode from w
34130 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74  ithin a transact
34140 69 6f 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  ion",.          
34150 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55  (eNew==PAGER_JOU
34160 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 22  RNALMODE_WAL ? "
34170 69 6e 74 6f 22 20 3a 20 22 6f 75 74 20 6f 66 22  into" : "out of"
34180 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20  ).      );.     
34190 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
341a0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65  to_error;.    }e
341b0 6c 73 65 7b 0a 20 0a 20 20 20 20 20 20 69 66 28  lse{. .      if(
341c0 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55   eOld==PAGER_JOU
341d0 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a  RNALMODE_WAL ){.
341e0 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6c 65          /* If le
341f0 61 76 69 6e 67 20 57 41 4c 20 6d 6f 64 65 2c 20  aving WAL mode, 
34200 63 6c 6f 73 65 20 74 68 65 20 6c 6f 67 20 66 69  close the log fi
34210 6c 65 2e 20 49 66 20 73 75 63 63 65 73 73 66 75  le. If successfu
34220 6c 2c 20 74 68 65 20 63 61 6c 6c 0a 20 20 20 20  l, the call.    
34230 20 20 20 20 2a 2a 20 74 6f 20 50 61 67 65 72 43      ** to PagerC
34240 6c 6f 73 65 57 61 6c 28 29 20 63 68 65 63 6b 70  loseWal() checkp
34250 6f 69 6e 74 73 20 61 6e 64 20 64 65 6c 65 74 65  oints and delete
34260 73 20 74 68 65 20 77 72 69 74 65 2d 61 68 65 61  s the write-ahea
34270 64 2d 6c 6f 67 20 0a 20 20 20 20 20 20 20 20 2a  d-log .        *
34280 2a 20 66 69 6c 65 2e 20 41 6e 20 45 58 43 4c 55  * file. An EXCLU
34290 53 49 56 45 20 6c 6f 63 6b 20 6d 61 79 20 73 74  SIVE lock may st
342a0 69 6c 6c 20 62 65 20 68 65 6c 64 20 6f 6e 20 74  ill be held on t
342b0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
342c0 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 66 74   .        ** aft
342d0 65 72 20 61 20 73 75 63 63 65 73 73 66 75 6c 20  er a successful 
342e0 72 65 74 75 72 6e 2e 20 0a 20 20 20 20 20 20 20  return. .       
342f0 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 63 20 3d   */.        rc =
34300 20 73 71 6c 69 74 65 33 50 61 67 65 72 43 6c 6f   sqlite3PagerClo
34310 73 65 57 61 6c 28 70 50 61 67 65 72 2c 20 64 62  seWal(pPager, db
34320 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
34330 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
34340 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
34350 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c  3PagerSetJournal
34360 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65  Mode(pPager, eNe
34370 77 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  w);.        }.  
34380 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 65 4f      }else if( eO
34390 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ld==PAGER_JOURNA
343a0 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20 29 7b 0a  LMODE_MEMORY ){.
343b0 20 20 20 20 20 20 20 20 2f 2a 20 43 61 6e 6e 6f          /* Canno
343c0 74 20 74 72 61 6e 73 69 74 69 6f 6e 20 64 69 72  t transition dir
343d0 65 63 74 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f 52  ectly from MEMOR
343e0 59 20 74 6f 20 57 41 4c 2e 20 20 55 73 65 20 6d  Y to WAL.  Use m
343f0 6f 64 65 20 4f 46 46 0a 20 20 20 20 20 20 20 20  ode OFF.        
34400 2a 2a 20 61 73 20 61 6e 20 69 6e 74 65 72 6d 65  ** as an interme
34410 64 69 61 74 65 20 2a 2f 0a 20 20 20 20 20 20 20  diate */.       
34420 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74   sqlite3PagerSet
34430 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67  JournalMode(pPag
34440 65 72 2c 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  er, PAGER_JOURNA
34450 4c 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20 20 20 20  LMODE_OFF);.    
34460 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20    }.  .      /* 
34470 4f 70 65 6e 20 61 20 74 72 61 6e 73 61 63 74 69  Open a transacti
34480 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  on on the databa
34490 73 65 20 66 69 6c 65 2e 20 52 65 67 61 72 64 6c  se file. Regardl
344a0 65 73 73 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e  ess of the journ
344b0 61 6c 0a 20 20 20 20 20 20 2a 2a 20 6d 6f 64 65  al.      ** mode
344c0 2c 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69  , this transacti
344d0 6f 6e 20 61 6c 77 61 79 73 20 75 73 65 73 20 61  on always uses a
344e0 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
344f0 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  l..      */.    
34500 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
34510 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28  3BtreeIsInTrans(
34520 70 42 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20  pBt)==0 );.     
34530 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
34540 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  OK ){.        rc
34550 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53   = sqlite3BtreeS
34560 65 74 56 65 72 73 69 6f 6e 28 70 42 74 2c 20 28  etVersion(pBt, (
34570 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
34580 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 32 20  NALMODE_WAL ? 2 
34590 3a 20 31 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20  : 1));.      }. 
345a0 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20     }.  }.#endif 
345b0 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /* ifndef SQLITE
345c0 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20 20  _OMIT_WAL */..  
345d0 69 66 28 20 72 63 20 29 20 65 4e 65 77 20 3d 20  if( rc ) eNew = 
345e0 65 4f 6c 64 3b 0a 20 20 65 4e 65 77 20 3d 20 73  eOld;.  eNew = s
345f0 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f  qlite3PagerSetJo
34600 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
34610 2c 20 65 4e 65 77 29 3b 0a 0a 20 20 70 4f 75 74  , eNew);..  pOut
34620 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74  ->flags = MEM_St
34630 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d  r|MEM_Static|MEM
34640 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a  _Term;.  pOut->z
34650 20 3d 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74   = (char *)sqlit
34660 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d  e3JournalModenam
34670 65 28 65 4e 65 77 29 3b 0a 20 20 70 4f 75 74 2d  e(eNew);.  pOut-
34680 3e 6e 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  >n = sqlite3Strl
34690 65 6e 33 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20  en30(pOut->z);. 
346a0 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c   pOut->enc = SQL
346b0 49 54 45 5f 55 54 46 38 3b 0a 20 20 73 71 6c 69  ITE_UTF8;.  sqli
346c0 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
346d0 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f  oding(pOut, enco
346e0 64 69 6e 67 29 3b 0a 20 20 69 66 28 20 72 63 20  ding);.  if( rc 
346f0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
34700 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
34710 61 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a  ak;.};.#endif /*
34720 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41   SQLITE_OMIT_PRA
34730 47 4d 41 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66  GMA */..#if !def
34740 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
34750 5f 56 41 43 55 55 4d 29 20 26 26 20 21 64 65 66  _VACUUM) && !def
34760 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
34770 5f 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f  _ATTACH)./* Opco
34780 64 65 3a 20 56 61 63 75 75 6d 20 50 31 20 2a 20  de: Vacuum P1 * 
34790 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75  * * *.**.** Vacu
347a0 75 6d 20 74 68 65 20 65 6e 74 69 72 65 20 64 61  um the entire da
347b0 74 61 62 61 73 65 20 50 31 2e 20 20 50 31 20 69  tabase P1.  P1 i
347c0 73 20 30 20 66 6f 72 20 22 6d 61 69 6e 22 2c 20  s 0 for "main", 
347d0 61 6e 64 20 32 20 6f 72 20 6d 6f 72 65 0a 2a 2a  and 2 or more.**
347e0 20 66 6f 72 20 61 6e 20 61 74 74 61 63 68 65 64   for an attached
347f0 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20   database.  The 
34800 22 74 65 6d 70 22 20 64 61 74 61 62 61 73 65 20  "temp" database 
34810 6d 61 79 20 6e 6f 74 20 62 65 20 76 61 63 75 75  may not be vacuu
34820 6d 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  med..*/.case OP_
34830 56 61 63 75 75 6d 3a 20 7b 0a 20 20 61 73 73 65  Vacuum: {.  asse
34840 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
34850 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  =0 );.  rc = sql
34860 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28 26 70  ite3RunVacuum(&p
34870 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 70  ->zErrMsg, db, p
34880 4f 70 2d 3e 70 31 29 3b 0a 20 20 69 66 28 20 72  Op->p1);.  if( r
34890 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
348a0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62  ue_to_error;.  b
348b0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
348c0 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
348d0 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43  ITE_OMIT_AUTOVAC
348e0 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  UUM)./* Opcode: 
348f0 49 6e 63 72 56 61 63 75 75 6d 20 50 31 20 50 32  IncrVacuum P1 P2
34900 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72   * * *.**.** Per
34910 66 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20 73 74  form a single st
34920 65 70 20 6f 66 20 74 68 65 20 69 6e 63 72 65 6d  ep of the increm
34930 65 6e 74 61 6c 20 76 61 63 75 75 6d 20 70 72 6f  ental vacuum pro
34940 63 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74 68 65  cedure on.** the
34950 20 50 31 20 64 61 74 61 62 61 73 65 2e 20 49 66   P1 database. If
34960 20 74 68 65 20 76 61 63 75 75 6d 20 68 61 73 20   the vacuum has 
34970 66 69 6e 69 73 68 65 64 2c 20 6a 75 6d 70 20 74  finished, jump t
34980 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a  o instruction.**
34990 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20   P2. Otherwise, 
349a0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
349b0 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
349c0 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
349d0 5f 49 6e 63 72 56 61 63 75 75 6d 3a 20 7b 20 20  _IncrVacuum: {  
349e0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
349f0 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a  .  Btree *pBt;..
34a00 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
34a10 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
34a20 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
34a30 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
34a40 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f  p->btreeMask, pO
34a50 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65  p->p1) );.  asse
34a60 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
34a70 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62  =0 );.  pBt = db
34a80 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
34a90 42 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  Bt;.  rc = sqlit
34aa0 65 33 42 74 72 65 65 49 6e 63 72 56 61 63 75 75  e3BtreeIncrVacuu
34ab0 6d 28 70 42 74 29 3b 0a 20 20 56 64 62 65 42 72  m(pBt);.  VdbeBr
34ac0 61 6e 63 68 54 61 6b 65 6e 28 72 63 3d 3d 53 51  anchTaken(rc==SQ
34ad0 4c 49 54 45 5f 44 4f 4e 45 2c 32 29 3b 0a 20 20  LITE_DONE,2);.  
34ae0 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 69 66  if( rc ){.    if
34af0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 44 4f 4e  ( rc!=SQLITE_DON
34b00 45 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  E ) goto abort_d
34b10 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
34b20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
34b30 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  .    goto jump_t
34b40 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  o_p2;.  }.  brea
34b50 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  k;.}.#endif../* 
34b60 4f 70 63 6f 64 65 3a 20 45 78 70 69 72 65 20 50  Opcode: Expire P
34b70 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
34b80 43 61 75 73 65 20 70 72 65 63 6f 6d 70 69 6c 65  Cause precompile
34b90 64 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20  d statements to 
34ba0 65 78 70 69 72 65 2e 20 20 57 68 65 6e 20 61 6e  expire.  When an
34bb0 20 65 78 70 69 72 65 64 20 73 74 61 74 65 6d 65   expired stateme
34bc0 6e 74 0a 2a 2a 20 69 73 20 65 78 65 63 75 74 65  nt.** is execute
34bd0 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f  d using sqlite3_
34be0 73 74 65 70 28 29 20 69 74 20 77 69 6c 6c 20 65  step() it will e
34bf0 69 74 68 65 72 20 61 75 74 6f 6d 61 74 69 63 61  ither automatica
34c00 6c 6c 79 0a 2a 2a 20 72 65 70 72 65 70 61 72 65  lly.** reprepare
34c10 20 69 74 73 65 6c 66 20 28 69 66 20 69 74 20 77   itself (if it w
34c20 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 63 72  as originally cr
34c30 65 61 74 65 64 20 75 73 69 6e 67 20 73 71 6c 69  eated using sqli
34c40 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 29  te3_prepare_v2()
34c50 29 0a 2a 2a 20 6f 72 20 69 74 20 77 69 6c 6c 20  ).** or it will 
34c60 66 61 69 6c 20 77 69 74 68 20 53 51 4c 49 54 45  fail with SQLITE
34c70 5f 53 43 48 45 4d 41 2e 0a 2a 2a 20 0a 2a 2a 20  _SCHEMA..** .** 
34c80 49 66 20 50 31 20 69 73 20 30 2c 20 74 68 65 6e  If P1 is 0, then
34c90 20 61 6c 6c 20 53 51 4c 20 73 74 61 74 65 6d 65   all SQL stateme
34ca0 6e 74 73 20 62 65 63 6f 6d 65 20 65 78 70 69 72  nts become expir
34cb0 65 64 2e 20 49 66 20 50 31 20 69 73 20 6e 6f 6e  ed. If P1 is non
34cc0 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20 6f  -zero,.** then o
34cd0 6e 6c 79 20 74 68 65 20 63 75 72 72 65 6e 74 6c  nly the currentl
34ce0 79 20 65 78 65 63 75 74 69 6e 67 20 73 74 61 74  y executing stat
34cf0 65 6d 65 6e 74 20 69 73 20 65 78 70 69 72 65 64  ement is expired
34d00 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 78 70  ..*/.case OP_Exp
34d10 69 72 65 3a 20 7b 0a 20 20 69 66 28 20 21 70 4f  ire: {.  if( !pO
34d20 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c  p->p1 ){.    sql
34d30 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72  ite3ExpirePrepar
34d40 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29  edStatements(db)
34d50 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
34d60 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a 20  ->expired = 1;. 
34d70 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23   }.  break;.}..#
34d80 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
34d90 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a  IT_SHARED_CACHE.
34da0 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 61 62 6c 65  /* Opcode: Table
34db0 4c 6f 63 6b 20 50 31 20 50 32 20 50 33 20 50 34  Lock P1 P2 P3 P4
34dc0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
34dd0 69 44 62 3d 50 31 20 72 6f 6f 74 3d 50 32 20 77  iDb=P1 root=P2 w
34de0 72 69 74 65 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 62  rite=P3.**.** Ob
34df0 74 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20 61  tain a lock on a
34e00 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c   particular tabl
34e10 65 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  e. This instruct
34e20 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65 64  ion is only used
34e30 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68 61   when.** the sha
34e40 72 65 64 2d 63 61 63 68 65 20 66 65 61 74 75 72  red-cache featur
34e50 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a 2a  e is enabled. .*
34e60 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69  *.** P1 is the i
34e70 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61  ndex of the data
34e80 62 61 73 65 20 69 6e 20 73 71 6c 69 74 65 33 2e  base in sqlite3.
34e90 61 44 62 5b 5d 20 6f 66 20 74 68 65 20 64 61 74  aDb[] of the dat
34ea0 61 62 61 73 65 0a 2a 2a 20 6f 6e 20 77 68 69 63  abase.** on whic
34eb0 68 20 74 68 65 20 6c 6f 63 6b 20 69 73 20 61 63  h the lock is ac
34ec0 71 75 69 72 65 64 2e 20 20 41 20 72 65 61 64 6c  quired.  A readl
34ed0 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64 20  ock is obtained 
34ee0 69 66 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61  if P3==0 or.** a
34ef0 20 77 72 69 74 65 20 6c 6f 63 6b 20 69 66 20 50   write lock if P
34f00 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63  3==1..**.** P2 c
34f10 6f 6e 74 61 69 6e 73 20 74 68 65 20 72 6f 6f 74  ontains the root
34f20 2d 70 61 67 65 20 6f 66 20 74 68 65 20 74 61 62  -page of the tab
34f30 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a  le to lock..**.*
34f40 2a 20 50 34 20 63 6f 6e 74 61 69 6e 73 20 61 20  * P4 contains a 
34f50 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6e  pointer to the n
34f60 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
34f70 20 62 65 69 6e 67 20 6c 6f 63 6b 65 64 2e 20 54   being locked. T
34f80 68 69 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75  his is only.** u
34f90 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20  sed to generate 
34fa0 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an error message
34fb0 20 69 66 20 74 68 65 20 6c 6f 63 6b 20 63 61 6e   if the lock can
34fc0 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e 65 64 2e  not be obtained.
34fd0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 61 62 6c  .*/.case OP_Tabl
34fe0 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38 20 69 73  eLock: {.  u8 is
34ff0 57 72 69 74 65 4c 6f 63 6b 20 3d 20 28 75 38 29  WriteLock = (u8)
35000 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20 69  pOp->p3;.  if( i
35010 73 57 72 69 74 65 4c 6f 63 6b 20 7c 7c 20 30 3d  sWriteLock || 0=
35020 3d 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49  =(db->flags&SQLI
35030 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74  TE_ReadUncommitt
35040 65 64 29 20 29 7b 0a 20 20 20 20 69 6e 74 20 70  ed) ){.    int p
35050 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20 20  1 = pOp->p1; .  
35060 20 20 61 73 73 65 72 74 28 20 70 31 3e 3d 30 20    assert( p1>=0 
35070 26 26 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  && p1<db->nDb );
35080 0a 20 20 20 20 61 73 73 65 72 74 28 20 44 62 4d  .    assert( DbM
35090 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
350a0 4d 61 73 6b 2c 20 70 31 29 20 29 3b 0a 20 20 20  Mask, p1) );.   
350b0 20 61 73 73 65 72 74 28 20 69 73 57 72 69 74 65   assert( isWrite
350c0 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69  Lock==0 || isWri
350d0 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 20  teLock==1 );.   
350e0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
350f0 65 65 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e  eeLockTable(db->
35100 61 44 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70  aDb[p1].pBt, pOp
35110 2d 3e 70 32 2c 20 69 73 57 72 69 74 65 4c 6f 63  ->p2, isWriteLoc
35120 6b 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29  k);.    if( rc )
35130 7b 0a 20 20 20 20 20 20 69 66 28 20 28 72 63 26  {.      if( (rc&
35140 30 78 46 46 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f  0xFF)==SQLITE_LO
35150 43 4b 45 44 20 29 7b 0a 20 20 20 20 20 20 20 20  CKED ){.        
35160 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20  const char *z = 
35170 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 20  pOp->p4.z;.     
35180 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
35190 72 6f 72 28 70 2c 20 22 64 61 74 61 62 61 73 65  ror(p, "database
351a0 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64   table is locked
351b0 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20 20  : %s", z);.     
351c0 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62   }.      goto ab
351d0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
351e0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
351f0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
35200 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
35210 52 45 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69  RED_CACHE */..#i
35220 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
35230 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
35240 2a 20 4f 70 63 6f 64 65 3a 20 56 42 65 67 69 6e  * Opcode: VBegin
35250 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a   * * * P4 *.**.*
35260 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 70 6f  * P4 may be a po
35270 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69  inter to an sqli
35280 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
35290 72 65 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20  re. If so, call 
352a0 74 68 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d  the .** xBegin m
352b0 65 74 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74  ethod for that t
352c0 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f  able..**.** Also
352d0 2c 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  , whether or not
352e0 20 50 34 20 69 73 20 73 65 74 2c 20 63 68 65 63   P4 is set, chec
352f0 6b 20 74 68 61 74 20 74 68 69 73 20 69 73 20 6e  k that this is n
35300 6f 74 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20  ot being called 
35310 66 72 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61  from.** within a
35320 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76   callback to a v
35330 69 72 74 75 61 6c 20 74 61 62 6c 65 20 78 53 79  irtual table xSy
35340 6e 63 28 29 20 6d 65 74 68 6f 64 2e 20 49 66 20  nc() method. If 
35350 69 74 20 69 73 2c 20 74 68 65 20 65 72 72 6f 72  it is, the error
35360 0a 2a 2a 20 63 6f 64 65 20 77 69 6c 6c 20 62 65  .** code will be
35370 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4c   set to SQLITE_L
35380 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f  OCKED..*/.case O
35390 50 5f 56 42 65 67 69 6e 3a 20 7b 0a 20 20 56 54  P_VBegin: {.  VT
353a0 61 62 6c 65 20 2a 70 56 54 61 62 3b 0a 20 20 70  able *pVTab;.  p
353b0 56 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  VTab = pOp->p4.p
353c0 56 74 61 62 3b 0a 20 20 72 63 20 3d 20 73 71 6c  Vtab;.  rc = sql
353d0 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 64 62  ite3VtabBegin(db
353e0 2c 20 70 56 54 61 62 29 3b 0a 20 20 69 66 28 20  , pVTab);.  if( 
353f0 70 56 54 61 62 20 29 20 73 71 6c 69 74 65 33 56  pVTab ) sqlite3V
35400 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
35410 70 2c 20 70 56 54 61 62 2d 3e 70 56 74 61 62 29  p, pVTab->pVtab)
35420 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
35430 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
35440 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
35450 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
35460 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
35470 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
35480 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
35490 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
354a0 64 65 3a 20 56 43 72 65 61 74 65 20 50 31 20 50  de: VCreate P1 P
354b0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 32  2 * * *.**.** P2
354c0 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 74   is a register t
354d0 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e 61  hat holds the na
354e0 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20  me of a virtual 
354f0 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73  table in databas
35500 65 20 0a 2a 2a 20 50 31 2e 20 43 61 6c 6c 20 74  e .** P1. Call t
35510 68 65 20 78 43 72 65 61 74 65 20 6d 65 74 68 6f  he xCreate metho
35520 64 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65  d for that table
35530 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 72  ..*/.case OP_VCr
35540 65 61 74 65 3a 20 7b 0a 20 20 4d 65 6d 20 73 4d  eate: {.  Mem sM
35550 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  em;          /* 
35560 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20  For storing the 
35570 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63  record being dec
35580 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  oded */.  const 
35590 63 68 61 72 20 2a 7a 54 61 62 3b 20 20 2f 2a 20  char *zTab;  /* 
355a0 4e 61 6d 65 20 6f 66 20 74 68 65 20 76 69 72 74  Name of the virt
355b0 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 20 20  ual table */..  
355c0 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c  memset(&sMem, 0,
355d0 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a   sizeof(sMem));.
355e0 20 20 73 4d 65 6d 2e 64 62 20 3d 20 64 62 3b 0a    sMem.db = db;.
355f0 20 20 2f 2a 20 42 65 63 61 75 73 65 20 50 32 20    /* Because P2 
35600 69 73 20 61 6c 77 61 79 73 20 61 20 73 74 61 74  is always a stat
35610 69 63 20 73 74 72 69 6e 67 2c 20 69 74 20 69 73  ic string, it is
35620 20 69 6d 70 6f 73 73 69 62 6c 65 20 66 6f 72 20   impossible for 
35630 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33  the.  ** sqlite3
35640 56 64 62 65 4d 65 6d 43 6f 70 79 28 29 20 74 6f  VdbeMemCopy() to
35650 20 66 61 69 6c 20 2a 2f 0a 20 20 61 73 73 65 72   fail */.  asser
35660 74 28 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  t( (aMem[pOp->p2
35670 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ].flags & MEM_St
35680 72 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  r)!=0 );.  asser
35690 74 28 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  t( (aMem[pOp->p2
356a0 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ].flags & MEM_St
356b0 61 74 69 63 29 21 3d 30 20 29 3b 0a 20 20 72 63  atic)!=0 );.  rc
356c0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
356d0 6d 43 6f 70 79 28 26 73 4d 65 6d 2c 20 26 61 4d  mCopy(&sMem, &aM
356e0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20  em[pOp->p2]);.  
356f0 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
35700 54 45 5f 4f 4b 20 29 3b 0a 20 20 7a 54 61 62 20  TE_OK );.  zTab 
35710 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73  = (const char*)s
35720 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
35730 74 28 26 73 4d 65 6d 29 3b 0a 20 20 61 73 73 65  t(&sMem);.  asse
35740 72 74 28 20 7a 54 61 62 20 7c 7c 20 64 62 2d 3e  rt( zTab || db->
35750 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a  mallocFailed );.
35760 20 20 69 66 28 20 7a 54 61 62 20 29 7b 0a 20 20    if( zTab ){.  
35770 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
35780 61 62 43 61 6c 6c 43 72 65 61 74 65 28 64 62 2c  abCallCreate(db,
35790 20 70 4f 70 2d 3e 70 31 2c 20 7a 54 61 62 2c 20   pOp->p1, zTab, 
357a0 26 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20  &p->zErrMsg);.  
357b0 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  }.  sqlite3VdbeM
357c0 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29  emRelease(&sMem)
357d0 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
357e0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
357f0 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
35800 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
35810 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
35820 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
35830 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
35840 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
35850 64 65 3a 20 56 44 65 73 74 72 6f 79 20 50 31 20  de: VDestroy P1 
35860 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  * * P4 *.**.** P
35870 34 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  4 is the name of
35880 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
35890 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
358a0 20 20 43 61 6c 6c 20 74 68 65 20 78 44 65 73 74    Call the xDest
358b0 72 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66  roy method.** of
358c0 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a   that table..*/.
358d0 63 61 73 65 20 4f 50 5f 56 44 65 73 74 72 6f 79  case OP_VDestroy
358e0 3a 20 7b 0a 20 20 64 62 2d 3e 6e 56 44 65 73 74  : {.  db->nVDest
358f0 72 6f 79 2b 2b 3b 0a 20 20 72 63 20 3d 20 73 71  roy++;.  rc = sq
35900 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73  lite3VtabCallDes
35910 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e 70 31  troy(db, pOp->p1
35920 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
35930 64 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2d 2d 3b  db->nVDestroy--;
35940 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
35950 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
35960 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ror;.  break;.}.
35970 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
35980 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
35990 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
359a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
359b0 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
359c0 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a 20 2a 20  e: VOpen P1 * * 
359d0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  P4 *.**.** P4 is
359e0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
359f0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62  virtual table ob
35a00 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33  ject, an sqlite3
35a10 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e  _vtab structure.
35a20 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72 73  .** P1 is a curs
35a30 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73  or number.  This
35a40 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73 20 61 20   opcode opens a 
35a50 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20 76 69  cursor to the vi
35a60 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 61  rtual.** table a
35a70 6e 64 20 73 74 6f 72 65 73 20 74 68 61 74 20 63  nd stores that c
35a80 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a  ursor in P1..*/.
35a90 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b  case OP_VOpen: {
35aa0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
35ab0 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  Cur;.  sqlite3_v
35ac0 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 43 75  tab_cursor *pVCu
35ad0 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  r;.  sqlite3_vta
35ae0 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73  b *pVtab;.  cons
35af0 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
35b00 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73   *pModule;..  as
35b10 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
35b20 65 72 20 29 3b 0a 20 20 70 43 75 72 20 3d 20 30  er );.  pCur = 0
35b30 3b 0a 20 20 70 56 43 75 72 20 3d 20 30 3b 0a 20  ;.  pVCur = 0;. 
35b40 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34   pVtab = pOp->p4
35b50 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20  .pVtab->pVtab;. 
35b60 20 69 66 28 20 70 56 74 61 62 3d 3d 30 20 7c 7c   if( pVtab==0 ||
35b70 20 4e 45 56 45 52 28 70 56 74 61 62 2d 3e 70 4d   NEVER(pVtab->pM
35b80 6f 64 75 6c 65 3d 3d 30 29 20 29 7b 0a 20 20 20  odule==0) ){.   
35b90 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43   rc = SQLITE_LOC
35ba0 4b 45 44 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62  KED;.    goto ab
35bb0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
35bc0 3b 0a 20 20 7d 0a 20 20 70 4d 6f 64 75 6c 65 20  ;.  }.  pModule 
35bd0 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
35be0 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65  ;.  rc = pModule
35bf0 2d 3e 78 4f 70 65 6e 28 70 56 74 61 62 2c 20 26  ->xOpen(pVtab, &
35c00 70 56 43 75 72 29 3b 0a 20 20 73 71 6c 69 74 65  pVCur);.  sqlite
35c10 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
35c20 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69  g(p, pVtab);.  i
35c30 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
35c40 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
35c50 0a 0a 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a  ..  /* Initializ
35c60 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63  e sqlite3_vtab_c
35c70 75 72 73 6f 72 20 62 61 73 65 20 63 6c 61 73 73  ursor base class
35c80 20 2a 2f 0a 20 20 70 56 43 75 72 2d 3e 70 56 74   */.  pVCur->pVt
35c90 61 62 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20 2f  ab = pVtab;..  /
35ca0 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 76 64 62  * Initialize vdb
35cb0 65 20 63 75 72 73 6f 72 20 6f 62 6a 65 63 74 20  e cursor object 
35cc0 2a 2f 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f  */.  pCur = allo
35cd0 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
35ce0 70 2d 3e 70 31 2c 20 30 2c 20 2d 31 2c 20 43 55  p->p1, 0, -1, CU
35cf0 52 54 59 50 45 5f 56 54 41 42 29 3b 0a 20 20 69  RTYPE_VTAB);.  i
35d00 66 28 20 70 43 75 72 20 29 7b 0a 20 20 20 20 70  f( pCur ){.    p
35d10 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 20 3d 20  Cur->uc.pVCur = 
35d20 70 56 43 75 72 3b 0a 20 20 20 20 70 56 74 61 62  pVCur;.    pVtab
35d30 2d 3e 6e 52 65 66 2b 2b 3b 0a 20 20 7d 65 6c 73  ->nRef++;.  }els
35d40 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64  e{.    assert( d
35d50 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
35d60 29 3b 0a 20 20 20 20 70 4d 6f 64 75 6c 65 2d 3e  );.    pModule->
35d70 78 43 6c 6f 73 65 28 70 56 43 75 72 29 3b 0a 20  xClose(pVCur);. 
35d80 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
35d90 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
35da0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
35db0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
35dc0 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
35dd0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
35de0 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
35df0 3a 20 56 46 69 6c 74 65 72 20 50 31 20 50 32 20  : VFilter P1 P2 
35e00 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
35e10 73 69 73 3a 20 69 70 6c 61 6e 3d 72 5b 50 33 5d  sis: iplan=r[P3]
35e20 20 7a 70 6c 61 6e 3d 27 50 34 27 0a 2a 2a 0a 2a   zplan='P4'.**.*
35e30 2a 20 50 31 20 69 73 20 61 20 63 75 72 73 6f 72  * P1 is a cursor
35e40 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 56 4f   opened using VO
35e50 70 65 6e 2e 20 20 50 32 20 69 73 20 61 6e 20 61  pen.  P2 is an a
35e60 64 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74  ddress to jump t
35e70 6f 20 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74  o if.** the filt
35e80 65 72 65 64 20 72 65 73 75 6c 74 20 73 65 74 20  ered result set 
35e90 69 73 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20  is empty..**.** 
35ea0 50 34 20 69 73 20 65 69 74 68 65 72 20 4e 55 4c  P4 is either NUL
35eb0 4c 20 6f 72 20 61 20 73 74 72 69 6e 67 20 74 68  L or a string th
35ec0 61 74 20 77 61 73 20 67 65 6e 65 72 61 74 65 64  at was generated
35ed0 20 62 79 20 74 68 65 20 78 42 65 73 74 49 6e 64   by the xBestInd
35ee0 65 78 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20  ex.** method of 
35ef0 74 68 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65  the module.  The
35f00 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20   interpretation 
35f10 6f 66 20 74 68 65 20 50 34 20 73 74 72 69 6e 67  of the P4 string
35f20 20 69 73 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74   is left.** to t
35f30 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d  he module implem
35f40 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  entation..**.** 
35f50 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f  This opcode invo
35f60 6b 65 73 20 74 68 65 20 78 46 69 6c 74 65 72 20  kes the xFilter 
35f70 6d 65 74 68 6f 64 20 6f 6e 20 74 68 65 20 76 69  method on the vi
35f80 72 74 75 61 6c 20 74 61 62 6c 65 20 73 70 65 63  rtual table spec
35f90 69 66 69 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20  ified.** by P1. 
35fa0 20 54 68 65 20 69 6e 74 65 67 65 72 20 71 75 65   The integer que
35fb0 72 79 20 70 6c 61 6e 20 70 61 72 61 6d 65 74 65  ry plan paramete
35fc0 72 20 74 6f 20 78 46 69 6c 74 65 72 20 69 73 20  r to xFilter is 
35fd0 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
35fe0 65 72 0a 2a 2a 20 50 33 2e 20 52 65 67 69 73 74  er.** P3. Regist
35ff0 65 72 20 50 33 2b 31 20 73 74 6f 72 65 73 20 74  er P3+1 stores t
36000 68 65 20 61 72 67 63 20 70 61 72 61 6d 65 74 65  he argc paramete
36010 72 20 74 6f 20 62 65 20 70 61 73 73 65 64 20 74  r to be passed t
36020 6f 20 74 68 65 0a 2a 2a 20 78 46 69 6c 74 65 72  o the.** xFilter
36030 20 6d 65 74 68 6f 64 2e 20 52 65 67 69 73 74 65   method. Registe
36040 72 73 20 50 33 2b 32 2e 2e 50 33 2b 31 2b 61 72  rs P3+2..P3+1+ar
36050 67 63 20 61 72 65 20 74 68 65 20 61 72 67 63 0a  gc are the argc.
36060 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61  ** additional pa
36070 72 61 6d 65 74 65 72 73 20 77 68 69 63 68 20 61  rameters which a
36080 72 65 20 70 61 73 73 65 64 20 74 6f 0a 2a 2a 20  re passed to.** 
36090 78 46 69 6c 74 65 72 20 61 73 20 61 72 67 76 2e  xFilter as argv.
360a0 20 52 65 67 69 73 74 65 72 20 50 33 2b 32 20 62   Register P3+2 b
360b0 65 63 6f 6d 65 73 20 61 72 67 76 5b 30 5d 20 77  ecomes argv[0] w
360c0 68 65 6e 20 70 61 73 73 65 64 20 74 6f 20 78 46  hen passed to xF
360d0 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a  ilter..**.** A j
360e0 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50  ump is made to P
360f0 32 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  2 if the result 
36100 73 65 74 20 61 66 74 65 72 20 66 69 6c 74 65 72  set after filter
36110 69 6e 67 20 77 6f 75 6c 64 20 62 65 20 65 6d 70  ing would be emp
36120 74 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ty..*/.case OP_V
36130 46 69 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6a  Filter: {   /* j
36140 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72  ump */.  int nAr
36150 67 3b 0a 20 20 69 6e 74 20 69 51 75 65 72 79 3b  g;.  int iQuery;
36160 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
36170 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
36180 3b 0a 20 20 4d 65 6d 20 2a 70 51 75 65 72 79 3b  ;.  Mem *pQuery;
36190 0a 20 20 4d 65 6d 20 2a 70 41 72 67 63 3b 0a 20  .  Mem *pArgc;. 
361a0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
361b0 72 73 6f 72 20 2a 70 56 43 75 72 3b 0a 20 20 73  rsor *pVCur;.  s
361c0 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
361d0 61 62 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  ab;.  VdbeCursor
361e0 20 2a 70 43 75 72 3b 0a 20 20 69 6e 74 20 72 65   *pCur;.  int re
361f0 73 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65  s;.  int i;.  Me
36200 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a 20 20 70 51  m **apArg;..  pQ
36210 75 65 72 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  uery = &aMem[pOp
36220 2d 3e 70 33 5d 3b 0a 20 20 70 41 72 67 63 20 3d  ->p3];.  pArgc =
36230 20 26 70 51 75 65 72 79 5b 31 5d 3b 0a 20 20 70   &pQuery[1];.  p
36240 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
36250 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
36260 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 51  t( memIsValid(pQ
36270 75 65 72 79 29 20 29 3b 0a 20 20 52 45 47 49 53  uery) );.  REGIS
36280 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
36290 33 2c 20 70 51 75 65 72 79 29 3b 0a 20 20 61 73  3, pQuery);.  as
362a0 73 65 72 74 28 20 70 43 75 72 2d 3e 65 43 75 72  sert( pCur->eCur
362b0 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 56 54  Type==CURTYPE_VT
362c0 41 42 20 29 3b 0a 20 20 70 56 43 75 72 20 3d 20  AB );.  pVCur = 
362d0 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 3b 0a  pCur->uc.pVCur;.
362e0 20 20 70 56 74 61 62 20 3d 20 70 56 43 75 72 2d    pVtab = pVCur-
362f0 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c  >pVtab;.  pModul
36300 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
36310 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20 74  le;..  /* Grab t
36320 68 65 20 69 6e 64 65 78 20 6e 75 6d 62 65 72 20  he index number 
36330 61 6e 64 20 61 72 67 63 20 70 61 72 61 6d 65 74  and argc paramet
36340 65 72 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ers */.  assert(
36350 20 28 70 51 75 65 72 79 2d 3e 66 6c 61 67 73 26   (pQuery->flags&
36360 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20 70  MEM_Int)!=0 && p
36370 41 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d  Argc->flags==MEM
36380 5f 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20 3d  _Int );.  nArg =
36390 20 28 69 6e 74 29 70 41 72 67 63 2d 3e 75 2e 69   (int)pArgc->u.i
363a0 3b 0a 20 20 69 51 75 65 72 79 20 3d 20 28 69 6e  ;.  iQuery = (in
363b0 74 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a  t)pQuery->u.i;..
363c0 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
363d0 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 2a  xFilter method *
363e0 2f 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61  /.  res = 0;.  a
363f0 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b  pArg = p->apArg;
36400 0a 20 20 66 6f 72 28 69 20 3d 20 30 3b 20 69 3c  .  for(i = 0; i<
36410 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nArg; i++){.    
36420 61 70 41 72 67 5b 69 5d 20 3d 20 26 70 41 72 67  apArg[i] = &pArg
36430 63 5b 69 2b 31 5d 3b 0a 20 20 7d 0a 20 20 72 63  c[i+1];.  }.  rc
36440 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c   = pModule->xFil
36450 74 65 72 28 70 56 43 75 72 2c 20 69 51 75 65 72  ter(pVCur, iQuer
36460 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41  y, pOp->p4.z, nA
36470 72 67 2c 20 61 70 41 72 67 29 3b 0a 20 20 73 71  rg, apArg);.  sq
36480 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
36490 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrmsg(p, pVtab);
364a0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
364b0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
364c0 72 6f 72 3b 0a 20 20 72 65 73 20 3d 20 70 4d 6f  ror;.  res = pMo
364d0 64 75 6c 65 2d 3e 78 45 6f 66 28 70 56 43 75 72  dule->xEof(pVCur
364e0 29 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52  );.  pCur->nullR
364f0 6f 77 20 3d 20 30 3b 0a 20 20 56 64 62 65 42 72  ow = 0;.  VdbeBr
36500 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
36510 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29  ,2);.  if( res )
36520 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
36530 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
36540 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
36550 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
36560 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
36570 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
36580 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
36590 56 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33  VColumn P1 P2 P3
365a0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
365b0 3a 20 72 5b 50 33 5d 3d 76 63 6f 6c 75 6d 6e 28  : r[P3]=vcolumn(
365c0 50 32 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20  P2).**.** Store 
365d0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
365e0 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66   P2-th column of
365f0 0a 2a 2a 20 74 68 65 20 72 6f 77 20 6f 66 20 74  .** the row of t
36600 68 65 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65  he virtual-table
36610 20 74 68 61 74 20 74 68 65 20 0a 2a 2a 20 50 31   that the .** P1
36620 20 63 75 72 73 6f 72 20 69 73 20 70 6f 69 6e 74   cursor is point
36630 69 6e 67 20 74 6f 20 69 6e 74 6f 20 72 65 67 69  ing to into regi
36640 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65  ster P3..*/.case
36650 20 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20   OP_VColumn: {. 
36660 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
36670 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71  Vtab;.  const sq
36680 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
36690 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 44  odule;.  Mem *pD
366a0 65 73 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63  est;.  sqlite3_c
366b0 6f 6e 74 65 78 74 20 73 43 6f 6e 74 65 78 74 3b  ontext sContext;
366c0 0a 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ..  VdbeCursor *
366d0 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  pCur = p->apCsr[
366e0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
366f0 72 74 28 20 70 43 75 72 2d 3e 65 43 75 72 54 79  rt( pCur->eCurTy
36700 70 65 3d 3d 43 55 52 54 59 50 45 5f 56 54 41 42  pe==CURTYPE_VTAB
36710 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
36720 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
36730 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p3<=(p->nMem+1 -
36740 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
36750 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b    pDest = &aMem[
36760 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41  pOp->p3];.  memA
36770 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
36780 70 44 65 73 74 29 3b 0a 20 20 69 66 28 20 70 43  pDest);.  if( pC
36790 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  ur->nullRow ){. 
367a0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
367b0 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b  mSetNull(pDest);
367c0 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
367d0 20 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e    pVtab = pCur->
367e0 75 63 2e 70 56 43 75 72 2d 3e 70 56 74 61 62 3b  uc.pVCur->pVtab;
367f0 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74  .  pModule = pVt
36800 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61  ab->pModule;.  a
36810 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e  ssert( pModule->
36820 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d  xColumn );.  mem
36830 73 65 74 28 26 73 43 6f 6e 74 65 78 74 2c 20 30  set(&sContext, 0
36840 2c 20 73 69 7a 65 6f 66 28 73 43 6f 6e 74 65 78  , sizeof(sContex
36850 74 29 29 3b 0a 20 20 73 43 6f 6e 74 65 78 74 2e  t));.  sContext.
36860 70 4f 75 74 20 3d 20 70 44 65 73 74 3b 0a 20 20  pOut = pDest;.  
36870 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
36880 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  Dest, MEM_Null);
36890 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d  .  rc = pModule-
368a0 3e 78 43 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 75  >xColumn(pCur->u
368b0 63 2e 70 56 43 75 72 2c 20 26 73 43 6f 6e 74 65  c.pVCur, &sConte
368c0 78 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20  xt, pOp->p2);.  
368d0 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
368e0 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62  tErrmsg(p, pVtab
368f0 29 3b 0a 20 20 69 66 28 20 73 43 6f 6e 74 65 78  );.  if( sContex
36900 74 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20  t.isError ){.   
36910 20 72 63 20 3d 20 73 43 6f 6e 74 65 78 74 2e 69   rc = sContext.i
36920 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71  sError;.  }.  sq
36930 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
36940 6e 63 6f 64 69 6e 67 28 70 44 65 73 74 2c 20 65  ncoding(pDest, e
36950 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 52 45 47 49  ncoding);.  REGI
36960 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
36970 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 55 50  p3, pDest);.  UP
36980 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
36990 45 28 70 44 65 73 74 29 3b 0a 0a 20 20 69 66 28  E(pDest);..  if(
369a0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
369b0 6f 6f 42 69 67 28 70 44 65 73 74 29 20 29 7b 0a  ooBig(pDest) ){.
369c0 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
369d0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29  ;.  }.  if( rc )
369e0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
369f0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
36a00 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
36a10 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
36a20 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
36a30 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
36a40 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
36a50 4f 70 63 6f 64 65 3a 20 56 4e 65 78 74 20 50 31  Opcode: VNext P1
36a60 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
36a70 41 64 76 61 6e 63 65 20 76 69 72 74 75 61 6c 20  Advance virtual 
36a80 74 61 62 6c 65 20 50 31 20 74 6f 20 74 68 65 20  table P1 to the 
36a90 6e 65 78 74 20 72 6f 77 20 69 6e 20 69 74 73 20  next row in its 
36aa0 72 65 73 75 6c 74 20 73 65 74 20 61 6e 64 0a 2a  result set and.*
36ab0 2a 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75  * jump to instru
36ac0 63 74 69 6f 6e 20 50 32 2e 20 20 4f 72 2c 20 69  ction P2.  Or, i
36ad0 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  f the virtual ta
36ae0 62 6c 65 20 68 61 73 20 72 65 61 63 68 65 64 0a  ble has reached.
36af0 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 69 74  ** the end of it
36b00 73 20 72 65 73 75 6c 74 20 73 65 74 2c 20 74 68  s result set, th
36b10 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  en fall through 
36b20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
36b30 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
36b40 20 4f 50 5f 56 4e 65 78 74 3a 20 7b 20 20 20 2f   OP_VNext: {   /
36b50 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 73 71 6c 69  * jump */.  sqli
36b60 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
36b70 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
36b80 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
36b90 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 56  ;.  int res;.  V
36ba0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b  dbeCursor *pCur;
36bb0 0a 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 70  ..  res = 0;.  p
36bc0 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
36bd0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
36be0 74 28 20 70 43 75 72 2d 3e 65 43 75 72 54 79 70  t( pCur->eCurTyp
36bf0 65 3d 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20  e==CURTYPE_VTAB 
36c00 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e  );.  if( pCur->n
36c10 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62 72  ullRow ){.    br
36c20 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62  eak;.  }.  pVtab
36c30 20 3d 20 70 43 75 72 2d 3e 75 63 2e 70 56 43 75   = pCur->uc.pVCu
36c40 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64  r->pVtab;.  pMod
36c50 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f  ule = pVtab->pMo
36c60 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20  dule;.  assert( 
36c70 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 20 29  pModule->xNext )
36c80 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  ;..  /* Invoke t
36c90 68 65 20 78 4e 65 78 74 28 29 20 6d 65 74 68 6f  he xNext() metho
36ca0 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e  d of the module.
36cb0 20 54 68 65 72 65 20 69 73 20 6e 6f 20 77 61 79   There is no way
36cc0 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 75 6e   for the.  ** un
36cd0 64 65 72 6c 79 69 6e 67 20 69 6d 70 6c 65 6d 65  derlying impleme
36ce0 6e 74 61 74 69 6f 6e 20 74 6f 20 72 65 74 75 72  ntation to retur
36cf0 6e 20 61 6e 20 65 72 72 6f 72 20 69 66 20 6f 6e  n an error if on
36d00 65 20 6f 63 63 75 72 73 20 64 75 72 69 6e 67 0a  e occurs during.
36d10 20 20 2a 2a 20 78 4e 65 78 74 28 29 2e 20 49 6e    ** xNext(). In
36d20 73 74 65 61 64 2c 20 69 66 20 61 6e 20 65 72 72  stead, if an err
36d30 6f 72 20 6f 63 63 75 72 73 2c 20 74 72 75 65 20  or occurs, true 
36d40 69 73 20 72 65 74 75 72 6e 65 64 20 28 69 6e 64  is returned (ind
36d50 69 63 61 74 69 6e 67 20 74 68 61 74 20 0a 20 20  icating that .  
36d60 2a 2a 20 64 61 74 61 20 69 73 20 61 76 61 69 6c  ** data is avail
36d70 61 62 6c 65 29 20 61 6e 64 20 74 68 65 20 65 72  able) and the er
36d80 72 6f 72 20 63 6f 64 65 20 72 65 74 75 72 6e 65  ror code returne
36d90 64 20 77 68 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f  d when xColumn o
36da0 72 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f 74 68 65  r.  ** some othe
36db0 72 20 6d 65 74 68 6f 64 20 69 73 20 6e 65 78 74  r method is next
36dc0 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 74 68 65 20   invoked on the 
36dd0 73 61 76 65 20 76 69 72 74 75 61 6c 20 74 61 62  save virtual tab
36de0 6c 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a  le cursor..  */.
36df0 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
36e00 78 4e 65 78 74 28 70 43 75 72 2d 3e 75 63 2e 70  xNext(pCur->uc.p
36e10 56 43 75 72 29 3b 0a 20 20 73 71 6c 69 74 65 33  VCur);.  sqlite3
36e20 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
36e30 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66  (p, pVtab);.  if
36e40 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
36e50 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
36e60 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d    res = pModule-
36e70 3e 78 45 6f 66 28 70 43 75 72 2d 3e 75 63 2e 70  >xEof(pCur->uc.p
36e80 56 43 75 72 29 3b 0a 20 20 56 64 62 65 42 72 61  VCur);.  VdbeBra
36e90 6e 63 68 54 61 6b 65 6e 28 21 72 65 73 2c 32 29  nchTaken(!res,2)
36ea0 3b 0a 20 20 69 66 28 20 21 72 65 73 20 29 7b 0a  ;.  if( !res ){.
36eb0 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
36ec0 69 73 20 64 61 74 61 2c 20 6a 75 6d 70 20 74 6f  is data, jump to
36ed0 20 50 32 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20   P2 */.    goto 
36ee0 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63  jump_to_p2_and_c
36ef0 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
36f00 70 74 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63  pt;.  }.  goto c
36f10 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
36f20 70 74 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  pt;.}.#endif /* 
36f30 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
36f40 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
36f50 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
36f60 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
36f70 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61 6d 65   Opcode: VRename
36f80 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
36f90 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
36fa0 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  er to a virtual 
36fb0 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e  table object, an
36fc0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
36fd0 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73  ructure..** This
36fe0 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
36ff0 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
37000 67 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64  g xRename method
37010 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  . The value.** i
37020 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
37030 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 7a   passed as the z
37040 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 74 6f  Name argument to
37050 20 74 68 65 20 78 52 65 6e 61 6d 65 20 6d 65 74   the xRename met
37060 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  hod..*/.case OP_
37070 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73 71 6c  VRename: {.  sql
37080 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
37090 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65 3b 0a  ;.  Mem *pName;.
370a0 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e  .  pVtab = pOp->
370b0 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b  p4.pVtab->pVtab;
370c0 0a 20 20 70 4e 61 6d 65 20 3d 20 26 61 4d 65 6d  .  pName = &aMem
370d0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
370e0 65 72 74 28 20 70 56 74 61 62 2d 3e 70 4d 6f 64  ert( pVtab->pMod
370f0 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 20 29 3b 0a  ule->xRename );.
37100 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
37110 61 6c 69 64 28 70 4e 61 6d 65 29 20 29 3b 0a 20  alid(pName) );. 
37120 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
37130 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 52 45 47  Only==0 );.  REG
37140 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
37150 3e 70 31 2c 20 70 4e 61 6d 65 29 3b 0a 20 20 61  >p1, pName);.  a
37160 73 73 65 72 74 28 20 70 4e 61 6d 65 2d 3e 66 6c  ssert( pName->fl
37170 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 3b  ags & MEM_Str );
37180 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4e 61  .  testcase( pNa
37190 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f  me->enc==SQLITE_
371a0 55 54 46 38 20 29 3b 0a 20 20 74 65 73 74 63 61  UTF8 );.  testca
371b0 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d  se( pName->enc==
371c0 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 29  SQLITE_UTF16BE )
371d0 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4e  ;.  testcase( pN
371e0 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45  ame->enc==SQLITE
371f0 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20 20 72 63  _UTF16LE );.  rc
37200 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68   = sqlite3VdbeCh
37210 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4e 61  angeEncoding(pNa
37220 6d 65 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29  me, SQLITE_UTF8)
37230 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
37240 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
37250 72 72 6f 72 3b 0a 20 20 72 63 20 3d 20 70 56 74  rror;.  rc = pVt
37260 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65  ab->pModule->xRe
37270 6e 61 6d 65 28 70 56 74 61 62 2c 20 70 4e 61 6d  name(pVtab, pNam
37280 65 2d 3e 7a 29 3b 0a 20 20 73 71 6c 69 74 65 33  e->z);.  sqlite3
37290 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
372a0 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 70 2d  (p, pVtab);.  p-
372b0 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20  >expired = 0;.  
372c0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
372d0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
372e0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
372f0 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
37300 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
37310 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
37320 20 56 55 70 64 61 74 65 20 50 31 20 50 32 20 50   VUpdate P1 P2 P
37330 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
37340 73 69 73 3a 20 64 61 74 61 3d 72 5b 50 33 40 50  sis: data=r[P3@P
37350 32 5d 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  2].**.** P4 is a
37360 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69   pointer to a vi
37370 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65  rtual table obje
37380 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76  ct, an sqlite3_v
37390 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  tab structure..*
373a0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e  * This opcode in
373b0 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73  vokes the corres
373c0 70 6f 6e 64 69 6e 67 20 78 55 70 64 61 74 65 20  ponding xUpdate 
373d0 6d 65 74 68 6f 64 2e 20 50 32 20 76 61 6c 75 65  method. P2 value
373e0 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 69 67 75  s.** are contigu
373f0 6f 75 73 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73  ous memory cells
37400 20 73 74 61 72 74 69 6e 67 20 61 74 20 50 33 20   starting at P3 
37410 74 6f 20 70 61 73 73 20 74 6f 20 74 68 65 20 78  to pass to the x
37420 55 70 64 61 74 65 20 0a 2a 2a 20 69 6e 76 6f 63  Update .** invoc
37430 61 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65  ation. The value
37440 20 69 6e 20 72 65 67 69 73 74 65 72 20 28 50 33   in register (P3
37450 2b 50 32 2d 31 29 20 63 6f 72 72 65 73 70 6f 6e  +P2-1) correspon
37460 64 73 20 74 6f 20 74 68 65 20 0a 2a 2a 20 70 32  ds to the .** p2
37470 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  th element of th
37480 65 20 61 72 67 76 20 61 72 72 61 79 20 70 61 73  e argv array pas
37490 73 65 64 20 74 6f 20 78 55 70 64 61 74 65 2e 0a  sed to xUpdate..
374a0 2a 2a 0a 2a 2a 20 54 68 65 20 78 55 70 64 61 74  **.** The xUpdat
374b0 65 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20 64 6f  e method will do
374c0 20 61 20 44 45 4c 45 54 45 20 6f 72 20 61 6e 20   a DELETE or an 
374d0 49 4e 53 45 52 54 20 6f 72 20 62 6f 74 68 2e 0a  INSERT or both..
374e0 2a 2a 20 54 68 65 20 61 72 67 76 5b 30 5d 20 65  ** The argv[0] e
374f0 6c 65 6d 65 6e 74 20 28 77 68 69 63 68 20 63 6f  lement (which co
37500 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 6d 65 6d  rresponds to mem
37510 6f 72 79 20 63 65 6c 6c 20 50 33 29 0a 2a 2a 20  ory cell P3).** 
37520 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  is the rowid of 
37530 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e  a row to delete.
37540 20 20 49 66 20 61 72 67 76 5b 30 5d 20 69 73 20    If argv[0] is 
37550 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a  NULL then no .**
37560 20 64 65 6c 65 74 69 6f 6e 20 6f 63 63 75 72 73   deletion occurs
37570 2e 20 20 54 68 65 20 61 72 67 76 5b 31 5d 20 65  .  The argv[1] e
37580 6c 65 6d 65 6e 74 20 69 73 20 74 68 65 20 72 6f  lement is the ro
37590 77 69 64 20 6f 66 20 74 68 65 20 6e 65 77 20 0a  wid of the new .
375a0 2a 2a 20 72 6f 77 2e 20 20 54 68 69 73 20 63 61  ** row.  This ca
375b0 6e 20 62 65 20 4e 55 4c 4c 20 74 6f 20 68 61 76  n be NULL to hav
375c0 65 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  e the virtual ta
375d0 62 6c 65 20 73 65 6c 65 63 74 20 74 68 65 20 6e  ble select the n
375e0 65 77 20 0a 2a 2a 20 72 6f 77 69 64 20 66 6f 72  ew .** rowid for
375f0 20 69 74 73 65 6c 66 2e 20 20 54 68 65 20 73 75   itself.  The su
37600 62 73 65 71 75 65 6e 74 20 65 6c 65 6d 65 6e 74  bsequent element
37610 73 20 69 6e 20 74 68 65 20 61 72 72 61 79 20 61  s in the array a
37620 72 65 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  re .** the value
37630 73 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  s of columns in 
37640 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a  the new row..**.
37650 2a 2a 20 49 66 20 50 32 3d 3d 31 20 74 68 65 6e  ** If P2==1 then
37660 20 6e 6f 20 69 6e 73 65 72 74 20 69 73 20 70 65   no insert is pe
37670 72 66 6f 72 6d 65 64 2e 20 20 61 72 67 76 5b 30  rformed.  argv[0
37680 5d 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f  ] is the rowid o
37690 66 0a 2a 2a 20 61 20 72 6f 77 20 74 6f 20 64 65  f.** a row to de
376a0 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69  lete..**.** P1 i
376b0 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67  s a boolean flag
376c0 2e 20 49 66 20 69 74 20 69 73 20 73 65 74 20 74  . If it is set t
376d0 6f 20 74 72 75 65 20 61 6e 64 20 74 68 65 20 78  o true and the x
376e0 55 70 64 61 74 65 20 63 61 6c 6c 0a 2a 2a 20 69  Update call.** i
376f0 73 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68  s successful, th
37700 65 6e 20 74 68 65 20 76 61 6c 75 65 20 72 65 74  en the value ret
37710 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
37720 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  _last_insert_row
37730 69 64 28 29 20 0a 2a 2a 20 69 73 20 73 65 74 20  id() .** is set 
37740 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  to the value of 
37750 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20 74 68  the rowid for th
37760 65 20 72 6f 77 20 6a 75 73 74 20 69 6e 73 65 72  e row just inser
37770 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73  ted..**.** P5 is
37780 20 74 68 65 20 65 72 72 6f 72 20 61 63 74 69 6f   the error actio
37790 6e 73 20 28 4f 45 5f 52 65 70 6c 61 63 65 2c 20  ns (OE_Replace, 
377a0 4f 45 5f 46 61 69 6c 2c 20 4f 45 5f 49 67 6e 6f  OE_Fail, OE_Igno
377b0 72 65 2c 20 65 74 63 29 20 74 6f 0a 2a 2a 20 61  re, etc) to.** a
377c0 70 70 6c 79 20 69 6e 20 74 68 65 20 63 61 73 65  pply in the case
377d0 20 6f 66 20 61 20 63 6f 6e 73 74 72 61 69 6e 74   of a constraint
377e0 20 66 61 69 6c 75 72 65 20 6f 6e 20 61 6e 20 69   failure on an i
377f0 6e 73 65 72 74 20 6f 72 20 75 70 64 61 74 65 2e  nsert or update.
37800 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 55 70 64  .*/.case OP_VUpd
37810 61 74 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  ate: {.  sqlite3
37820 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
37830 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
37840 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20  dule *pModule;. 
37850 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74   int nArg;.  int
37860 20 69 3b 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74   i;.  sqlite_int
37870 36 34 20 72 6f 77 69 64 3b 0a 20 20 4d 65 6d 20  64 rowid;.  Mem 
37880 2a 2a 61 70 41 72 67 3b 0a 20 20 4d 65 6d 20 2a  **apArg;.  Mem *
37890 70 58 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  pX;..  assert( p
378a0 4f 70 2d 3e 70 32 3d 3d 31 20 20 20 20 20 20 20  Op->p2==1       
378b0 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f   || pOp->p5==OE_
378c0 46 61 69 6c 20 20 20 7c 7c 20 70 4f 70 2d 3e 70  Fail   || pOp->p
378d0 35 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 0a  5==OE_Rollback .
378e0 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70         || pOp->p
378f0 35 3d 3d 4f 45 5f 41 62 6f 72 74 20 7c 7c 20 70  5==OE_Abort || p
37900 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72  Op->p5==OE_Ignor
37910 65 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45  e || pOp->p5==OE
37920 5f 52 65 70 6c 61 63 65 0a 20 20 29 3b 0a 20 20  _Replace.  );.  
37930 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
37940 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 56 74 61  nly==0 );.  pVta
37950 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61  b = pOp->p4.pVta
37960 62 2d 3e 70 56 74 61 62 3b 0a 20 20 69 66 28 20  b->pVtab;.  if( 
37970 70 56 74 61 62 3d 3d 30 20 7c 7c 20 4e 45 56 45  pVtab==0 || NEVE
37980 52 28 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  R(pVtab->pModule
37990 3d 3d 30 29 20 29 7b 0a 20 20 20 20 72 63 20 3d  ==0) ){.    rc =
379a0 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a   SQLITE_LOCKED;.
379b0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
379c0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
379d0 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74  .  pModule = pVt
379e0 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 6e  ab->pModule;.  n
379f0 41 72 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  Arg = pOp->p2;. 
37a00 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
37a10 74 79 70 65 3d 3d 50 34 5f 56 54 41 42 20 29 3b  type==P4_VTAB );
37a20 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 4d  .  if( ALWAYS(pM
37a30 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 29 20  odule->xUpdate) 
37a40 29 7b 0a 20 20 20 20 75 38 20 76 74 61 62 4f 6e  ){.    u8 vtabOn
37a50 43 6f 6e 66 6c 69 63 74 20 3d 20 64 62 2d 3e 76  Conflict = db->v
37a60 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20  tabOnConflict;. 
37a70 20 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61 70     apArg = p->ap
37a80 41 72 67 3b 0a 20 20 20 20 70 58 20 3d 20 26 61  Arg;.    pX = &a
37a90 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
37aa0 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72    for(i=0; i<nAr
37ab0 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61  g; i++){.      a
37ac0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
37ad0 64 28 70 58 29 20 29 3b 0a 20 20 20 20 20 20 6d  d(pX) );.      m
37ae0 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
37af0 70 2c 20 70 58 29 3b 0a 20 20 20 20 20 20 61 70  p, pX);.      ap
37b00 41 72 67 5b 69 5d 20 3d 20 70 58 3b 0a 20 20 20  Arg[i] = pX;.   
37b10 20 20 20 70 58 2b 2b 3b 0a 20 20 20 20 7d 0a 20     pX++;.    }. 
37b20 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e     db->vtabOnCon
37b30 66 6c 69 63 74 20 3d 20 70 4f 70 2d 3e 70 35 3b  flict = pOp->p5;
37b40 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  .    rc = pModul
37b50 65 2d 3e 78 55 70 64 61 74 65 28 70 56 74 61 62  e->xUpdate(pVtab
37b60 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 2c 20 26  , nArg, apArg, &
37b70 72 6f 77 69 64 29 3b 0a 20 20 20 20 64 62 2d 3e  rowid);.    db->
37b80 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d  vtabOnConflict =
37b90 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b   vtabOnConflict;
37ba0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62  .    sqlite3Vtab
37bb0 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
37bc0 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66 28 20  pVtab);.    if( 
37bd0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
37be0 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20   pOp->p1 ){.    
37bf0 20 20 61 73 73 65 72 74 28 20 6e 41 72 67 3e 31    assert( nArg>1
37c00 20 26 26 20 61 70 41 72 67 5b 30 5d 20 26 26 20   && apArg[0] && 
37c10 28 61 70 41 72 67 5b 30 5d 2d 3e 66 6c 61 67 73  (apArg[0]->flags
37c20 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29 3b 0a 20 20  &MEM_Null) );.  
37c30 20 20 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69      db->lastRowi
37c40 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 20 3d 20  d = lastRowid = 
37c50 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 20  rowid;.    }.   
37c60 20 69 66 28 20 28 72 63 26 30 78 66 66 29 3d 3d   if( (rc&0xff)==
37c70 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
37c80 54 20 26 26 20 70 4f 70 2d 3e 70 34 2e 70 56 74  T && pOp->p4.pVt
37c90 61 62 2d 3e 62 43 6f 6e 73 74 72 61 69 6e 74 20  ab->bConstraint 
37ca0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70  ){.      if( pOp
37cb0 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20  ->p5==OE_Ignore 
37cc0 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
37cd0 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20  SQLITE_OK;.     
37ce0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
37cf0 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d  p->errorAction =
37d00 20 28 28 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52   ((pOp->p5==OE_R
37d10 65 70 6c 61 63 65 29 20 3f 20 4f 45 5f 41 62 6f  eplace) ? OE_Abo
37d20 72 74 20 3a 20 70 4f 70 2d 3e 70 35 29 3b 0a 20  rt : pOp->p5);. 
37d30 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
37d40 7b 0a 20 20 20 20 20 20 70 2d 3e 6e 43 68 61 6e  {.      p->nChan
37d50 67 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ge++;.    }.    
37d60 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
37d70 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
37d80 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
37d90 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
37da0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
37db0 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
37dc0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47   SQLITE_OMIT_PAG
37dd0 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70  ER_PRAGMAS./* Op
37de0 63 6f 64 65 3a 20 50 61 67 65 63 6f 75 6e 74 20  code: Pagecount 
37df0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
37e00 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72  * Write the curr
37e10 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  ent number of pa
37e20 67 65 73 20 69 6e 20 64 61 74 61 62 61 73 65 20  ges in database 
37e30 50 31 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c  P1 to memory cel
37e40 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  l P2..*/.case OP
37e50 5f 50 61 67 65 63 6f 75 6e 74 3a 20 7b 20 20 20  _Pagecount: {   
37e60 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
37e70 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74   */.  pOut = out
37e80 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
37e90 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  Op);.  pOut->u.i
37ea0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
37eb0 61 73 74 50 61 67 65 28 64 62 2d 3e 61 44 62 5b  astPage(db->aDb[
37ec0 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 29 3b 0a 20  pOp->p1].pBt);. 
37ed0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
37ee0 0a 0a 0a 23 69 66 6e 64 65 66 20 20 53 51 4c 49  ...#ifndef  SQLI
37ef0 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
37f00 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a  AGMAS./* Opcode:
37f10 20 4d 61 78 50 67 63 6e 74 20 50 31 20 50 32 20   MaxPgcnt P1 P2 
37f20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 79  P3 * *.**.** Try
37f30 20 74 6f 20 73 65 74 20 74 68 65 20 6d 61 78 69   to set the maxi
37f40 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 66  mum page count f
37f50 6f 72 20 64 61 74 61 62 61 73 65 20 50 31 20 74  or database P1 t
37f60 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 50  o the value in P
37f70 33 2e 0a 2a 2a 20 44 6f 20 6e 6f 74 20 6c 65 74  3..** Do not let
37f80 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67   the maximum pag
37f90 65 20 63 6f 75 6e 74 20 66 61 6c 6c 20 62 65 6c  e count fall bel
37fa0 6f 77 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  ow the current p
37fb0 61 67 65 20 63 6f 75 6e 74 20 61 6e 64 0a 2a 2a  age count and.**
37fc0 20 64 6f 20 6e 6f 74 20 63 68 61 6e 67 65 20 74   do not change t
37fd0 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20  he maximum page 
37fe0 63 6f 75 6e 74 20 76 61 6c 75 65 20 69 66 20 50  count value if P
37ff0 33 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 53 74 6f 72  3==0..**.** Stor
38000 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61  e the maximum pa
38010 67 65 20 63 6f 75 6e 74 20 61 66 74 65 72 20 74  ge count after t
38020 68 65 20 63 68 61 6e 67 65 20 69 6e 20 72 65 67  he change in reg
38030 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
38040 65 20 4f 50 5f 4d 61 78 50 67 63 6e 74 3a 20 7b  e OP_MaxPgcnt: {
38050 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
38060 75 74 32 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  ut2 */.  unsigne
38070 64 20 69 6e 74 20 6e 65 77 4d 61 78 3b 0a 20 20  d int newMax;.  
38080 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 70  Btree *pBt;..  p
38090 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
380a0 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
380b0 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f  pBt = db->aDb[pO
380c0 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 6e 65  p->p1].pBt;.  ne
380d0 77 4d 61 78 20 3d 20 30 3b 0a 20 20 69 66 28 20  wMax = 0;.  if( 
380e0 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 6e  pOp->p3 ){.    n
380f0 65 77 4d 61 78 20 3d 20 73 71 6c 69 74 65 33 42  ewMax = sqlite3B
38100 74 72 65 65 4c 61 73 74 50 61 67 65 28 70 42 74  treeLastPage(pBt
38110 29 3b 0a 20 20 20 20 69 66 28 20 6e 65 77 4d 61  );.    if( newMa
38120 78 20 3c 20 28 75 6e 73 69 67 6e 65 64 29 70 4f  x < (unsigned)pO
38130 70 2d 3e 70 33 20 29 20 6e 65 77 4d 61 78 20 3d  p->p3 ) newMax =
38140 20 28 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d 3e   (unsigned)pOp->
38150 70 33 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  p3;.  }.  pOut->
38160 75 2e 69 20 3d 20 73 71 6c 69 74 65 33 42 74 72  u.i = sqlite3Btr
38170 65 65 4d 61 78 50 61 67 65 43 6f 75 6e 74 28 70  eeMaxPageCount(p
38180 42 74 2c 20 6e 65 77 4d 61 78 29 3b 0a 20 20 62  Bt, newMax);.  b
38190 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
381a0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 69 74  ./* Opcode: Init
381b0 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
381c0 20 53 79 6e 6f 70 73 69 73 3a 20 53 74 61 72 74   Synopsis: Start
381d0 20 61 74 20 50 32 0a 2a 2a 0a 2a 2a 20 50 72 6f   at P2.**.** Pro
381e0 67 72 61 6d 73 20 63 6f 6e 74 61 69 6e 20 61 20  grams contain a 
381f0 73 69 6e 67 6c 65 20 69 6e 73 74 61 6e 63 65 20  single instance 
38200 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20 61  of this opcode a
38210 73 20 74 68 65 20 76 65 72 79 20 66 69 72 73 74  s the very first
38220 0a 2a 2a 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  .** opcode..**.*
38230 2a 20 49 66 20 74 72 61 63 69 6e 67 20 69 73 20  * If tracing is 
38240 65 6e 61 62 6c 65 64 20 28 62 79 20 74 68 65 20  enabled (by the 
38250 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29 29  sqlite3_trace())
38260 20 69 6e 74 65 72 66 61 63 65 2c 20 74 68 65 6e   interface, then
38270 0a 2a 2a 20 74 68 65 20 55 54 46 2d 38 20 73 74  .** the UTF-8 st
38280 72 69 6e 67 20 63 6f 6e 74 61 69 6e 65 64 20 69  ring contained i
38290 6e 20 50 34 20 69 73 20 65 6d 69 74 74 65 64 20  n P4 is emitted 
382a0 6f 6e 20 74 68 65 20 74 72 61 63 65 20 63 61 6c  on the trace cal
382b0 6c 62 61 63 6b 2e 0a 2a 2a 20 4f 72 20 69 66 20  lback..** Or if 
382c0 50 34 20 69 73 20 62 6c 61 6e 6b 2c 20 75 73 65  P4 is blank, use
382d0 20 74 68 65 20 73 74 72 69 6e 67 20 72 65 74 75   the string retu
382e0 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
382f0 73 71 6c 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  sql()..**.** If 
38300 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
38310 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 7