/ Hex Artifact Content
Login

Artifact bf51a88d09f3a3f22fec7e81fc5a1a6b72a7bc9a1863c8ab48d4983916e25fbd:


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 20 20 2f 2a 20 54 45 58 54 2d 3e 4e 55 4d  }.  /* TEXT->NUM
26d0: 45 52 49 43 20 69 73 20 6d 61 6e 79 2d 3e 6f 6e  ERIC is many->on
26e0: 65 2e 20 20 48 65 6e 63 65 2c 20 69 74 20 69 73  e.  Hence, it is
26f0: 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 69 6e   important to in
2700: 76 61 6c 69 64 61 74 65 20 74 68 65 0a 20 20 2a  validate the.  *
2710: 2a 20 73 74 72 69 6e 67 20 72 65 70 72 65 73 65  * string represe
2720: 6e 74 61 74 69 6f 6e 20 61 66 74 65 72 20 63 6f  ntation after co
2730: 6d 70 75 74 69 6e 67 20 61 20 6e 75 6d 65 72 69  mputing a numeri
2740: 63 20 65 71 75 69 76 61 6c 65 6e 74 2c 20 62 65  c equivalent, be
2750: 63 61 75 73 65 20 74 68 65 0a 20 20 2a 2a 20 73  cause the.  ** s
2760: 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61  tring representa
2770: 74 69 6f 6e 20 6d 69 67 68 74 20 6e 6f 74 20 62  tion might not b
2780: 65 20 74 68 65 20 63 61 6e 6f 6e 69 63 61 6c 20  e the canonical 
2790: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 66  representation f
27a0: 6f 72 20 74 68 65 0a 20 20 2a 2a 20 6e 75 6d 65  or the.  ** nume
27b0: 72 69 63 20 76 61 6c 75 65 2e 20 20 54 69 63 6b  ric value.  Tick
27c0: 65 74 20 5b 33 34 33 36 33 34 39 34 32 64 64 35  et [343634942dd5
27d0: 34 61 62 35 37 62 37 30 32 34 5d 20 32 30 31 38  4ab57b7024] 2018
27e0: 2d 30 31 2d 33 31 2e 20 2a 2f 0a 20 20 70 52 65  -01-31. */.  pRe
27f0: 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d  c->flags &= ~MEM
2800: 5f 53 74 72 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50  _Str;.}../*.** P
2810: 72 6f 63 65 73 73 69 6e 67 20 69 73 20 64 65 74  rocessing is det
2820: 65 72 6d 69 6e 65 20 62 79 20 74 68 65 20 61 66  ermine by the af
2830: 66 69 6e 69 74 79 20 70 61 72 61 6d 65 74 65 72  finity parameter
2840: 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  :.**.** SQLITE_A
2850: 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20 53  FF_INTEGER:.** S
2860: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a 0a  QLITE_AFF_REAL:.
2870: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  ** SQLITE_AFF_NU
2880: 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72 79  MERIC:.**    Try
2890: 20 74 6f 20 63 6f 6e 76 65 72 74 20 70 52 65 63   to convert pRec
28a0: 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72   to an integer r
28b0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 72  epresentation or
28c0: 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74 69   a .**    floati
28d0: 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72 65 73 65  ng-point represe
28e0: 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e 20 69 6e  ntation if an in
28f0: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
2900: 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e 6f  tion.**    is no
2910: 74 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f 74  t possible.  Not
2920: 65 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 67  e that the integ
2930: 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
2940: 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61 79  n is.**    alway
2950: 73 20 70 72 65 66 65 72 72 65 64 2c 20 65 76 65  s preferred, eve
2960: 6e 20 69 66 20 74 68 65 20 61 66 66 69 6e 69 74  n if the affinit
2970: 79 20 69 73 20 52 45 41 4c 2c 20 62 65 63 61 75  y is REAL, becau
2980: 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74 65  se.**    an inte
2990: 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69  ger representati
29a0: 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70 61 63 65  on is more space
29b0: 20 65 66 66 69 63 69 65 6e 74 20 6f 6e 20 64 69   efficient on di
29c0: 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45  sk..**.** SQLITE
29d0: 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20 20  _AFF_TEXT:.**   
29e0: 20 43 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f   Convert pRec to
29f0: 20 61 20 74 65 78 74 20 72 65 70 72 65 73 65 6e   a text represen
2a00: 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51  tation..**.** SQ
2a10: 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 3a 0a 2a  LITE_AFF_BLOB:.*
2a20: 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70 52 65  *    No-op.  pRe
2a30: 63 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a  c is unchanged..
2a40: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61  */.static void a
2a50: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20  pplyAffinity(.  
2a60: 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20 20 20 20  Mem *pRec,      
2a70: 20 20 20 20 2f 2a 20 54 68 65 20 76 61 6c 75 65      /* The value
2a80: 20 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e 69   to apply affini
2a90: 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61 72 20  ty to */.  char 
2aa0: 61 66 66 69 6e 69 74 79 2c 20 20 20 20 20 20 2f  affinity,      /
2ab0: 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74  * The affinity t
2ac0: 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a  o be applied */.
2ad0: 20 20 75 38 20 65 6e 63 20 20 20 20 20 20 20 20    u8 enc        
2ae0: 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 69        /* Use thi
2af0: 73 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  s text encoding 
2b00: 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66 66 69  */.){.  if( affi
2b10: 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46 46  nity>=SQLITE_AFF
2b20: 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20 20 20  _NUMERIC ){.    
2b30: 61 73 73 65 72 74 28 20 61 66 66 69 6e 69 74 79  assert( affinity
2b40: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  ==SQLITE_AFF_INT
2b50: 45 47 45 52 20 7c 7c 20 61 66 66 69 6e 69 74 79  EGER || affinity
2b60: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  ==SQLITE_AFF_REA
2b70: 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7c  L.             |
2b80: 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49  | affinity==SQLI
2b90: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29  TE_AFF_NUMERIC )
2ba0: 3b 0a 20 20 20 20 69 66 28 20 28 70 52 65 63 2d  ;.    if( (pRec-
2bb0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
2bc0: 29 3d 3d 30 20 29 7b 20 2f 2a 4f 50 54 49 4d 49  )==0 ){ /*OPTIMI
2bd0: 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a  ZATION-IF-FALSE*
2be0: 2f 0a 20 20 20 20 20 20 69 66 28 20 28 70 52 65  /.      if( (pRe
2bf0: 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  c->flags & MEM_R
2c00: 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  eal)==0 ){.     
2c10: 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61     if( pRec->fla
2c20: 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 20 61  gs & MEM_Str ) a
2c30: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
2c40: 69 74 79 28 70 52 65 63 2c 31 29 3b 0a 20 20 20  ity(pRec,1);.   
2c50: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2c60: 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74    sqlite3VdbeInt
2c70: 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 52 65  egerAffinity(pRe
2c80: 63 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  c);.      }.    
2c90: 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 61 66  }.  }else if( af
2ca0: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2cb0: 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 2f  FF_TEXT ){.    /
2cc0: 2a 20 4f 6e 6c 79 20 61 74 74 65 6d 70 74 20 74  * Only attempt t
2cd0: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 6f  he conversion to
2ce0: 20 54 45 58 54 20 69 66 20 74 68 65 72 65 20 69   TEXT if there i
2cf0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20  s an integer or 
2d00: 72 65 61 6c 0a 20 20 20 20 2a 2a 20 72 65 70 72  real.    ** repr
2d10: 65 73 65 6e 74 61 74 69 6f 6e 20 28 62 6c 6f 62  esentation (blob
2d20: 20 61 6e 64 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74   and NULL do not
2d30: 20 67 65 74 20 63 6f 6e 76 65 72 74 65 64 29 20   get converted) 
2d40: 62 75 74 20 6e 6f 20 73 74 72 69 6e 67 0a 20 20  but no string.  
2d50: 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74    ** representat
2d60: 69 6f 6e 2e 20 20 49 74 20 77 6f 75 6c 64 20 62  ion.  It would b
2d70: 65 20 68 61 72 6d 6c 65 73 73 20 74 6f 20 72 65  e harmless to re
2d80: 70 65 61 74 20 74 68 65 20 63 6f 6e 76 65 72 73  peat the convers
2d90: 69 6f 6e 20 69 66 20 0a 20 20 20 20 2a 2a 20 74  ion if .    ** t
2da0: 68 65 72 65 20 69 73 20 61 6c 72 65 61 64 79 20  here is already 
2db0: 61 20 73 74 72 69 6e 67 20 72 65 70 2c 20 62 75  a string rep, bu
2dc0: 74 20 69 74 20 69 73 20 70 6f 69 6e 74 6c 65 73  t it is pointles
2dd0: 73 20 74 6f 20 77 61 73 74 65 20 74 68 6f 73 65  s to waste those
2de0: 0a 20 20 20 20 2a 2a 20 43 50 55 20 63 79 63 6c  .    ** CPU cycl
2df0: 65 73 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 30  es. */.    if( 0
2e00: 3d 3d 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d  ==(pRec->flags&M
2e10: 45 4d 5f 53 74 72 29 20 29 7b 20 2f 2a 4f 50 54  EM_Str) ){ /*OPT
2e20: 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c  IMIZATION-IF-FAL
2e30: 53 45 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28  SE*/.      if( (
2e40: 70 52 65 63 2d 3e 66 6c 61 67 73 26 28 4d 45 4d  pRec->flags&(MEM
2e50: 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 20  _Real|MEM_Int)) 
2e60: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
2e70: 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69  e3VdbeMemStringi
2e80: 66 79 28 70 52 65 63 2c 20 65 6e 63 2c 20 31 29  fy(pRec, enc, 1)
2e90: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
2ea0: 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20      pRec->flags 
2eb0: 26 3d 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45  &= ~(MEM_Real|ME
2ec0: 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f  M_Int);.  }.}../
2ed0: 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76  *.** Try to conv
2ee0: 65 72 74 20 74 68 65 20 74 79 70 65 20 6f 66 20  ert the type of 
2ef0: 61 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d  a function argum
2f00: 65 6e 74 20 6f 72 20 61 20 72 65 73 75 6c 74 20  ent or a result 
2f10: 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61  column.** into a
2f20: 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65   numeric represe
2f30: 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65 20 65 69  ntation.  Use ei
2f40: 74 68 65 72 20 49 4e 54 45 47 45 52 20 6f 72 20  ther INTEGER or 
2f50: 52 45 41 4c 20 77 68 69 63 68 65 76 65 72 0a 2a  REAL whichever.*
2f60: 2a 20 69 73 20 61 70 70 72 6f 70 72 69 61 74 65  * is appropriate
2f70: 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20 74  .  But only do t
2f80: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 66  he conversion if
2f90: 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
2fa0: 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20  without.** loss 
2fb0: 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  of information a
2fc0: 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20 72 65  nd return the re
2fd0: 76 69 73 65 64 20 74 79 70 65 20 6f 66 20 74 68  vised type of th
2fe0: 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69  e argument..*/.i
2ff0: 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt sqlite3_value
3000: 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73 71  _numeric_type(sq
3010: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
3020: 6c 29 7b 0a 20 20 69 6e 74 20 65 54 79 70 65 20  l){.  int eType 
3030: 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  = sqlite3_value_
3040: 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 69 66  type(pVal);.  if
3050: 28 20 65 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f  ( eType==SQLITE_
3060: 54 45 58 54 20 29 7b 0a 20 20 20 20 4d 65 6d 20  TEXT ){.    Mem 
3070: 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70 56  *pMem = (Mem*)pV
3080: 61 6c 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d  al;.    applyNum
3090: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d 65  ericAffinity(pMe
30a0: 6d 2c 20 30 29 3b 0a 20 20 20 20 65 54 79 70 65  m, 0);.    eType
30b0: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
30c0: 5f 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 7d  _type(pVal);.  }
30d0: 0a 20 20 72 65 74 75 72 6e 20 65 54 79 70 65 3b  .  return eType;
30e0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74  .}../*.** Export
30f0: 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61 70  ed version of ap
3100: 70 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20 54  plyAffinity(). T
3110: 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e  his one works on
3120: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c   sqlite3_value*,
3130: 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e 74   .** not the int
3140: 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65 2e  ernal Mem* type.
3150: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
3160: 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69  ValueApplyAffini
3170: 74 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  ty(.  sqlite3_va
3180: 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75 38  lue *pVal, .  u8
3190: 20 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75 38   affinity, .  u8
31a0: 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79 41   enc.){.  applyA
31b0: 66 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29 70  ffinity((Mem *)p
31c0: 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20 65  Val, affinity, e
31d0: 6e 63 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70 4d  nc);.}../*.** pM
31e0: 65 6d 20 63 75 72 72 65 6e 74 6c 79 20 6f 6e 6c  em currently onl
31f0: 79 20 68 6f 6c 64 73 20 61 20 73 74 72 69 6e 67  y holds a string
3200: 20 74 79 70 65 20 28 6f 72 20 6d 61 79 62 65 20   type (or maybe 
3210: 61 20 42 4c 4f 42 20 74 68 61 74 20 77 65 20 63  a BLOB that we c
3220: 61 6e 0a 2a 2a 20 69 6e 74 65 72 70 72 65 74 20  an.** interpret 
3230: 61 73 20 61 20 73 74 72 69 6e 67 20 69 66 20 77  as a string if w
3240: 65 20 77 61 6e 74 20 74 6f 29 2e 20 20 43 6f 6d  e want to).  Com
3250: 70 75 74 65 20 69 74 73 20 63 6f 72 72 65 73 70  pute its corresp
3260: 6f 6e 64 69 6e 67 0a 2a 2a 20 6e 75 6d 65 72 69  onding.** numeri
3270: 63 20 74 79 70 65 2c 20 69 66 20 68 61 73 20 6f  c type, if has o
3280: 6e 65 2e 20 20 53 65 74 20 74 68 65 20 70 4d 65  ne.  Set the pMe
3290: 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d 2d  m->u.r and pMem-
32a0: 3e 75 2e 69 20 66 69 65 6c 64 73 0a 2a 2a 20 61  >u.i fields.** a
32b0: 63 63 6f 72 64 69 6e 67 6c 79 2e 0a 2a 2f 0a 73  ccordingly..*/.s
32c0: 74 61 74 69 63 20 75 31 36 20 53 51 4c 49 54 45  tatic u16 SQLITE
32d0: 5f 4e 4f 49 4e 4c 49 4e 45 20 63 6f 6d 70 75 74  _NOINLINE comput
32e0: 65 4e 75 6d 65 72 69 63 54 79 70 65 28 4d 65 6d  eNumericType(Mem
32f0: 20 2a 70 4d 65 6d 29 7b 0a 20 20 61 73 73 65 72   *pMem){.  asser
3300: 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  t( (pMem->flags 
3310: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
3320: 65 61 6c 29 29 3d 3d 30 20 29 3b 0a 20 20 61 73  eal))==0 );.  as
3330: 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61  sert( (pMem->fla
3340: 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
3350: 4d 5f 42 6c 6f 62 29 29 21 3d 30 20 29 3b 0a 20  M_Blob))!=0 );. 
3360: 20 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 46   if( sqlite3AtoF
3370: 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d  (pMem->z, &pMem-
3380: 3e 75 2e 72 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70  >u.r, pMem->n, p
3390: 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a  Mem->enc)==0 ){.
33a0: 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20      return 0;.  
33b0: 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 41  }.  if( sqlite3A
33c0: 74 6f 69 36 34 28 70 4d 65 6d 2d 3e 7a 2c 20 26  toi64(pMem->z, &
33d0: 70 4d 65 6d 2d 3e 75 2e 69 2c 20 70 4d 65 6d 2d  pMem->u.i, pMem-
33e0: 3e 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d  >n, pMem->enc)==
33f0: 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  0 ){.    return 
3400: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20 72  MEM_Int;.  }.  r
3410: 65 74 75 72 6e 20 4d 45 4d 5f 52 65 61 6c 3b 0a  eturn MEM_Real;.
3420: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
3430: 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65  the numeric type
3440: 20 66 6f 72 20 70 4d 65 6d 2c 20 65 69 74 68 65   for pMem, eithe
3450: 72 20 4d 45 4d 5f 49 6e 74 20 6f 72 20 4d 45 4d  r MEM_Int or MEM
3460: 5f 52 65 61 6c 20 6f 72 20 62 6f 74 68 20 6f 72  _Real or both or
3470: 0a 2a 2a 20 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a  .** none.  .**.*
3480: 2a 20 55 6e 6c 69 6b 65 20 61 70 70 6c 79 4e 75  * Unlike applyNu
3490: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 29 2c  mericAffinity(),
34a0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 64 6f   this routine do
34b0: 65 73 20 6e 6f 74 20 6d 6f 64 69 66 79 20 70 4d  es not modify pM
34c0: 65 6d 2d 3e 66 6c 61 67 73 2e 0a 2a 2a 20 42 75  em->flags..** Bu
34d0: 74 20 69 74 20 64 6f 65 73 20 73 65 74 20 70 4d  t it does set pM
34e0: 65 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d  em->u.r and pMem
34f0: 2d 3e 75 2e 69 20 61 70 70 72 6f 70 72 69 61 74  ->u.i appropriat
3500: 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75  ely..*/.static u
3510: 31 36 20 6e 75 6d 65 72 69 63 54 79 70 65 28 4d  16 numericType(M
3520: 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 66 28  em *pMem){.  if(
3530: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28   pMem->flags & (
3540: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
3550: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
3560: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
3570: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
3580: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4d 65 6d  ;.  }.  if( pMem
3590: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
35a0: 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a  tr|MEM_Blob) ){.
35b0: 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6d 70 75      return compu
35c0: 74 65 4e 75 6d 65 72 69 63 54 79 70 65 28 70 4d  teNumericType(pM
35d0: 65 6d 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  em);.  }.  retur
35e0: 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53  n 0;.}..#ifdef S
35f0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a  QLITE_DEBUG./*.*
3600: 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20 73  * Write a nice s
3610: 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61  tring representa
3620: 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74  tion of the cont
3630: 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65  ents of cell pMe
3640: 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72  m.** into buffer
3650: 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42   zBuf, length nB
3660: 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  uf..*/.void sqli
3670: 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79  te3VdbeMemPretty
3680: 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c  Print(Mem *pMem,
3690: 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20   char *zBuf){.  
36a0: 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75  char *zCsr = zBu
36b0: 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65  f;.  int f = pMe
36c0: 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61  m->flags;..  sta
36d0: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
36e0: 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d  const encnames[]
36f0: 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22   = {"(X)", "(8)"
3700: 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36  , "(16LE)", "(16
3710: 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26  BE)"};..  if( f&
3720: 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20  MEM_Blob ){.    
3730: 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20  int i;.    char 
3740: 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  c;.    if( f & M
3750: 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20  EM_Dyn ){.      
3760: 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61  c = 'z';.      a
3770: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
3780: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65  _Static|MEM_Ephe
3790: 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  m))==0 );.    }e
37a0: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
37b0: 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20  Static ){.      
37c0: 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61  c = 't';.      a
37d0: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
37e0: 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29  _Dyn|MEM_Ephem))
37f0: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
3800: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68   if( f & MEM_Eph
3810: 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  em ){.      c = 
3820: 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'e';.      asser
3830: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
3840: 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30  tic|MEM_Dyn))==0
3850: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   );.    }else{. 
3860: 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20       c = 's';.  
3870: 20 20 7d 0a 20 20 20 20 2a 28 7a 43 73 72 2b 2b    }.    *(zCsr++
3880: 29 20 3d 20 63 3b 0a 20 20 20 20 73 71 6c 69 74  ) = c;.    sqlit
3890: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
38a0: 20 7a 43 73 72 2c 20 22 25 64 5b 22 2c 20 70 4d   zCsr, "%d[", pM
38b0: 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a 43 73 72  em->n);.    zCsr
38c0: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
38d0: 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 66  n30(zCsr);.    f
38e0: 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20  or(i=0; i<16 && 
38f0: 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b  i<pMem->n; i++){
3900: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
3910: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3920: 72 2c 20 22 25 30 32 58 22 2c 20 28 28 69 6e 74  r, "%02X", ((int
3930: 29 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78  )pMem->z[i] & 0x
3940: 46 46 29 29 3b 0a 20 20 20 20 20 20 7a 43 73 72  FF));.      zCsr
3950: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
3960: 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d  n30(zCsr);.    }
3970: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
3980: 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b  16 && i<pMem->n;
3990: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68 61   i++){.      cha
39a0: 72 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d  r z = pMem->z[i]
39b0: 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 3c 33 32  ;.      if( z<32
39c0: 20 7c 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43 73   || z>126 ) *zCs
39d0: 72 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20  r++ = '.';.     
39e0: 20 65 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d 20   else *zCsr++ = 
39f0: 7a 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 28 7a  z;.    }.    *(z
3a00: 43 73 72 2b 2b 29 20 3d 20 27 5d 27 3b 0a 20 20  Csr++) = ']';.  
3a10: 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 5a 65    if( f & MEM_Ze
3a20: 72 6f 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ro ){.      sqli
3a30: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30  te3_snprintf(100
3a40: 2c 20 7a 43 73 72 2c 22 2b 25 64 7a 22 2c 70 4d  , zCsr,"+%dz",pM
3a50: 65 6d 2d 3e 75 2e 6e 5a 65 72 6f 29 3b 0a 20 20  em->u.nZero);.  
3a60: 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69      zCsr += sqli
3a70: 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72  te3Strlen30(zCsr
3a80: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 7a 43  );.    }.    *zC
3a90: 73 72 20 3d 20 27 5c 30 27 3b 0a 20 20 7d 65 6c  sr = '\0';.  }el
3aa0: 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53  se if( f & MEM_S
3ab0: 74 72 20 29 7b 0a 20 20 20 20 69 6e 74 20 6a 2c  tr ){.    int j,
3ac0: 20 6b 3b 0a 20 20 20 20 7a 42 75 66 5b 30 5d 20   k;.    zBuf[0] 
3ad0: 3d 20 27 20 27 3b 0a 20 20 20 20 69 66 28 20 66  = ' ';.    if( f
3ae0: 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20   & MEM_Dyn ){.  
3af0: 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 7a      zBuf[1] = 'z
3b00: 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ';.      assert(
3b10: 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69   (f & (MEM_Stati
3b20: 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30  c|MEM_Ephem))==0
3b30: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   );.    }else if
3b40: 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74 69 63  ( f & MEM_Static
3b50: 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31   ){.      zBuf[1
3b60: 5d 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61  ] = 't';.      a
3b70: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
3b80: 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29  _Dyn|MEM_Ephem))
3b90: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
3ba0: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68   if( f & MEM_Eph
3bb0: 65 6d 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66  em ){.      zBuf
3bc0: 5b 31 5d 20 3d 20 27 65 27 3b 0a 20 20 20 20 20  [1] = 'e';.     
3bd0: 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d   assert( (f & (M
3be0: 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79  EM_Static|MEM_Dy
3bf0: 6e 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  n))==0 );.    }e
3c00: 6c 73 65 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b  lse{.      zBuf[
3c10: 31 5d 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a  1] = 's';.    }.
3c20: 20 20 20 20 6b 20 3d 20 32 3b 0a 20 20 20 20 73      k = 2;.    s
3c30: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
3c40: 31 30 30 2c 20 26 7a 42 75 66 5b 6b 5d 2c 20 22  100, &zBuf[k], "
3c50: 25 64 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20  %d", pMem->n);. 
3c60: 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33 53     k += sqlite3S
3c70: 74 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b 5d  trlen30(&zBuf[k]
3c80: 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d  );.    zBuf[k++]
3c90: 20 3d 20 27 5b 27 3b 0a 20 20 20 20 66 6f 72 28   = '[';.    for(
3ca0: 6a 3d 30 3b 20 6a 3c 31 35 20 26 26 20 6a 3c 70  j=0; j<15 && j<p
3cb0: 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29 7b 0a 20 20  Mem->n; j++){.  
3cc0: 20 20 20 20 75 38 20 63 20 3d 20 70 4d 65 6d 2d      u8 c = pMem-
3cd0: 3e 7a 5b 6a 5d 3b 0a 20 20 20 20 20 20 69 66 28  >z[j];.      if(
3ce0: 20 63 3e 3d 30 78 32 30 20 26 26 20 63 3c 30 78   c>=0x20 && c<0x
3cf0: 37 66 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 42  7f ){.        zB
3d00: 75 66 5b 6b 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20  uf[k++] = c;.   
3d10: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
3d20: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 2e    zBuf[k++] = '.
3d30: 27 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  ';.      }.    }
3d40: 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d  .    zBuf[k++] =
3d50: 20 27 5d 27 3b 0a 20 20 20 20 73 71 6c 69 74 65   ']';.    sqlite
3d60: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 26  3_snprintf(100,&
3d70: 7a 42 75 66 5b 6b 5d 2c 20 65 6e 63 6e 61 6d 65  zBuf[k], encname
3d80: 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20  s[pMem->enc]);. 
3d90: 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33 53     k += sqlite3S
3da0: 74 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b 5d  trlen30(&zBuf[k]
3db0: 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d  );.    zBuf[k++]
3dc0: 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64   = 0;.  }.}.#end
3dd0: 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
3de0: 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 50 72  E_DEBUG./*.** Pr
3df0: 69 6e 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  int the value of
3e00: 20 61 20 72 65 67 69 73 74 65 72 20 66 6f 72 20   a register for 
3e10: 74 72 61 63 69 6e 67 20 70 75 72 70 6f 73 65 73  tracing purposes
3e20: 3a 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  :.*/.static void
3e30: 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28 4d   memTracePrint(M
3e40: 65 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d  em *p){.  if( p-
3e50: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 55 6e 64  >flags & MEM_Und
3e60: 65 66 69 6e 65 64 20 29 7b 0a 20 20 20 20 70 72  efined ){.    pr
3e70: 69 6e 74 66 28 22 20 75 6e 64 65 66 69 6e 65 64  intf(" undefined
3e80: 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ");.  }else if( 
3e90: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  p->flags & MEM_N
3ea0: 75 6c 6c 20 29 7b 0a 20 20 20 20 70 72 69 6e 74  ull ){.    print
3eb0: 66 28 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  f(p->flags & MEM
3ec0: 5f 5a 65 72 6f 20 3f 20 22 20 4e 55 4c 4c 2d 6e  _Zero ? " NULL-n
3ed0: 6f 63 68 6e 67 22 20 3a 20 22 20 4e 55 4c 4c 22  ochng" : " NULL"
3ee0: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28  );.  }else if( (
3ef0: 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  p->flags & (MEM_
3f00: 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28  Int|MEM_Str))==(
3f10: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
3f20: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
3f30: 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e   si:%lld", p->u.
3f40: 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  i);.  }else if( 
3f50: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  p->flags & MEM_I
3f60: 6e 74 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66  nt ){.    printf
3f70: 28 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75  (" i:%lld", p->u
3f80: 2e 69 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  .i);.#ifndef SQL
3f90: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
3fa0: 47 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20  G_POINT.  }else 
3fb0: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3fc0: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70  EM_Real ){.    p
3fd0: 72 69 6e 74 66 28 22 20 72 3a 25 67 22 2c 20 70  rintf(" r:%g", p
3fe0: 2d 3e 75 2e 72 29 3b 0a 23 65 6e 64 69 66 0a 20  ->u.r);.#endif. 
3ff0: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
4000: 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
4010: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
4020: 20 28 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d   (rowset)");.  }
4030: 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a  else{.    char z
4040: 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71  Buf[200];.    sq
4050: 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74  lite3VdbeMemPret
4060: 74 79 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29  tyPrint(p, zBuf)
4070: 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 25  ;.    printf(" %
4080: 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 20  s", zBuf);.  }. 
4090: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
40a0: 4d 45 4d 5f 53 75 62 74 79 70 65 20 29 20 70 72  MEM_Subtype ) pr
40b0: 69 6e 74 66 28 22 20 73 75 62 74 79 70 65 3d 30  intf(" subtype=0
40c0: 78 25 30 32 78 22 2c 20 70 2d 3e 65 53 75 62 74  x%02x", p->eSubt
40d0: 79 70 65 29 3b 0a 7d 0a 73 74 61 74 69 63 20 76  ype);.}.static v
40e0: 6f 69 64 20 72 65 67 69 73 74 65 72 54 72 61 63  oid registerTrac
40f0: 65 28 69 6e 74 20 69 52 65 67 2c 20 4d 65 6d 20  e(int iReg, Mem 
4100: 2a 70 29 7b 0a 20 20 70 72 69 6e 74 66 28 22 52  *p){.  printf("R
4110: 45 47 5b 25 64 5d 20 3d 20 22 2c 20 69 52 65 67  EG[%d] = ", iReg
4120: 29 3b 0a 20 20 6d 65 6d 54 72 61 63 65 50 72 69  );.  memTracePri
4130: 6e 74 28 70 29 3b 0a 20 20 70 72 69 6e 74 66 28  nt(p);.  printf(
4140: 22 5c 6e 22 29 3b 0a 20 20 73 71 6c 69 74 65 33  "\n");.  sqlite3
4150: 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61  VdbeCheckMemInva
4160: 72 69 61 6e 74 73 28 70 29 3b 0a 7d 0a 23 65 6e  riants(p);.}.#en
4170: 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
4180: 54 45 5f 44 45 42 55 47 0a 23 20 20 64 65 66 69  TE_DEBUG.#  defi
4190: 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  ne REGISTER_TRAC
41a0: 45 28 52 2c 4d 29 20 69 66 28 64 62 2d 3e 66 6c  E(R,M) if(db->fl
41b0: 61 67 73 26 53 51 4c 49 54 45 5f 56 64 62 65 54  ags&SQLITE_VdbeT
41c0: 72 61 63 65 29 72 65 67 69 73 74 65 72 54 72 61  race)registerTra
41d0: 63 65 28 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20  ce(R,M).#else.# 
41e0: 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52   define REGISTER
41f0: 5f 54 52 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64  _TRACE(R,M).#end
4200: 69 66 0a 0a 0a 23 69 66 64 65 66 20 56 44 42 45  if...#ifdef VDBE
4210: 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a  _PROFILE../* .**
4220: 20 68 77 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69   hwtime.h contai
4230: 6e 73 20 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62  ns inline assemb
4240: 6c 65 72 20 63 6f 64 65 20 66 6f 72 20 69 6d 70  ler code for imp
4250: 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69  lementing .** hi
4260: 67 68 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20 74  gh-performance t
4270: 69 6d 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a  iming routines..
4280: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 68 77 74  */.#include "hwt
4290: 69 6d 65 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a  ime.h"..#endif..
42a0: 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f  #ifndef NDEBUG./
42b0: 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69  *.** This functi
42c0: 6f 6e 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65  on is only calle
42d0: 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e  d from within an
42e0: 20 61 73 73 65 72 74 28 29 20 65 78 70 72 65 73   assert() expres
42f0: 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63  sion. It.** chec
4300: 6b 73 20 74 68 61 74 20 74 68 65 20 73 71 6c 69  ks that the sqli
4310: 74 65 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e  te3.nTransaction
4320: 20 76 61 72 69 61 62 6c 65 20 69 73 20 63 6f 72   variable is cor
4330: 72 65 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a  rectly set to.**
4340: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e   the number of n
4350: 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  on-transaction s
4360: 61 76 65 70 6f 69 6e 74 73 20 63 75 72 72 65 6e  avepoints curren
4370: 74 6c 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c  tly in the .** l
4380: 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74  inked list start
4390: 69 6e 67 20 61 74 20 73 71 6c 69 74 65 33 2e 70  ing at sqlite3.p
43a0: 53 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a  Savepoint..** .*
43b0: 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20  * Usage:.**.**  
43c0: 20 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b     assert( check
43d0: 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64  SavepointCount(d
43e0: 62 29 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20  b) );.*/.static 
43f0: 69 6e 74 20 63 68 65 63 6b 53 61 76 65 70 6f 69  int checkSavepoi
4400: 6e 74 43 6f 75 6e 74 28 73 71 6c 69 74 65 33 20  ntCount(sqlite3 
4410: 2a 64 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20  *db){.  int n = 
4420: 30 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  0;.  Savepoint *
4430: 70 3b 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70  p;.  for(p=db->p
4440: 53 61 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d  Savepoint; p; p=
4450: 70 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20  p->pNext) n++;. 
4460: 20 61 73 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d   assert( n==(db-
4470: 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62  >nSavepoint + db
4480: 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
4490: 61 76 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72  avepoint) );.  r
44a0: 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69  eturn 1;.}.#endi
44b0: 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  f../*.** Return 
44c0: 74 68 65 20 72 65 67 69 73 74 65 72 20 6f 66 20  the register of 
44d0: 70 4f 70 2d 3e 70 32 20 61 66 74 65 72 20 66 69  pOp->p2 after fi
44e0: 72 73 74 20 70 72 65 70 61 72 69 6e 67 20 69 74  rst preparing it
44f0: 20 74 6f 20 62 65 0a 2a 2a 20 6f 76 65 72 77 72   to be.** overwr
4500: 69 74 74 65 6e 20 77 69 74 68 20 61 6e 20 69 6e  itten with an in
4510: 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a  teger value..*/.
4520: 73 74 61 74 69 63 20 53 51 4c 49 54 45 5f 4e 4f  static SQLITE_NO
4530: 49 4e 4c 49 4e 45 20 4d 65 6d 20 2a 6f 75 74 32  INLINE Mem *out2
4540: 50 72 65 72 65 6c 65 61 73 65 57 69 74 68 43 6c  PrereleaseWithCl
4550: 65 61 72 28 4d 65 6d 20 2a 70 4f 75 74 29 7b 0a  ear(Mem *pOut){.
4560: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
4570: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
4580: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
4590: 45 4d 5f 49 6e 74 3b 0a 20 20 72 65 74 75 72 6e  EM_Int;.  return
45a0: 20 70 4f 75 74 3b 0a 7d 0a 73 74 61 74 69 63 20   pOut;.}.static 
45b0: 4d 65 6d 20 2a 6f 75 74 32 50 72 65 72 65 6c 65  Mem *out2Prerele
45c0: 61 73 65 28 56 64 62 65 20 2a 70 2c 20 56 64 62  ase(Vdbe *p, Vdb
45d0: 65 4f 70 20 2a 70 4f 70 29 7b 0a 20 20 4d 65 6d  eOp *pOp){.  Mem
45e0: 20 2a 70 4f 75 74 3b 0a 20 20 61 73 73 65 72 74   *pOut;.  assert
45f0: 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
4600: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
4610: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
4620: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
4630: 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pOut = &p->aMem[
4640: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41  pOp->p2];.  memA
4650: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
4660: 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 56 64 62  pOut);.  if( Vdb
4670: 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74  eMemDynamic(pOut
4680: 29 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54  ) ){ /*OPTIMIZAT
4690: 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20  ION-IF-FALSE*/. 
46a0: 20 20 20 72 65 74 75 72 6e 20 6f 75 74 32 50 72     return out2Pr
46b0: 65 72 65 6c 65 61 73 65 57 69 74 68 43 6c 65 61  ereleaseWithClea
46c0: 72 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65  r(pOut);.  }else
46d0: 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  {.    pOut->flag
46e0: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  s = MEM_Int;.   
46f0: 20 72 65 74 75 72 6e 20 70 4f 75 74 3b 0a 20 20   return pOut;.  
4700: 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63  }.}.../*.** Exec
4710: 75 74 65 20 61 73 20 6d 75 63 68 20 6f 66 20 61  ute as much of a
4720: 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 61 73   VDBE program as
4730: 20 77 65 20 63 61 6e 2e 0a 2a 2a 20 54 68 69 73   we can..** This
4740: 20 69 73 20 74 68 65 20 63 6f 72 65 20 6f 66 20   is the core of 
4750: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 2e 20  sqlite3_step(). 
4760: 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33   .*/.int sqlite3
4770: 56 64 62 65 45 78 65 63 28 0a 20 20 56 64 62 65  VdbeExec(.  Vdbe
4780: 20 2a 70 20 20 20 20 20 20 20 20 20 20 20 20 20   *p             
4790: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44         /* The VD
47a0: 42 45 20 2a 2f 0a 29 7b 0a 20 20 4f 70 20 2a 61  BE */.){.  Op *a
47b0: 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 20 20 20 20  Op = p->aOp;    
47c0: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
47d0: 20 70 2d 3e 61 4f 70 20 2a 2f 0a 20 20 4f 70 20   p->aOp */.  Op 
47e0: 2a 70 4f 70 20 3d 20 61 4f 70 3b 20 20 20 20 20  *pOp = aOp;     
47f0: 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65          /* Curre
4800: 6e 74 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a  nt operation */.
4810: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
4820: 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66  TE_DEBUG) || def
4830: 69 6e 65 64 28 56 44 42 45 5f 50 52 4f 46 49 4c  ined(VDBE_PROFIL
4840: 45 29 0a 20 20 4f 70 20 2a 70 4f 72 69 67 4f 70  E).  Op *pOrigOp
4850: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4860: 2f 2a 20 56 61 6c 75 65 20 6f 66 20 70 4f 70 20  /* Value of pOp 
4870: 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  at the top of th
4880: 65 20 6c 6f 6f 70 20 2a 2f 0a 23 65 6e 64 69 66  e loop */.#endif
4890: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
48a0: 45 42 55 47 0a 20 20 69 6e 74 20 6e 45 78 74 72  EBUG.  int nExtr
48b0: 61 44 65 6c 65 74 65 20 3d 20 30 3b 20 20 20 20  aDelete = 0;    
48c0: 20 20 2f 2a 20 56 65 72 69 66 69 65 73 20 46 4f    /* Verifies FO
48d0: 52 44 45 4c 45 54 45 20 61 6e 64 20 41 55 58 44  RDELETE and AUXD
48e0: 45 4c 45 54 45 20 66 6c 61 67 73 20 2a 2f 0a 23  ELETE flags */.#
48f0: 65 6e 64 69 66 0a 20 20 69 6e 74 20 72 63 20 3d  endif.  int rc =
4900: 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20   SQLITE_OK;     
4910: 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
4920: 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c 69 74  eturn */.  sqlit
4930: 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 20  e3 *db = p->db; 
4940: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
4950: 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20 72 65  abase */.  u8 re
4960: 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
4970: 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65 74 20 73   = 0; /* Reset s
4980: 63 68 65 6d 61 20 61 66 74 65 72 20 61 6e 20 65  chema after an e
4990: 72 72 6f 72 20 69 66 20 70 6f 73 69 74 69 76 65  rror if positive
49a0: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64 69 6e   */.  u8 encodin
49b0: 67 20 3d 20 45 4e 43 28 64 62 29 3b 20 20 20 20  g = ENC(db);    
49c0: 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
49d0: 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69   encoding */.  i
49e0: 6e 74 20 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b  nt iCompare = 0;
49f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
4a00: 75 6c 74 20 6f 66 20 6c 61 73 74 20 63 6f 6d 70  ult of last comp
4a10: 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69  arison */.  unsi
4a20: 67 6e 65 64 20 6e 56 6d 53 74 65 70 20 3d 20 30  gned nVmStep = 0
4a30: 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
4a40: 20 6f 66 20 76 69 72 74 75 61 6c 20 6d 61 63 68   of virtual mach
4a50: 69 6e 65 20 73 74 65 70 73 20 2a 2f 0a 23 69 66  ine steps */.#if
4a60: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
4a70: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
4a80: 43 4b 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50  CK.  unsigned nP
4a90: 72 6f 67 72 65 73 73 4c 69 6d 69 74 3b 20 20 20  rogressLimit;   
4aa0: 2f 2a 20 49 6e 76 6f 6b 65 20 78 50 72 6f 67 72  /* Invoke xProgr
4ab0: 65 73 73 28 29 20 77 68 65 6e 20 6e 56 6d 53 74  ess() when nVmSt
4ac0: 65 70 20 72 65 61 63 68 65 73 20 74 68 69 73 20  ep reaches this 
4ad0: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20  */.#endif.  Mem 
4ae0: 2a 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b  *aMem = p->aMem;
4af0: 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f         /* Copy o
4b00: 66 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d  f p->aMem */.  M
4b10: 65 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20  em *pIn1 = 0;   
4b20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74            /* 1st
4b30: 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a   input operand *
4b40: 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20  /.  Mem *pIn2 = 
4b50: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
4b60: 2a 20 32 6e 64 20 69 6e 70 75 74 20 6f 70 65 72  * 2nd input oper
4b70: 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49  and */.  Mem *pI
4b80: 6e 33 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  n3 = 0;         
4b90: 20 20 20 20 2f 2a 20 33 72 64 20 69 6e 70 75 74      /* 3rd input
4ba0: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65   operand */.  Me
4bb0: 6d 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20 20  m *pOut = 0;    
4bc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74 70           /* Outp
4bd0: 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 23 69  ut operand */.#i
4be0: 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c  fdef VDBE_PROFIL
4bf0: 45 0a 20 20 75 36 34 20 73 74 61 72 74 3b 20 20  E.  u64 start;  
4c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4c10: 2a 20 43 50 55 20 63 6c 6f 63 6b 20 63 6f 75 6e  * CPU clock coun
4c20: 74 20 61 74 20 73 74 61 72 74 20 6f 66 20 6f 70  t at start of op
4c30: 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  code */.#endif. 
4c40: 20 2f 2a 2a 2a 20 49 4e 53 45 52 54 20 53 54 41   /*** INSERT STA
4c50: 43 4b 20 55 4e 49 4f 4e 20 48 45 52 45 20 2a 2a  CK UNION HERE **
4c60: 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  */..  assert( p-
4c70: 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47  >magic==VDBE_MAG
4c80: 49 43 5f 52 55 4e 20 29 3b 20 20 2f 2a 20 73 71  IC_RUN );  /* sq
4c90: 6c 69 74 65 33 5f 73 74 65 70 28 29 20 76 65 72  lite3_step() ver
4ca0: 69 66 69 65 73 20 74 68 69 73 20 2a 2f 0a 20 20  ifies this */.  
4cb0: 73 71 6c 69 74 65 33 56 64 62 65 45 6e 74 65 72  sqlite3VdbeEnter
4cc0: 28 70 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63  (p);.  if( p->rc
4cd0: 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29  ==SQLITE_NOMEM )
4ce0: 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61  {.    /* This ha
4cf0: 70 70 65 6e 73 20 69 66 20 61 20 6d 61 6c 6c 6f  ppens if a mallo
4d00: 63 28 29 20 69 6e 73 69 64 65 20 61 20 63 61 6c  c() inside a cal
4d10: 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 6f 6c  l to sqlite3_col
4d20: 75 6d 6e 5f 74 65 78 74 28 29 20 6f 72 0a 20 20  umn_text() or.  
4d30: 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c    ** sqlite3_col
4d40: 75 6d 6e 5f 74 65 78 74 31 36 28 29 20 66 61 69  umn_text16() fai
4d50: 6c 65 64 2e 20 20 2a 2f 0a 20 20 20 20 67 6f 74  led.  */.    got
4d60: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
4d70: 61 73 73 65 72 74 28 20 70 2d 3e 72 63 3d 3d 53  assert( p->rc==S
4d80: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e  QLITE_OK || (p->
4d90: 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45  rc&0xff)==SQLITE
4da0: 5f 42 55 53 59 20 29 3b 0a 20 20 61 73 73 65 72  _BUSY );.  asser
4db0: 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
4dc0: 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d  || p->readOnly!=
4dd0: 30 20 29 3b 0a 20 20 70 2d 3e 69 43 75 72 72 65  0 );.  p->iCurre
4de0: 6e 74 54 69 6d 65 20 3d 20 30 3b 0a 20 20 61 73  ntTime = 0;.  as
4df0: 73 65 72 74 28 20 70 2d 3e 65 78 70 6c 61 69 6e  sert( p->explain
4e00: 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e 70 52 65 73  ==0 );.  p->pRes
4e10: 75 6c 74 53 65 74 20 3d 20 30 3b 0a 20 20 64 62  ultSet = 0;.  db
4e20: 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42  ->busyHandler.nB
4e30: 75 73 79 20 3d 20 30 3b 0a 20 20 69 66 28 20 64  usy = 0;.  if( d
4e40: 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70  b->u1.isInterrup
4e50: 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  ted ) goto abort
4e60: 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70  _due_to_interrup
4e70: 74 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  t;.  sqlite3Vdbe
4e80: 49 4f 54 72 61 63 65 53 71 6c 28 70 29 3b 0a 23  IOTraceSql(p);.#
4e90: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
4ea0: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
4eb0: 42 41 43 4b 0a 20 20 69 66 28 20 64 62 2d 3e 78  BACK.  if( db->x
4ec0: 50 72 6f 67 72 65 73 73 20 29 7b 0a 20 20 20 20  Progress ){.    
4ed0: 75 33 32 20 69 50 72 69 6f 72 20 3d 20 70 2d 3e  u32 iPrior = p->
4ee0: 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f  aCounter[SQLITE_
4ef0: 53 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f 53 54  STMTSTATUS_VM_ST
4f00: 45 50 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  EP];.    assert(
4f10: 20 30 20 3c 20 64 62 2d 3e 6e 50 72 6f 67 72 65   0 < db->nProgre
4f20: 73 73 4f 70 73 20 29 3b 0a 20 20 20 20 6e 50 72  ssOps );.    nPr
4f30: 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 64 62  ogressLimit = db
4f40: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 2d  ->nProgressOps -
4f50: 20 28 69 50 72 69 6f 72 20 25 20 64 62 2d 3e 6e   (iPrior % db->n
4f60: 50 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a 20 20  ProgressOps);.  
4f70: 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 50 72 6f 67  }else{.    nProg
4f80: 72 65 73 73 4c 69 6d 69 74 20 3d 20 30 78 66 66  ressLimit = 0xff
4f90: 66 66 66 66 66 66 3b 0a 20 20 7d 0a 23 65 6e 64  ffffff;.  }.#end
4fa0: 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
4fb0: 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74 65 33  _DEBUG.  sqlite3
4fc0: 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
4fd0: 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63  c();.  if( p->pc
4fe0: 3d 3d 30 0a 20 20 20 26 26 20 28 70 2d 3e 64 62  ==0.   && (p->db
4ff0: 2d 3e 66 6c 61 67 73 20 26 20 28 53 51 4c 49 54  ->flags & (SQLIT
5000: 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 7c 53 51  E_VdbeListing|SQ
5010: 4c 49 54 45 5f 56 64 62 65 45 51 50 7c 53 51 4c  LITE_VdbeEQP|SQL
5020: 49 54 45 5f 56 64 62 65 54 72 61 63 65 29 29 21  ITE_VdbeTrace))!
5030: 3d 30 0a 20 20 29 7b 0a 20 20 20 20 69 6e 74 20  =0.  ){.    int 
5040: 69 3b 0a 20 20 20 20 69 6e 74 20 6f 6e 63 65 20  i;.    int once 
5050: 3d 20 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 1;.    sqlite3
5060: 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29 3b  VdbePrintSql(p);
5070: 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e  .    if( p->db->
5080: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
5090: 64 62 65 4c 69 73 74 69 6e 67 20 29 7b 0a 20 20  dbeListing ){.  
50a0: 20 20 20 20 70 72 69 6e 74 66 28 22 56 44 42 45      printf("VDBE
50b0: 20 50 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67   Program Listing
50c0: 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 66 6f 72  :\n");.      for
50d0: 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20  (i=0; i<p->nOp; 
50e0: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 73 71  i++){.        sq
50f0: 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70  lite3VdbePrintOp
5100: 28 73 74 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70  (stdout, i, &aOp
5110: 5b 69 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  [i]);.      }.  
5120: 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 64    }.    if( p->d
5130: 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
5140: 45 5f 56 64 62 65 45 51 50 20 29 7b 0a 20 20 20  E_VdbeEQP ){.   
5150: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d     for(i=0; i<p-
5160: 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  >nOp; i++){.    
5170: 20 20 20 20 69 66 28 20 61 4f 70 5b 69 5d 2e 6f      if( aOp[i].o
5180: 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69  pcode==OP_Explai
5190: 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  n ){.          i
51a0: 66 28 20 6f 6e 63 65 20 29 20 70 72 69 6e 74 66  f( once ) printf
51b0: 28 22 56 44 42 45 20 51 75 65 72 79 20 50 6c 61  ("VDBE Query Pla
51c0: 6e 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20  n:\n");.        
51d0: 20 20 70 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c    printf("%s\n",
51e0: 20 61 4f 70 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20   aOp[i].p4.z);. 
51f0: 20 20 20 20 20 20 20 20 20 6f 6e 63 65 20 3d 20           once = 
5200: 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  0;.        }.   
5210: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69     }.    }.    i
5220: 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20  f( p->db->flags 
5230: 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  & SQLITE_VdbeTra
5240: 63 65 20 29 20 20 70 72 69 6e 74 66 28 22 56 44  ce )  printf("VD
5250: 42 45 20 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20  BE Trace:\n");. 
5260: 20 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e 64 42   }.  sqlite3EndB
5270: 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23  enignMalloc();.#
5280: 65 6e 64 69 66 0a 20 20 66 6f 72 28 70 4f 70 3d  endif.  for(pOp=
5290: 26 61 4f 70 5b 70 2d 3e 70 63 5d 3b 20 31 3b 20  &aOp[p->pc]; 1; 
52a0: 70 4f 70 2b 2b 29 7b 0a 20 20 20 20 2f 2a 20 45  pOp++){.    /* E
52b0: 72 72 6f 72 73 20 61 72 65 20 64 65 74 65 63 74  rrors are detect
52c0: 65 64 20 62 79 20 69 6e 64 69 76 69 64 75 61 6c  ed by individual
52d0: 20 6f 70 63 6f 64 65 73 2c 20 77 69 74 68 20 61   opcodes, with a
52e0: 6e 20 69 6d 6d 65 64 69 61 74 65 0a 20 20 20 20  n immediate.    
52f0: 2a 2a 20 6a 75 6d 70 73 20 74 6f 20 61 62 6f 72  ** jumps to abor
5300: 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 2e 20  t_due_to_error. 
5310: 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  */.    assert( r
5320: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c==SQLITE_OK );.
5330: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
5340: 3e 3d 61 4f 70 20 26 26 20 70 4f 70 3c 26 61 4f  >=aOp && pOp<&aO
5350: 70 5b 70 2d 3e 6e 4f 70 5d 29 3b 0a 23 69 66 64  p[p->nOp]);.#ifd
5360: 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a  ef VDBE_PROFILE.
5370: 20 20 20 20 73 74 61 72 74 20 3d 20 73 71 6c 69      start = sqli
5380: 74 65 33 4e 50 72 6f 66 69 6c 65 43 6e 74 20 3f  te3NProfileCnt ?
5390: 20 73 71 6c 69 74 65 33 4e 50 72 6f 66 69 6c 65   sqlite3NProfile
53a0: 43 6e 74 20 3a 20 73 71 6c 69 74 65 33 48 77 74  Cnt : sqlite3Hwt
53b0: 69 6d 65 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20  ime();.#endif.  
53c0: 20 20 6e 56 6d 53 74 65 70 2b 2b 3b 0a 23 69 66    nVmStep++;.#if
53d0: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
53e0: 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55  E_STMT_SCANSTATU
53f0: 53 0a 20 20 20 20 69 66 28 20 70 2d 3e 61 6e 45  S.    if( p->anE
5400: 78 65 63 20 29 20 70 2d 3e 61 6e 45 78 65 63 5b  xec ) p->anExec[
5410: 28 69 6e 74 29 28 70 4f 70 2d 61 4f 70 29 5d 2b  (int)(pOp-aOp)]+
5420: 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f  +;.#endif..    /
5430: 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74 72 61  * Only allow tra
5440: 63 69 6e 67 20 69 66 20 53 51 4c 49 54 45 5f 44  cing if SQLITE_D
5450: 45 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e  EBUG is defined.
5460: 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53  .    */.#ifdef S
5470: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
5480: 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26 20  if( db->flags & 
5490: 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65  SQLITE_VdbeTrace
54a0: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
54b0: 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64  3VdbePrintOp(std
54c0: 6f 75 74 2c 20 28 69 6e 74 29 28 70 4f 70 20 2d  out, (int)(pOp -
54d0: 20 61 4f 70 29 2c 20 70 4f 70 29 3b 0a 20 20 20   aOp), pOp);.   
54e0: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20   }.#endif.      
54f0: 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 74  ..    /* Check t
5500: 6f 20 73 65 65 20 69 66 20 77 65 20 6e 65 65 64  o see if we need
5510: 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20   to simulate an 
5520: 69 6e 74 65 72 72 75 70 74 2e 20 20 54 68 69 73  interrupt.  This
5530: 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a 20 20   only happens.  
5540: 20 20 2a 2a 20 69 66 20 77 65 20 68 61 76 65 20    ** if we have 
5550: 61 20 73 70 65 63 69 61 6c 20 74 65 73 74 20 62  a special test b
5560: 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66  uild..    */.#if
5570: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
5580: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f      if( sqlite3_
5590: 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3e  interrupt_count>
55a0: 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
55b0: 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75  e3_interrupt_cou
55c0: 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66 28 20  nt--;.      if( 
55d0: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
55e0: 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a 20 20  t_count==0 ){.  
55f0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e        sqlite3_in
5600: 74 65 72 72 75 70 74 28 64 62 29 3b 0a 20 20 20  terrupt(db);.   
5610: 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69     }.    }.#endi
5620: 66 0a 0a 20 20 20 20 2f 2a 20 53 61 6e 69 74 79  f..    /* Sanity
5630: 20 63 68 65 63 6b 69 6e 67 20 6f 6e 20 6f 74 68   checking on oth
5640: 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 23  er operands */.#
5650: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
5660: 55 47 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 75  UG.    {.      u
5670: 38 20 6f 70 50 72 6f 70 65 72 74 79 20 3d 20 73  8 opProperty = s
5680: 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70  qlite3OpcodeProp
5690: 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65  erty[pOp->opcode
56a0: 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70  ];.      if( (op
56b0: 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47  Property & OPFLG
56c0: 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20 20  _IN1)!=0 ){.    
56d0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
56e0: 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20 20 20 20  >p1>0 );.       
56f0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
5700: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
5710: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
5720: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
5730: 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
5740: 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20  Op->p1]) );.    
5750: 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
5760: 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49  te3VdbeCheckMemI
5770: 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b  nvariants(&aMem[
5780: 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20  pOp->p1]) );.   
5790: 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52       REGISTER_TR
57a0: 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 26 61 4d  ACE(pOp->p1, &aM
57b0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20  em[pOp->p1]);.  
57c0: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
57d0: 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50  (opProperty & OP
57e0: 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b 0a 20  FLG_IN2)!=0 ){. 
57f0: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
5800: 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20  Op->p2>0 );.    
5810: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5820: 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p2<=(p->nMem+1 
5830: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
5840: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
5850: 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
5860: 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20  m[pOp->p2]) );. 
5870: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73         assert( s
5880: 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d  qlite3VdbeCheckM
5890: 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d  emInvariants(&aM
58a0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a  em[pOp->p2]) );.
58b0: 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52          REGISTER
58c0: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
58d0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b  &aMem[pOp->p2]);
58e0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
58f0: 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26  f( (opProperty &
5900: 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d 30 20 29   OPFLG_IN3)!=0 )
5910: 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
5920: 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20  ( pOp->p3>0 );. 
5930: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
5940: 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
5950: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
5960: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
5970: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
5980: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29  aMem[pOp->p3]) )
5990: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
59a0: 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  ( sqlite3VdbeChe
59b0: 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28  ckMemInvariants(
59c0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20  &aMem[pOp->p3]) 
59d0: 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53  );.        REGIS
59e0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
59f0: 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  3, &aMem[pOp->p3
5a00: 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ]);.      }.    
5a10: 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74    if( (opPropert
5a20: 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 29 21  y & OPFLG_OUT2)!
5a30: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  =0 ){.        as
5a40: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
5a50: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
5a60: 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e  t( pOp->p2<=(p->
5a70: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
5a80: 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20  sor) );.        
5a90: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
5aa0: 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  (p, &aMem[pOp->p
5ab0: 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  2]);.      }.   
5ac0: 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72     if( (opProper
5ad0: 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 29  ty & OPFLG_OUT3)
5ae0: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  !=0 ){.        a
5af0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
5b00: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
5b10: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  rt( pOp->p3<=(p-
5b20: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
5b30: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20  rsor) );.       
5b40: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
5b50: 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  e(p, &aMem[pOp->
5b60: 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  p3]);.      }.  
5b70: 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 20 64    }.#endif.#if d
5b80: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
5b90: 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  BUG) || defined(
5ba0: 56 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a 20 20  VDBE_PROFILE).  
5bb0: 20 20 70 4f 72 69 67 4f 70 20 3d 20 70 4f 70 3b    pOrigOp = pOp;
5bc0: 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 20 20 73  .#endif.  .    s
5bd0: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
5be0: 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a  de ){../********
5bf0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5c00: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5c10: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5c20: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5c30: 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61 74 20 66 6f  *****.** What fo
5c40: 6c 6c 6f 77 73 20 69 73 20 61 20 6d 61 73 73 69  llows is a massi
5c50: 76 65 20 73 77 69 74 63 68 20 73 74 61 74 65 6d  ve switch statem
5c60: 65 6e 74 20 77 68 65 72 65 20 65 61 63 68 20 63  ent where each c
5c70: 61 73 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61  ase implements a
5c80: 0a 2a 2a 20 73 65 70 61 72 61 74 65 20 69 6e 73  .** separate ins
5c90: 74 72 75 63 74 69 6f 6e 20 69 6e 20 74 68 65 20  truction in the 
5ca0: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e  virtual machine.
5cb0: 20 20 49 66 20 77 65 20 66 6f 6c 6c 6f 77 20 74    If we follow t
5cc0: 68 65 20 75 73 75 61 6c 0a 2a 2a 20 69 6e 64 65  he usual.** inde
5cd0: 6e 74 61 74 69 6f 6e 20 63 6f 6e 76 65 6e 74 69  ntation conventi
5ce0: 6f 6e 73 2c 20 65 61 63 68 20 63 61 73 65 20 73  ons, each case s
5cf0: 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e 74 65  hould be indente
5d00: 64 20 62 79 20 36 20 73 70 61 63 65 73 2e 20 20  d by 6 spaces.  
5d10: 42 75 74 0a 2a 2a 20 74 68 61 74 20 69 73 20 61  But.** that is a
5d20: 20 6c 6f 74 20 6f 66 20 77 61 73 74 65 64 20 73   lot of wasted s
5d30: 70 61 63 65 20 6f 6e 20 74 68 65 20 6c 65 66 74  pace on the left
5d40: 20 6d 61 72 67 69 6e 2e 20 20 53 6f 20 74 68 65   margin.  So the
5d50: 20 63 6f 64 65 20 77 69 74 68 69 6e 0a 2a 2a 20   code within.** 
5d60: 74 68 65 20 73 77 69 74 63 68 20 73 74 61 74 65  the switch state
5d70: 6d 65 6e 74 20 77 69 6c 6c 20 62 72 65 61 6b 20  ment will break 
5d80: 77 69 74 68 20 63 6f 6e 76 65 6e 74 69 6f 6e 20  with convention 
5d90: 61 6e 64 20 62 65 20 66 6c 75 73 68 2d 6c 65 66  and be flush-lef
5da0: 74 2e 20 41 6e 6f 74 68 65 72 0a 2a 2a 20 62 69  t. Another.** bi
5db0: 67 20 63 6f 6d 6d 65 6e 74 20 28 73 69 6d 69 6c  g comment (simil
5dc0: 61 72 20 74 6f 20 74 68 69 73 20 6f 6e 65 29 20  ar to this one) 
5dd0: 77 69 6c 6c 20 6d 61 72 6b 20 74 68 65 20 70 6f  will mark the po
5de0: 69 6e 74 20 69 6e 20 74 68 65 20 63 6f 64 65 20  int in the code 
5df0: 77 68 65 72 65 0a 2a 2a 20 77 65 20 74 72 61 6e  where.** we tran
5e00: 73 69 74 69 6f 6e 20 62 61 63 6b 20 74 6f 20 6e  sition back to n
5e10: 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f  ormal indentatio
5e20: 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 72  n..**.** The for
5e30: 6d 61 74 74 69 6e 67 20 6f 66 20 65 61 63 68 20  matting of each 
5e40: 63 61 73 65 20 69 73 20 69 6d 70 6f 72 74 61 6e  case is importan
5e50: 74 2e 20 20 54 68 65 20 6d 61 6b 65 66 69 6c 65  t.  The makefile
5e60: 20 66 6f 72 20 53 51 4c 69 74 65 0a 2a 2a 20 67   for SQLite.** g
5e70: 65 6e 65 72 61 74 65 73 20 74 77 6f 20 43 20 66  enerates two C f
5e80: 69 6c 65 73 20 22 6f 70 63 6f 64 65 73 2e 68 22  iles "opcodes.h"
5e90: 20 61 6e 64 20 22 6f 70 63 6f 64 65 73 2e 63 22   and "opcodes.c"
5ea0: 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68 69   by scanning thi
5eb0: 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f 6f 6b 69 6e  s.** file lookin
5ec0: 67 20 66 6f 72 20 6c 69 6e 65 73 20 74 68 61 74  g for lines that
5ed0: 20 62 65 67 69 6e 20 77 69 74 68 20 22 63 61 73   begin with "cas
5ee0: 65 20 4f 50 5f 22 2e 20 20 54 68 65 20 6f 70 63  e OP_".  The opc
5ef0: 6f 64 65 73 2e 68 20 66 69 6c 65 73 0a 2a 2a 20  odes.h files.** 
5f00: 77 69 6c 6c 20 62 65 20 66 69 6c 6c 65 64 20 77  will be filled w
5f10: 69 74 68 20 23 64 65 66 69 6e 65 73 20 74 68 61  ith #defines tha
5f20: 74 20 67 69 76 65 20 75 6e 69 71 75 65 20 69 6e  t give unique in
5f30: 74 65 67 65 72 20 76 61 6c 75 65 73 20 74 6f 20  teger values to 
5f40: 65 61 63 68 0a 2a 2a 20 6f 70 63 6f 64 65 20 61  each.** opcode a
5f50: 6e 64 20 74 68 65 20 6f 70 63 6f 64 65 73 2e 63  nd the opcodes.c
5f60: 20 66 69 6c 65 20 69 73 20 66 69 6c 6c 65 64 20   file is filled 
5f70: 77 69 74 68 20 61 6e 20 61 72 72 61 79 20 6f 66  with an array of
5f80: 20 73 74 72 69 6e 67 73 20 77 68 65 72 65 0a 2a   strings where.*
5f90: 2a 20 65 61 63 68 20 73 74 72 69 6e 67 20 69 73  * each string is
5fa0: 20 74 68 65 20 73 79 6d 62 6f 6c 69 63 20 6e 61   the symbolic na
5fb0: 6d 65 20 66 6f 72 20 74 68 65 20 63 6f 72 72 65  me for the corre
5fc0: 73 70 6f 6e 64 69 6e 67 20 6f 70 63 6f 64 65 2e  sponding opcode.
5fd0: 20 20 49 66 20 74 68 65 0a 2a 2a 20 63 61 73 65    If the.** case
5fe0: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 66 6f   statement is fo
5ff0: 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6d 6d  llowed by a comm
6000: 65 6e 74 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ent of the form 
6010: 22 2f 23 20 73 61 6d 65 20 61 73 20 2e 2e 2e 20  "/# same as ... 
6020: 23 2f 22 0a 2a 2a 20 74 68 61 74 20 63 6f 6d 6d  #/".** that comm
6030: 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20 64  ent is used to d
6040: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 70 61 72  etermine the par
6050: 74 69 63 75 6c 61 72 20 76 61 6c 75 65 20 6f 66  ticular value of
6060: 20 74 68 65 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a   the opcode..**.
6070: 2a 2a 20 4f 74 68 65 72 20 6b 65 79 77 6f 72 64  ** Other keyword
6080: 73 20 69 6e 20 74 68 65 20 63 6f 6d 6d 65 6e 74  s in the comment
6090: 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 65 61   that follows ea
60a0: 63 68 20 63 61 73 65 20 61 72 65 20 75 73 65 64  ch case are used
60b0: 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74 72 75 63 74   to.** construct
60c0: 20 74 68 65 20 4f 50 46 4c 47 5f 49 4e 49 54 49   the OPFLG_INITI
60d0: 41 4c 49 5a 45 52 20 76 61 6c 75 65 20 74 68 61  ALIZER value tha
60e0: 74 20 69 6e 69 74 69 61 6c 69 7a 65 73 20 6f 70  t initializes op
60f0: 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 2e 0a  codeProperty[]..
6100: 2a 2a 20 4b 65 79 77 6f 72 64 73 20 69 6e 63 6c  ** Keywords incl
6110: 75 64 65 3a 20 69 6e 31 2c 20 69 6e 32 2c 20 69  ude: in1, in2, i
6120: 6e 33 2c 20 6f 75 74 32 2c 20 6f 75 74 33 2e 20  n3, out2, out3. 
6130: 20 53 65 65 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70   See.** the mkop
6140: 63 6f 64 65 68 2e 61 77 6b 20 73 63 72 69 70 74  codeh.awk script
6150: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
6160: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a  information..**.
6170: 2a 2a 20 44 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  ** Documentation
6180: 20 61 62 6f 75 74 20 56 44 42 45 20 6f 70 63 6f   about VDBE opco
6190: 64 65 73 20 69 73 20 67 65 6e 65 72 61 74 65 64  des is generated
61a0: 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68 69   by scanning thi
61b0: 73 20 66 69 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69  s file.** for li
61c0: 6e 65 73 20 6f 66 20 74 68 61 74 20 63 6f 6e 74  nes of that cont
61d0: 61 69 6e 20 22 4f 70 63 6f 64 65 3a 22 2e 20 20  ain "Opcode:".  
61e0: 54 68 61 74 20 6c 69 6e 65 20 61 6e 64 20 61 6c  That line and al
61f0: 6c 20 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20  l subsequent.** 
6200: 63 6f 6d 6d 65 6e 74 20 6c 69 6e 65 73 20 61 72  comment lines ar
6210: 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65  e used in the ge
6220: 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  neration of the 
6230: 6f 70 63 6f 64 65 2e 68 74 6d 6c 20 64 6f 63 75  opcode.html docu
6240: 6d 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c  mentation.** fil
6250: 65 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59  e..**.** SUMMARY
6260: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 46 6f 72 6d  :.**.**     Form
6270: 61 74 74 69 6e 67 20 69 73 20 69 6d 70 6f 72 74  atting is import
6280: 61 6e 74 20 74 6f 20 73 63 72 69 70 74 73 20 74  ant to scripts t
6290: 68 61 74 20 73 63 61 6e 20 74 68 69 73 20 66 69  hat scan this fi
62a0: 6c 65 2e 0a 2a 2a 20 20 20 20 20 44 6f 20 6e 6f  le..**     Do no
62b0: 74 20 64 65 76 69 61 74 65 20 66 72 6f 6d 20 74  t deviate from t
62c0: 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 73 74  he formatting st
62d0: 79 6c 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  yle currently in
62e0: 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a   use..**.*******
62f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6300: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6310: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6320: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6330: 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  ******/../* Opco
6340: 64 65 3a 20 20 47 6f 74 6f 20 2a 20 50 32 20 2a  de:  Goto * P2 *
6350: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e   * *.**.** An un
6360: 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 6a 75 6d 70  conditional jump
6370: 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 0a   to address P2..
6380: 2a 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 73 74  ** The next inst
6390: 72 75 63 74 69 6f 6e 20 65 78 65 63 75 74 65 64  ruction executed
63a0: 20 77 69 6c 6c 20 62 65 20 0a 2a 2a 20 74 68 65   will be .** the
63b0: 20 6f 6e 65 20 61 74 20 69 6e 64 65 78 20 50 32   one at index P2
63c0: 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
63d0: 69 6e 67 20 6f 66 0a 2a 2a 20 74 68 65 20 70 72  ing of.** the pr
63e0: 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ogram..**.** The
63f0: 20 50 31 20 70 61 72 61 6d 65 74 65 72 20 69 73   P1 parameter is
6400: 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 75 73   not actually us
6410: 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  ed by this opcod
6420: 65 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 74 0a  e.  However, it.
6430: 2a 2a 20 69 73 20 73 6f 6d 65 74 69 6d 65 73 20  ** is sometimes 
6440: 73 65 74 20 74 6f 20 31 20 69 6e 73 74 65 61 64  set to 1 instead
6450: 20 6f 66 20 30 20 61 73 20 61 20 68 69 6e 74 20   of 0 as a hint 
6460: 74 6f 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  to the command-l
6470: 69 6e 65 20 73 68 65 6c 6c 0a 2a 2a 20 74 68 61  ine shell.** tha
6480: 74 20 74 68 69 73 20 47 6f 74 6f 20 69 73 20 74  t this Goto is t
6490: 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c  he bottom of a l
64a0: 6f 6f 70 20 61 6e 64 20 74 68 61 74 20 74 68 65  oop and that the
64b0: 20 6c 69 6e 65 73 20 66 72 6f 6d 20 50 32 20 64   lines from P2 d
64c0: 6f 77 6e 0a 2a 2a 20 74 6f 20 74 68 65 20 63 75  own.** to the cu
64d0: 72 72 65 6e 74 20 6c 69 6e 65 20 73 68 6f 75 6c  rrent line shoul
64e0: 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20 66 6f  d be indented fo
64f0: 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74  r EXPLAIN output
6500: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 74  ..*/.case OP_Got
6510: 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  o: {            
6520: 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 6a 75 6d 70   /* jump */.jump
6530: 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b  _to_p2_and_check
6540: 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a  _for_interrupt:.
6550: 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70    pOp = &aOp[pOp
6560: 2d 3e 70 32 20 2d 20 31 5d 3b 0a 0a 20 20 2f 2a  ->p2 - 1];..  /*
6570: 20 4f 70 63 6f 64 65 73 20 74 68 61 74 20 61 72   Opcodes that ar
6580: 65 20 75 73 65 64 20 61 73 20 74 68 65 20 62 6f  e used as the bo
6590: 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 28  ttom of a loop (
65a0: 4f 50 5f 4e 65 78 74 2c 20 4f 50 5f 50 72 65 76  OP_Next, OP_Prev
65b0: 2c 0a 20 20 2a 2a 20 4f 50 5f 56 4e 65 78 74 2c  ,.  ** OP_VNext,
65c0: 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78   or OP_SorterNex
65d0: 74 29 20 61 6c 6c 20 6a 75 6d 70 20 68 65 72 65  t) all jump here
65e0: 20 75 70 6f 6e 0a 20 20 2a 2a 20 63 6f 6d 70 6c   upon.  ** compl
65f0: 65 74 69 6f 6e 2e 20 20 43 68 65 63 6b 20 74 6f  etion.  Check to
6600: 20 73 65 65 20 69 66 20 73 71 6c 69 74 65 33 5f   see if sqlite3_
6610: 69 6e 74 65 72 72 75 70 74 28 29 20 68 61 73 20  interrupt() has 
6620: 62 65 65 6e 20 63 61 6c 6c 65 64 0a 20 20 2a 2a  been called.  **
6630: 20 6f 72 20 69 66 20 74 68 65 20 70 72 6f 67 72   or if the progr
6640: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 6e 65 65  ess callback nee
6650: 64 73 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64  ds to be invoked
6660: 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 69  . .  **.  ** Thi
6670: 73 20 63 6f 64 65 20 75 73 65 73 20 75 6e 73 74  s code uses unst
6680: 72 75 63 74 75 72 65 64 20 22 67 6f 74 6f 22 20  ructured "goto" 
6690: 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 20 64  statements and d
66a0: 6f 65 73 20 6e 6f 74 20 6c 6f 6f 6b 20 63 6c 65  oes not look cle
66b0: 61 6e 2e 0a 20 20 2a 2a 20 42 75 74 20 74 68 61  an..  ** But tha
66c0: 74 20 69 73 20 6e 6f 74 20 64 75 65 20 74 6f 20  t is not due to 
66d0: 73 6c 6f 70 70 79 20 63 6f 64 69 6e 67 20 68 61  sloppy coding ha
66e0: 62 69 74 73 2e 20 54 68 65 20 63 6f 64 65 20 69  bits. The code i
66f0: 73 20 77 72 69 74 74 65 6e 20 74 68 69 73 0a 20  s written this. 
6700: 20 2a 2a 20 77 61 79 20 66 6f 72 20 70 65 72 66   ** way for perf
6710: 6f 72 6d 61 6e 63 65 2c 20 74 6f 20 61 76 6f 69  ormance, to avoi
6720: 64 20 68 61 76 69 6e 67 20 74 6f 20 72 75 6e 20  d having to run 
6730: 74 68 65 20 69 6e 74 65 72 72 75 70 74 20 61 6e  the interrupt an
6740: 64 20 70 72 6f 67 72 65 73 73 0a 20 20 2a 2a 20  d progress.  ** 
6750: 63 68 65 63 6b 73 20 6f 6e 20 65 76 65 72 79 20  checks on every 
6760: 6f 70 63 6f 64 65 2e 20 20 54 68 69 73 20 68 65  opcode.  This he
6770: 6c 70 73 20 73 71 6c 69 74 65 33 5f 73 74 65 70  lps sqlite3_step
6780: 28 29 20 74 6f 20 72 75 6e 20 61 62 6f 75 74 20  () to run about 
6790: 31 2e 35 25 0a 20 20 2a 2a 20 66 61 73 74 65 72  1.5%.  ** faster
67a0: 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 22 76   according to "v
67b0: 61 6c 67 72 69 6e 64 20 2d 2d 74 6f 6f 6c 3d 63  algrind --tool=c
67c0: 61 63 68 65 67 72 69 6e 64 22 20 2a 2f 0a 63 68  achegrind" */.ch
67d0: 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70  eck_for_interrup
67e0: 74 3a 0a 20 20 69 66 28 20 64 62 2d 3e 75 31 2e  t:.  if( db->u1.
67f0: 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 20  isInterrupted ) 
6800: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
6810: 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 23 69 66  o_interrupt;.#if
6820: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
6830: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
6840: 43 4b 0a 20 20 2f 2a 20 43 61 6c 6c 20 74 68 65  CK.  /* Call the
6850: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
6860: 63 6b 20 69 66 20 69 74 20 69 73 20 63 6f 6e 66  ck if it is conf
6870: 69 67 75 72 65 64 20 61 6e 64 20 74 68 65 20 72  igured and the r
6880: 65 71 75 69 72 65 64 20 6e 75 6d 62 65 72 0a 20  equired number. 
6890: 20 2a 2a 20 6f 66 20 56 44 42 45 20 6f 70 73 20   ** of VDBE ops 
68a0: 68 61 76 65 20 62 65 65 6e 20 65 78 65 63 75 74  have been execut
68b0: 65 64 20 28 65 69 74 68 65 72 20 73 69 6e 63 65  ed (either since
68c0: 20 74 68 69 73 20 69 6e 76 6f 63 61 74 69 6f 6e   this invocation
68d0: 20 6f 66 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33   of.  ** sqlite3
68e0: 56 64 62 65 45 78 65 63 28 29 20 6f 72 20 73 69  VdbeExec() or si
68f0: 6e 63 65 20 6c 61 73 74 20 74 69 6d 65 20 74 68  nce last time th
6900: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
6910: 61 63 6b 20 77 61 73 20 63 61 6c 6c 65 64 29 2e  ack was called).
6920: 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 70 72 6f  .  ** If the pro
6930: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 72  gress callback r
6940: 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  eturns non-zero,
6950: 20 65 78 69 74 20 74 68 65 20 76 69 72 74 75 61   exit the virtua
6960: 6c 20 6d 61 63 68 69 6e 65 20 77 69 74 68 0a 20  l machine with. 
6970: 20 2a 2a 20 61 20 72 65 74 75 72 6e 20 63 6f 64   ** a return cod
6980: 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 2e 0a  e SQLITE_ABORT..
6990: 20 20 2a 2f 0a 20 20 69 66 28 20 6e 56 6d 53 74    */.  if( nVmSt
69a0: 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d  ep>=nProgressLim
69b0: 69 74 20 26 26 20 64 62 2d 3e 78 50 72 6f 67 72  it && db->xProgr
69c0: 65 73 73 21 3d 30 20 29 7b 0a 20 20 20 20 61 73  ess!=0 ){.    as
69d0: 73 65 72 74 28 20 64 62 2d 3e 6e 50 72 6f 67 72  sert( db->nProgr
69e0: 65 73 73 4f 70 73 21 3d 30 20 29 3b 0a 20 20 20  essOps!=0 );.   
69f0: 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20   nProgressLimit 
6a00: 3d 20 6e 56 6d 53 74 65 70 20 2b 20 64 62 2d 3e  = nVmStep + db->
6a10: 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 2d 20 28  nProgressOps - (
6a20: 6e 56 6d 53 74 65 70 25 64 62 2d 3e 6e 50 72 6f  nVmStep%db->nPro
6a30: 67 72 65 73 73 4f 70 73 29 3b 0a 20 20 20 20 69  gressOps);.    i
6a40: 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73  f( db->xProgress
6a50: 28 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72  (db->pProgressAr
6a60: 67 29 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  g) ){.      rc =
6a70: 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50   SQLITE_INTERRUP
6a80: 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  T;.      goto ab
6a90: 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
6aa0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64  ;.    }.  }.#end
6ab0: 69 66 0a 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d  if.  .  break;.}
6ac0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f  ../* Opcode:  Go
6ad0: 73 75 62 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  sub P1 P2 * * *.
6ae0: 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  **.** Write the 
6af0: 63 75 72 72 65 6e 74 20 61 64 64 72 65 73 73 20  current address 
6b00: 6f 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 31  onto register P1
6b10: 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20 6a 75 6d  .** and then jum
6b20: 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e  p to address P2.
6b30: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 73 75  .*/.case OP_Gosu
6b40: 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  b: {            
6b50: 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73  /* jump */.  ass
6b60: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26  ert( pOp->p1>0 &
6b70: 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e  & pOp->p1<=(p->n
6b80: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
6b90: 6f 72 29 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20  or) );.  pIn1 = 
6ba0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
6bb0: 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65    assert( VdbeMe
6bc0: 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d  mDynamic(pIn1)==
6bd0: 30 20 29 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  0 );.  memAboutT
6be0: 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29  oChange(p, pIn1)
6bf0: 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  ;.  pIn1->flags 
6c00: 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e  = MEM_Int;.  pIn
6c10: 31 2d 3e 75 2e 69 20 3d 20 28 69 6e 74 29 28 70  1->u.i = (int)(p
6c20: 4f 70 2d 61 4f 70 29 3b 0a 20 20 52 45 47 49 53  Op-aOp);.  REGIS
6c30: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
6c40: 31 2c 20 70 49 6e 31 29 3b 0a 0a 20 20 2f 2a 20  1, pIn1);..  /* 
6c50: 4d 6f 73 74 20 6a 75 6d 70 20 6f 70 65 72 61 74  Most jump operat
6c60: 69 6f 6e 73 20 64 6f 20 61 20 67 6f 74 6f 20 74  ions do a goto t
6c70: 6f 20 74 68 69 73 20 73 70 6f 74 20 69 6e 20 6f  o this spot in o
6c80: 72 64 65 72 20 74 6f 20 75 70 64 61 74 65 0a 20  rder to update. 
6c90: 20 2a 2a 20 74 68 65 20 70 4f 70 20 70 6f 69 6e   ** the pOp poin
6ca0: 74 65 72 2e 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f  ter. */.jump_to_
6cb0: 70 32 3a 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70  p2:.  pOp = &aOp
6cc0: 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20  [pOp->p2 - 1];. 
6cd0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
6ce0: 63 6f 64 65 3a 20 20 52 65 74 75 72 6e 20 50 31  code:  Return P1
6cf0: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a   * * * *.**.** J
6d00: 75 6d 70 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ump to the next 
6d10: 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 66 74 65  instruction afte
6d20: 72 20 74 68 65 20 61 64 64 72 65 73 73 20 69 6e  r the address in
6d30: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 41   register P1.  A
6d40: 66 74 65 72 0a 2a 2a 20 74 68 65 20 6a 75 6d 70  fter.** the jump
6d50: 2c 20 72 65 67 69 73 74 65 72 20 50 31 20 62 65  , register P1 be
6d60: 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65 64 2e  comes undefined.
6d70: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 74 75  .*/.case OP_Retu
6d80: 72 6e 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  rn: {           
6d90: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  /* in1 */.  pIn1
6da0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
6db0: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
6dc0: 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e  1->flags==MEM_In
6dd0: 74 20 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61 4f  t );.  pOp = &aO
6de0: 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20  p[pIn1->u.i];.  
6df0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pIn1->flags = ME
6e00: 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62  M_Undefined;.  b
6e10: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
6e20: 64 65 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e  de: InitCoroutin
6e30: 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
6e40: 2a 0a 2a 2a 20 53 65 74 20 75 70 20 72 65 67 69  *.** Set up regi
6e50: 73 74 65 72 20 50 31 20 73 6f 20 74 68 61 74 20  ster P1 so that 
6e60: 69 74 20 77 69 6c 6c 20 59 69 65 6c 64 20 74 6f  it will Yield to
6e70: 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 0a 2a   the coroutine.*
6e80: 2a 20 6c 6f 63 61 74 65 64 20 61 74 20 61 64 64  * located at add
6e90: 72 65 73 73 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49  ress P3..**.** I
6ea0: 66 20 50 32 21 3d 30 20 74 68 65 6e 20 74 68 65  f P2!=0 then the
6eb0: 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65   coroutine imple
6ec0: 6d 65 6e 74 61 74 69 6f 6e 20 69 6d 6d 65 64 69  mentation immedi
6ed0: 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 0a 2a 2a  ately follows.**
6ee0: 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 53   this opcode.  S
6ef0: 6f 20 6a 75 6d 70 20 6f 76 65 72 20 74 68 65 20  o jump over the 
6f00: 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d  coroutine implem
6f10: 65 6e 74 61 74 69 6f 6e 20 74 6f 0a 2a 2a 20 61  entation to.** a
6f20: 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 0a 2a 2a  ddress P2..**.**
6f30: 20 53 65 65 20 61 6c 73 6f 3a 20 45 6e 64 43 6f   See also: EndCo
6f40: 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20  routine.*/.case 
6f50: 4f 50 5f 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65  OP_InitCoroutine
6f60: 3a 20 7b 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20  : {     /* jump 
6f70: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
6f80: 2d 3e 70 31 3e 30 20 26 26 20 20 70 4f 70 2d 3e  ->p1>0 &&  pOp->
6f90: 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p1<=(p->nMem+1 -
6fa0: 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
6fb0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
6fc0: 32 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c  2>=0 && pOp->p2<
6fd0: 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 61 73 73 65  p->nOp );.  asse
6fe0: 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 26  rt( pOp->p3>=0 &
6ff0: 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e 4f 70  & pOp->p3<p->nOp
7000: 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d   );.  pOut = &aM
7010: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
7020: 73 73 65 72 74 28 20 21 56 64 62 65 4d 65 6d 44  ssert( !VdbeMemD
7030: 79 6e 61 6d 69 63 28 70 4f 75 74 29 20 29 3b 0a  ynamic(pOut) );.
7040: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f    pOut->u.i = pO
7050: 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 70 4f 75  p->p3 - 1;.  pOu
7060: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
7070: 6e 74 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  nt;.  if( pOp->p
7080: 32 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  2 ) goto jump_to
7090: 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  _p2;.  break;.}.
70a0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 45 6e 64  ./* Opcode:  End
70b0: 43 6f 72 6f 75 74 69 6e 65 20 50 31 20 2a 20 2a  Coroutine P1 * *
70c0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69   * *.**.** The i
70d0: 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 74 68  nstruction at th
70e0: 65 20 61 64 64 72 65 73 73 20 69 6e 20 72 65 67  e address in reg
70f0: 69 73 74 65 72 20 50 31 20 69 73 20 61 20 59 69  ister P1 is a Yi
7100: 65 6c 64 2e 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  eld..** Jump to 
7110: 74 68 65 20 50 32 20 70 61 72 61 6d 65 74 65 72  the P2 parameter
7120: 20 6f 66 20 74 68 61 74 20 59 69 65 6c 64 2e 0a   of that Yield..
7130: 2a 2a 20 41 66 74 65 72 20 74 68 65 20 6a 75 6d  ** After the jum
7140: 70 2c 20 72 65 67 69 73 74 65 72 20 50 31 20 62  p, register P1 b
7150: 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65 64  ecomes undefined
7160: 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
7170: 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 0a  : InitCoroutine.
7180: 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6e 64 43 6f  */.case OP_EndCo
7190: 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20 20 20  routine: {      
71a0: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
71b0: 20 56 64 62 65 4f 70 20 2a 70 43 61 6c 6c 65 72   VdbeOp *pCaller
71c0: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
71d0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
71e0: 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
71f0: 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61  ==MEM_Int );.  a
7200: 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 75 2e 69  ssert( pIn1->u.i
7210: 3e 3d 30 20 26 26 20 70 49 6e 31 2d 3e 75 2e 69  >=0 && pIn1->u.i
7220: 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 43 61  <p->nOp );.  pCa
7230: 6c 6c 65 72 20 3d 20 26 61 4f 70 5b 70 49 6e 31  ller = &aOp[pIn1
7240: 2d 3e 75 2e 69 5d 3b 0a 20 20 61 73 73 65 72 74  ->u.i];.  assert
7250: 28 20 70 43 61 6c 6c 65 72 2d 3e 6f 70 63 6f 64  ( pCaller->opcod
7260: 65 3d 3d 4f 50 5f 59 69 65 6c 64 20 29 3b 0a 20  e==OP_Yield );. 
7270: 20 61 73 73 65 72 74 28 20 70 43 61 6c 6c 65 72   assert( pCaller
7280: 2d 3e 70 32 3e 3d 30 20 26 26 20 70 43 61 6c 6c  ->p2>=0 && pCall
7290: 65 72 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b  er->p2<p->nOp );
72a0: 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 43  .  pOp = &aOp[pC
72b0: 61 6c 6c 65 72 2d 3e 70 32 20 2d 20 31 5d 3b 0a  aller->p2 - 1];.
72c0: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20    pIn1->flags = 
72d0: 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20  MEM_Undefined;. 
72e0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
72f0: 63 6f 64 65 3a 20 20 59 69 65 6c 64 20 50 31 20  code:  Yield P1 
7300: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53  P2 * * *.**.** S
7310: 77 61 70 20 74 68 65 20 70 72 6f 67 72 61 6d 20  wap the program 
7320: 63 6f 75 6e 74 65 72 20 77 69 74 68 20 74 68 65  counter with the
7330: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
7340: 65 72 20 50 31 2e 20 20 54 68 69 73 0a 2a 2a 20  er P1.  This.** 
7350: 68 61 73 20 74 68 65 20 65 66 66 65 63 74 20 6f  has the effect o
7360: 66 20 79 69 65 6c 64 69 6e 67 20 74 6f 20 61 20  f yielding to a 
7370: 63 6f 72 6f 75 74 69 6e 65 2e 0a 2a 2a 0a 2a 2a  coroutine..**.**
7380: 20 49 66 20 74 68 65 20 63 6f 72 6f 75 74 69 6e   If the coroutin
7390: 65 20 74 68 61 74 20 69 73 20 6c 61 75 6e 63 68  e that is launch
73a0: 65 64 20 62 79 20 74 68 69 73 20 69 6e 73 74 72  ed by this instr
73b0: 75 63 74 69 6f 6e 20 65 6e 64 73 20 77 69 74 68  uction ends with
73c0: 0a 2a 2a 20 59 69 65 6c 64 20 6f 72 20 52 65 74  .** Yield or Ret
73d0: 75 72 6e 20 74 68 65 6e 20 63 6f 6e 74 69 6e 75  urn then continu
73e0: 65 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  e to the next in
73f0: 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20  struction.  But 
7400: 69 66 0a 2a 2a 20 74 68 65 20 63 6f 72 6f 75 74  if.** the corout
7410: 69 6e 65 20 6c 61 75 6e 63 68 65 64 20 62 79 20  ine launched by 
7420: 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
7430: 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20 45 6e   ends with.** En
7440: 64 43 6f 72 6f 75 74 69 6e 65 2c 20 74 68 65 6e  dCoroutine, then
7450: 20 6a 75 6d 70 20 74 6f 20 50 32 20 72 61 74 68   jump to P2 rath
7460: 65 72 20 74 68 61 6e 20 63 6f 6e 74 69 6e 75 69  er than continui
7470: 6e 67 20 77 69 74 68 20 74 68 65 0a 2a 2a 20 6e  ng with the.** n
7480: 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
7490: 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
74a0: 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 0a 2a   InitCoroutine.*
74b0: 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c 64 3a  /.case OP_Yield:
74c0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
74d0: 20 69 6e 31 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20   in1, jump */.  
74e0: 69 6e 74 20 70 63 44 65 73 74 3b 0a 20 20 70 49  int pcDest;.  pI
74f0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
7500: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 56  p1];.  assert( V
7510: 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49  dbeMemDynamic(pI
7520: 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31  n1)==0 );.  pIn1
7530: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
7540: 74 3b 0a 20 20 70 63 44 65 73 74 20 3d 20 28 69  t;.  pcDest = (i
7550: 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20  nt)pIn1->u.i;.  
7560: 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 28 69 6e 74  pIn1->u.i = (int
7570: 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20  )(pOp - aOp);.  
7580: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
7590: 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20  Op->p1, pIn1);. 
75a0: 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63 44 65   pOp = &aOp[pcDe
75b0: 73 74 5d 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  st];.  break;.}.
75c0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c  ./* Opcode:  Hal
75d0: 74 49 66 4e 75 6c 6c 20 20 50 31 20 50 32 20 50  tIfNull  P1 P2 P
75e0: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
75f0: 73 69 73 3a 20 69 66 20 72 5b 50 33 5d 3d 6e 75  sis: if r[P3]=nu
7600: 6c 6c 20 68 61 6c 74 0a 2a 2a 0a 2a 2a 20 43 68  ll halt.**.** Ch
7610: 65 63 6b 20 74 68 65 20 76 61 6c 75 65 20 69 6e  eck the value in
7620: 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 20 49   register P3.  I
7630: 66 20 69 74 20 69 73 20 4e 55 4c 4c 20 74 68 65  f it is NULL the
7640: 6e 20 48 61 6c 74 20 75 73 69 6e 67 0a 2a 2a 20  n Halt using.** 
7650: 70 61 72 61 6d 65 74 65 72 20 50 31 2c 20 50 32  parameter P1, P2
7660: 2c 20 61 6e 64 20 50 34 20 61 73 20 69 66 20 74  , and P4 as if t
7670: 68 69 73 20 77 65 72 65 20 61 20 48 61 6c 74 20  his were a Halt 
7680: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66  instruction.  If
7690: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e   the.** value in
76a0: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
76b0: 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74  not NULL, then t
76c0: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61  his routine is a
76d0: 20 6e 6f 2d 6f 70 2e 0a 2a 2a 20 54 68 65 20 50   no-op..** The P
76e0: 35 20 70 61 72 61 6d 65 74 65 72 20 73 68 6f 75  5 parameter shou
76f0: 6c 64 20 62 65 20 31 2e 0a 2a 2f 0a 63 61 73 65  ld be 1..*/.case
7700: 20 4f 50 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a 20   OP_HaltIfNull: 
7710: 7b 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f  {      /* in3 */
7720: 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
7730: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
7740: 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
7750: 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20 62 72  EM_Null)==0 ) br
7760: 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  eak;.  /* Fall t
7770: 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 48  hrough into OP_H
7780: 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63  alt */.}../* Opc
7790: 6f 64 65 3a 20 20 48 61 6c 74 20 50 31 20 50 32  ode:  Halt P1 P2
77a0: 20 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45   * P4 P5.**.** E
77b0: 78 69 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e  xit immediately.
77c0: 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75 72 73 6f    All open curso
77d0: 72 73 2c 20 65 74 63 20 61 72 65 20 63 6c 6f 73  rs, etc are clos
77e0: 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61  ed.** automatica
77f0: 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  lly..**.** P1 is
7800: 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 64 65   the result code
7810: 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
7820: 69 74 65 33 5f 65 78 65 63 28 29 2c 20 73 71 6c  ite3_exec(), sql
7830: 69 74 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a  ite3_reset(),.**
7840: 20 6f 72 20 73 71 6c 69 74 65 33 5f 66 69 6e 61   or sqlite3_fina
7850: 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20 61 20 6e  lize().  For a n
7860: 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69 73  ormal halt, this
7870: 20 73 68 6f 75 6c 64 20 62 65 20 53 51 4c 49 54   should be SQLIT
7880: 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72  E_OK (0)..** For
7890: 20 65 72 72 6f 72 73 2c 20 69 74 20 63 61 6e 20   errors, it can 
78a0: 62 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 76 61  be some other va
78b0: 6c 75 65 2e 20 20 49 66 20 50 31 21 3d 30 20 74  lue.  If P1!=0 t
78c0: 68 65 6e 20 50 32 20 77 69 6c 6c 20 64 65 74 65  hen P2 will dete
78d0: 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72  rmine.** whether
78e0: 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62   or not to rollb
78f0: 61 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20  ack the current 
7900: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f  transaction.  Do
7910: 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a   not rollback.**
7920: 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e   if P2==OE_Fail.
7930: 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b   Do the rollback
7940: 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62   if P2==OE_Rollb
7950: 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f  ack.  If P2==OE_
7960: 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62  Abort,.** then b
7970: 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e  ack out all chan
7980: 67 65 73 20 74 68 61 74 20 68 61 76 65 20 6f 63  ges that have oc
7990: 63 75 72 72 65 64 20 64 75 72 69 6e 67 20 74 68  curred during th
79a0: 69 73 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20  is execution of 
79b0: 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74  the.** VDBE, but
79c0: 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b   do not rollback
79d0: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
79e0: 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69  . .**.** If P4 i
79f0: 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20  s not null then 
7a00: 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 6d  it is an error m
7a10: 65 73 73 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a  essage string..*
7a20: 2a 0a 2a 2a 20 50 35 20 69 73 20 61 20 76 61 6c  *.** P5 is a val
7a30: 75 65 20 62 65 74 77 65 65 6e 20 30 20 61 6e 64  ue between 0 and
7a40: 20 34 2c 20 69 6e 63 6c 75 73 69 76 65 2c 20 74   4, inclusive, t
7a50: 68 61 74 20 6d 6f 64 69 66 69 65 73 20 74 68 65  hat modifies the
7a60: 20 50 34 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a   P4 string..**.*
7a70: 2a 20 20 20 20 30 3a 20 20 28 6e 6f 20 63 68 61  *    0:  (no cha
7a80: 6e 67 65 29 0a 2a 2a 20 20 20 20 31 3a 20 20 4e  nge).**    1:  N
7a90: 4f 54 20 4e 55 4c 4c 20 63 6f 6e 74 72 61 69 6e  OT NULL contrain
7aa0: 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20  t failed: P4.** 
7ab0: 20 20 20 32 3a 20 20 55 4e 49 51 55 45 20 63 6f     2:  UNIQUE co
7ac0: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a  nstraint failed:
7ad0: 20 50 34 0a 2a 2a 20 20 20 20 33 3a 20 20 43 48   P4.**    3:  CH
7ae0: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  ECK constraint f
7af0: 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20  ailed: P4.**    
7b00: 34 3a 20 20 46 4f 52 45 49 47 4e 20 4b 45 59 20  4:  FOREIGN KEY 
7b10: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
7b20: 64 3a 20 50 34 0a 2a 2a 0a 2a 2a 20 49 66 20 50  d: P4.**.** If P
7b30: 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 20 61 6e  5 is not zero an
7b40: 64 20 50 34 20 69 73 20 4e 55 4c 4c 2c 20 74 68  d P4 is NULL, th
7b50: 65 6e 20 65 76 65 72 79 74 68 69 6e 67 20 61 66  en everything af
7b60: 74 65 72 20 74 68 65 20 22 3a 22 20 69 73 0a 2a  ter the ":" is.*
7b70: 2a 20 6f 6d 69 74 74 65 64 2e 0a 2a 2a 0a 2a 2a  * omitted..**.**
7b80: 20 54 68 65 72 65 20 69 73 20 61 6e 20 69 6d 70   There is an imp
7b90: 6c 69 65 64 20 22 48 61 6c 74 20 30 20 30 20 30  lied "Halt 0 0 0
7ba0: 22 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e  " instruction in
7bb0: 73 65 72 74 65 64 20 61 74 20 74 68 65 20 76 65  serted at the ve
7bc0: 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 76 65  ry end of.** eve
7bd0: 72 79 20 70 72 6f 67 72 61 6d 2e 20 20 53 6f 20  ry program.  So 
7be0: 61 20 6a 75 6d 70 20 70 61 73 74 20 74 68 65 20  a jump past the 
7bf0: 6c 61 73 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  last instruction
7c00: 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 0a   of the program.
7c10: 2a 2a 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  ** is the same a
7c20: 73 20 65 78 65 63 75 74 69 6e 67 20 48 61 6c 74  s executing Halt
7c30: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c  ..*/.case OP_Hal
7c40: 74 3a 20 7b 0a 20 20 56 64 62 65 46 72 61 6d 65  t: {.  VdbeFrame
7c50: 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69 6e 74 20   *pFrame;.  int 
7c60: 70 63 78 3b 0a 0a 20 20 70 63 78 20 3d 20 28 69  pcx;..  pcx = (i
7c70: 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a  nt)(pOp - aOp);.
7c80: 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 53    if( pOp->p1==S
7c90: 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 2d 3e 70  QLITE_OK && p->p
7ca0: 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 2f 2a 20  Frame ){.    /* 
7cb0: 48 61 6c 74 20 74 68 65 20 73 75 62 2d 70 72 6f  Halt the sub-pro
7cc0: 67 72 61 6d 2e 20 52 65 74 75 72 6e 20 63 6f 6e  gram. Return con
7cd0: 74 72 6f 6c 20 74 6f 20 74 68 65 20 70 61 72 65  trol to the pare
7ce0: 6e 74 20 66 72 61 6d 65 2e 20 2a 2f 0a 20 20 20  nt frame. */.   
7cf0: 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72   pFrame = p->pFr
7d00: 61 6d 65 3b 0a 20 20 20 20 70 2d 3e 70 46 72 61  ame;.    p->pFra
7d10: 6d 65 20 3d 20 70 46 72 61 6d 65 2d 3e 70 50 61  me = pFrame->pPa
7d20: 72 65 6e 74 3b 0a 20 20 20 20 70 2d 3e 6e 46 72  rent;.    p->nFr
7d30: 61 6d 65 2d 2d 3b 0a 20 20 20 20 73 71 6c 69 74  ame--;.    sqlit
7d40: 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73  e3VdbeSetChanges
7d50: 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29  (db, p->nChange)
7d60: 3b 0a 20 20 20 20 70 63 78 20 3d 20 73 71 6c 69  ;.    pcx = sqli
7d70: 74 65 33 56 64 62 65 46 72 61 6d 65 52 65 73 74  te3VdbeFrameRest
7d80: 6f 72 65 28 70 46 72 61 6d 65 29 3b 0a 20 20 20  ore(pFrame);.   
7d90: 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45   if( pOp->p2==OE
7da0: 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20  _Ignore ){.     
7db0: 20 2f 2a 20 49 6e 73 74 72 75 63 74 69 6f 6e 20   /* Instruction 
7dc0: 70 63 78 20 69 73 20 74 68 65 20 4f 50 5f 50 72  pcx is the OP_Pr
7dd0: 6f 67 72 61 6d 20 74 68 61 74 20 69 6e 76 6f 6b  ogram that invok
7de0: 65 64 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  ed the sub-progr
7df0: 61 6d 20 0a 20 20 20 20 20 20 2a 2a 20 63 75 72  am .      ** cur
7e00: 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 68 61 6c  rently being hal
7e10: 74 65 64 2e 20 49 66 20 74 68 65 20 70 32 20 69  ted. If the p2 i
7e20: 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68  nstruction of th
7e30: 69 73 20 4f 50 5f 48 61 6c 74 0a 20 20 20 20 20  is OP_Halt.     
7e40: 20 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   ** instruction 
7e50: 69 73 20 73 65 74 20 74 6f 20 4f 45 5f 49 67 6e  is set to OE_Ign
7e60: 6f 72 65 2c 20 74 68 65 6e 20 74 68 65 20 73 75  ore, then the su
7e70: 62 2d 70 72 6f 67 72 61 6d 20 69 73 20 74 68 72  b-program is thr
7e80: 6f 77 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 61  owing.      ** a
7e90: 6e 20 49 47 4e 4f 52 45 20 65 78 63 65 70 74 69  n IGNORE excepti
7ea0: 6f 6e 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  on. In this case
7eb0: 20 6a 75 6d 70 20 74 6f 20 74 68 65 20 61 64 64   jump to the add
7ec0: 72 65 73 73 20 73 70 65 63 69 66 69 65 64 0a 20  ress specified. 
7ed0: 20 20 20 20 20 2a 2a 20 61 73 20 74 68 65 20 70       ** as the p
7ee0: 32 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67  2 of the calling
7ef0: 20 4f 50 5f 50 72 6f 67 72 61 6d 2e 20 20 2a 2f   OP_Program.  */
7f00: 0a 20 20 20 20 20 20 70 63 78 20 3d 20 70 2d 3e  .      pcx = p->
7f10: 61 4f 70 5b 70 63 78 5d 2e 70 32 2d 31 3b 0a 20  aOp[pcx].p2-1;. 
7f20: 20 20 20 7d 0a 20 20 20 20 61 4f 70 20 3d 20 70     }.    aOp = p
7f30: 2d 3e 61 4f 70 3b 0a 20 20 20 20 61 4d 65 6d 20  ->aOp;.    aMem 
7f40: 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70  = p->aMem;.    p
7f50: 4f 70 20 3d 20 26 61 4f 70 5b 70 63 78 5d 3b 0a  Op = &aOp[pcx];.
7f60: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
7f70: 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e 70 31   p->rc = pOp->p1
7f80: 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69  ;.  p->errorActi
7f90: 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 32  on = (u8)pOp->p2
7fa0: 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 78 3b  ;.  p->pc = pcx;
7fb0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
7fc0: 70 35 3c 3d 34 20 29 3b 0a 20 20 69 66 28 20 70  p5<=4 );.  if( p
7fd0: 2d 3e 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20  ->rc ){.    if( 
7fe0: 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20  pOp->p5 ){.     
7ff0: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
8000: 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a 54 79 70  ar * const azTyp
8010: 65 5b 5d 20 3d 20 7b 20 22 4e 4f 54 20 4e 55 4c  e[] = { "NOT NUL
8020: 4c 22 2c 20 22 55 4e 49 51 55 45 22 2c 20 22 43  L", "UNIQUE", "C
8030: 48 45 43 4b 22 2c 0a 20 20 20 20 20 20 20 20 20  HECK",.         
8040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8060: 20 20 20 20 22 46 4f 52 45 49 47 4e 20 4b 45 59      "FOREIGN KEY
8070: 22 20 7d 3b 0a 20 20 20 20 20 20 74 65 73 74 63  " };.      testc
8080: 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 31 20  ase( pOp->p5==1 
8090: 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73  );.      testcas
80a0: 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 32 20 29 3b  e( pOp->p5==2 );
80b0: 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
80c0: 20 70 4f 70 2d 3e 70 35 3d 3d 33 20 29 3b 0a 20   pOp->p5==3 );. 
80d0: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
80e0: 4f 70 2d 3e 70 35 3d 3d 34 20 29 3b 0a 20 20 20  Op->p5==4 );.   
80f0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
8100: 72 6f 72 28 70 2c 20 22 25 73 20 63 6f 6e 73 74  ror(p, "%s const
8110: 72 61 69 6e 74 20 66 61 69 6c 65 64 22 2c 20 61  raint failed", a
8120: 7a 54 79 70 65 5b 70 4f 70 2d 3e 70 35 2d 31 5d  zType[pOp->p5-1]
8130: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70  );.      if( pOp
8140: 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20  ->p4.z ){.      
8150: 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73    p->zErrMsg = s
8160: 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62  qlite3MPrintf(db
8170: 2c 20 22 25 7a 3a 20 25 73 22 2c 20 70 2d 3e 7a  , "%z: %s", p->z
8180: 45 72 72 4d 73 67 2c 20 70 4f 70 2d 3e 70 34 2e  ErrMsg, pOp->p4.
8190: 7a 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  z);.      }.    
81a0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c  }else{.      sql
81b0: 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
81c0: 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a   "%s", pOp->p4.z
81d0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  );.    }.    sql
81e0: 69 74 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31  ite3_log(pOp->p1
81f0: 2c 20 22 61 62 6f 72 74 20 61 74 20 25 64 20 69  , "abort at %d i
8200: 6e 20 5b 25 73 5d 3a 20 25 73 22 2c 20 70 63 78  n [%s]: %s", pcx
8210: 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45  , p->zSql, p->zE
8220: 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 72 63  rrMsg);.  }.  rc
8230: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 48 61   = sqlite3VdbeHa
8240: 6c 74 28 70 29 3b 0a 20 20 61 73 73 65 72 74 28  lt(p);.  assert(
8250: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc==SQLITE_BUSY
8260: 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f   || rc==SQLITE_O
8270: 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f  K || rc==SQLITE_
8280: 45 52 52 4f 52 20 29 3b 0a 20 20 69 66 28 20 72  ERROR );.  if( r
8290: 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  c==SQLITE_BUSY )
82a0: 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d 20 53 51  {.    p->rc = SQ
82b0: 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c  LITE_BUSY;.  }el
82c0: 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
82d0: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
82e0: 20 28 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53   (p->rc&0xff)==S
82f0: 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
8300: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
8310: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
8320: 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
8330: 6e 73 3e 30 20 7c 7c 20 64 62 2d 3e 6e 44 65 66  ns>0 || db->nDef
8340: 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3e 30 20 29  erredImmCons>0 )
8350: 3b 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63  ;.    rc = p->rc
8360: 20 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20   ? SQLITE_ERROR 
8370: 3a 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20  : SQLITE_DONE;. 
8380: 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72   }.  goto vdbe_r
8390: 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  eturn;.}../* Opc
83a0: 6f 64 65 3a 20 49 6e 74 65 67 65 72 20 50 31 20  ode: Integer P1 
83b0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
83c0: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 31 0a 2a  psis: r[P2]=P1.*
83d0: 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69 74 20  *.** The 32-bit 
83e0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 31  integer value P1
83f0: 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f   is written into
8400: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
8410: 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 65 72  .case OP_Integer
8420: 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  : {         /* o
8430: 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20  ut2 */.  pOut = 
8440: 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
8450: 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e  , pOp);.  pOut->
8460: 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  u.i = pOp->p1;. 
8470: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
8480: 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20 50 32  code: Int64 * P2
8490: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
84a0: 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a  sis: r[P2]=P4.**
84b0: 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
84c0: 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20  ter to a 64-bit 
84d0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a  integer value..*
84e0: 2a 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c  * Write that val
84f0: 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  ue into register
8500: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
8510: 49 6e 74 36 34 3a 20 7b 20 20 20 20 20 20 20 20  Int64: {        
8520: 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
8530: 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
8540: 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
8550: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
8560: 2e 70 49 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f  .pI64!=0 );.  pO
8570: 75 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e  ut->u.i = *pOp->
8580: 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b  p4.pI64;.  break
8590: 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
85a0: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
85b0: 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64  G_POINT./* Opcod
85c0: 65 3a 20 52 65 61 6c 20 2a 20 50 32 20 2a 20 50  e: Real * P2 * P
85d0: 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
85e0: 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20   r[P2]=P4.**.** 
85f0: 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
8600: 74 6f 20 61 20 36 34 2d 62 69 74 20 66 6c 6f 61  to a 64-bit floa
8610: 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65  ting point value
8620: 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20  ..** Write that 
8630: 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73  value into regis
8640: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
8650: 4f 50 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20  OP_Real: {      
8660: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
8670: 20 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 20   TK_FLOAT, out2 
8680: 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  */.  pOut = out2
8690: 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
86a0: 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  p);.  pOut->flag
86b0: 73 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20  s = MEM_Real;.  
86c0: 61 73 73 65 72 74 28 20 21 73 71 6c 69 74 65 33  assert( !sqlite3
86d0: 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70  IsNaN(*pOp->p4.p
86e0: 52 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74 2d  Real) );.  pOut-
86f0: 3e 75 2e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e  >u.r = *pOp->p4.
8700: 70 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a  pReal;.  break;.
8710: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63  }.#endif../* Opc
8720: 6f 64 65 3a 20 53 74 72 69 6e 67 38 20 2a 20 50  ode: String8 * P
8730: 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
8740: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27  psis: r[P2]='P4'
8750: 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73  .**.** P4 points
8760: 20 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e   to a nul termin
8770: 61 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e  ated UTF-8 strin
8780: 67 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  g. This opcode i
8790: 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a  s transformed .*
87a0: 2a 20 69 6e 74 6f 20 61 20 53 74 72 69 6e 67 20  * into a String 
87b0: 6f 70 63 6f 64 65 20 62 65 66 6f 72 65 20 69 74  opcode before it
87c0: 20 69 73 20 65 78 65 63 75 74 65 64 20 66 6f 72   is executed for
87d0: 20 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 2e   the first time.
87e0: 20 20 44 75 72 69 6e 67 0a 2a 2a 20 74 68 69 73    During.** this
87f0: 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 2c   transformation,
8800: 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 73   the length of s
8810: 74 72 69 6e 67 20 50 34 20 69 73 20 63 6f 6d 70  tring P4 is comp
8820: 75 74 65 64 20 61 6e 64 20 73 74 6f 72 65 64 0a  uted and stored.
8830: 2a 2a 20 61 73 20 74 68 65 20 50 31 20 70 61 72  ** as the P1 par
8840: 61 6d 65 74 65 72 2e 0a 2a 2f 0a 63 61 73 65 20  ameter..*/.case 
8850: 4f 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20  OP_String8: {   
8860: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
8870: 20 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32   TK_STRING, out2
8880: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
8890: 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20  p->p4.z!=0 );.  
88a0: 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
88b0: 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
88c0: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f   pOp->opcode = O
88d0: 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d  P_String;.  pOp-
88e0: 3e 70 31 20 3d 20 73 71 6c 69 74 65 33 53 74 72  >p1 = sqlite3Str
88f0: 6c 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29  len30(pOp->p4.z)
8900: 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
8910: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 69  E_OMIT_UTF16.  i
8920: 66 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c  f( encoding!=SQL
8930: 49 54 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20  ITE_UTF8 ){.    
8940: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
8950: 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20  MemSetStr(pOut, 
8960: 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53  pOp->p4.z, -1, S
8970: 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49  QLITE_UTF8, SQLI
8980: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
8990: 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
89a0: 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c  TE_OK || rc==SQL
89b0: 49 54 45 5f 54 4f 4f 42 49 47 20 29 3b 0a 20 20  ITE_TOOBIG );.  
89c0: 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21    if( SQLITE_OK!
89d0: 3d 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e  =sqlite3VdbeChan
89e0: 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c  geEncoding(pOut,
89f0: 20 65 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f 74   encoding) ) got
8a00: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73  o no_mem;.    as
8a10: 73 65 72 74 28 20 70 4f 75 74 2d 3e 73 7a 4d 61  sert( pOut->szMa
8a20: 6c 6c 6f 63 3e 30 20 26 26 20 70 4f 75 74 2d 3e  lloc>0 && pOut->
8a30: 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a  zMalloc==pOut->z
8a40: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
8a50: 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70  VdbeMemDynamic(p
8a60: 4f 75 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 70  Out)==0 );.    p
8a70: 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3d 20  Out->szMalloc = 
8a80: 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  0;.    pOut->fla
8a90: 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69 63  gs |= MEM_Static
8aa0: 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
8ab0: 34 74 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d 49  4type==P4_DYNAMI
8ac0: 43 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  C ){.      sqlit
8ad0: 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 4f 70  e3DbFree(db, pOp
8ae0: 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20  ->p4.z);.    }. 
8af0: 20 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d     pOp->p4type =
8b00: 20 50 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20 20   P4_DYNAMIC;.   
8b10: 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75   pOp->p4.z = pOu
8b20: 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  t->z;.    pOp->p
8b30: 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20 7d  1 = pOut->n;.  }
8b40: 0a 20 20 74 65 73 74 63 61 73 65 28 20 72 63 3d  .  testcase( rc=
8b50: 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29  =SQLITE_TOOBIG )
8b60: 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70  ;.#endif.  if( p
8b70: 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69  Op->p1>db->aLimi
8b80: 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
8b90: 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
8ba0: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
8bb0: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
8bc0: 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 2f 2a 20  LITE_OK );.  /* 
8bd0: 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  Fall through to 
8be0: 74 68 65 20 6e 65 78 74 20 63 61 73 65 2c 20 4f  the next case, O
8bf0: 50 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20  P_String */.}.  
8c00: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69  ./* Opcode: Stri
8c10: 6e 67 20 50 31 20 50 32 20 50 33 20 50 34 20 50  ng P1 P2 P3 P4 P
8c20: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  5.** Synopsis: r
8c30: 5b 50 32 5d 3d 27 50 34 27 20 28 6c 65 6e 3d 50  [P2]='P4' (len=P
8c40: 31 29 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72  1).**.** The str
8c50: 69 6e 67 20 76 61 6c 75 65 20 50 34 20 6f 66 20  ing value P4 of 
8c60: 6c 65 6e 67 74 68 20 50 31 20 28 62 79 74 65 73  length P1 (bytes
8c70: 29 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  ) is stored in r
8c80: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
8c90: 2a 20 49 66 20 50 33 20 69 73 20 6e 6f 74 20 7a  * If P3 is not z
8ca0: 65 72 6f 20 61 6e 64 20 74 68 65 20 63 6f 6e 74  ero and the cont
8cb0: 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
8cc0: 50 33 20 69 73 20 65 71 75 61 6c 20 74 6f 20 50  P3 is equal to P
8cd0: 35 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 64  5, then.** the d
8ce0: 61 74 61 74 79 70 65 20 6f 66 20 74 68 65 20 72  atatype of the r
8cf0: 65 67 69 73 74 65 72 20 50 32 20 69 73 20 63 6f  egister P2 is co
8d00: 6e 76 65 72 74 65 64 20 74 6f 20 42 4c 4f 42 2e  nverted to BLOB.
8d10: 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 69 73    The content is
8d20: 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 73 65 71  .** the same seq
8d30: 75 65 6e 63 65 20 6f 66 20 62 79 74 65 73 2c 20  uence of bytes, 
8d40: 69 74 20 69 73 20 6d 65 72 65 6c 79 20 69 6e 74  it is merely int
8d50: 65 72 70 72 65 74 65 64 20 61 73 20 61 20 42 4c  erpreted as a BL
8d60: 4f 42 20 69 6e 73 74 65 61 64 0a 2a 2a 20 6f 66  OB instead.** of
8d70: 20 61 20 73 74 72 69 6e 67 2c 20 61 73 20 69 66   a string, as if
8d80: 20 69 74 20 68 61 64 20 62 65 65 6e 20 43 41 53   it had been CAS
8d90: 54 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  T.  In other wor
8da0: 64 73 3a 0a 2a 2a 0a 2a 2a 20 69 66 28 20 50 33  ds:.**.** if( P3
8db0: 21 3d 30 20 61 6e 64 20 72 65 67 5b 50 33 5d 3d  !=0 and reg[P3]=
8dc0: 3d 50 35 20 29 20 72 65 67 5b 50 32 5d 20 3a 3d  =P5 ) reg[P2] :=
8dd0: 20 43 41 53 54 28 72 65 67 5b 50 32 5d 20 61 73   CAST(reg[P2] as
8de0: 20 42 4c 4f 42 29 0a 2a 2f 0a 63 61 73 65 20 4f   BLOB).*/.case O
8df0: 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20 20 20  P_String: {     
8e00: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
8e10: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
8e20: 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74  4.z!=0 );.  pOut
8e30: 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
8e40: 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75  e(p, pOp);.  pOu
8e50: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53  t->flags = MEM_S
8e60: 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  tr|MEM_Static|ME
8e70: 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e  M_Term;.  pOut->
8e80: 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  z = pOp->p4.z;. 
8e90: 20 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e   pOut->n = pOp->
8ea0: 70 31 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20  p1;.  pOut->enc 
8eb0: 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50  = encoding;.  UP
8ec0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
8ed0: 45 28 70 4f 75 74 29 3b 0a 23 69 66 6e 64 65 66  E(pOut);.#ifndef
8ee0: 20 53 51 4c 49 54 45 5f 4c 49 4b 45 5f 44 4f 45   SQLITE_LIKE_DOE
8ef0: 53 4e 54 5f 4d 41 54 43 48 5f 42 4c 4f 42 53 0a  SNT_MATCH_BLOBS.
8f00: 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20    if( pOp->p3>0 
8f10: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
8f20: 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
8f30: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
8f40: 20 29 3b 0a 20 20 20 20 70 49 6e 33 20 3d 20 26   );.    pIn3 = &
8f50: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
8f60: 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d     assert( pIn3-
8f70: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
8f80: 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49 6e 33   );.    if( pIn3
8f90: 2d 3e 75 2e 69 3d 3d 70 4f 70 2d 3e 70 35 20 29  ->u.i==pOp->p5 )
8fa0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
8fb0: 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 61 74  EM_Blob|MEM_Stat
8fc0: 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 7d  ic|MEM_Term;.  }
8fd0: 0a 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b  .#endif.  break;
8fe0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
8ff0: 75 6c 6c 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ull P1 P2 P3 * *
9000: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
9010: 50 32 2e 2e 50 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a  P2..P3]=NULL.**.
9020: 2a 2a 20 57 72 69 74 65 20 61 20 4e 55 4c 4c 20  ** Write a NULL 
9030: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20 50  into registers P
9040: 32 2e 20 20 49 66 20 50 33 20 67 72 65 61 74 65  2.  If P3 greate
9050: 72 20 74 68 61 6e 20 50 32 2c 20 74 68 65 6e 20  r than P2, then 
9060: 61 6c 73 6f 20 77 72 69 74 65 0a 2a 2a 20 4e 55  also write.** NU
9070: 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  LL into register
9080: 20 50 33 20 61 6e 64 20 65 76 65 72 79 20 72 65   P3 and every re
9090: 67 69 73 74 65 72 20 69 6e 20 62 65 74 77 65 65  gister in betwee
90a0: 6e 20 50 32 20 61 6e 64 20 50 33 2e 20 20 49 66  n P2 and P3.  If
90b0: 20 50 33 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74   P3.** is less t
90c0: 68 61 6e 20 50 32 20 28 74 79 70 69 63 61 6c 6c  han P2 (typicall
90d0: 79 20 50 33 20 69 73 20 7a 65 72 6f 29 20 74 68  y P3 is zero) th
90e0: 65 6e 20 6f 6e 6c 79 20 72 65 67 69 73 74 65 72  en only register
90f0: 20 50 32 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f   P2 is.** set to
9100: 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   NULL..**.** If 
9110: 74 68 65 20 50 31 20 76 61 6c 75 65 20 69 73 20  the P1 value is 
9120: 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61  non-zero, then a
9130: 6c 73 6f 20 73 65 74 20 74 68 65 20 4d 45 4d 5f  lso set the MEM_
9140: 43 6c 65 61 72 65 64 20 66 6c 61 67 20 73 6f 20  Cleared flag so 
9150: 74 68 61 74 0a 2a 2a 20 4e 55 4c 4c 20 76 61 6c  that.** NULL val
9160: 75 65 73 20 77 69 6c 6c 20 6e 6f 74 20 63 6f 6d  ues will not com
9170: 70 61 72 65 20 65 71 75 61 6c 20 65 76 65 6e 20  pare equal even 
9180: 69 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  if SQLITE_NULLEQ
9190: 20 69 73 20 73 65 74 20 6f 6e 0a 2a 2a 20 4f 50   is set on.** OP
91a0: 5f 4e 65 20 6f 72 20 4f 50 5f 45 71 2e 0a 2a 2f  _Ne or OP_Eq..*/
91b0: 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b  .case OP_Null: {
91c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
91d0: 74 32 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b  t2 */.  int cnt;
91e0: 0a 20 20 75 31 36 20 6e 75 6c 6c 46 6c 61 67 3b  .  u16 nullFlag;
91f0: 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
9200: 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
9210: 3b 0a 20 20 63 6e 74 20 3d 20 70 4f 70 2d 3e 70  ;.  cnt = pOp->p
9220: 33 2d 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  3-pOp->p2;.  ass
9230: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  ert( pOp->p3<=(p
9240: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
9250: 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74  ursor) );.  pOut
9260: 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c  ->flags = nullFl
9270: 61 67 20 3d 20 70 4f 70 2d 3e 70 31 20 3f 20 28  ag = pOp->p1 ? (
9280: 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 43 6c 65  MEM_Null|MEM_Cle
9290: 61 72 65 64 29 20 3a 20 4d 45 4d 5f 4e 75 6c 6c  ared) : MEM_Null
92a0: 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 30 3b  ;.  pOut->n = 0;
92b0: 0a 20 20 77 68 69 6c 65 28 20 63 6e 74 3e 30 20  .  while( cnt>0 
92c0: 29 7b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20  ){.    pOut++;. 
92d0: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
92e0: 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20  nge(p, pOut);.  
92f0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
9300: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
9310: 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
9320: 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 20 20 70   nullFlag;.    p
9330: 4f 75 74 2d 3e 6e 20 3d 20 30 3b 0a 20 20 20 20  Out->n = 0;.    
9340: 63 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72 65  cnt--;.  }.  bre
9350: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
9360: 3a 20 53 6f 66 74 4e 75 6c 6c 20 50 31 20 2a 20  : SoftNull P1 * 
9370: 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
9380: 73 3a 20 72 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a  s: r[P1]=NULL.**
9390: 0a 2a 2a 20 53 65 74 20 72 65 67 69 73 74 65 72  .** Set register
93a0: 20 50 31 20 74 6f 20 68 61 76 65 20 74 68 65 20   P1 to have the 
93b0: 76 61 6c 75 65 20 4e 55 4c 4c 20 61 73 20 73 65  value NULL as se
93c0: 65 6e 20 62 79 20 74 68 65 20 4f 50 5f 4d 61 6b  en by the OP_Mak
93d0: 65 52 65 63 6f 72 64 0a 2a 2a 20 69 6e 73 74 72  eRecord.** instr
93e0: 75 63 74 69 6f 6e 2c 20 62 75 74 20 64 6f 20 6e  uction, but do n
93f0: 6f 74 20 66 72 65 65 20 61 6e 79 20 73 74 72 69  ot free any stri
9400: 6e 67 20 6f 72 20 62 6c 6f 62 20 6d 65 6d 6f 72  ng or blob memor
9410: 79 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  y associated wit
9420: 68 0a 2a 2a 20 74 68 65 20 72 65 67 69 73 74 65  h.** the registe
9430: 72 2c 20 73 6f 20 74 68 61 74 20 69 66 20 74 68  r, so that if th
9440: 65 20 76 61 6c 75 65 20 77 61 73 20 61 20 73 74  e value was a st
9450: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 68 61  ring or blob tha
9460: 74 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75  t was.** previou
9470: 73 6c 79 20 63 6f 70 69 65 64 20 75 73 69 6e 67  sly copied using
9480: 20 4f 50 5f 53 43 6f 70 79 2c 20 74 68 65 20 63   OP_SCopy, the c
9490: 6f 70 69 65 73 20 77 69 6c 6c 20 63 6f 6e 74 69  opies will conti
94a0: 6e 75 65 20 74 6f 20 62 65 20 76 61 6c 69 64 2e  nue to be valid.
94b0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 66 74  .*/.case OP_Soft
94c0: 4e 75 6c 6c 3a 20 7b 0a 20 20 61 73 73 65 72 74  Null: {.  assert
94d0: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70  ( pOp->p1>0 && p
94e0: 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p1<=(p->nMem
94f0: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
9500: 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d   );.  pOut = &aM
9510: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
9520: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 28 70 4f  Out->flags = (pO
9530: 75 74 2d 3e 66 6c 61 67 73 26 7e 28 4d 45 4d 5f  ut->flags&~(MEM_
9540: 55 6e 64 65 66 69 6e 65 64 7c 4d 45 4d 5f 41 66  Undefined|MEM_Af
9550: 66 4d 61 73 6b 29 29 7c 4d 45 4d 5f 4e 75 6c 6c  fMask))|MEM_Null
9560: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
9570: 20 4f 70 63 6f 64 65 3a 20 42 6c 6f 62 20 50 31   Opcode: Blob P1
9580: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
9590: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34  nopsis: r[P2]=P4
95a0: 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20   (len=P1).**.** 
95b0: 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 62  P4 points to a b
95c0: 6c 6f 62 20 6f 66 20 64 61 74 61 20 50 31 20 62  lob of data P1 b
95d0: 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53 74 6f 72  ytes long.  Stor
95e0: 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f 62 20 69  e this.** blob i
95f0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
9600: 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62 3a 20  /.case OP_Blob: 
9610: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
9620: 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73   /* out2 */.  as
9630: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 20 3c 3d  sert( pOp->p1 <=
9640: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47   SQLITE_MAX_LENG
9650: 54 48 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  TH );.  pOut = o
9660: 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
9670: 20 70 4f 70 29 3b 0a 20 20 73 71 6c 69 74 65 33   pOp);.  sqlite3
9680: 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f  VdbeMemSetStr(pO
9690: 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70  ut, pOp->p4.z, p
96a0: 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29 3b 0a 20  Op->p1, 0, 0);. 
96b0: 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63   pOut->enc = enc
96c0: 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f  oding;.  UPDATE_
96d0: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
96e0: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
96f0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72 69 61  /* Opcode: Varia
9700: 62 6c 65 20 50 31 20 50 32 20 2a 20 50 34 20 2a  ble P1 P2 * P4 *
9710: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
9720: 50 32 5d 3d 70 61 72 61 6d 65 74 65 72 28 50 31  P2]=parameter(P1
9730: 2c 50 34 29 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73  ,P4).**.** Trans
9740: 66 65 72 20 74 68 65 20 76 61 6c 75 65 73 20 6f  fer the values o
9750: 66 20 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65  f bound paramete
9760: 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74  r P1 into regist
9770: 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74  er P2.**.** If t
9780: 68 65 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  he parameter is 
9790: 6e 61 6d 65 64 2c 20 74 68 65 6e 20 69 74 73 20  named, then its 
97a0: 6e 61 6d 65 20 61 70 70 65 61 72 73 20 69 6e 20  name appears in 
97b0: 50 34 2e 0a 2a 2a 20 54 68 65 20 50 34 20 76 61  P4..** The P4 va
97c0: 6c 75 65 20 69 73 20 75 73 65 64 20 62 79 20 73  lue is used by s
97d0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
97e0: 6d 65 74 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f  meter_name()..*/
97f0: 0a 63 61 73 65 20 4f 50 5f 56 61 72 69 61 62 6c  .case OP_Variabl
9800: 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  e: {            
9810: 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 4d 65 6d  /* out2 */.  Mem
9820: 20 2a 70 56 61 72 3b 20 20 20 20 20 20 20 2f 2a   *pVar;       /*
9830: 20 56 61 6c 75 65 20 62 65 69 6e 67 20 74 72 61   Value being tra
9840: 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20 20 61  nsferred */..  a
9850: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
9860: 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e   && pOp->p1<=p->
9870: 6e 56 61 72 20 29 3b 0a 20 20 61 73 73 65 72 74  nVar );.  assert
9880: 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c  ( pOp->p4.z==0 |
9890: 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 73 71 6c  | pOp->p4.z==sql
98a0: 69 74 65 33 56 4c 69 73 74 4e 75 6d 54 6f 4e 61  ite3VListNumToNa
98b0: 6d 65 28 70 2d 3e 70 56 4c 69 73 74 2c 70 4f 70  me(p->pVList,pOp
98c0: 2d 3e 70 31 29 20 29 3b 0a 20 20 70 56 61 72 20  ->p1) );.  pVar 
98d0: 3d 20 26 70 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e  = &p->aVar[pOp->
98e0: 70 31 20 2d 20 31 5d 3b 0a 20 20 69 66 28 20 73  p1 - 1];.  if( s
98f0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f  qlite3VdbeMemToo
9900: 42 69 67 28 70 56 61 72 29 20 29 7b 0a 20 20 20  Big(pVar) ){.   
9910: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
9920: 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65   }.  pOut = &aMe
9930: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71  m[pOp->p2];.  sq
9940: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
9950: 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 56  lowCopy(pOut, pV
9960: 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b  ar, MEM_Static);
9970: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
9980: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
9990: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
99a0: 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20 50 32 20  ode: Move P1 P2 
99b0: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
99c0: 69 73 3a 20 72 5b 50 32 40 50 33 5d 3d 72 5b 50  is: r[P2@P3]=r[P
99d0: 31 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65  1@P3].**.** Move
99e0: 20 74 68 65 20 50 33 20 76 61 6c 75 65 73 20 69   the P3 values i
99f0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 2e 50  n register P1..P
9a00: 31 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e 74 6f  1+P3-1 over into
9a10: 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20 50 32  .** registers P2
9a20: 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65 67 69  ..P2+P3-1.  Regi
9a30: 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 2d  sters P1..P1+P3-
9a40: 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20 68 6f  1 are.** left ho
9a50: 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20 20 49  lding a NULL.  I
9a60: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f  t is an error fo
9a70: 72 20 72 65 67 69 73 74 65 72 20 72 61 6e 67 65  r register range
9a80: 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33 2d 31  s.** P1..P1+P3-1
9a90: 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33 2d 31   and P2..P2+P3-1
9aa0: 20 74 6f 20 6f 76 65 72 6c 61 70 2e 20 20 49 74   to overlap.  It
9ab0: 20 69 73 20 61 6e 20 65 72 72 6f 72 0a 2a 2a 20   is an error.** 
9ac0: 66 6f 72 20 50 33 20 74 6f 20 62 65 20 6c 65 73  for P3 to be les
9ad0: 73 20 74 68 61 6e 20 31 2e 0a 2a 2f 0a 63 61 73  s than 1..*/.cas
9ae0: 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20 69  e OP_Move: {.  i
9af0: 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20  nt n;           
9b00: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67  /* Number of reg
9b10: 69 73 74 65 72 73 20 6c 65 66 74 20 74 6f 20 63  isters left to c
9b20: 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b  opy */.  int p1;
9b30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
9b40: 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 66 72  ister to copy fr
9b50: 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20  om */.  int p2; 
9b60: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
9b70: 73 74 65 72 20 74 6f 20 63 6f 70 79 20 74 6f 20  ster to copy to 
9b80: 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70  */..  n = pOp->p
9b90: 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70  3;.  p1 = pOp->p
9ba0: 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70  1;.  p2 = pOp->p
9bb0: 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30  2;.  assert( n>0
9bc0: 20 26 26 20 70 31 3e 30 20 26 26 20 70 32 3e 30   && p1>0 && p2>0
9bd0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31   );.  assert( p1
9be0: 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d  +n<=p2 || p2+n<=
9bf0: 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31 20 3d 20  p1 );..  pIn1 = 
9c00: 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f 75  &aMem[p1];.  pOu
9c10: 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20  t = &aMem[p2];. 
9c20: 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74 28   do{.    assert(
9c30: 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b 28 70 2d   pOut<=&aMem[(p-
9c40: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
9c50: 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73  rsor)] );.    as
9c60: 73 65 72 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65  sert( pIn1<=&aMe
9c70: 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  m[(p->nMem+1 - p
9c80: 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20  ->nCursor)] );. 
9c90: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
9ca0: 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20  Valid(pIn1) );. 
9cb0: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
9cc0: 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20  nge(p, pOut);.  
9cd0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
9ce0: 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e 31 29  Move(pOut, pIn1)
9cf0: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
9d00: 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 70 4f  DEBUG.    if( pO
9d10: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3e 3d  ut->pScopyFrom>=
9d20: 26 61 4d 65 6d 5b 70 31 5d 20 26 26 20 70 4f 75  &aMem[p1] && pOu
9d30: 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3c 70 4f  t->pScopyFrom<pO
9d40: 75 74 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74  ut ){.      pOut
9d50: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 2b 3d 20  ->pScopyFrom += 
9d60: 70 4f 70 2d 3e 70 32 20 2d 20 70 31 3b 0a 20 20  pOp->p2 - p1;.  
9d70: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 44    }.#endif.    D
9d80: 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f  eephemeralize(pO
9d90: 75 74 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  ut);.    REGISTE
9da0: 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c 20 70 4f  R_TRACE(p2++, pO
9db0: 75 74 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b  ut);.    pIn1++;
9dc0: 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d  .    pOut++;.  }
9dd0: 77 68 69 6c 65 28 20 2d 2d 6e 20 29 3b 0a 20 20  while( --n );.  
9de0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
9df0: 6f 64 65 3a 20 43 6f 70 79 20 50 31 20 50 32 20  ode: Copy P1 P2 
9e00: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
9e10: 69 73 3a 20 72 5b 50 32 40 50 33 2b 31 5d 3d 72  is: r[P2@P3+1]=r
9e20: 5b 50 31 40 50 33 2b 31 5d 0a 2a 2a 0a 2a 2a 20  [P1@P3+1].**.** 
9e30: 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 72  Make a copy of r
9e40: 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b  egisters P1..P1+
9e50: 50 33 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  P3 into register
9e60: 73 20 50 32 2e 2e 50 32 2b 50 33 2e 0a 2a 2a 0a  s P2..P2+P3..**.
9e70: 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
9e80: 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65 65 70  ion makes a deep
9e90: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c   copy of the val
9ea0: 75 65 2e 20 20 41 20 64 75 70 6c 69 63 61 74 65  ue.  A duplicate
9eb0: 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66 20 61  .** is made of a
9ec0: 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f  ny string or blo
9ed0: 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65  b constant.  See
9ee0: 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a   also OP_SCopy..
9ef0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a  */.case OP_Copy:
9f00: 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e   {.  int n;..  n
9f10: 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 49   = pOp->p3;.  pI
9f20: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
9f30: 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p1];.  pOut = &a
9f40: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
9f50: 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49  assert( pOut!=pI
9f60: 6e 31 20 29 3b 0a 20 20 77 68 69 6c 65 28 20 31  n1 );.  while( 1
9f70: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
9f80: 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
9f90: 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45  y(pOut, pIn1, ME
9fa0: 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 20 20 44 65  M_Ephem);.    De
9fb0: 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75  ephemeralize(pOu
9fc0: 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  t);.#ifdef SQLIT
9fd0: 45 5f 44 45 42 55 47 0a 20 20 20 20 70 4f 75 74  E_DEBUG.    pOut
9fe0: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 30  ->pScopyFrom = 0
9ff0: 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 52 45 47  ;.#endif.    REG
a000: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
a010: 3e 70 32 2b 70 4f 70 2d 3e 70 33 2d 6e 2c 20 70  >p2+pOp->p3-n, p
a020: 4f 75 74 29 3b 0a 20 20 20 20 69 66 28 20 28 6e  Out);.    if( (n
a030: 2d 2d 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a  --)==0 ) break;.
a040: 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20      pOut++;.    
a050: 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72  pIn1++;.  }.  br
a060: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
a070: 65 3a 20 53 43 6f 70 79 20 50 31 20 50 32 20 2a  e: SCopy P1 P2 *
a080: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
a090: 3a 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a  : r[P2]=r[P1].**
a0a0: 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68 61 6c 6c  .** Make a shall
a0b0: 6f 77 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73  ow copy of regis
a0c0: 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69  ter P1 into regi
a0d0: 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  ster P2..**.** T
a0e0: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
a0f0: 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c 6f 77 20  makes a shallow 
a100: 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75  copy of the valu
a110: 65 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  e.  If the value
a120: 0a 2a 2a 20 69 73 20 61 20 73 74 72 69 6e 67 20  .** is a string 
a130: 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e 20 74 68  or blob, then th
a140: 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c 79 20 61  e copy is only a
a150: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 0a   pointer to the.
a160: 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61 6e 64 20  ** original and 
a170: 68 65 6e 63 65 20 69 66 20 74 68 65 20 6f 72 69  hence if the ori
a180: 67 69 6e 61 6c 20 63 68 61 6e 67 65 73 20 73 6f  ginal changes so
a190: 20 77 69 6c 6c 20 74 68 65 20 63 6f 70 79 2e 0a   will the copy..
a1a0: 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20 74 68 65  ** Worse, if the
a1b0: 20 6f 72 69 67 69 6e 61 6c 20 69 73 20 64 65 61   original is dea
a1c0: 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 20 63 6f  llocated, the co
a1d0: 70 79 20 62 65 63 6f 6d 65 73 20 69 6e 76 61 6c  py becomes inval
a1e0: 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74 68 65 20  id..** Thus the 
a1f0: 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 67 75 61  program must gua
a200: 72 61 6e 74 65 65 20 74 68 61 74 20 74 68 65 20  rantee that the 
a210: 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f  original will no
a220: 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64 75 72 69  t change.** duri
a230: 6e 67 20 74 68 65 20 6c 69 66 65 74 69 6d 65 20  ng the lifetime 
a240: 6f 66 20 74 68 65 20 63 6f 70 79 2e 20 20 55 73  of the copy.  Us
a250: 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20 6d 61 6b  e OP_Copy to mak
a260: 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20  e a complete.** 
a270: 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  copy..*/.case OP
a280: 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20  _SCopy: {       
a290: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
a2a0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
a2b0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Op->p1];.  pOut 
a2c0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
a2d0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75 74  ;.  assert( pOut
a2e0: 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69  !=pIn1 );.  sqli
a2f0: 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
a300: 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31  wCopy(pOut, pIn1
a310: 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 23 69  , MEM_Ephem);.#i
a320: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
a330: 47 0a 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53  G.  if( pOut->pS
a340: 63 6f 70 79 46 72 6f 6d 3d 3d 30 20 29 20 70 4f  copyFrom==0 ) pO
a350: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d  ut->pScopyFrom =
a360: 20 70 49 6e 31 3b 0a 23 65 6e 64 69 66 0a 20 20   pIn1;.#endif.  
a370: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
a380: 6f 64 65 3a 20 49 6e 74 43 6f 70 79 20 50 31 20  ode: IntCopy P1 
a390: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
a3a0: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50 31  psis: r[P2]=r[P1
a3b0: 5d 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72  ].**.** Transfer
a3c0: 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
a3d0: 75 65 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73  ue held in regis
a3e0: 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69  ter P1 into regi
a3f0: 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  ster P2..**.** T
a400: 68 69 73 20 69 73 20 61 6e 20 6f 70 74 69 6d 69  his is an optimi
a410: 7a 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 53  zed version of S
a420: 43 6f 70 79 20 74 68 61 74 20 77 6f 72 6b 73 20  Copy that works 
a430: 6f 6e 6c 79 20 66 6f 72 20 69 6e 74 65 67 65 72  only for integer
a440: 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a 2f 0a 63  .** values..*/.c
a450: 61 73 65 20 4f 50 5f 49 6e 74 43 6f 70 79 3a 20  ase OP_IntCopy: 
a460: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
a470: 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d  out2 */.  pIn1 =
a480: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
a490: 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 31  .  assert( (pIn1
a4a0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
a4b0: 74 29 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20  t)!=0 );.  pOut 
a4c0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
a4d0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
a4e0: 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c  emSetInt64(pOut,
a4f0: 20 70 49 6e 31 2d 3e 75 2e 69 29 3b 0a 20 20 62   pIn1->u.i);.  b
a500: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
a510: 64 65 3a 20 52 65 73 75 6c 74 52 6f 77 20 50 31  de: ResultRow P1
a520: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
a530: 6f 70 73 69 73 3a 20 6f 75 74 70 75 74 3d 72 5b  opsis: output=r[
a540: 50 31 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  P1@P2].**.** The
a550: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 74 68   registers P1 th
a560: 72 6f 75 67 68 20 50 31 2b 50 32 2d 31 20 63 6f  rough P1+P2-1 co
a570: 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 72  ntain a single r
a580: 6f 77 20 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73  ow of.** results
a590: 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 63 61  . This opcode ca
a5a0: 75 73 65 73 20 74 68 65 20 73 71 6c 69 74 65 33  uses the sqlite3
a5b0: 5f 73 74 65 70 28 29 20 63 61 6c 6c 20 74 6f 20  _step() call to 
a5c0: 74 65 72 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74  terminate.** wit
a5d0: 68 20 61 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20  h an SQLITE_ROW 
a5e0: 72 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20  return code and 
a5f0: 69 74 20 73 65 74 73 20 75 70 20 74 68 65 20 73  it sets up the s
a600: 71 6c 69 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73  qlite3_stmt.** s
a610: 74 72 75 63 74 75 72 65 20 74 6f 20 70 72 6f 76  tructure to prov
a620: 69 64 65 20 61 63 63 65 73 73 20 74 6f 20 74 68  ide access to th
a630: 65 20 72 28 50 31 29 2e 2e 72 28 50 31 2b 50 32  e r(P1)..r(P1+P2
a640: 2d 31 29 20 76 61 6c 75 65 73 20 61 73 0a 2a 2a  -1) values as.**
a650: 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 2e   the result row.
a660: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 75  .*/.case OP_Resu
a670: 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a  ltRow: {.  Mem *
a680: 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  pMem;.  int i;. 
a690: 20 61 73 73 65 72 74 28 20 70 2d 3e 6e 52 65 73   assert( p->nRes
a6a0: 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20  Column==pOp->p2 
a6b0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
a6c0: 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65  ->p1>0 );.  asse
a6d0: 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d  rt( pOp->p1+pOp-
a6e0: 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p2<=(p->nMem+1 
a6f0: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  - p->nCursor)+1 
a700: 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
a710: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
a720: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 52  _CALLBACK.  /* R
a730: 75 6e 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  un the progress 
a740: 63 6f 75 6e 74 65 72 20 6a 75 73 74 20 62 65 66  counter just bef
a750: 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 2e 0a 20  ore returning.. 
a760: 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50   */.  if( db->xP
a770: 72 6f 67 72 65 73 73 21 3d 30 0a 20 20 20 26 26  rogress!=0.   &&
a780: 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72   nVmStep>=nProgr
a790: 65 73 73 4c 69 6d 69 74 20 0a 20 20 20 26 26 20  essLimit .   && 
a7a0: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62  db->xProgress(db
a7b0: 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29 21  ->pProgressArg)!
a7c0: 3d 30 0a 20 20 29 7b 0a 20 20 20 20 72 63 20 3d  =0.  ){.    rc =
a7d0: 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50   SQLITE_INTERRUP
a7e0: 54 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  T;.    goto abor
a7f0: 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
a800: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a    }.#endif..  /*
a810: 20 49 66 20 74 68 69 73 20 73 74 61 74 65 6d 65   If this stateme
a820: 6e 74 20 68 61 73 20 76 69 6f 6c 61 74 65 64 20  nt has violated 
a830: 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67  immediate foreig
a840: 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
a850: 73 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74 20 72  s, do.  ** not r
a860: 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
a870: 20 6f 66 20 72 6f 77 73 20 6d 6f 64 69 66 69 65   of rows modifie
a880: 64 2e 20 41 6e 64 20 64 6f 20 6e 6f 74 20 52 45  d. And do not RE
a890: 4c 45 41 53 45 20 74 68 65 20 73 74 61 74 65 6d  LEASE the statem
a8a0: 65 6e 74 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63  ent.  ** transac
a8b0: 74 69 6f 6e 2e 20 49 74 20 6e 65 65 64 73 20 74  tion. It needs t
a8c0: 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
a8d0: 2e 20 20 2a 2f 0a 20 20 69 66 28 20 53 51 4c 49  .  */.  if( SQLI
a8e0: 54 45 5f 4f 4b 21 3d 28 72 63 20 3d 20 73 71 6c  TE_OK!=(rc = sql
a8f0: 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28  ite3VdbeCheckFk(
a900: 70 2c 20 30 29 29 20 29 7b 0a 20 20 20 20 61 73  p, 0)) ){.    as
a910: 73 65 72 74 28 20 64 62 2d 3e 66 6c 61 67 73 26  sert( db->flags&
a920: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
a930: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
a940: 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e  p->usesStmtJourn
a950: 61 6c 20 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61  al );.    goto a
a960: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
a970: 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20  r;.  }..  /* If 
a980: 74 68 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74  the SQLITE_Count
a990: 52 6f 77 73 20 66 6c 61 67 20 69 73 20 73 65 74  Rows flag is set
a9a0: 20 69 6e 20 73 71 6c 69 74 65 33 2e 66 6c 61 67   in sqlite3.flag
a9b0: 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 0a 20 20  s mask, then .  
a9c0: 2a 2a 20 44 4d 4c 20 73 74 61 74 65 6d 65 6e 74  ** DML statement
a9d0: 73 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70  s invoke this op
a9e0: 63 6f 64 65 20 74 6f 20 72 65 74 75 72 6e 20 74  code to return t
a9f0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
aa00: 73 20 0a 20 20 2a 2a 20 6d 6f 64 69 66 69 65 64  s .  ** modified
aa10: 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68   to the user. Th
aa20: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77  is is the only w
aa30: 61 79 20 74 68 61 74 20 61 20 56 4d 20 74 68 61  ay that a VM tha
aa40: 74 0a 20 20 2a 2a 20 6f 70 65 6e 73 20 61 20 73  t.  ** opens a s
aa50: 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
aa60: 74 69 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b 65 20  tion may invoke 
aa70: 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 20 20 2a  this opcode..  *
aa80: 2a 0a 20 20 2a 2a 20 49 6e 20 63 61 73 65 20 74  *.  ** In case t
aa90: 68 69 73 20 69 73 20 73 75 63 68 20 61 20 73 74  his is such a st
aaa0: 61 74 65 6d 65 6e 74 2c 20 63 6c 6f 73 65 20 61  atement, close a
aab0: 6e 79 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  ny statement tra
aac0: 6e 73 61 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f 70  nsaction.  ** op
aad0: 65 6e 65 64 20 62 79 20 74 68 69 73 20 56 4d 20  ened by this VM 
aae0: 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67  before returning
aaf0: 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20   control to the 
ab00: 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 6f  user. This is to
ab10: 0a 20 20 2a 2a 20 65 6e 73 75 72 65 20 74 68 61  .  ** ensure tha
ab20: 74 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e  t statement-tran
ab30: 73 61 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 77  sactions are alw
ab40: 61 79 73 20 6e 65 73 74 65 64 2c 20 6e 6f 74 20  ays nested, not 
ab50: 6f 76 65 72 6c 61 70 70 69 6e 67 2e 0a 20 20 2a  overlapping..  *
ab60: 2a 20 49 66 20 74 68 65 20 6f 70 65 6e 20 73 74  * If the open st
ab70: 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74  atement-transact
ab80: 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6c 6f 73 65  ion is not close
ab90: 64 20 68 65 72 65 2c 20 74 68 65 6e 20 74 68 65  d here, then the
aba0: 20 75 73 65 72 0a 20 20 2a 2a 20 6d 61 79 20 73   user.  ** may s
abb0: 74 65 70 20 61 6e 6f 74 68 65 72 20 56 4d 20 74  tep another VM t
abc0: 68 61 74 20 6f 70 65 6e 73 20 69 74 73 20 6f 77  hat opens its ow
abd0: 6e 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  n statement tran
abe0: 73 61 63 74 69 6f 6e 2e 20 54 68 69 73 0a 20 20  saction. This.  
abf0: 2a 2a 20 6d 61 79 20 6c 65 61 64 20 74 6f 20 6f  ** may lead to o
ac00: 76 65 72 6c 61 70 70 69 6e 67 20 73 74 61 74 65  verlapping state
ac10: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
ac20: 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  s..  **.  ** The
ac30: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
ac40: 61 63 74 69 6f 6e 20 69 73 20 6e 65 76 65 72 20  action is never 
ac50: 61 20 74 6f 70 2d 6c 65 76 65 6c 20 74 72 61 6e  a top-level tran
ac60: 73 61 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 0a  saction.  Hence.
ac70: 20 20 2a 2a 20 74 68 65 20 52 45 4c 45 41 53 45    ** the RELEASE
ac80: 20 63 61 6c 6c 20 62 65 6c 6f 77 20 63 61 6e 20   call below can 
ac90: 6e 65 76 65 72 20 66 61 69 6c 2e 0a 20 20 2a 2f  never fail..  */
aca0: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 69 53  .  assert( p->iS
acb0: 74 61 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64  tatement==0 || d
acc0: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
acd0: 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 72  CountRows );.  r
ace0: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
acf0: 6c 6f 73 65 53 74 61 74 65 6d 65 6e 74 28 70 2c  loseStatement(p,
ad00: 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41   SAVEPOINT_RELEA
ad10: 53 45 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72  SE);.  assert( r
ad20: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c==SQLITE_OK );.
ad30: 0a 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65  .  /* Invalidate
ad40: 20 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c 20 63   all ephemeral c
ad50: 75 72 73 6f 72 20 72 6f 77 20 63 61 63 68 65 73  ursor row caches
ad60: 20 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65 43 74   */.  p->cacheCt
ad70: 72 20 3d 20 28 70 2d 3e 63 61 63 68 65 43 74 72  r = (p->cacheCtr
ad80: 20 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d   + 2)|1;..  /* M
ad90: 61 6b 65 20 73 75 72 65 20 74 68 65 20 72 65 73  ake sure the res
ada0: 75 6c 74 73 20 6f 66 20 74 68 65 20 63 75 72 72  ults of the curr
adb0: 65 6e 74 20 72 6f 77 20 61 72 65 20 5c 30 30 30  ent row are \000
adc0: 20 74 65 72 6d 69 6e 61 74 65 64 0a 20 20 2a 2a   terminated.  **
add0: 20 61 6e 64 20 68 61 76 65 20 61 6e 20 61 73 73   and have an ass
ade0: 69 67 6e 65 64 20 74 79 70 65 2e 20 20 54 68 65  igned type.  The
adf0: 20 72 65 73 75 6c 74 73 20 61 72 65 20 64 65 2d   results are de-
ae00: 65 70 68 65 6d 65 72 61 6c 69 7a 65 64 20 61 73  ephemeralized as
ae10: 0a 20 20 2a 2a 20 61 20 73 69 64 65 20 65 66 66  .  ** a side eff
ae20: 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d  ect..  */.  pMem
ae30: 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74   = p->pResultSet
ae40: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
ae50: 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  ];.  for(i=0; i<
ae60: 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20  pOp->p2; i++){. 
ae70: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
ae80: 56 61 6c 69 64 28 26 70 4d 65 6d 5b 69 5d 29 20  Valid(&pMem[i]) 
ae90: 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72  );.    Deephemer
aea0: 61 6c 69 7a 65 28 26 70 4d 65 6d 5b 69 5d 29 3b  alize(&pMem[i]);
aeb0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4d  .    assert( (pM
aec0: 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45  em[i].flags & ME
aed0: 4d 5f 45 70 68 65 6d 29 3d 3d 30 0a 20 20 20 20  M_Ephem)==0.    
aee0: 20 20 20 20 20 20 20 20 7c 7c 20 28 70 4d 65 6d          || (pMem
aef0: 5b 69 5d 2e 66 6c 61 67 73 20 26 20 28 4d 45 4d  [i].flags & (MEM
af00: 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d  _Str|MEM_Blob))=
af10: 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  =0 );.    sqlite
af20: 33 56 64 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69  3VdbeMemNulTermi
af30: 6e 61 74 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a  nate(&pMem[i]);.
af40: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
af50: 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70  CE(pOp->p1+i, &p
af60: 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69  Mem[i]);.  }.  i
af70: 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
af80: 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  led ) goto no_me
af90: 6d 3b 0a 0a 20 20 69 66 28 20 64 62 2d 3e 6d 54  m;..  if( db->mT
afa0: 72 61 63 65 20 26 20 53 51 4c 49 54 45 5f 54 52  race & SQLITE_TR
afb0: 41 43 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 64  ACE_ROW ){.    d
afc0: 62 2d 3e 78 54 72 61 63 65 28 53 51 4c 49 54 45  b->xTrace(SQLITE
afd0: 5f 54 52 41 43 45 5f 52 4f 57 2c 20 64 62 2d 3e  _TRACE_ROW, db->
afe0: 70 54 72 61 63 65 41 72 67 2c 20 70 2c 20 30 29  pTraceArg, p, 0)
aff0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 74 75  ;.  }..  /* Retu
b000: 72 6e 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20  rn SQLITE_ROW.  
b010: 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e  */.  p->pc = (in
b020: 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 20 2b 20  t)(pOp - aOp) + 
b030: 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  1;.  rc = SQLITE
b040: 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62  _ROW;.  goto vdb
b050: 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20  e_return;.}../* 
b060: 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50  Opcode: Concat P
b070: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
b080: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72  ynopsis: r[P3]=r
b090: 5b 50 32 5d 2b 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]+r[P1].**.**
b0a0: 20 41 64 64 20 74 68 65 20 74 65 78 74 20 69 6e   Add the text in
b0b0: 20 72 65 67 69 73 74 65 72 20 50 31 20 6f 6e 74   register P1 ont
b0c0: 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  o the end of the
b0d0: 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69   text in.** regi
b0e0: 73 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72  ster P2 and stor
b0f0: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
b100: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
b110: 49 66 20 65 69 74 68 65 72 20 74 68 65 20 50 31  If either the P1
b120: 20 6f 72 20 50 32 20 74 65 78 74 20 61 72 65 20   or P2 text are 
b130: 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20  NULL then store 
b140: 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a  NULL in P3..**.*
b150: 2a 20 20 20 50 33 20 3d 20 50 32 20 7c 7c 20 50  *   P3 = P2 || P
b160: 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c  1.**.** It is il
b170: 6c 65 67 61 6c 20 66 6f 72 20 50 31 20 61 6e 64  legal for P1 and
b180: 20 50 33 20 74 6f 20 62 65 20 74 68 65 20 73 61   P3 to be the sa
b190: 6d 65 20 72 65 67 69 73 74 65 72 2e 20 53 6f 6d  me register. Som
b1a0: 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33  etimes,.** if P3
b1b0: 20 69 73 20 74 68 65 20 73 61 6d 65 20 72 65 67   is the same reg
b1c0: 69 73 74 65 72 20 61 73 20 50 32 2c 20 74 68 65  ister as P2, the
b1d0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
b1e0: 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76  is able.** to av
b1f0: 6f 69 64 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a  oid a memcpy()..
b200: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61  */.case OP_Conca
b210: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  t: {           /
b220: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e  * same as TK_CON
b230: 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  CAT, in1, in2, o
b240: 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79  ut3 */.  i64 nBy
b250: 74 65 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61  te;..  pIn1 = &a
b260: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
b270: 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
b280: 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p2];.  pOut = 
b290: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
b2a0: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 21 3d    assert( pIn1!=
b2b0: 70 4f 75 74 20 29 3b 0a 20 20 69 66 28 20 28 70  pOut );.  if( (p
b2c0: 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e  In1->flags | pIn
b2d0: 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f  2->flags) & MEM_
b2e0: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69  Null ){.    sqli
b2f0: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
b300: 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65  l(pOut);.    bre
b310: 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 45 78  ak;.  }.  if( Ex
b320: 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 20 7c  pandBlob(pIn1) |
b330: 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  | ExpandBlob(pIn
b340: 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  2) ) goto no_mem
b350: 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49  ;.  Stringify(pI
b360: 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  n1, encoding);. 
b370: 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 32 2c   Stringify(pIn2,
b380: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e 42   encoding);.  nB
b390: 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20  yte = pIn1->n + 
b3a0: 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e  pIn2->n;.  if( n
b3b0: 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b  Byte>db->aLimit[
b3c0: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
b3d0: 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  GTH] ){.    goto
b3e0: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
b3f0: 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
b400: 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e  emGrow(pOut, (in
b410: 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74 3d  t)nByte+2, pOut=
b420: 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f  =pIn2) ){.    go
b430: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
b440: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
b450: 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a  pOut, MEM_Str);.
b460: 20 20 69 66 28 20 70 4f 75 74 21 3d 70 49 6e 32    if( pOut!=pIn2
b470: 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70   ){.    memcpy(p
b480: 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c  Out->z, pIn2->z,
b490: 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20   pIn2->n);.  }. 
b4a0: 20 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a   memcpy(&pOut->z
b4b0: 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d  [pIn2->n], pIn1-
b4c0: 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20  >z, pIn1->n);.  
b4d0: 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 3d 30  pOut->z[nByte]=0
b4e0: 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74  ;.  pOut->z[nByt
b4f0: 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74  e+1] = 0;.  pOut
b500: 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54  ->flags |= MEM_T
b510: 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  erm;.  pOut->n =
b520: 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70   (int)nByte;.  p
b530: 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  Out->enc = encod
b540: 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ing;.  UPDATE_MA
b550: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
b560: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
b570: 20 4f 70 63 6f 64 65 3a 20 41 64 64 20 50 31 20   Opcode: Add P1 
b580: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
b590: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
b5a0: 31 5d 2b 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 41  1]+r[P2].**.** A
b5b0: 64 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  dd the value in 
b5c0: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 74  register P1 to t
b5d0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
b5e0: 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73  ster P2.** and s
b5f0: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
b600: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
b610: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
b620: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
b630: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
b640: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75  */./* Opcode: Mu
b650: 6c 74 69 70 6c 79 20 50 31 20 50 32 20 50 33 20  ltiply P1 P2 P3 
b660: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
b670: 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2a 72 5b 50   r[P3]=r[P1]*r[P
b680: 32 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74  2].**.**.** Mult
b690: 69 70 6c 79 20 74 68 65 20 76 61 6c 75 65 20 69  iply the value i
b6a0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79  n register P1 by
b6b0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
b6c0: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
b6d0: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
b6e0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
b6f0: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
b700: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
b710: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b720: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
b730: 53 75 62 74 72 61 63 74 20 50 31 20 50 32 20 50  Subtract P1 P2 P
b740: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
b750: 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2d 72  s: r[P3]=r[P2]-r
b760: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 75 62 74 72  [P1].**.** Subtr
b770: 61 63 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e  act the value in
b780: 20 72 65 67 69 73 74 65 72 20 50 31 20 66 72 6f   register P1 fro
b790: 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  m the value in r
b7a0: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
b7b0: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
b7c0: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
b7d0: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
b7e0: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
b7f0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
b800: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
b810: 20 44 69 76 69 64 65 20 50 31 20 50 32 20 50 33   Divide P1 P2 P3
b820: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
b830: 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2f 72 5b  : r[P3]=r[P2]/r[
b840: 50 31 5d 0a 2a 2a 0a 2a 2a 20 44 69 76 69 64 65  P1].**.** Divide
b850: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
b860: 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65  gister P1 by the
b870: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b880: 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f  er P2.** and sto
b890: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
b8a0: 20 72 65 67 69 73 74 65 72 20 50 33 20 28 50 33   register P3 (P3
b8b0: 3d 50 32 2f 50 31 29 2e 20 49 66 20 74 68 65 20  =P2/P1). If the 
b8c0: 76 61 6c 75 65 20 69 6e 20 0a 2a 2a 20 72 65 67  value in .** reg
b8d0: 69 73 74 65 72 20 50 31 20 69 73 20 7a 65 72 6f  ister P1 is zero
b8e0: 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  , then the resul
b8f0: 74 20 69 73 20 4e 55 4c 4c 2e 20 49 66 20 65 69  t is NULL. If ei
b900: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 0a 2a  ther input is .*
b910: 2a 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  * NULL, the resu
b920: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
b930: 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d 61 69 6e  * Opcode: Remain
b940: 64 65 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a  der P1 P2 P3 * *
b950: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
b960: 50 33 5d 3d 72 5b 50 32 5d 25 72 5b 50 31 5d 0a  P3]=r[P2]%r[P1].
b970: 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65 20 74 68  **.** Compute th
b980: 65 20 72 65 6d 61 69 6e 64 65 72 20 61 66 74 65  e remainder afte
b990: 72 20 69 6e 74 65 67 65 72 20 72 65 67 69 73 74  r integer regist
b9a0: 65 72 20 50 32 20 69 73 20 64 69 76 69 64 65 64  er P2 is divided
b9b0: 20 62 79 20 0a 2a 2a 20 72 65 67 69 73 74 65 72   by .** register
b9c0: 20 50 31 20 61 6e 64 20 73 74 6f 72 65 20 74 68   P1 and store th
b9d0: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
b9e0: 73 74 65 72 20 50 33 2e 20 0a 2a 2a 20 49 66 20  ster P3. .** If 
b9f0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
ba00: 69 73 74 65 72 20 50 31 20 69 73 20 7a 65 72 6f  ister P1 is zero
ba10: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
ba20: 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65  ULL..** If eithe
ba30: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
ba40: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
ba50: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
ba60: 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20 20  P_Add:          
ba70: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
ba80: 20 61 73 20 54 4b 5f 50 4c 55 53 2c 20 69 6e 31   as TK_PLUS, in1
ba90: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
baa0: 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a  ase OP_Subtract:
bab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bac0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4d 49 4e 55   same as TK_MINU
bad0: 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  S, in1, in2, out
bae0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 6c  3 */.case OP_Mul
baf0: 74 69 70 6c 79 3a 20 20 20 20 20 20 20 20 20 20  tiply:          
bb00: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
bb10: 4b 5f 53 54 41 52 2c 20 69 6e 31 2c 20 69 6e 32  K_STAR, in1, in2
bb20: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
bb30: 50 5f 44 69 76 69 64 65 3a 20 20 20 20 20 20 20  P_Divide:       
bb40: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
bb50: 20 61 73 20 54 4b 5f 53 4c 41 53 48 2c 20 69 6e   as TK_SLASH, in
bb60: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
bb70: 63 61 73 65 20 4f 50 5f 52 65 6d 61 69 6e 64 65  case OP_Remainde
bb80: 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  r: {           /
bb90: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 45 4d  * same as TK_REM
bba0: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
bbb0: 20 2a 2f 0a 20 20 63 68 61 72 20 62 49 6e 74 69   */.  char bInti
bbc0: 6e 74 3b 20 20 20 2f 2a 20 53 74 61 72 74 65 64  nt;   /* Started
bbd0: 20 6f 75 74 20 61 73 20 74 77 6f 20 69 6e 74 65   out as two inte
bbe0: 67 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a  ger operands */.
bbf0: 20 20 75 31 36 20 66 6c 61 67 73 3b 20 20 20 20    u16 flags;    
bc00: 20 20 2f 2a 20 43 6f 6d 62 69 6e 65 64 20 4d 45    /* Combined ME
bc10: 4d 5f 2a 20 66 6c 61 67 73 20 66 72 6f 6d 20 62  M_* flags from b
bc20: 6f 74 68 20 69 6e 70 75 74 73 20 2a 2f 0a 20 20  oth inputs */.  
bc30: 75 31 36 20 74 79 70 65 31 3b 20 20 20 20 20 20  u16 type1;      
bc40: 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79 70 65 20  /* Numeric type 
bc50: 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20  of left operand 
bc60: 2a 2f 0a 20 20 75 31 36 20 74 79 70 65 32 3b 20  */.  u16 type2; 
bc70: 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20       /* Numeric 
bc80: 74 79 70 65 20 6f 66 20 72 69 67 68 74 20 6f 70  type of right op
bc90: 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69  erand */.  i64 i
bca0: 41 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  A;         /* In
bcb0: 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20 6c  teger value of l
bcc0: 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  eft operand */. 
bcd0: 20 69 36 34 20 69 42 3b 20 20 20 20 20 20 20 20   i64 iB;        
bce0: 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75   /* Integer valu
bcf0: 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61  e of right opera
bd00: 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72  nd */.  double r
bd10: 41 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20  A;      /* Real 
bd20: 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70  value of left op
bd30: 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c  erand */.  doubl
bd40: 65 20 72 42 3b 20 20 20 20 20 20 2f 2a 20 52 65  e rB;      /* Re
bd50: 61 6c 20 76 61 6c 75 65 20 6f 66 20 72 69 67 68  al value of righ
bd60: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a 20 20  t operand */..  
bd70: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
bd80: 2d 3e 70 31 5d 3b 0a 20 20 74 79 70 65 31 20 3d  ->p1];.  type1 =
bd90: 20 6e 75 6d 65 72 69 63 54 79 70 65 28 70 49 6e   numericType(pIn
bda0: 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1);.  pIn2 = &aM
bdb0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 74  em[pOp->p2];.  t
bdc0: 79 70 65 32 20 3d 20 6e 75 6d 65 72 69 63 54 79  ype2 = numericTy
bdd0: 70 65 28 70 49 6e 32 29 3b 0a 20 20 70 4f 75 74  pe(pIn2);.  pOut
bde0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
bdf0: 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70 49 6e  ];.  flags = pIn
be00: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d  1->flags | pIn2-
be10: 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 74  >flags;.  if( (t
be20: 79 70 65 31 20 26 20 74 79 70 65 32 20 26 20 4d  ype1 & type2 & M
be30: 45 4d 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20 20  EM_Int)!=0 ){.  
be40: 20 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e 69    iA = pIn1->u.i
be50: 3b 0a 20 20 20 20 69 42 20 3d 20 70 49 6e 32 2d  ;.    iB = pIn2-
be60: 3e 75 2e 69 3b 0a 20 20 20 20 62 49 6e 74 69 6e  >u.i;.    bIntin
be70: 74 20 3d 20 31 3b 0a 20 20 20 20 73 77 69 74 63  t = 1;.    switc
be80: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
be90: 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  {.      case OP_
bea0: 41 64 64 3a 20 20 20 20 20 20 20 69 66 28 20 73  Add:       if( s
beb0: 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 26  qlite3AddInt64(&
bec0: 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70  iB,iA) ) goto fp
bed0: 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20  _math;  break;. 
bee0: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62       case OP_Sub
bef0: 74 72 61 63 74 3a 20 20 69 66 28 20 73 71 6c 69  tract:  if( sqli
bf00: 74 65 33 53 75 62 49 6e 74 36 34 28 26 69 42 2c  te3SubInt64(&iB,
bf10: 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61  iA) ) goto fp_ma
bf20: 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  th;  break;.    
bf30: 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70    case OP_Multip
bf40: 6c 79 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ly:  if( sqlite3
bf50: 4d 75 6c 49 6e 74 36 34 28 26 69 42 2c 69 41 29  MulInt64(&iB,iA)
bf60: 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b   ) goto fp_math;
bf70: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
bf80: 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b  ase OP_Divide: {
bf90: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
bfa0: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
bfb0: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
bfc0: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
bfd0: 20 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d 53   iA==-1 && iB==S
bfe0: 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20  MALLEST_INT64 ) 
bff0: 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 0a 20 20  goto fp_math;.  
c000: 20 20 20 20 20 20 69 42 20 2f 3d 20 69 41 3b 0a        iB /= iA;.
c010: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
c020: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66       }.      def
c030: 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20  ault: {.        
c040: 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f  if( iA==0 ) goto
c050: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
c060: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20  lt_is_null;.    
c070: 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29      if( iA==-1 )
c080: 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20   iA = 1;.       
c090: 20 69 42 20 25 3d 20 69 41 3b 0a 20 20 20 20 20   iB %= iA;.     
c0a0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
c0b0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74  }.    }.    pOut
c0c0: 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20 20  ->u.i = iB;.    
c0d0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
c0e0: 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
c0f0: 20 7d 65 6c 73 65 20 69 66 28 20 28 66 6c 61 67   }else if( (flag
c100: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  s & MEM_Null)!=0
c110: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 61 72 69   ){.    goto ari
c120: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
c130: 73 5f 6e 75 6c 6c 3b 0a 20 20 7d 65 6c 73 65 7b  s_null;.  }else{
c140: 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 30  .    bIntint = 0
c150: 3b 0a 66 70 5f 6d 61 74 68 3a 0a 20 20 20 20 72  ;.fp_math:.    r
c160: 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  A = sqlite3VdbeR
c170: 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a  ealValue(pIn1);.
c180: 20 20 20 20 72 42 20 3d 20 73 71 6c 69 74 65 33      rB = sqlite3
c190: 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49  VdbeRealValue(pI
c1a0: 6e 32 29 3b 0a 20 20 20 20 73 77 69 74 63 68 28  n2);.    switch(
c1b0: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a   pOp->opcode ){.
c1c0: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64        case OP_Ad
c1d0: 64 3a 20 20 20 20 20 20 20 20 20 72 42 20 2b 3d  d:         rB +=
c1e0: 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b   rA;       break
c1f0: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
c200: 53 75 62 74 72 61 63 74 3a 20 20 20 20 72 42 20  Subtract:    rB 
c210: 2d 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65  -= rA;       bre
c220: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
c230: 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 72  P_Multiply:    r
c240: 42 20 2a 3d 20 72 41 3b 20 20 20 20 20 20 20 62  B *= rA;       b
c250: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
c260: 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20   OP_Divide: {.  
c270: 20 20 20 20 20 20 2f 2a 20 28 64 6f 75 62 6c 65        /* (double
c280: 29 30 20 49 6e 20 63 61 73 65 20 6f 66 20 53 51  )0 In case of SQ
c290: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
c2a0: 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20  NG_POINT... */. 
c2b0: 20 20 20 20 20 20 20 69 66 28 20 72 41 3d 3d 28         if( rA==(
c2c0: 64 6f 75 62 6c 65 29 30 20 29 20 67 6f 74 6f 20  double)0 ) goto 
c2d0: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
c2e0: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
c2f0: 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20 20 20     rB /= rA;.   
c300: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
c310: 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c    }.      defaul
c320: 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 41 20  t: {.        iA 
c330: 3d 20 28 69 36 34 29 72 41 3b 0a 20 20 20 20 20  = (i64)rA;.     
c340: 20 20 20 69 42 20 3d 20 28 69 36 34 29 72 42 3b     iB = (i64)rB;
c350: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
c360: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
c370: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
c380: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
c390: 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31   iA==-1 ) iA = 1
c3a0: 3b 0a 20 20 20 20 20 20 20 20 72 42 20 3d 20 28  ;.        rB = (
c3b0: 64 6f 75 62 6c 65 29 28 69 42 20 25 20 69 41 29  double)(iB % iA)
c3c0: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
c3d0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23  .      }.    }.#
c3e0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
c3f0: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
c400: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
c410: 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   rB;.    MemSetT
c420: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
c430: 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20  M_Int);.#else.  
c440: 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 73 4e    if( sqlite3IsN
c450: 61 4e 28 72 42 29 20 29 7b 0a 20 20 20 20 20 20  aN(rB) ){.      
c460: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
c470: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
c480: 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e      }.    pOut->
c490: 75 2e 72 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65  u.r = rB;.    Me
c4a0: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
c4b0: 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20  t, MEM_Real);.  
c4c0: 20 20 69 66 28 20 28 28 74 79 70 65 31 7c 74 79    if( ((type1|ty
c4d0: 70 65 32 29 26 4d 45 4d 5f 52 65 61 6c 29 3d 3d  pe2)&MEM_Real)==
c4e0: 30 20 26 26 20 21 62 49 6e 74 69 6e 74 20 29 7b  0 && !bIntint ){
c4f0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
c500: 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74  beIntegerAffinit
c510: 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23  y(pOut);.    }.#
c520: 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61  endif.  }.  brea
c530: 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f 72  k;..arithmetic_r
c540: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20  esult_is_null:. 
c550: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
c560: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
c570: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
c580: 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20 50 31 20  ode: CollSeq P1 
c590: 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20  * * P4.**.** P4 
c5a0: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
c5b0: 61 20 43 6f 6c 6c 53 65 71 20 6f 62 6a 65 63 74  a CollSeq object
c5c0: 2e 20 49 66 20 74 68 65 20 6e 65 78 74 20 63 61  . If the next ca
c5d0: 6c 6c 20 74 6f 20 61 20 75 73 65 72 20 66 75 6e  ll to a user fun
c5e0: 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72  ction.** or aggr
c5f0: 65 67 61 74 65 20 63 61 6c 6c 73 20 73 71 6c 69  egate calls sqli
c600: 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65  te3GetFuncCollSe
c610: 71 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74  q(), this collat
c620: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 69 6c  ion sequence wil
c630: 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e 65 64  l.** be returned
c640: 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62  . This is used b
c650: 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d  y the built-in m
c660: 69 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e 64 20  in(), max() and 
c670: 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63  nullif().** func
c680: 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  tions..**.** If 
c690: 50 31 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P1 is not zero, 
c6a0: 74 68 65 6e 20 69 74 20 69 73 20 61 20 72 65 67  then it is a reg
c6b0: 69 73 74 65 72 20 74 68 61 74 20 61 20 73 75 62  ister that a sub
c6c0: 73 65 71 75 65 6e 74 20 6d 69 6e 28 29 20 6f 72  sequent min() or
c6d0: 0a 2a 2a 20 6d 61 78 28 29 20 61 67 67 72 65 67  .** max() aggreg
c6e0: 61 74 65 20 77 69 6c 6c 20 73 65 74 20 74 6f 20  ate will set to 
c6f0: 31 20 69 66 20 74 68 65 20 63 75 72 72 65 6e 74  1 if the current
c700: 20 72 6f 77 20 69 73 20 6e 6f 74 20 74 68 65 20   row is not the 
c710: 6d 69 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20 6d 61  minimum or.** ma
c720: 78 69 6d 75 6d 2e 20 20 54 68 65 20 50 31 20 72  ximum.  The P1 r
c730: 65 67 69 73 74 65 72 20 69 73 20 69 6e 69 74 69  egister is initi
c740: 61 6c 69 7a 65 64 20 74 6f 20 30 20 62 79 20 74  alized to 0 by t
c750: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
c760: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72  .**.** The inter
c770: 66 61 63 65 20 75 73 65 64 20 62 79 20 74 68 65  face used by the
c780: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
c790: 6f 66 20 74 68 65 20 61 66 6f 72 65 6d 65 6e 74  of the aforement
c7a0: 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a  ioned functions.
c7b0: 2a 2a 20 74 6f 20 72 65 74 72 69 65 76 65 20 74  ** to retrieve t
c7c0: 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  he collation seq
c7d0: 75 65 6e 63 65 20 73 65 74 20 62 79 20 74 68 69  uence set by thi
c7e0: 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f 74 20  s opcode is not 
c7f0: 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62  available.** pub
c800: 6c 69 63 6c 79 2e 20 20 4f 6e 6c 79 20 62 75 69  licly.  Only bui
c810: 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20  lt-in functions 
c820: 68 61 76 65 20 61 63 63 65 73 73 20 74 6f 20 74  have access to t
c830: 68 69 73 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a  his feature..*/.
c840: 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65 71 3a  case OP_CollSeq:
c850: 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
c860: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c  ->p4type==P4_COL
c870: 4c 53 45 51 20 29 3b 0a 20 20 69 66 28 20 70 4f  LSEQ );.  if( pO
c880: 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c  p->p1 ){.    sql
c890: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
c8a0: 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t64(&aMem[pOp->p
c8b0: 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72  1], 0);.  }.  br
c8c0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
c8d0: 65 3a 20 42 69 74 41 6e 64 20 50 31 20 50 32 20  e: BitAnd P1 P2 
c8e0: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
c8f0: 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 26  is: r[P3]=r[P1]&
c900: 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65  r[P2].**.** Take
c910: 20 74 68 65 20 62 69 74 2d 77 69 73 65 20 41 4e   the bit-wise AN
c920: 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  D of the values 
c930: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
c940: 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f  nd P2 and.** sto
c950: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
c960: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
c970: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
c980: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
c990: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
c9a0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4f  ./* Opcode: BitO
c9b0: 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  r P1 P2 P3 * *.*
c9c0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
c9d0: 5d 3d 72 5b 50 31 5d 7c 72 5b 50 32 5d 0a 2a 2a  ]=r[P1]|r[P2].**
c9e0: 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74  .** Take the bit
c9f0: 2d 77 69 73 65 20 4f 52 20 6f 66 20 74 68 65 20  -wise OR of the 
ca00: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
ca10: 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64  er P1 and P2 and
ca20: 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65  .** store the re
ca30: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
ca40: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
ca50: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
ca60: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
ca70: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
ca80: 65 3a 20 53 68 69 66 74 4c 65 66 74 20 50 31 20  e: ShiftLeft P1 
ca90: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
caa0: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
cab0: 32 5d 3c 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  2]<<r[P1].**.** 
cac0: 53 68 69 66 74 20 74 68 65 20 69 6e 74 65 67 65  Shift the intege
cad0: 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  r value in regis
cae0: 74 65 72 20 50 32 20 74 6f 20 74 68 65 20 6c 65  ter P2 to the le
caf0: 66 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d  ft by the.** num
cb00: 62 65 72 20 6f 66 20 62 69 74 73 20 73 70 65 63  ber of bits spec
cb10: 69 66 69 65 64 20 62 79 20 74 68 65 20 69 6e 74  ified by the int
cb20: 65 67 65 72 20 69 6e 20 72 65 67 69 73 74 65 72  eger in register
cb30: 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68   P1..** Store th
cb40: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
cb50: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
cb60: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
cb70: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
cb80: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
cb90: 70 63 6f 64 65 3a 20 53 68 69 66 74 52 69 67 68  pcode: ShiftRigh
cba0: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
cbb0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
cbc0: 5d 3d 72 5b 50 32 5d 3e 3e 72 5b 50 31 5d 0a 2a  ]=r[P2]>>r[P1].*
cbd0: 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69  *.** Shift the i
cbe0: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20  nteger value in 
cbf0: 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74  register P2 to t
cc00: 68 65 20 72 69 67 68 74 20 62 79 20 74 68 65 0a  he right by the.
cc10: 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74  ** number of bit
cc20: 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74  s specified by t
cc30: 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65  he integer in re
cc40: 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74  gister P1..** St
cc50: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
cc60: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
cc70: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
cc80: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
cc90: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
cca0: 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 41 6e 64  /.case OP_BitAnd
ccb0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
ccc0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
ccd0: 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32  BITAND, in1, in2
cce0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
ccf0: 50 5f 42 69 74 4f 72 3a 20 20 20 20 20 20 20 20  P_BitOr:        
cd00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
cd10: 65 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c 20 69  e as TK_BITOR, i
cd20: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
cd30: 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74 4c 65  .case OP_ShiftLe
cd40: 66 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  ft:             
cd50: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c   /* same as TK_L
cd60: 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c  SHIFT, in1, in2,
cd70: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
cd80: 5f 53 68 69 66 74 52 69 67 68 74 3a 20 7b 20 20  _ShiftRight: {  
cd90: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
cda0: 20 61 73 20 54 4b 5f 52 53 48 49 46 54 2c 20 69   as TK_RSHIFT, i
cdb0: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
cdc0: 0a 20 20 69 36 34 20 69 41 3b 0a 20 20 75 36 34  .  i64 iA;.  u64
cdd0: 20 75 41 3b 0a 20 20 69 36 34 20 69 42 3b 0a 20   uA;.  i64 iB;. 
cde0: 20 75 38 20 6f 70 3b 0a 0a 20 20 70 49 6e 31 20   u8 op;..  pIn1 
cdf0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
ce00: 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
ce10: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75  [pOp->p2];.  pOu
ce20: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
ce30: 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  3];.  if( (pIn1-
ce40: 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66  >flags | pIn2->f
ce50: 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c  lags) & MEM_Null
ce60: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
ce70: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
ce80: 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  ut);.    break;.
ce90: 20 20 7d 0a 20 20 69 41 20 3d 20 73 71 6c 69 74    }.  iA = sqlit
cea0: 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
ceb0: 49 6e 32 29 3b 0a 20 20 69 42 20 3d 20 73 71 6c  In2);.  iB = sql
cec0: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
ced0: 28 70 49 6e 31 29 3b 0a 20 20 6f 70 20 3d 20 70  (pIn1);.  op = p
cee0: 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 69 66  Op->opcode;.  if
cef0: 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 41 6e 64 20  ( op==OP_BitAnd 
cf00: 29 7b 0a 20 20 20 20 69 41 20 26 3d 20 69 42 3b  ){.    iA &= iB;
cf10: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 70 3d  .  }else if( op=
cf20: 3d 4f 50 5f 42 69 74 4f 72 20 29 7b 0a 20 20 20  =OP_BitOr ){.   
cf30: 20 69 41 20 7c 3d 20 69 42 3b 0a 20 20 7d 65 6c   iA |= iB;.  }el
cf40: 73 65 20 69 66 28 20 69 42 21 3d 30 20 29 7b 0a  se if( iB!=0 ){.
cf50: 20 20 20 20 61 73 73 65 72 74 28 20 6f 70 3d 3d      assert( op==
cf60: 4f 50 5f 53 68 69 66 74 52 69 67 68 74 20 7c 7c  OP_ShiftRight ||
cf70: 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66   op==OP_ShiftLef
cf80: 74 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20  t );..    /* If 
cf90: 73 68 69 66 74 69 6e 67 20 62 79 20 61 20 6e 65  shifting by a ne
cfa0: 67 61 74 69 76 65 20 61 6d 6f 75 6e 74 2c 20 73  gative amount, s
cfb0: 68 69 66 74 20 69 6e 20 74 68 65 20 6f 74 68 65  hift in the othe
cfc0: 72 20 64 69 72 65 63 74 69 6f 6e 20 2a 2f 0a 20  r direction */. 
cfd0: 20 20 20 69 66 28 20 69 42 3c 30 20 29 7b 0a 20     if( iB<0 ){. 
cfe0: 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f       assert( OP_
cff0: 53 68 69 66 74 52 69 67 68 74 3d 3d 4f 50 5f 53  ShiftRight==OP_S
d000: 68 69 66 74 4c 65 66 74 2b 31 20 29 3b 0a 20 20  hiftLeft+1 );.  
d010: 20 20 20 20 6f 70 20 3d 20 32 2a 4f 50 5f 53 68      op = 2*OP_Sh
d020: 69 66 74 4c 65 66 74 20 2b 20 31 20 2d 20 6f 70  iftLeft + 1 - op
d030: 3b 0a 20 20 20 20 20 20 69 42 20 3d 20 69 42 3e  ;.      iB = iB>
d040: 28 2d 36 34 29 20 3f 20 2d 69 42 20 3a 20 36 34  (-64) ? -iB : 64
d050: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28  ;.    }..    if(
d060: 20 69 42 3e 3d 36 34 20 29 7b 0a 20 20 20 20 20   iB>=64 ){.     
d070: 20 69 41 20 3d 20 28 69 41 3e 3d 30 20 7c 7c 20   iA = (iA>=0 || 
d080: 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74  op==OP_ShiftLeft
d090: 29 20 3f 20 30 20 3a 20 2d 31 3b 0a 20 20 20 20  ) ? 0 : -1;.    
d0a0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d 65 6d  }else{.      mem
d0b0: 63 70 79 28 26 75 41 2c 20 26 69 41 2c 20 73 69  cpy(&uA, &iA, si
d0c0: 7a 65 6f 66 28 75 41 29 29 3b 0a 20 20 20 20 20  zeof(uA));.     
d0d0: 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66   if( op==OP_Shif
d0e0: 74 4c 65 66 74 20 29 7b 0a 20 20 20 20 20 20 20  tLeft ){.       
d0f0: 20 75 41 20 3c 3c 3d 20 69 42 3b 0a 20 20 20 20   uA <<= iB;.    
d100: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
d110: 20 75 41 20 3e 3e 3d 20 69 42 3b 0a 20 20 20 20   uA >>= iB;.    
d120: 20 20 20 20 2f 2a 20 53 69 67 6e 2d 65 78 74 65      /* Sign-exte
d130: 6e 64 20 6f 6e 20 61 20 72 69 67 68 74 20 73 68  nd on a right sh
d140: 69 66 74 20 6f 66 20 61 20 6e 65 67 61 74 69 76  ift of a negativ
d150: 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20  e number */.    
d160: 20 20 20 20 69 66 28 20 69 41 3c 30 20 29 20 75      if( iA<0 ) u
d170: 41 20 7c 3d 20 28 28 28 28 75 36 34 29 30 78 66  A |= ((((u64)0xf
d180: 66 66 66 66 66 66 66 29 3c 3c 33 32 29 7c 30 78  fffffff)<<32)|0x
d190: 66 66 66 66 66 66 66 66 29 20 3c 3c 20 28 36 34  ffffffff) << (64
d1a0: 2d 69 42 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  -iB);.      }.  
d1b0: 20 20 20 20 6d 65 6d 63 70 79 28 26 69 41 2c 20      memcpy(&iA, 
d1c0: 26 75 41 2c 20 73 69 7a 65 6f 66 28 69 41 29 29  &uA, sizeof(iA))
d1d0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f  ;.    }.  }.  pO
d1e0: 75 74 2d 3e 75 2e 69 20 3d 20 69 41 3b 0a 20 20  ut->u.i = iA;.  
d1f0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
d200: 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
d210: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
d220: 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20 50 31  code: AddImm  P1
d230: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
d240: 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 72 5b 50  opsis: r[P1]=r[P
d250: 31 5d 2b 50 32 0a 2a 2a 20 0a 2a 2a 20 41 64 64  1]+P2.** .** Add
d260: 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 50 32   the constant P2
d270: 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e   to the value in
d280: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
d290: 20 54 68 65 20 72 65 73 75 6c 74 20 69 73 20 61   The result is a
d2a0: 6c 77 61 79 73 20 61 6e 20 69 6e 74 65 67 65 72  lways an integer
d2b0: 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63 65  ..**.** To force
d2c0: 20 61 6e 79 20 72 65 67 69 73 74 65 72 20 74 6f   any register to
d2d0: 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2c 20   be an integer, 
d2e0: 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a 2f 0a 63  just add 0..*/.c
d2f0: 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b  ase OP_AddImm: {
d300: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
d310: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
d320: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
d330: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
d340: 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 73 71  e(p, pIn1);.  sq
d350: 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
d360: 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  gerify(pIn1);.  
d370: 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70  pIn1->u.i += pOp
d380: 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ->p2;.  break;.}
d390: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 73  ../* Opcode: Mus
d3a0: 74 42 65 49 6e 74 20 50 31 20 50 32 20 2a 20 2a  tBeInt P1 P2 * *
d3b0: 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65 20   *.** .** Force 
d3c0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
d3d0: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61  ister P1 to be a
d3e0: 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20 74  n integer.  If t
d3f0: 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50  he value.** in P
d400: 31 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65  1 is not an inte
d410: 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62  ger and cannot b
d420: 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  e converted into
d430: 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 77   an integer.** w
d440: 69 74 68 6f 75 74 20 64 61 74 61 20 6c 6f 73 73  ithout data loss
d450: 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65  , then jump imme
d460: 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2c 20 6f  diately to P2, o
d470: 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20 72 61  r if P2==0.** ra
d480: 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49  ise an SQLITE_MI
d490: 53 4d 41 54 43 48 20 65 78 63 65 70 74 69 6f 6e  SMATCH exception
d4a0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 73  ..*/.case OP_Mus
d4b0: 74 42 65 49 6e 74 3a 20 7b 20 20 20 20 20 20 20  tBeInt: {       
d4c0: 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
d4d0: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
d4e0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
d4f0: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
d500: 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29   & MEM_Int)==0 )
d510: 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e  {.    applyAffin
d520: 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45  ity(pIn1, SQLITE
d530: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e  _AFF_NUMERIC, en
d540: 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 56 64 62  coding);.    Vdb
d550: 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 28 70 49  eBranchTaken((pI
d560: 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
d570: 74 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69  t)==0, 2);.    i
d580: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
d590: 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b  & MEM_Int)==0 ){
d5a0: 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
d5b0: 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  p2==0 ){.       
d5c0: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53   rc = SQLITE_MIS
d5d0: 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 20 20 67  MATCH;.        g
d5e0: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
d5f0: 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 65  _error;.      }e
d600: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 67 6f 74  lse{.        got
d610: 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
d620: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
d630: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
d640: 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pIn1, MEM_Int);
d650: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
d660: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
d670: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
d680: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 41  /* Opcode: RealA
d690: 66 66 69 6e 69 74 79 20 50 31 20 2a 20 2a 20 2a  ffinity P1 * * *
d6a0: 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65 67 69   *.**.** If regi
d6b0: 73 74 65 72 20 50 31 20 68 6f 6c 64 73 20 61 6e  ster P1 holds an
d6c0: 20 69 6e 74 65 67 65 72 20 63 6f 6e 76 65 72 74   integer convert
d6d0: 20 69 74 20 74 6f 20 61 20 72 65 61 6c 20 76 61   it to a real va
d6e0: 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  lue..**.** This 
d6f0: 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 77  opcode is used w
d700: 68 65 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69  hen extracting i
d710: 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20  nformation from 
d720: 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a  a column that.**
d730: 20 68 61 73 20 52 45 41 4c 20 61 66 66 69 6e 69   has REAL affini
d740: 74 79 2e 20 20 53 75 63 68 20 63 6f 6c 75 6d 6e  ty.  Such column
d750: 20 76 61 6c 75 65 73 20 6d 61 79 20 73 74 69 6c   values may stil
d760: 6c 20 62 65 20 73 74 6f 72 65 64 20 61 73 0a 2a  l be stored as.*
d770: 2a 20 69 6e 74 65 67 65 72 73 2c 20 66 6f 72 20  * integers, for 
d780: 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 63 79  space efficiency
d790: 2c 20 62 75 74 20 61 66 74 65 72 20 65 78 74 72  , but after extr
d7a0: 61 63 74 69 6f 6e 20 77 65 20 77 61 6e 74 20 74  action we want t
d7b0: 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76 65 20 6f  hem.** to have o
d7c0: 6e 6c 79 20 61 20 72 65 61 6c 20 76 61 6c 75 65  nly a real value
d7d0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
d7e0: 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20 20 20 20  lAffinity: {    
d7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d800: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
d810: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
d820: 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
d830: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a  gs & MEM_Int ){.
d840: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
d850: 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b  emRealify(pIn1);
d860: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
d870: 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
d880: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54  SQLITE_OMIT_CAST
d890: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 61 73 74  ./* Opcode: Cast
d8a0: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
d8b0: 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e 69  Synopsis: affini
d8c0: 74 79 28 72 5b 50 31 5d 29 0a 2a 2a 0a 2a 2a 20  ty(r[P1]).**.** 
d8d0: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
d8e0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
d8f0: 6f 20 62 65 20 74 68 65 20 74 79 70 65 20 64 65  o be the type de
d900: 66 69 6e 65 64 20 62 79 20 50 32 2e 0a 2a 2a 20  fined by P2..** 
d910: 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 3e  .** <ul>.** <li>
d920: 20 50 32 3d 3d 27 41 27 20 26 72 61 72 72 3b 20   P2=='A' &rarr; 
d930: 42 4c 4f 42 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d  BLOB.** <li> P2=
d940: 3d 27 42 27 20 26 72 61 72 72 3b 20 54 45 58 54  ='B' &rarr; TEXT
d950: 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 43 27  .** <li> P2=='C'
d960: 20 26 72 61 72 72 3b 20 4e 55 4d 45 52 49 43 0a   &rarr; NUMERIC.
d970: 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 44 27 20  ** <li> P2=='D' 
d980: 26 72 61 72 72 3b 20 49 4e 54 45 47 45 52 0a 2a  &rarr; INTEGER.*
d990: 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 45 27 20 26  * <li> P2=='E' &
d9a0: 72 61 72 72 3b 20 52 45 41 4c 0a 2a 2a 20 3c 2f  rarr; REAL.** </
d9b0: 75 6c 3e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  ul>.**.** A NULL
d9c0: 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68   value is not ch
d9d0: 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f  anged by this ro
d9e0: 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69  utine.  It remai
d9f0: 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  ns NULL..*/.case
da00: 20 4f 50 5f 43 61 73 74 3a 20 7b 20 20 20 20 20   OP_Cast: {     
da10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
da20: 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  in1 */.  assert(
da30: 20 70 4f 70 2d 3e 70 32 3e 3d 53 51 4c 49 54 45   pOp->p2>=SQLITE
da40: 5f 41 46 46 5f 42 4c 4f 42 20 26 26 20 70 4f 70  _AFF_BLOB && pOp
da50: 2d 3e 70 32 3c 3d 53 51 4c 49 54 45 5f 41 46 46  ->p2<=SQLITE_AFF
da60: 5f 52 45 41 4c 20 29 3b 0a 20 20 74 65 73 74 63  _REAL );.  testc
da70: 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51  ase( pOp->p2==SQ
da80: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29 3b  LITE_AFF_TEXT );
da90: 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70  .  testcase( pOp
daa0: 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46  ->p2==SQLITE_AFF
dab0: 5f 42 4c 4f 42 20 29 3b 0a 20 20 74 65 73 74 63  _BLOB );.  testc
dac0: 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51  ase( pOp->p2==SQ
dad0: 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
dae0: 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
daf0: 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
db00: 41 46 46 5f 49 4e 54 45 47 45 52 20 29 3b 0a 20  AFF_INTEGER );. 
db10: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
db20: 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52  p2==SQLITE_AFF_R
db30: 45 41 4c 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20  EAL );.  pIn1 = 
db40: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
db50: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
db60: 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 72  ge(p, pIn1);.  r
db70: 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70  c = ExpandBlob(p
db80: 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  In1);.  sqlite3V
db90: 64 62 65 4d 65 6d 43 61 73 74 28 70 49 6e 31 2c  dbeMemCast(pIn1,
dba0: 20 70 4f 70 2d 3e 70 32 2c 20 65 6e 63 6f 64 69   pOp->p2, encodi
dbb0: 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ng);.  UPDATE_MA
dbc0: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29  X_BLOBSIZE(pIn1)
dbd0: 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
dbe0: 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
dbf0: 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
dc00: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
dc10: 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a  E_OMIT_CAST */..
dc20: 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20 50 31  /* Opcode: Eq P1
dc30: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
dc40: 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50  Synopsis: IF r[P
dc50: 33 5d 3d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  3]==r[P1].**.** 
dc60: 43 6f 6d 70 61 72 65 20 74 68 65 20 76 61 6c 75  Compare the valu
dc70: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
dc80: 31 20 61 6e 64 20 50 33 2e 20 20 49 66 20 72 65  1 and P3.  If re
dc90: 67 28 50 33 29 3d 3d 72 65 67 28 50 31 29 20 74  g(P3)==reg(P1) t
dca0: 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61  hen.** jump to a
dcb0: 64 64 72 65 73 73 20 50 32 2e 20 20 4f 72 20 69  ddress P2.  Or i
dcc0: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f  f the SQLITE_STO
dcd0: 52 45 50 32 20 66 6c 61 67 20 69 73 20 73 65 74  REP2 flag is set
dce0: 20 69 6e 20 50 35 2c 20 74 68 65 6e 0a 2a 2a 20   in P5, then.** 
dcf0: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
dd00: 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69   of comparison i
dd10: 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
dd20: 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
dd30: 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e  AFF_MASK portion
dd40: 20 6f 66 20 50 35 20 6d 75 73 74 20 62 65 20 61   of P5 must be a
dd50: 6e 20 61 66 66 69 6e 69 74 79 20 63 68 61 72 61  n affinity chara
dd60: 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45  cter -.** SQLITE
dd70: 5f 41 46 46 5f 54 45 58 54 2c 20 53 51 4c 49 54  _AFF_TEXT, SQLIT
dd80: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c 20 61  E_AFF_INTEGER, a
dd90: 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20  nd so forth. An 
dda0: 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
ddb0: 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20 62 6f  .** to coerce bo
ddc0: 74 68 20 69 6e 70 75 74 73 20 61 63 63 6f 72 64  th inputs accord
ddd0: 69 6e 67 20 74 6f 20 74 68 69 73 20 61 66 66 69  ing to this affi
dde0: 6e 69 74 79 20 62 65 66 6f 72 65 20 74 68 65 0a  nity before the.
ddf0: 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  ** comparison is
de00: 20 6d 61 64 65 2e 20 49 66 20 74 68 65 20 53 51   made. If the SQ
de10: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73  LITE_AFF_MASK is
de20: 20 30 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65   0x00, then nume
de30: 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20  ric.** affinity 
de40: 69 73 20 75 73 65 64 2e 20 4e 6f 74 65 20 74 68  is used. Note th
de50: 61 74 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  at the affinity 
de60: 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72 65 20  conversions are 
de70: 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69  stored.** back i
de80: 6e 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65  nto the input re
de90: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
dea0: 33 2e 20 20 53 6f 20 74 68 69 73 20 6f 70 63 6f  3.  So this opco
deb0: 64 65 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20  de can cause.** 
dec0: 70 65 72 73 69 73 74 65 6e 74 20 63 68 61 6e 67  persistent chang
ded0: 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 20  es to registers 
dee0: 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a  P1 and P3..**.**
def0: 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65 72   Once any conver
df00: 73 69 6f 6e 73 20 68 61 76 65 20 74 61 6b 65 6e  sions have taken
df10: 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69 74   place, and neit
df20: 68 65 72 20 76 61 6c 75 65 20 69 73 20 4e 55 4c  her value is NUL
df30: 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  L, .** the value
df40: 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 20  s are compared. 
df50: 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61  If both values a
df60: 72 65 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65  re blobs then me
df70: 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73 65  mcmp() is.** use
df80: 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  d to determine t
df90: 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
dfa0: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49  e comparison.  I
dfb0: 66 20 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a  f both values.**
dfc0: 20 61 72 65 20 74 65 78 74 2c 20 74 68 65 6e 20   are text, then 
dfd0: 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20  the appropriate 
dfe0: 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
dff0: 6f 6e 20 73 70 65 63 69 66 69 65 64 20 69 6e 0a  on specified in.
e000: 2a 2a 20 50 34 20 69 73 20 75 73 65 64 20 74 6f  ** P4 is used to
e010: 20 64 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73   do the comparis
e020: 6f 6e 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f  on.  If P4 is no
e030: 74 20 73 70 65 63 69 66 69 65 64 20 74 68 65 6e  t specified then
e040: 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20  .** memcmp() is 
e050: 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20  used to compare 
e060: 74 65 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66  text string.  If
e070: 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65   both values are
e080: 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65  .** numeric, the
e090: 6e 20 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70  n a numeric comp
e0a0: 61 72 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20  arison is used. 
e0b0: 49 66 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65  If the two value
e0c0: 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66  s.** are of diff
e0d0: 65 72 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65  erent types, the
e0e0: 6e 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f  n numbers are co
e0f0: 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68  nsidered less th
e100: 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e  an.** strings an
e110: 64 20 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f  d strings are co
e120: 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68  nsidered less th
e130: 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20  an blobs..**.** 
e140: 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  If SQLITE_NULLEQ
e150: 20 69 73 20 73 65 74 20 69 6e 20 50 35 20 74 68   is set in P5 th
e160: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  en the result of
e170: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61   comparison is a
e180: 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20  lways either.** 
e190: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e  true or false an
e1a0: 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e  d is never NULL.
e1b0: 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e    If both operan
e1c0: 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e  ds are NULL then
e1d0: 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f   the result.** o
e1e0: 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  f comparison is 
e1f0: 74 72 75 65 2e 20 20 49 66 20 65 69 74 68 65 72  true.  If either
e200: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
e210: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
e220: 20 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66   is false..** If
e230: 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64   neither operand
e240: 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 72 65 73   is NULL the res
e250: 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65 20  ult is the same 
e260: 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69  as it would be i
e270: 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f  f.** the SQLITE_
e280: 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65  NULLEQ flag were
e290: 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35   omitted from P5
e2a0: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 62 6f 74 68 20  ..**.** If both 
e2b0: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 61  SQLITE_STOREP2 a
e2c0: 6e 64 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55  nd SQLITE_KEEPNU
e2d0: 4c 4c 20 66 6c 61 67 73 20 61 72 65 20 73 65 74  LL flags are set
e2e0: 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 63 6f 6e   then the.** con
e2f0: 74 65 6e 74 20 6f 66 20 72 5b 50 32 5d 20 69 73  tent of r[P2] is
e300: 20 6f 6e 6c 79 20 63 68 61 6e 67 65 64 20 69 66   only changed if
e310: 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65 20 69   the new value i
e320: 73 20 4e 55 4c 4c 20 6f 72 20 30 20 28 66 61 6c  s NULL or 0 (fal
e330: 73 65 29 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72  se)..** In other
e340: 20 77 6f 72 64 73 2c 20 61 20 70 72 69 6f 72 20   words, a prior 
e350: 72 5b 50 32 5d 20 76 61 6c 75 65 20 77 69 6c 6c  r[P2] value will
e360: 20 6e 6f 74 20 62 65 20 6f 76 65 72 77 72 69 74   not be overwrit
e370: 74 65 6e 20 62 79 20 31 20 28 74 72 75 65 29 2e  ten by 1 (true).
e380: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .*/./* Opcode: N
e390: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
e3a0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46  .** Synopsis: IF
e3b0: 20 72 5b 50 33 5d 21 3d 72 5b 50 31 5d 0a 2a 2a   r[P3]!=r[P1].**
e3c0: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
e3d0: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 45 71 20  ust like the Eq 
e3e0: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
e3f0: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
e400: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f  aken if.** the o
e410: 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73  perands in regis
e420: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61  ters P1 and P3 a
e430: 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53  re not equal.  S
e440: 65 65 20 74 68 65 20 45 71 20 6f 70 63 6f 64 65  ee the Eq opcode
e450: 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e   for.** addition
e460: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
e470: 2a 2a 0a 2a 2a 20 49 66 20 62 6f 74 68 20 53 51  **.** If both SQ
e480: 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 61 6e 64  LITE_STOREP2 and
e490: 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c   SQLITE_KEEPNULL
e4a0: 20 66 6c 61 67 73 20 61 72 65 20 73 65 74 20 74   flags are set t
e4b0: 68 65 6e 20 74 68 65 0a 2a 2a 20 63 6f 6e 74 65  hen the.** conte
e4c0: 6e 74 20 6f 66 20 72 5b 50 32 5d 20 69 73 20 6f  nt of r[P2] is o
e4d0: 6e 6c 79 20 63 68 61 6e 67 65 64 20 69 66 20 74  nly changed if t
e4e0: 68 65 20 6e 65 77 20 76 61 6c 75 65 20 69 73 20  he new value is 
e4f0: 4e 55 4c 4c 20 6f 72 20 31 20 28 74 72 75 65 29  NULL or 1 (true)
e500: 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f  ..** In other wo
e510: 72 64 73 2c 20 61 20 70 72 69 6f 72 20 72 5b 50  rds, a prior r[P
e520: 32 5d 20 76 61 6c 75 65 20 77 69 6c 6c 20 6e 6f  2] value will no
e530: 74 20 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e  t be overwritten
e540: 20 62 79 20 30 20 28 66 61 6c 73 65 29 2e 0a 2a   by 0 (false)..*
e550: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20  /./* Opcode: Lt 
e560: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
e570: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72  * Synopsis: IF r
e580: 5b 50 33 5d 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P3]<r[P1].**.**
e590: 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76 61 6c   Compare the val
e5a0: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
e5b0: 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66 20 72  P1 and P3.  If r
e5c0: 65 67 28 50 33 29 3c 72 65 67 28 50 31 29 20 74  eg(P3)<reg(P1) t
e5d0: 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61  hen.** jump to a
e5e0: 64 64 72 65 73 73 20 50 32 2e 20 20 4f 72 20 69  ddress P2.  Or i
e5f0: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f  f the SQLITE_STO
e600: 52 45 50 32 20 66 6c 61 67 20 69 73 20 73 65 74  REP2 flag is set
e610: 20 69 6e 20 50 35 20 73 74 6f 72 65 0a 2a 2a 20   in P5 store.** 
e620: 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f  the result of co
e630: 6d 70 61 72 69 73 6f 6e 20 28 30 20 6f 72 20 31  mparison (0 or 1
e640: 20 6f 72 20 4e 55 4c 4c 29 20 69 6e 74 6f 20 72   or NULL) into r
e650: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
e660: 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  * If the SQLITE_
e670: 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 6f  JUMPIFNULL bit o
e680: 66 20 50 35 20 69 73 20 73 65 74 20 61 6e 64 20  f P5 is set and 
e690: 65 69 74 68 65 72 20 72 65 67 28 50 31 29 20 6f  either reg(P1) o
e6a0: 72 0a 2a 2a 20 72 65 67 28 50 33 29 20 69 73 20  r.** reg(P3) is 
e6b0: 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 74 61  NULL then the ta
e6c0: 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 20 49 66  ke the jump.  If
e6d0: 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50   the SQLITE_JUMP
e6e0: 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69  IFNULL .** bit i
e6f0: 73 20 63 6c 65 61 72 20 74 68 65 6e 20 66 61 6c  s clear then fal
e700: 6c 20 74 68 72 6f 75 67 68 20 69 66 20 65 69 74  l through if eit
e710: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
e720: 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53  ULL..**.** The S
e730: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70  QLITE_AFF_MASK p
e740: 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73  ortion of P5 mus
e750: 74 20 62 65 20 61 6e 20 61 66 66 69 6e 69 74 79  t be an affinity
e760: 20 63 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20   character -.** 
e770: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c  SQLITE_AFF_TEXT,
e780: 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45   SQLITE_AFF_INTE
e790: 47 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74  GER, and so fort
e7a0: 68 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 69 73  h. An attempt is
e7b0: 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65   made .** to coe
e7c0: 72 63 65 20 62 6f 74 68 20 69 6e 70 75 74 73 20  rce both inputs 
e7d0: 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 69  according to thi
e7e0: 73 20 61 66 66 69 6e 69 74 79 20 62 65 66 6f 72  s affinity befor
e7f0: 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69  e the.** compari
e800: 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49 66 20  son is made. If 
e810: 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  the SQLITE_AFF_M
e820: 41 53 4b 20 69 73 20 30 78 30 30 2c 20 74 68 65  ASK is 0x00, the
e830: 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66  n numeric.** aff
e840: 69 6e 69 74 79 20 69 73 20 75 73 65 64 2e 20 4e  inity is used. N
e850: 6f 74 65 20 74 68 61 74 20 74 68 65 20 61 66 66  ote that the aff
e860: 69 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e  inity conversion
e870: 73 20 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20  s are stored.** 
e880: 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e  back into the in
e890: 70 75 74 20 72 65 67 69 73 74 65 72 73 20 50 31  put registers P1
e8a0: 20 61 6e 64 20 50 33 2e 20 20 53 6f 20 74 68 69   and P3.  So thi
e8b0: 73 20 6f 70 63 6f 64 65 20 63 61 6e 20 63 61 75  s opcode can cau
e8c0: 73 65 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e 74  se.** persistent
e8d0: 20 63 68 61 6e 67 65 73 20 74 6f 20 72 65 67 69   changes to regi
e8e0: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e  sters P1 and P3.
e8f0: 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20  .**.** Once any 
e900: 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61 76 65  conversions have
e910: 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e   taken place, an
e920: 64 20 6e 65 69 74 68 65 72 20 76 61 6c 75 65 20  d neither value 
e930: 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65  is NULL, .** the
e940: 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70   values are comp
e950: 61 72 65 64 2e 20 49 66 20 62 6f 74 68 20 76 61  ared. If both va
e960: 6c 75 65 73 20 61 72 65 20 62 6c 6f 62 73 20 74  lues are blobs t
e970: 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a  hen memcmp() is.
e980: 2a 2a 20 75 73 65 64 20 74 6f 20 64 65 74 65 72  ** used to deter
e990: 6d 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74 73  mine the results
e9a0: 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73   of the comparis
e9b0: 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c  on.  If both val
e9c0: 75 65 73 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c  ues.** are text,
e9d0: 20 74 68 65 6e 20 74 68 65 20 61 70 70 72 6f 70   then the approp
e9e0: 72 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20  riate collating 
e9f0: 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69  function specifi
ea00: 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20  ed in.** P4 is  
ea10: 75 73 65 64 20 74 6f 20 64 6f 20 74 68 65 20 63  used to do the c
ea20: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 50  omparison.  If P
ea30: 34 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69  4 is not specifi
ea40: 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d  ed then.** memcm
ea50: 70 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 63  p() is used to c
ea60: 6f 6d 70 61 72 65 20 74 65 78 74 20 73 74 72 69  ompare text stri
ea70: 6e 67 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c  ng.  If both val
ea80: 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72  ues are.** numer
ea90: 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65 72  ic, then a numer
eaa0: 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  ic comparison is
eab0: 20 75 73 65 64 2e 20 49 66 20 74 68 65 20 74 77   used. If the tw
eac0: 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20  o values.** are 
ead0: 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74 79 70  of different typ
eae0: 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72 73  es, then numbers
eaf0: 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
eb00: 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72  less than.** str
eb10: 69 6e 67 73 20 61 6e 64 20 73 74 72 69 6e 67 73  ings and strings
eb20: 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
eb30: 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e  less than blobs.
eb40: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  .*/./* Opcode: L
eb50: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
eb60: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46  .** Synopsis: IF
eb70: 20 72 5b 50 33 5d 3c 3d 72 5b 50 31 5d 0a 2a 2a   r[P3]<=r[P1].**
eb80: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
eb90: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
eba0: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
ebb0: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
ebc0: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63  aken if.** the c
ebd0: 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
ebe0: 65 72 20 50 33 20 69 73 20 6c 65 73 73 20 74 68  er P3 is less th
ebf0: 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
ec00: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a  he content of.**
ec10: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53   register P1.  S
ec20: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
ec30: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
ec40: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
ec50: 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20 50 31  /* Opcode: Gt P1
ec60: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
ec70: 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50  Synopsis: IF r[P
ec80: 33 5d 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54  3]>r[P1].**.** T
ec90: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
eca0: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
ecb0: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
ecc0: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
ecd0: 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e  if.** the conten
ece0: 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
ecf0: 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
ed00: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
ed10: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  ** register P1. 
ed20: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
ed30: 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
ed40: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
ed50: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65 20  /./* Opcode: Ge 
ed60: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
ed70: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72  * Synopsis: IF r
ed80: 5b 50 33 5d 3e 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a  [P3]>=r[P1].**.*
ed90: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
eda0: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
edb0: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
edc0: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
edd0: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  en if.** the con
ede0: 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
edf0: 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74   P3 is greater t
ee00: 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
ee10: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a  the content of.*
ee20: 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  * register P1.  
ee30: 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  See the Lt opcod
ee40: 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
ee50: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
ee60: 0a 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20  .case OP_Eq:    
ee70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
ee80: 6d 65 20 61 73 20 54 4b 5f 45 51 2c 20 6a 75 6d  me as TK_EQ, jum
ee90: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
eea0: 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 20 20  ase OP_Ne:      
eeb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
eec0: 20 61 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c   as TK_NE, jump,
eed0: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
eee0: 65 20 4f 50 5f 4c 74 3a 20 20 20 20 20 20 20 20  e OP_Lt:        
eef0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
ef00: 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69  s TK_LT, jump, i
ef10: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
ef20: 4f 50 5f 4c 65 3a 20 20 20 20 20 20 20 20 20 20  OP_Le:          
ef30: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
ef40: 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_LE, jump, in1
ef50: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
ef60: 5f 47 74 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Gt:            
ef70: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
ef80: 5f 47 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _GT, jump, in1, 
ef90: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47  in3 */.case OP_G
efa0: 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  e: {            
efb0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47   /* same as TK_G
efc0: 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  E, jump, in1, in
efd0: 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 2c 20  3 */.  int res, 
efe0: 72 65 73 32 3b 20 20 20 20 20 20 2f 2a 20 52 65  res2;      /* Re
eff0: 73 75 6c 74 20 6f 66 20 74 68 65 20 63 6f 6d 70  sult of the comp
f000: 61 72 69 73 6f 6e 20 6f 66 20 70 49 6e 31 20 61  arison of pIn1 a
f010: 67 61 69 6e 73 74 20 70 49 6e 33 20 2a 2f 0a 20  gainst pIn3 */. 
f020: 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20   char affinity; 
f030: 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79       /* Affinity
f040: 20 74 6f 20 75 73 65 20 66 6f 72 20 63 6f 6d 70   to use for comp
f050: 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 31 36 20  arison */.  u16 
f060: 66 6c 61 67 73 31 3b 20 20 20 20 20 20 20 20 20  flags1;         
f070: 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69  /* Copy of initi
f080: 61 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 31  al value of pIn1
f090: 2d 3e 66 6c 61 67 73 20 2a 2f 0a 20 20 75 31 36  ->flags */.  u16
f0a0: 20 66 6c 61 67 73 33 3b 20 20 20 20 20 20 20 20   flags3;        
f0b0: 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74   /* Copy of init
f0c0: 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e  ial value of pIn
f0d0: 33 2d 3e 66 6c 61 67 73 20 2a 2f 0a 0a 20 20 70  3->flags */..  p
f0e0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
f0f0: 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26  >p1];.  pIn3 = &
f100: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
f110: 20 66 6c 61 67 73 31 20 3d 20 70 49 6e 31 2d 3e   flags1 = pIn1->
f120: 66 6c 61 67 73 3b 0a 20 20 66 6c 61 67 73 33 20  flags;.  flags3 
f130: 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20  = pIn3->flags;. 
f140: 20 69 66 28 20 28 66 6c 61 67 73 31 20 7c 20 66   if( (flags1 | f
f150: 6c 61 67 73 33 29 26 4d 45 4d 5f 4e 75 6c 6c 20  lags3)&MEM_Null 
f160: 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 72  ){.    /* One or
f170: 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61   both operands a
f180: 72 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 69  re NULL */.    i
f190: 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  f( pOp->p5 & SQL
f1a0: 49 54 45 5f 4e 55 4c 4c 45 51 20 29 7b 0a 20 20  ITE_NULLEQ ){.  
f1b0: 20 20 20 20 2f 2a 20 49 66 20 53 51 4c 49 54 45      /* If SQLITE
f1c0: 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 28  _NULLEQ is set (
f1d0: 77 68 69 63 68 20 77 69 6c 6c 20 6f 6e 6c 79 20  which will only 
f1e0: 68 61 70 70 65 6e 20 69 66 20 74 68 65 20 6f 70  happen if the op
f1f0: 65 72 61 74 6f 72 20 69 73 0a 20 20 20 20 20 20  erator is.      
f200: 2a 2a 20 4f 50 5f 45 71 20 6f 72 20 4f 50 5f 4e  ** OP_Eq or OP_N
f210: 65 29 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  e) then take the
f220: 20 6a 75 6d 70 20 6f 72 20 6e 6f 74 20 64 65 70   jump or not dep
f230: 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
f240: 72 0a 20 20 20 20 20 20 2a 2a 20 6f 72 20 6e 6f  r.      ** or no
f250: 74 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20  t both operands 
f260: 61 72 65 20 6e 75 6c 6c 2e 0a 20 20 20 20 20 20  are null..      
f270: 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
f280: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
f290: 5f 45 71 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  _Eq || pOp->opco
f2a0: 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20  de==OP_Ne );.   
f2b0: 20 20 20 61 73 73 65 72 74 28 20 28 66 6c 61 67     assert( (flag
f2c0: 73 31 20 26 20 4d 45 4d 5f 43 6c 65 61 72 65 64  s1 & MEM_Cleared
f2d0: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73  )==0 );.      as
f2e0: 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26  sert( (pOp->p5 &
f2f0: 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
f300: 4c 4c 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  LL)==0 );.      
f310: 69 66 28 20 28 66 6c 61 67 73 31 26 66 6c 61 67  if( (flags1&flag
f320: 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a  s3&MEM_Null)!=0.
f330: 20 20 20 20 20 20 20 26 26 20 28 66 6c 61 67 73         && (flags
f340: 33 26 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d  3&MEM_Cleared)==
f350: 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20  0.      ){.     
f360: 20 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20     res = 0;  /* 
f370: 4f 70 65 72 61 6e 64 73 20 61 72 65 20 65 71 75  Operands are equ
f380: 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73  al */.      }els
f390: 65 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d  e{.        res =
f3a0: 20 31 3b 20 20 2f 2a 20 4f 70 65 72 61 6e 64 73   1;  /* Operands
f3b0: 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a   are not equal *
f3c0: 2f 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  /.      }.    }e
f3d0: 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 53 51  lse{.      /* SQ
f3e0: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 63  LITE_NULLEQ is c
f3f0: 6c 65 61 72 20 61 6e 64 20 61 74 20 6c 65 61 73  lear and at leas
f400: 74 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69 73  t one operand is
f410: 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a 20   NULL,.      ** 
f420: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
f430: 69 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a  is always NULL..
f440: 20 20 20 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d        ** The jum
f450: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68  p is taken if th
f460: 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  e SQLITE_JUMPIFN
f470: 55 4c 4c 20 62 69 74 20 69 73 20 73 65 74 2e 0a  ULL bit is set..
f480: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
f490: 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  f( pOp->p5 & SQL
f4a0: 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20  ITE_STOREP2 ){. 
f4b0: 20 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61         pOut = &a
f4c0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
f4d0: 20 20 20 20 20 20 69 43 6f 6d 70 61 72 65 20 3d        iCompare =
f4e0: 20 31 3b 20 20 20 20 2f 2a 20 4f 70 65 72 61 6e   1;    /* Operan
f4f0: 64 73 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c  ds are not equal
f500: 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d 65 6d 41   */.        memA
f510: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
f520: 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 20 20 4d  pOut);.        M
f530: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
f540: 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  ut, MEM_Null);. 
f550: 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f         REGISTER_
f560: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
f570: 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  Out);.      }els
f580: 65 7b 0a 20 20 20 20 20 20 20 20 56 64 62 65 42  e{.        VdbeB
f590: 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b  ranchTaken(2,3);
f5a0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 4f 70  .        if( pOp
f5b0: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55  ->p5 & SQLITE_JU
f5c0: 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20 20  MPIFNULL ){.    
f5d0: 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f        goto jump_
f5e0: 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 20 20 7d  to_p2;.        }
f5f0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62  .      }.      b
f600: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  reak;.    }.  }e
f610: 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 69 74  lse{.    /* Neit
f620: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
f630: 55 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d 70 61  ULL.  Do a compa
f640: 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 66  rison. */.    af
f650: 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 35  finity = pOp->p5
f660: 20 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41   & SQLITE_AFF_MA
f670: 53 4b 3b 0a 20 20 20 20 69 66 28 20 61 66 66 69  SK;.    if( affi
f680: 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46 46  nity>=SQLITE_AFF
f690: 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20 20 20  _NUMERIC ){.    
f6a0: 20 20 69 66 28 20 28 66 6c 61 67 73 31 20 7c 20    if( (flags1 | 
f6b0: 66 6c 61 67 73 33 29 26 4d 45 4d 5f 53 74 72 20  flags3)&MEM_Str 
f6c0: 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28  ){.        if( (
f6d0: 66 6c 61 67 73 31 20 26 20 28 4d 45 4d 5f 49 6e  flags1 & (MEM_In
f6e0: 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53  t|MEM_Real|MEM_S
f6f0: 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b  tr))==MEM_Str ){
f700: 0a 20 20 20 20 20 20 20 20 20 20 61 70 70 6c 79  .          apply
f710: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
f720: 70 49 6e 31 2c 30 29 3b 0a 20 20 20 20 20 20 20  pIn1,0);.       
f730: 20 20 20 74 65 73 74 63 61 73 65 28 20 66 6c 61     testcase( fla
f740: 67 73 33 21 3d 70 49 6e 33 2d 3e 66 6c 61 67 73  gs3!=pIn3->flags
f750: 20 29 3b 20 2f 2a 20 50 6f 73 73 69 62 6c 65 20   ); /* Possible 
f760: 69 66 20 70 49 6e 31 3d 3d 70 49 6e 33 20 2a 2f  if pIn1==pIn3 */
f770: 0a 20 20 20 20 20 20 20 20 20 20 66 6c 61 67 73  .          flags
f780: 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b  3 = pIn3->flags;
f790: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
f7a0: 20 20 20 69 66 28 20 28 66 6c 61 67 73 33 20 26     if( (flags3 &
f7b0: 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65   (MEM_Int|MEM_Re
f7c0: 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45  al|MEM_Str))==ME
f7d0: 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20 20  M_Str ){.       
f7e0: 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41     applyNumericA
f7f0: 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 30 29 3b  ffinity(pIn3,0);
f800: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
f810: 20 7d 0a 20 20 20 20 20 20 2f 2a 20 48 61 6e 64   }.      /* Hand
f820: 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61  le the common ca
f830: 73 65 20 6f 66 20 69 6e 74 65 67 65 72 20 63 6f  se of integer co
f840: 6d 70 61 72 69 73 6f 6e 20 68 65 72 65 2c 20 61  mparison here, a
f850: 73 20 61 6e 0a 20 20 20 20 20 20 2a 2a 20 6f 70  s an.      ** op
f860: 74 69 6d 69 7a 61 74 69 6f 6e 2c 20 74 6f 20 61  timization, to a
f870: 76 6f 69 64 20 61 20 63 61 6c 6c 20 74 6f 20 73  void a call to s
f880: 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65  qlite3MemCompare
f890: 28 29 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  () */.      if( 
f8a0: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70  (pIn1->flags & p
f8b0: 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
f8c0: 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20 20 20 20  _Int)!=0 ){.    
f8d0: 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e      if( pIn3->u.
f8e0: 69 20 3e 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b  i > pIn1->u.i ){
f8f0: 20 72 65 73 20 3d 20 2b 31 3b 20 67 6f 74 6f 20   res = +1; goto 
f900: 63 6f 6d 70 61 72 65 5f 6f 70 3b 20 7d 0a 20 20  compare_op; }.  
f910: 20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e        if( pIn3->
f920: 75 2e 69 20 3c 20 70 49 6e 31 2d 3e 75 2e 69 20  u.i < pIn1->u.i 
f930: 29 7b 20 72 65 73 20 3d 20 2d 31 3b 20 67 6f 74  ){ res = -1; got
f940: 6f 20 63 6f 6d 70 61 72 65 5f 6f 70 3b 20 7d 0a  o compare_op; }.
f950: 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b          res = 0;
f960: 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 63 6f  .        goto co
f970: 6d 70 61 72 65 5f 6f 70 3b 0a 20 20 20 20 20 20  mpare_op;.      
f980: 7d 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  }.    }else if( 
f990: 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45  affinity==SQLITE
f9a0: 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20  _AFF_TEXT ){.   
f9b0: 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 20 26     if( (flags1 &
f9c0: 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26 20   MEM_Str)==0 && 
f9d0: 28 66 6c 61 67 73 31 20 26 20 28 4d 45 4d 5f 49  (flags1 & (MEM_I
f9e0: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21 3d 30  nt|MEM_Real))!=0
f9f0: 20 29 7b 0a 20 20 20 20 20 20 20 20 74 65 73 74   ){.        test
fa00: 63 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67  case( pIn1->flag
fa10: 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
fa20: 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
fa30: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
fa40: 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20 20  EM_Real );.     
fa50: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
fa60: 6d 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31 2c  mStringify(pIn1,
fa70: 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b 0a 20   encoding, 1);. 
fa80: 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
fa90: 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f 44 79 6e   (flags1&MEM_Dyn
faa0: 29 20 21 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67  ) != (pIn1->flag
fab0: 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20  s&MEM_Dyn) );.  
fac0: 20 20 20 20 20 20 66 6c 61 67 73 31 20 3d 20 28        flags1 = (
fad0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 7e 4d  pIn1->flags & ~M
fae0: 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28  EM_TypeMask) | (
faf0: 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 54 79 70  flags1 & MEM_Typ
fb00: 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20 20 20  eMask);.        
fb10: 61 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70 49  assert( pIn1!=pI
fb20: 6e 33 20 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  n3 );.      }.  
fb30: 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 33 20      if( (flags3 
fb40: 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26  & MEM_Str)==0 &&
fb50: 20 28 66 6c 61 67 73 33 20 26 20 28 4d 45 4d 5f   (flags3 & (MEM_
fb60: 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21 3d  Int|MEM_Real))!=
fb70: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 74 65 73  0 ){.        tes
fb80: 74 63 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61  tcase( pIn3->fla
fb90: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a  gs & MEM_Int );.
fba0: 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
fbb0: 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20  ( pIn3->flags & 
fbc0: 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20  MEM_Real );.    
fbd0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
fbe0: 65 6d 53 74 72 69 6e 67 69 66 79 28 70 49 6e 33  emStringify(pIn3
fbf0: 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b 0a  , encoding, 1);.
fc00: 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
fc10: 28 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 44 79  ( (flags3&MEM_Dy
fc20: 6e 29 20 21 3d 20 28 70 49 6e 33 2d 3e 66 6c 61  n) != (pIn3->fla
fc30: 67 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20  gs&MEM_Dyn) );. 
fc40: 20 20 20 20 20 20 20 66 6c 61 67 73 33 20 3d 20         flags3 = 
fc50: 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 7e  (pIn3->flags & ~
fc60: 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20  MEM_TypeMask) | 
fc70: 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 54 79  (flags3 & MEM_Ty
fc80: 70 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20 7d  peMask);.      }
fc90: 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72  .    }.    asser
fca0: 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
fcb0: 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f  P4_COLLSEQ || pO
fcc0: 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29  p->p4.pColl==0 )
fcd0: 3b 0a 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69  ;.    res = sqli
fce0: 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 70 49  te3MemCompare(pI
fcf0: 6e 33 2c 20 70 49 6e 31 2c 20 70 4f 70 2d 3e 70  n3, pIn1, pOp->p
fd00: 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 63 6f  4.pColl);.  }.co
fd10: 6d 70 61 72 65 5f 6f 70 3a 0a 20 20 2f 2a 20 41  mpare_op:.  /* A
fd20: 74 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 72 65  t this point, re
fd30: 73 20 69 73 20 6e 65 67 61 74 69 76 65 2c 20 7a  s is negative, z
fd40: 65 72 6f 2c 20 6f 72 20 70 6f 73 69 74 69 76 65  ero, or positive
fd50: 20 69 66 20 72 65 67 5b 50 31 5d 20 69 73 0a 20   if reg[P1] is. 
fd60: 20 2a 2a 20 6c 65 73 73 20 74 68 61 6e 2c 20 65   ** less than, e
fd70: 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61  qual to, or grea
fd80: 74 65 72 20 74 68 61 6e 20 72 65 67 5b 50 33 5d  ter than reg[P3]
fd90: 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
fda0: 20 43 6f 6d 70 75 74 65 0a 20 20 2a 2a 20 74 68   Compute.  ** th
fdb0: 65 20 61 6e 73 77 65 72 20 74 6f 20 74 68 69 73  e answer to this
fdc0: 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 72 65 73   operator in res
fdd0: 32 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  2, depending on 
fde0: 77 68 61 74 20 74 68 65 20 63 6f 6d 70 61 72 69  what the compari
fdf0: 73 6f 6e 0a 20 20 2a 2a 20 6f 70 65 72 61 74 6f  son.  ** operato
fe00: 72 20 61 63 74 75 61 6c 6c 79 20 69 73 2e 20 20  r actually is.  
fe10: 54 68 65 20 6e 65 78 74 20 62 6c 6f 63 6b 20 6f  The next block o
fe20: 66 20 63 6f 64 65 20 64 65 70 65 6e 64 73 20 6f  f code depends o
fe30: 6e 20 74 68 65 20 66 61 63 74 0a 20 20 2a 2a 20  n the fact.  ** 
fe40: 74 68 61 74 20 74 68 65 20 36 20 63 6f 6d 70 61  that the 6 compa
fe50: 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20  rison operators 
fe60: 61 72 65 20 63 6f 6e 73 65 63 75 74 69 76 65 20  are consecutive 
fe70: 69 6e 74 65 67 65 72 73 20 69 6e 20 74 68 69 73  integers in this
fe80: 0a 20 20 2a 2a 20 6f 72 64 65 72 3a 20 20 4e 45  .  ** order:  NE
fe90: 2c 20 45 51 2c 20 47 54 2c 20 4c 45 2c 20 4c 54  , EQ, GT, LE, LT
fea0: 2c 20 47 45 20 2a 2f 0a 20 20 61 73 73 65 72 74  , GE */.  assert
feb0: 28 20 4f 50 5f 45 71 3d 3d 4f 50 5f 4e 65 2b 31  ( OP_Eq==OP_Ne+1
fec0: 20 29 3b 20 61 73 73 65 72 74 28 20 4f 50 5f 47   ); assert( OP_G
fed0: 74 3d 3d 4f 50 5f 4e 65 2b 32 20 29 3b 20 61 73  t==OP_Ne+2 ); as
fee0: 73 65 72 74 28 20 4f 50 5f 4c 65 3d 3d 4f 50 5f  sert( OP_Le==OP_
fef0: 4e 65 2b 33 20 29 3b 0a 20 20 61 73 73 65 72 74  Ne+3 );.  assert
ff00: 28 20 4f 50 5f 4c 74 3d 3d 4f 50 5f 4e 65 2b 34  ( OP_Lt==OP_Ne+4
ff10: 20 29 3b 20 61 73 73 65 72 74 28 20 4f 50 5f 47   ); assert( OP_G
ff20: 65 3d 3d 4f 50 5f 4e 65 2b 35 20 29 3b 0a 20 20  e==OP_Ne+5 );.  
ff30: 69 66 28 20 72 65 73 3c 30 20 29 7b 20 20 20 20  if( res<0 ){    
ff40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff50: 20 20 20 20 2f 2a 20 6e 65 2c 20 65 71 2c 20 67      /* ne, eq, g
ff60: 74 2c 20 6c 65 2c 20 6c 74 2c 20 67 65 20 2a 2f  t, le, lt, ge */
ff70: 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
ff80: 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
ff90: 61 4c 54 62 5b 5d 20 3d 20 7b 20 31 2c 20 20 30  aLTb[] = { 1,  0
ffa0: 2c 20 20 30 2c 20 20 31 2c 20 20 31 2c 20 20 30  ,  0,  1,  1,  0
ffb0: 20 7d 3b 0a 20 20 20 20 72 65 73 32 20 3d 20 61   };.    res2 = a
ffc0: 4c 54 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  LTb[pOp->opcode 
ffd0: 2d 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 65 6c 73  - OP_Ne];.  }els
ffe0: 65 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a  e if( res==0 ){.
fff0: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
10000 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61   unsigned char a
10010 45 51 62 5b 5d 20 3d 20 7b 20 30 2c 20 20 31 2c  EQb[] = { 0,  1,
10020 20 20 30 2c 20 20 31 2c 20 20 30 2c 20 20 31 20    0,  1,  0,  1 
10030 7d 3b 0a 20 20 20 20 72 65 73 32 20 3d 20 61 45  };.    res2 = aE
10040 51 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 2d  Qb[pOp->opcode -
10050 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 65 6c 73 65   OP_Ne];.  }else
10060 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
10070 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
10080 20 61 47 54 62 5b 5d 20 3d 20 7b 20 31 2c 20 20   aGTb[] = { 1,  
10090 30 2c 20 20 31 2c 20 20 30 2c 20 20 30 2c 20 20  0,  1,  0,  0,  
100a0 31 20 7d 3b 0a 20 20 20 20 72 65 73 32 20 3d 20  1 };.    res2 = 
100b0 61 47 54 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65  aGTb[pOp->opcode
100c0 20 2d 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 0a 0a   - OP_Ne];.  }..
100d0 20 20 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63 68    /* Undo any ch
100e0 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 61 70  anges made by ap
100f0 70 6c 79 41 66 66 69 6e 69 74 79 28 29 20 74 6f  plyAffinity() to
10100 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73   the input regis
10110 74 65 72 73 2e 20 2a 2f 0a 20 20 61 73 73 65 72  ters. */.  asser
10120 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  t( (pIn1->flags 
10130 26 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66  & MEM_Dyn) == (f
10140 6c 61 67 73 31 20 26 20 4d 45 4d 5f 44 79 6e 29  lags1 & MEM_Dyn)
10150 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67   );.  pIn1->flag
10160 73 20 3d 20 66 6c 61 67 73 31 3b 0a 20 20 61 73  s = flags1;.  as
10170 73 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61  sert( (pIn3->fla
10180 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d  gs & MEM_Dyn) ==
10190 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 44   (flags3 & MEM_D
101a0 79 6e 29 20 29 3b 0a 20 20 70 49 6e 33 2d 3e 66  yn) );.  pIn3->f
101b0 6c 61 67 73 20 3d 20 66 6c 61 67 73 33 3b 0a 0a  lags = flags3;..
101c0 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
101d0 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29  SQLITE_STOREP2 )
101e0 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d  {.    pOut = &aM
101f0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20  em[pOp->p2];.   
10200 20 69 43 6f 6d 70 61 72 65 20 3d 20 72 65 73 3b   iCompare = res;
10210 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 70  .    if( (pOp->p
10220 35 20 26 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e  5 & SQLITE_KEEPN
10230 55 4c 4c 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  ULL)!=0 ){.     
10240 20 2f 2a 20 54 68 65 20 4b 45 45 50 4e 55 4c 4c   /* The KEEPNULL
10250 20 66 6c 61 67 20 70 72 65 76 65 6e 74 73 20 4f   flag prevents O
10260 50 5f 45 71 20 66 72 6f 6d 20 6f 76 65 72 77 72  P_Eq from overwr
10270 69 74 69 6e 67 20 61 20 4e 55 4c 4c 20 77 69 74  iting a NULL wit
10280 68 20 31 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64  h 1.      ** and
10290 20 70 72 65 76 65 6e 74 73 20 4f 50 5f 4e 65 20   prevents OP_Ne 
102a0 66 72 6f 6d 20 6f 76 65 72 77 72 69 74 69 6e 67  from overwriting
102b0 20 4e 55 4c 4c 20 77 69 74 68 20 30 2e 20 20 54   NULL with 0.  T
102c0 68 69 73 20 66 6c 61 67 0a 20 20 20 20 20 20 2a  his flag.      *
102d0 2a 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 69  * is only used i
102e0 6e 20 63 6f 6e 74 65 78 74 73 20 77 68 65 72 65  n contexts where
102f0 20 65 69 74 68 65 72 3a 0a 20 20 20 20 20 20 2a   either:.      *
10300 2a 20 20 20 28 31 29 20 6f 70 3d 3d 4f 50 5f 45  *   (1) op==OP_E
10310 71 20 26 26 20 28 72 5b 50 32 5d 3d 3d 4e 55 4c  q && (r[P2]==NUL
10320 4c 20 7c 7c 20 72 5b 50 32 5d 3d 3d 30 29 0a 20  L || r[P2]==0). 
10330 20 20 20 20 20 2a 2a 20 20 20 28 32 29 20 6f 70       **   (2) op
10340 3d 3d 4f 50 5f 4e 65 20 26 26 20 28 72 5b 50 32  ==OP_Ne && (r[P2
10350 5d 3d 3d 4e 55 4c 4c 20 7c 7c 20 72 5b 50 32 5d  ]==NULL || r[P2]
10360 3d 3d 31 29 0a 20 20 20 20 20 20 2a 2a 20 54 68  ==1).      ** Th
10370 65 72 65 66 6f 72 65 20 69 74 20 69 73 20 6e 6f  erefore it is no
10380 74 20 6e 65 63 65 73 73 61 72 79 20 74 6f 20 63  t necessary to c
10390 68 65 63 6b 20 74 68 65 20 63 6f 6e 74 65 6e 74  heck the content
103a0 20 6f 66 20 72 5b 50 32 5d 20 66 6f 72 0a 20 20   of r[P2] for.  
103b0 20 20 20 20 2a 2a 20 4e 55 4c 4c 2e 20 2a 2f 0a      ** NULL. */.
103c0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
103d0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65  p->opcode==OP_Ne
103e0 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
103f0 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20 20 20  =OP_Eq );.      
10400 61 73 73 65 72 74 28 20 72 65 73 32 3d 3d 30 20  assert( res2==0 
10410 7c 7c 20 72 65 73 32 3d 3d 31 20 29 3b 0a 20 20  || res2==1 );.  
10420 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72 65      testcase( re
10430 73 32 3d 3d 30 20 26 26 20 70 4f 70 2d 3e 6f 70  s2==0 && pOp->op
10440 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20  code==OP_Eq );. 
10450 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72       testcase( r
10460 65 73 32 3d 3d 31 20 26 26 20 70 4f 70 2d 3e 6f  es2==1 && pOp->o
10470 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a  pcode==OP_Eq );.
10480 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
10490 72 65 73 32 3d 3d 30 20 26 26 20 70 4f 70 2d 3e  res2==0 && pOp->
104a0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b  opcode==OP_Ne );
104b0 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
104c0 20 72 65 73 32 3d 3d 31 20 26 26 20 70 4f 70 2d   res2==1 && pOp-
104d0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29  >opcode==OP_Ne )
104e0 3b 0a 20 20 20 20 20 20 69 66 28 20 28 70 4f 70  ;.      if( (pOp
104f0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 29  ->opcode==OP_Eq)
10500 3d 3d 72 65 73 32 20 29 20 62 72 65 61 6b 3b 0a  ==res2 ) break;.
10510 20 20 20 20 7d 0a 20 20 20 20 6d 65 6d 41 62 6f      }.    memAbo
10520 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
10530 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54  ut);.    MemSetT
10540 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
10550 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74  M_Int);.    pOut
10560 2d 3e 75 2e 69 20 3d 20 72 65 73 32 3b 0a 20 20  ->u.i = res2;.  
10570 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
10580 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
10590 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64  .  }else{.    Vd
105a0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
105b0 73 21 3d 30 2c 20 28 70 4f 70 2d 3e 70 35 20 26  s!=0, (pOp->p5 &
105c0 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 29 3f   SQLITE_NULLEQ)?
105d0 32 3a 33 29 3b 0a 20 20 20 20 69 66 28 20 72 65  2:3);.    if( re
105e0 73 32 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  s2 ){.      goto
105f0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20   jump_to_p2;.   
10600 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
10610 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 6c  }../* Opcode: El
10620 73 65 4e 6f 74 45 71 20 2a 20 50 32 20 2a 20 2a  seNotEq * P2 * *
10630 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70   *.**.** This op
10640 63 6f 64 65 20 6d 75 73 74 20 69 6d 6d 65 64 69  code must immedi
10650 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 61 6e 20  ately follow an 
10660 4f 50 5f 4c 74 20 6f 72 20 4f 50 5f 47 74 20 63  OP_Lt or OP_Gt c
10670 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74  omparison operat
10680 6f 72 2e 0a 2a 2a 20 49 66 20 72 65 73 75 6c 74  or..** If result
10690 20 6f 66 20 61 6e 20 4f 50 5f 45 71 20 63 6f 6d   of an OP_Eq com
106a0 70 61 72 69 73 6f 6e 20 6f 6e 20 74 68 65 20 73  parison on the s
106b0 61 6d 65 20 74 77 6f 20 6f 70 65 72 61 6e 64 73  ame two operands
106c0 0a 2a 2a 20 77 6f 75 6c 64 20 68 61 76 65 20 62  .** would have b
106d0 65 20 4e 55 4c 4c 20 6f 72 20 66 61 6c 73 65 20  e NULL or false 
106e0 28 30 29 2c 20 74 68 65 6e 20 74 68 65 6e 20 6a  (0), then then j
106f0 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 20 49  ump to P2. .** I
10700 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  f the result of 
10710 61 6e 20 4f 50 5f 45 71 20 63 6f 6d 70 61 72 69  an OP_Eq compari
10720 73 6f 6e 20 6f 6e 20 74 68 65 20 74 77 6f 20 70  son on the two p
10730 72 65 76 69 6f 75 73 20 6f 70 65 72 61 6e 64 73  revious operands
10740 0a 2a 2a 20 77 6f 75 6c 64 20 68 61 76 65 20 62  .** would have b
10750 65 65 6e 20 74 72 75 65 20 28 31 29 2c 20 74 68  een true (1), th
10760 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e  en fall through.
10770 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6c 73 65  .*/.case OP_Else
10780 4e 6f 74 45 71 3a 20 7b 20 20 20 20 20 20 20 2f  NotEq: {       /
10790 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 53 43  * same as TK_ESC
107a0 41 50 45 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20 61  APE, jump */.  a
107b0 73 73 65 72 74 28 20 70 4f 70 3e 61 4f 70 20 29  ssert( pOp>aOp )
107c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b  ;.  assert( pOp[
107d0 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4c  -1].opcode==OP_L
107e0 74 20 7c 7c 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63  t || pOp[-1].opc
107f0 6f 64 65 3d 3d 4f 50 5f 47 74 20 29 3b 0a 20 20  ode==OP_Gt );.  
10800 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
10810 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52  p5 & SQLITE_STOR
10820 45 50 32 20 29 3b 0a 20 20 56 64 62 65 42 72 61  EP2 );.  VdbeBra
10830 6e 63 68 54 61 6b 65 6e 28 69 43 6f 6d 70 61 72  nchTaken(iCompar
10840 65 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20  e!=0, 2);.  if( 
10850 69 43 6f 6d 70 61 72 65 21 3d 30 20 29 20 67 6f  iCompare!=0 ) go
10860 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
10870 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f   break;.}.../* O
10880 70 63 6f 64 65 3a 20 50 65 72 6d 75 74 61 74 69  pcode: Permutati
10890 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  on * * * P4 *.**
108a0 0a 2a 2a 20 53 65 74 20 74 68 65 20 70 65 72 6d  .** Set the perm
108b0 75 74 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20  utation used by 
108c0 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f  the OP_Compare o
108d0 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20 6e  perator in the n
108e0 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69  ext.** instructi
108f0 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61  on.  The permuta
10900 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69  tion is stored i
10910 6e 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64  n the P4 operand
10920 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d  ..**.** The perm
10930 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  utation is only 
10940 76 61 6c 69 64 20 75 6e 74 69 6c 20 74 68 65 20  valid until the 
10950 6e 65 78 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20  next OP_Compare 
10960 74 68 61 74 20 68 61 73 0a 2a 2a 20 74 68 65 20  that has.** the 
10970 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62  OPFLAG_PERMUTE b
10980 69 74 20 73 65 74 20 69 6e 20 50 35 2e 20 54 79  it set in P5. Ty
10990 70 69 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50  pically the OP_P
109a0 65 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c  ermutation shoul
109b0 64 20 0a 2a 2a 20 6f 63 63 75 72 20 69 6d 6d 65  d .** occur imme
109c0 64 69 61 74 65 6c 79 20 70 72 69 6f 72 20 74 6f  diately prior to
109d0 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e   the OP_Compare.
109e0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 69 72 73 74  .**.** The first
109f0 20 69 6e 74 65 67 65 72 20 69 6e 20 74 68 65 20   integer in the 
10a00 50 34 20 69 6e 74 65 67 65 72 20 61 72 72 61 79  P4 integer array
10a10 20 69 73 20 74 68 65 20 6c 65 6e 67 74 68 20 6f   is the length o
10a20 66 20 74 68 65 20 61 72 72 61 79 0a 2a 2a 20 61  f the array.** a
10a30 6e 64 20 64 6f 65 73 20 6e 6f 74 20 62 65 63 6f  nd does not beco
10a40 6d 65 20 70 61 72 74 20 6f 66 20 74 68 65 20 70  me part of the p
10a50 65 72 6d 75 74 61 74 69 6f 6e 2e 0a 2a 2f 0a 63  ermutation..*/.c
10a60 61 73 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69  ase OP_Permutati
10a70 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  on: {.  assert( 
10a80 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
10a90 49 4e 54 41 52 52 41 59 20 29 3b 0a 20 20 61 73  INTARRAY );.  as
10aa0 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 61 69  sert( pOp->p4.ai
10ab0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
10ac0 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  p[1].opcode==OP_
10ad0 43 6f 6d 70 61 72 65 20 29 3b 0a 20 20 61 73 73  Compare );.  ass
10ae0 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 35 20 26  ert( pOp[1].p5 &
10af0 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20   OPFLAG_PERMUTE 
10b00 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
10b10 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72  * Opcode: Compar
10b20 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
10b30 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
10b40 50 31 40 50 33 5d 20 3c 2d 3e 20 72 5b 50 32 40  P1@P3] <-> r[P2@
10b50 50 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72  P3].**.** Compar
10b60 65 20 74 77 6f 20 76 65 63 74 6f 72 73 20 6f 66  e two vectors of
10b70 20 72 65 67 69 73 74 65 72 73 20 69 6e 20 72 65   registers in re
10b80 67 28 50 31 29 2e 2e 72 65 67 28 50 31 2b 50 33  g(P1)..reg(P1+P3
10b90 2d 31 29 20 28 63 61 6c 6c 20 74 68 69 73 0a 2a  -1) (call this.*
10ba0 2a 20 76 65 63 74 6f 72 20 22 41 22 29 20 61 6e  * vector "A") an
10bb0 64 20 69 6e 20 72 65 67 28 50 32 29 2e 2e 72 65  d in reg(P2)..re
10bc0 67 28 50 32 2b 50 33 2d 31 29 20 28 22 42 22 29  g(P2+P3-1) ("B")
10bd0 2e 20 20 53 61 76 65 20 74 68 65 20 72 65 73 75  .  Save the resu
10be0 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d  lt of.** the com
10bf0 70 61 72 69 73 6f 6e 20 66 6f 72 20 75 73 65 20  parison for use 
10c00 62 79 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a  by the next OP_J
10c10 75 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a  ump instruct..**
10c20 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68  .** If P5 has th
10c30 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  e OPFLAG_PERMUTE
10c40 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74   bit set, then t
10c50 68 65 20 6f 72 64 65 72 20 6f 66 20 63 6f 6d 70  he order of comp
10c60 61 72 69 73 6f 6e 20 69 73 0a 2a 2a 20 64 65 74  arison is.** det
10c70 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6d  ermined by the m
10c80 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 50 65  ost recent OP_Pe
10c90 72 6d 75 74 61 74 69 6f 6e 20 6f 70 65 72 61 74  rmutation operat
10ca0 6f 72 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 4f  or.  If the.** O
10cb0 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69  PFLAG_PERMUTE bi
10cc0 74 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e  t is clear, then
10cd0 20 72 65 67 69 73 74 65 72 20 61 72 65 20 63 6f   register are co
10ce0 6d 70 61 72 65 64 20 69 6e 20 73 65 71 75 65 6e  mpared in sequen
10cf0 74 69 61 6c 0a 2a 2a 20 6f 72 64 65 72 2e 0a 2a  tial.** order..*
10d00 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b 65 79  *.** P4 is a Key
10d10 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 74  Info structure t
10d20 68 61 74 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c  hat defines coll
10d30 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20  ating sequences 
10d40 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65  and sort.** orde
10d50 72 73 20 66 6f 72 20 74 68 65 20 63 6f 6d 70 61  rs for the compa
10d60 72 69 73 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d  rison.  The perm
10d70 75 74 61 74 69 6f 6e 20 61 70 70 6c 69 65 73 20  utation applies 
10d80 74 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20  to registers.** 
10d90 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79 49 6e  only.  The KeyIn
10da0 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20  fo elements are 
10db0 75 73 65 64 20 73 65 71 75 65 6e 74 69 61 6c 6c  used sequentiall
10dc0 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  y..**.** The com
10dd0 70 61 72 69 73 6f 6e 20 69 73 20 61 20 73 6f 72  parison is a sor
10de0 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f  t comparison, so
10df0 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65   NULLs compare e
10e00 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61  qual,.** NULLs a
10e10 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d  re less than num
10e20 62 65 72 73 2c 20 6e 75 6d 62 65 72 73 20 61 72  bers, numbers ar
10e30 65 20 6c 65 73 73 20 74 68 61 6e 20 73 74 72 69  e less than stri
10e40 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69  ngs,.** and stri
10e50 6e 67 73 20 61 72 65 20 6c 65 73 73 20 74 68 61  ngs are less tha
10e60 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65  n blobs..*/.case
10e70 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20   OP_Compare: {. 
10e80 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b   int n;.  int i;
10e90 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74  .  int p1;.  int
10ea0 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79   p2;.  const Key
10eb0 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a  Info *pKeyInfo;.
10ec0 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 43 6f 6c    int idx;.  Col
10ed0 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20  lSeq *pColl;    
10ee0 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71  /* Collating seq
10ef0 75 65 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e 20  uence to use on 
10f00 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20 69  this term */.  i
10f10 6e 74 20 62 52 65 76 3b 20 20 20 20 20 20 20 20  nt bRev;        
10f20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 44 45    /* True for DE
10f30 53 43 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72  SCENDING sort or
10f40 64 65 72 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 50  der */.  int *aP
10f50 65 72 6d 75 74 65 3b 20 20 20 20 20 2f 2a 20 54  ermute;     /* T
10f60 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a  he permutation *
10f70 2f 0a 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e 70  /..  if( (pOp->p
10f80 35 20 26 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  5 & OPFLAG_PERMU
10f90 54 45 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 50  TE)==0 ){.    aP
10fa0 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 7d 65  ermute = 0;.  }e
10fb0 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
10fc0 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 20 20   pOp>aOp );.    
10fd0 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
10fe0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 50 65 72 6d 75  opcode==OP_Permu
10ff0 74 61 74 69 6f 6e 20 29 3b 0a 20 20 20 20 61 73  tation );.    as
11000 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34  sert( pOp[-1].p4
11010 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41  type==P4_INTARRA
11020 59 20 29 3b 0a 20 20 20 20 61 50 65 72 6d 75 74  Y );.    aPermut
11030 65 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 61  e = pOp[-1].p4.a
11040 69 20 2b 20 31 3b 0a 20 20 20 20 61 73 73 65 72  i + 1;.    asser
11050 74 28 20 61 50 65 72 6d 75 74 65 21 3d 30 20 29  t( aPermute!=0 )
11060 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20 70 4f 70 2d  ;.  }.  n = pOp-
11070 3e 70 33 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20  >p3;.  pKeyInfo 
11080 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  = pOp->p4.pKeyIn
11090 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e  fo;.  assert( n>
110a0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
110b0 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20 20  KeyInfo!=0 );.  
110c0 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  p1 = pOp->p1;.  
110d0 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23 69  p2 = pOp->p2;.#i
110e0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
110f0 47 0a 20 20 69 66 28 20 61 50 65 72 6d 75 74 65  G.  if( aPermute
11100 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b 2c 20 6d   ){.    int k, m
11110 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72 28 6b  x = 0;.    for(k
11120 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66  =0; k<n; k++) if
11130 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78  ( aPermute[k]>mx
11140 20 29 20 6d 78 20 3d 20 61 50 65 72 6d 75 74 65   ) mx = aPermute
11150 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  [k];.    assert(
11160 20 70 31 3e 30 20 26 26 20 70 31 2b 6d 78 3c 3d   p1>0 && p1+mx<=
11170 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
11180 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
11190 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 26    assert( p2>0 &
111a0 26 20 70 32 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65  & p2+mx<=(p->nMe
111b0 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
111c0 29 2b 31 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  )+1 );.  }else{.
111d0 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30      assert( p1>0
111e0 20 26 26 20 70 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d   && p1+n<=(p->nM
111f0 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
11200 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65  r)+1 );.    asse
11210 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6e  rt( p2>0 && p2+n
11220 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
11230 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
11240 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
11250 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20  LITE_DEBUG */.  
11260 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b  for(i=0; i<n; i+
11270 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d 20 61 50  +){.    idx = aP
11280 65 72 6d 75 74 65 20 3f 20 61 50 65 72 6d 75 74  ermute ? aPermut
11290 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20 61 73  e[i] : i;.    as
112a0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
112b0 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 20  (&aMem[p1+idx]) 
112c0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  );.    assert( m
112d0 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
112e0 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20  p2+idx]) );.    
112f0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
11300 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 31 2b  1+idx, &aMem[p1+
11310 69 64 78 5d 29 3b 0a 20 20 20 20 52 45 47 49 53  idx]);.    REGIS
11320 54 45 52 5f 54 52 41 43 45 28 70 32 2b 69 64 78  TER_TRACE(p2+idx
11330 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29  , &aMem[p2+idx])
11340 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 3c  ;.    assert( i<
11350 70 4b 65 79 49 6e 66 6f 2d 3e 6e 4b 65 79 46 69  pKeyInfo->nKeyFi
11360 65 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c  eld );.    pColl
11370 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f   = pKeyInfo->aCo
11380 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76 20  ll[i];.    bRev 
11390 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72  = pKeyInfo->aSor
113a0 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69  tOrder[i];.    i
113b0 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69 74 65  Compare = sqlite
113c0 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26 61 4d 65  3MemCompare(&aMe
113d0 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 61 4d 65 6d  m[p1+idx], &aMem
113e0 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29  [p2+idx], pColl)
113f0 3b 0a 20 20 20 20 69 66 28 20 69 43 6f 6d 70 61  ;.    if( iCompa
11400 72 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  re ){.      if( 
11410 62 52 65 76 20 29 20 69 43 6f 6d 70 61 72 65 20  bRev ) iCompare 
11420 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20  = -iCompare;.   
11430 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
11440 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
11450 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20  /* Opcode: Jump 
11460 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
11470 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 69  ** Jump to the i
11480 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 61 64  nstruction at ad
11490 64 72 65 73 73 20 50 31 2c 20 50 32 2c 20 6f 72  dress P1, P2, or
114a0 20 50 33 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e   P3 depending on
114b0 20 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74   whether.** in t
114c0 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f  he most recent O
114d0 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74 72 75  P_Compare instru
114e0 63 74 69 6f 6e 20 74 68 65 20 50 31 20 76 65 63  ction the P1 vec
114f0 74 6f 72 20 77 61 73 20 6c 65 73 73 20 74 68 61  tor was less tha
11500 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f  n.** equal to, o
11510 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  r greater than t
11520 68 65 20 50 32 20 76 65 63 74 6f 72 2c 20 72 65  he P2 vector, re
11530 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63  spectively..*/.c
11540 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20  ase OP_Jump: {  
11550 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
11560 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d  mp */.  if( iCom
11570 70 61 72 65 3c 30 20 29 7b 0a 20 20 20 20 56 64  pare<0 ){.    Vd
11580 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c  beBranchTaken(0,
11590 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70  3); pOp = &aOp[p
115a0 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 7d  Op->p1 - 1];.  }
115b0 65 6c 73 65 20 69 66 28 20 69 43 6f 6d 70 61 72  else if( iCompar
115c0 65 3d 3d 30 20 29 7b 0a 20 20 20 20 56 64 62 65  e==0 ){.    Vdbe
115d0 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 33 29  BranchTaken(1,3)
115e0 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70  ; pOp = &aOp[pOp
115f0 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 7d 65 6c  ->p2 - 1];.  }el
11600 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e  se{.    VdbeBran
11610 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b 20 70 4f  chTaken(2,3); pO
11620 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 33  p = &aOp[pOp->p3
11630 20 2d 20 31 5d 3b 0a 20 20 7d 0a 20 20 62 72 65   - 1];.  }.  bre
11640 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
11650 3a 20 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a  : And P1 P2 P3 *
11660 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
11670 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 26 26 20  r[P3]=(r[P1] && 
11680 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b  r[P2]).**.** Tak
11690 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e  e the logical AN
116a0 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  D of the values 
116b0 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20  in registers P1 
116c0 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72  and P2 and.** wr
116d0 69 74 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ite the result i
116e0 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e  nto register P3.
116f0 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  .**.** If either
11700 20 50 31 20 6f 72 20 50 32 20 69 73 20 30 20 28   P1 or P2 is 0 (
11710 66 61 6c 73 65 29 20 74 68 65 6e 20 74 68 65 20  false) then the 
11720 72 65 73 75 6c 74 20 69 73 20 30 20 65 76 65 6e  result is 0 even
11730 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72   if.** the other
11740 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20   input is NULL. 
11750 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65   A NULL and true
11760 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69   or two NULLs gi
11770 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74  ve.** a NULL out
11780 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  put..*/./* Opcod
11790 65 3a 20 4f 72 20 50 31 20 50 32 20 50 33 20 2a  e: Or P1 P2 P3 *
117a0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
117b0 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 7c 7c 20  r[P3]=(r[P1] || 
117c0 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b  r[P2]).**.** Tak
117d0 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 4f 52  e the logical OR
117e0 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69   of the values i
117f0 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
11800 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72  d P2 and.** stor
11810 65 20 74 68 65 20 61 6e 73 77 65 72 20 69 6e 20  e the answer in 
11820 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a  register P3..**.
11830 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20  ** If either P1 
11840 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65 72 6f  or P2 is nonzero
11850 20 28 74 72 75 65 29 20 74 68 65 6e 20 74 68 65   (true) then the
11860 20 72 65 73 75 6c 74 20 69 73 20 31 20 28 74 72   result is 1 (tr
11870 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66 20 74  ue).** even if t
11880 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69  he other input i
11890 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20  s NULL.  A NULL 
118a0 61 6e 64 20 66 61 6c 73 65 20 6f 72 20 74 77 6f  and false or two
118b0 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65 20 61   NULLs.** give a
118c0 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f   NULL output..*/
118d0 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20 20 20  .case OP_And:   
118e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
118f0 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20 69 6e  me as TK_AND, in
11900 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
11910 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20 20 20  case OP_Or: {   
11920 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
11930 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c  e as TK_OR, in1,
11940 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in2, out3 */.  
11950 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20 4c 65  int v1;    /* Le
11960 66 74 20 6f 70 65 72 61 6e 64 3a 20 20 30 3d 3d  ft operand:  0==
11970 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20  FALSE, 1==TRUE, 
11980 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55  2==UNKNOWN or NU
11990 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32 3b 20  LL */.  int v2; 
119a0 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 70 65 72     /* Right oper
119b0 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c 20 31  and: 0==FALSE, 1
119c0 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f  ==TRUE, 2==UNKNO
119d0 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20  WN or NULL */.. 
119e0 20 76 31 20 3d 20 73 71 6c 69 74 65 33 56 64 62   v1 = sqlite3Vdb
119f0 65 42 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 26 61  eBooleanValue(&a
11a00 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 32 29  Mem[pOp->p1], 2)
11a10 3b 0a 20 20 76 32 20 3d 20 73 71 6c 69 74 65 33  ;.  v2 = sqlite3
11a20 56 64 62 65 42 6f 6f 6c 65 61 6e 56 61 6c 75 65  VdbeBooleanValue
11a30 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2c  (&aMem[pOp->p2],
11a40 20 32 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e   2);.  if( pOp->
11a50 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29  opcode==OP_And )
11a60 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
11a70 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
11a80 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b   and_logic[] = {
11a90 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20   0, 0, 0, 0, 1, 
11aa0 32 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20  2, 0, 2, 2 };.  
11ab0 20 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63    v1 = and_logic
11ac0 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c  [v1*3+v2];.  }el
11ad0 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63  se{.    static c
11ae0 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
11af0 61 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20  ar or_logic[] = 
11b00 7b 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c  { 0, 1, 2, 1, 1,
11b10 20 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20   1, 2, 1, 2 };. 
11b20 20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63     v1 = or_logic
11b30 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20  [v1*3+v2];.  }. 
11b40 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
11b50 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 76 31  p->p3];.  if( v1
11b60 3d 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65  ==2 ){.    MemSe
11b70 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
11b80 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c  MEM_Null);.  }el
11b90 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  se{.    pOut->u.
11ba0 69 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d 53  i = v1;.    MemS
11bb0 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
11bc0 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20   MEM_Int);.  }. 
11bd0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
11be0 63 6f 64 65 3a 20 4e 6f 74 20 50 31 20 50 32 20  code: Not P1 P2 
11bf0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
11c00 73 3a 20 72 5b 50 32 5d 3d 20 21 72 5b 50 31 5d  s: r[P2]= !r[P1]
11c10 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  .**.** Interpret
11c20 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
11c30 67 69 73 74 65 72 20 50 31 20 61 73 20 61 20 62  gister P1 as a b
11c40 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 53  oolean value.  S
11c50 74 6f 72 65 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c  tore the.** bool
11c60 65 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 69  ean complement i
11c70 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  n register P2.  
11c80 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  If the value in 
11c90 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 0a  register P1 is .
11ca0 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 20  ** NULL, then a 
11cb0 4e 55 4c 4c 20 69 73 20 73 74 6f 72 65 64 20 69  NULL is stored i
11cc0 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
11cd0 5f 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20  _Not: {         
11ce0 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
11cf0 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f  s TK_NOT, in1, o
11d00 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  ut2 */.  pIn1 = 
11d10 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
11d20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
11d30 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74  Op->p2];.  sqlit
11d40 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
11d50 28 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 28 70  (pOut);.  if( (p
11d60 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
11d70 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Null)==0 ){.   
11d80 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
11d90 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74  EM_Int;.    pOut
11da0 2d 3e 75 2e 69 20 3d 20 21 73 71 6c 69 74 65 33  ->u.i = !sqlite3
11db0 56 64 62 65 42 6f 6f 6c 65 61 6e 56 61 6c 75 65  VdbeBooleanValue
11dc0 28 70 49 6e 31 2c 20 30 29 3b 0a 20 20 7d 0a 20  (pIn1, 0);.  }. 
11dd0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
11de0 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20 50 31 20  code: BitNot P1 
11df0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
11e00 70 73 69 73 3a 20 72 5b 50 31 5d 3d 20 7e 72 5b  psis: r[P1]= ~r[
11e10 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70  P1].**.** Interp
11e20 72 65 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ret the content 
11e30 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 61  of register P1 a
11e40 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 53  s an integer.  S
11e50 74 6f 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73  tore the.** ones
11e60 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74  -complement of t
11e70 68 65 20 50 31 20 76 61 6c 75 65 20 69 6e 74 6f  he P1 value into
11e80 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49   register P2.  I
11e90 66 20 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20  f P1 holds.** a 
11ea0 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20  NULL then store 
11eb0 61 20 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f  a NULL in P2..*/
11ec0 0a 63 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a  .case OP_BitNot:
11ed0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
11ee0 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54  * same as TK_BIT
11ef0 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a  NOT, in1, out2 *
11f00 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
11f10 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
11f20 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
11f30 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  2];.  sqlite3Vdb
11f40 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
11f50 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
11f60 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
11f70 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 4f 75 74  )==0 ){.    pOut
11f80 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
11f90 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  t;.    pOut->u.i
11fa0 20 3d 20 7e 73 71 6c 69 74 65 33 56 64 62 65 49   = ~sqlite3VdbeI
11fb0 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20  ntValue(pIn1);. 
11fc0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
11fd0 2a 20 4f 70 63 6f 64 65 3a 20 4f 6e 63 65 20 50  * Opcode: Once P
11fe0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
11ff0 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   Fall through to
12000 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
12010 63 74 69 6f 6e 20 74 68 65 20 66 69 72 73 74 20  ction the first 
12020 74 69 6d 65 20 74 68 69 73 20 6f 70 63 6f 64 65  time this opcode
12030 20 69 73 0a 2a 2a 20 65 6e 63 6f 75 6e 74 65 72   is.** encounter
12040 65 64 20 6f 6e 20 65 61 63 68 20 69 6e 76 6f 63  ed on each invoc
12050 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 62 79 74  ation of the byt
12060 65 2d 63 6f 64 65 20 70 72 6f 67 72 61 6d 2e 20  e-code program. 
12070 20 4a 75 6d 70 20 74 6f 20 50 32 0a 2a 2a 20 6f   Jump to P2.** o
12080 6e 20 74 68 65 20 73 65 63 6f 6e 64 20 61 6e 64  n the second and
12090 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20   all subsequent 
120a0 65 6e 63 6f 75 6e 74 65 72 73 20 64 75 72 69 6e  encounters durin
120b0 67 20 74 68 65 20 73 61 6d 65 20 69 6e 76 6f 63  g the same invoc
120c0 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 6f 70  ation..**.** Top
120d0 2d 6c 65 76 65 6c 20 70 72 6f 67 72 61 6d 73 20  -level programs 
120e0 64 65 74 65 72 6d 69 6e 65 20 66 69 72 73 74 20  determine first 
120f0 69 6e 76 6f 63 61 74 69 6f 6e 20 62 79 20 63 6f  invocation by co
12100 6d 70 61 72 69 6e 67 20 74 68 65 20 50 31 0a 2a  mparing the P1.*
12110 2a 20 6f 70 65 72 61 6e 64 20 61 67 61 69 6e 73  * operand agains
12120 74 20 74 68 65 20 50 31 20 6f 70 65 72 61 6e 64  t the P1 operand
12130 20 6f 6e 20 74 68 65 20 4f 50 5f 49 6e 69 74 20   on the OP_Init 
12140 6f 70 63 6f 64 65 20 61 74 20 74 68 65 20 62 65  opcode at the be
12150 67 69 6e 6e 69 6e 67 0a 2a 2a 20 6f 66 20 74 68  ginning.** of th
12160 65 20 70 72 6f 67 72 61 6d 2e 20 20 49 66 20 74  e program.  If t
12170 68 65 20 50 31 20 76 61 6c 75 65 73 20 64 69 66  he P1 values dif
12180 66 65 72 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74  fer, then fall t
12190 68 72 6f 75 67 68 20 61 6e 64 20 6d 61 6b 65 0a  hrough and make.
121a0 2a 2a 20 74 68 65 20 50 31 20 6f 66 20 74 68 69  ** the P1 of thi
121b0 73 20 6f 70 63 6f 64 65 20 65 71 75 61 6c 20 74  s opcode equal t
121c0 6f 20 74 68 65 20 50 31 20 6f 66 20 4f 50 5f 49  o the P1 of OP_I
121d0 6e 69 74 2e 20 20 49 66 20 50 31 20 76 61 6c 75  nit.  If P1 valu
121e0 65 73 20 61 72 65 0a 2a 2a 20 74 68 65 20 73 61  es are.** the sa
121f0 6d 65 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  me then take the
12200 20 6a 75 6d 70 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72   jump..**.** For
12210 20 73 75 62 70 72 6f 67 72 61 6d 73 2c 20 74 68   subprograms, th
12220 65 72 65 20 69 73 20 61 20 62 69 74 6d 61 73 6b  ere is a bitmask
12230 20 69 6e 20 74 68 65 20 56 64 62 65 46 72 61 6d   in the VdbeFram
12240 65 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e 65  e that determine
12250 73 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20  s.** whether or 
12260 6e 6f 74 20 74 68 65 20 6a 75 6d 70 20 73 68 6f  not the jump sho
12270 75 6c 64 20 62 65 20 74 61 6b 65 6e 2e 20 20 54  uld be taken.  T
12280 68 65 20 62 69 74 6d 61 73 6b 20 69 73 20 6e 65  he bitmask is ne
12290 63 65 73 73 61 72 79 0a 2a 2a 20 62 65 63 61 75  cessary.** becau
122a0 73 65 20 74 68 65 20 73 65 6c 66 2d 61 6c 74 65  se the self-alte
122b0 72 69 6e 67 20 63 6f 64 65 20 74 72 69 63 6b 20  ring code trick 
122c0 64 6f 65 73 20 6e 6f 74 20 77 6f 72 6b 20 66 6f  does not work fo
122d0 72 20 72 65 63 75 72 73 69 76 65 0a 2a 2a 20 74  r recursive.** t
122e0 72 69 67 67 65 72 73 2e 0a 2a 2f 0a 63 61 73 65  riggers..*/.case
122f0 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20 20 20 20   OP_Once: {     
12300 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
12310 2a 2f 0a 20 20 75 33 32 20 69 41 64 64 72 3b 20  */.  u32 iAddr; 
12320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12330 2a 20 41 64 64 72 65 73 73 20 6f 66 20 74 68 69  * Address of thi
12340 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f  s instruction */
12350 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 4f  .  assert( p->aO
12360 70 5b 30 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  p[0].opcode==OP_
12370 49 6e 69 74 20 29 3b 0a 20 20 69 66 28 20 70 2d  Init );.  if( p-
12380 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 69  >pFrame ){.    i
12390 41 64 64 72 20 3d 20 28 69 6e 74 29 28 70 4f 70  Addr = (int)(pOp
123a0 20 2d 20 70 2d 3e 61 4f 70 29 3b 0a 20 20 20 20   - p->aOp);.    
123b0 69 66 28 20 28 70 2d 3e 70 46 72 61 6d 65 2d 3e  if( (p->pFrame->
123c0 61 4f 6e 63 65 5b 69 41 64 64 72 2f 38 5d 20 26  aOnce[iAddr/8] &
123d0 20 28 31 3c 3c 28 69 41 64 64 72 20 26 20 37 29   (1<<(iAddr & 7)
123e0 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 56  ))!=0 ){.      V
123f0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31  dbeBranchTaken(1
12400 2c 20 32 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f  , 2);.      goto
12410 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20   jump_to_p2;.   
12420 20 7d 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d 65   }.    p->pFrame
12430 2d 3e 61 4f 6e 63 65 5b 69 41 64 64 72 2f 38 5d  ->aOnce[iAddr/8]
12440 20 7c 3d 20 31 3c 3c 28 69 41 64 64 72 20 26 20   |= 1<<(iAddr & 
12450 37 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  7);.  }else{.   
12460 20 69 66 28 20 70 2d 3e 61 4f 70 5b 30 5d 2e 70   if( p->aOp[0].p
12470 31 3d 3d 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  1==pOp->p1 ){.  
12480 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
12490 6b 65 6e 28 31 2c 20 32 29 3b 0a 20 20 20 20 20  ken(1, 2);.     
124a0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
124b0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 56 64  ;.    }.  }.  Vd
124c0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c  beBranchTaken(0,
124d0 20 32 29 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d   2);.  pOp->p1 =
124e0 20 70 2d 3e 61 4f 70 5b 30 5d 2e 70 31 3b 0a 20   p->aOp[0].p1;. 
124f0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
12500 63 6f 64 65 3a 20 49 66 20 50 31 20 50 32 20 50  code: If P1 P2 P
12510 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
12520 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
12530 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
12540 50 31 20 69 73 20 74 72 75 65 2e 20 20 54 68 65  P1 is true.  The
12550 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e   value.** is con
12560 73 69 64 65 72 65 64 20 74 72 75 65 20 69 66 20  sidered true if 
12570 69 74 20 69 73 20 6e 75 6d 65 72 69 63 20 61 6e  it is numeric an
12580 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66 20  d non-zero.  If 
12590 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20  the value.** in 
125a0 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  P1 is NULL then 
125b0 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66  take the jump if
125c0 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33 20   and only if P3 
125d0 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a  is non-zero..*/.
125e0 63 61 73 65 20 4f 50 5f 49 66 3a 20 20 7b 20 20  case OP_If:  {  
125f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12600 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69  jump, in1 */.  i
12610 6e 74 20 63 3b 0a 20 20 63 20 3d 20 73 71 6c 69  nt c;.  c = sqli
12620 74 65 33 56 64 62 65 42 6f 6f 6c 65 61 6e 56 61  te3VdbeBooleanVa
12630 6c 75 65 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  lue(&aMem[pOp->p
12640 31 5d 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a 20 20  1], pOp->p3);.  
12650 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
12660 63 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20  c!=0, 2);.  if( 
12670 63 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  c ) goto jump_to
12680 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  _p2;.  break;.}.
12690 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f  ./* Opcode: IfNo
126a0 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
126b0 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20  *.** Jump to P2 
126c0 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
126d0 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 46  register P1 is F
126e0 61 6c 73 65 2e 20 20 54 68 65 20 76 61 6c 75 65  alse.  The value
126f0 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65  .** is considere
12700 64 20 66 61 6c 73 65 20 69 66 20 69 74 20 68 61  d false if it ha
12710 73 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75  s a numeric valu
12720 65 20 6f 66 20 7a 65 72 6f 2e 20 20 49 66 20 74  e of zero.  If t
12730 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50  he value.** in P
12740 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  1 is NULL then t
12750 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20  ake the jump if 
12760 61 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33 20 69  and only if P3 i
12770 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 63  s non-zero..*/.c
12780 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20  ase OP_IfNot: { 
12790 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
127a0 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74  mp, in1 */.  int
127b0 20 63 3b 0a 20 20 63 20 3d 20 21 73 71 6c 69 74   c;.  c = !sqlit
127c0 65 33 56 64 62 65 42 6f 6f 6c 65 61 6e 56 61 6c  e3VdbeBooleanVal
127d0 75 65 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  ue(&aMem[pOp->p1
127e0 5d 2c 20 21 70 4f 70 2d 3e 70 33 29 3b 0a 20 20  ], !pOp->p3);.  
127f0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
12800 63 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20  c!=0, 2);.  if( 
12810 63 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  c ) goto jump_to
12820 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  _p2;.  break;.}.
12830 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75  ./* Opcode: IsNu
12840 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ll P1 P2 * * *.*
12850 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
12860 5b 50 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74 6f 20  [P1]==NULL goto 
12870 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f  P2.**.** Jump to
12880 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
12890 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
128a0 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  is NULL..*/.case
128b0 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20   OP_IsNull: {   
128c0 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
128d0 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a   as TK_ISNULL, j
128e0 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
128f0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
12900 70 31 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  p1];.  VdbeBranc
12910 68 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66  hTaken( (pIn1->f
12920 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
12930 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28  !=0, 2);.  if( (
12940 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
12950 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20  M_Null)!=0 ){.  
12960 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
12970 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
12980 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  }../* Opcode: No
12990 74 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20  tNull P1 P2 * * 
129a0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
129b0 66 20 72 5b 50 31 5d 21 3d 4e 55 4c 4c 20 67 6f  f r[P1]!=NULL go
129c0 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  to P2.**.** Jump
129d0 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
129e0 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
129f0 50 31 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20  P1 is not NULL. 
12a00 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74   .*/.case OP_Not
12a10 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20  Null: {         
12a20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
12a30 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20  _NOTNULL, jump, 
12a40 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
12a50 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
12a60 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
12a70 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  n( (pIn1->flags 
12a80 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 2c 20  & MEM_Null)==0, 
12a90 32 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  2);.  if( (pIn1-
12aa0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
12ab0 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74  l)==0 ){.    got
12ac0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
12ad0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
12ae0 20 4f 70 63 6f 64 65 3a 20 49 66 4e 75 6c 6c 52   Opcode: IfNullR
12af0 6f 77 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ow P1 P2 P3 * *.
12b00 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
12b10 50 31 2e 6e 75 6c 6c 52 6f 77 20 74 68 65 6e 20  P1.nullRow then 
12b20 72 5b 50 33 5d 3d 4e 55 4c 4c 2c 20 67 6f 74 6f  r[P3]=NULL, goto
12b30 20 50 32 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20   P2.**.** Check 
12b40 74 68 65 20 63 75 72 73 6f 72 20 50 31 20 74 6f  the cursor P1 to
12b50 20 73 65 65 20 69 66 20 69 74 20 69 73 20 63 75   see if it is cu
12b60 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
12b70 20 61 74 20 61 20 4e 55 4c 4c 20 72 6f 77 2e 0a   at a NULL row..
12b80 2a 2a 20 49 66 20 69 74 20 69 73 2c 20 74 68 65  ** If it is, the
12b90 6e 20 73 65 74 20 72 65 67 69 73 74 65 72 20 50  n set register P
12ba0 33 20 74 6f 20 4e 55 4c 4c 20 61 6e 64 20 6a 75  3 to NULL and ju
12bb0 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
12bc0 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 31 20 69  o P2..** If P1 i
12bd0 73 20 6e 6f 74 20 6f 6e 20 61 20 4e 55 4c 4c 20  s not on a NULL 
12be0 72 6f 77 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74  row, then fall t
12bf0 68 72 6f 75 67 68 20 77 69 74 68 6f 75 74 20 6d  hrough without m
12c00 61 6b 69 6e 67 20 61 6e 79 0a 2a 2a 20 63 68 61  aking any.** cha
12c10 6e 67 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  nges..*/.case OP
12c20 5f 49 66 4e 75 6c 6c 52 6f 77 3a 20 7b 20 20 20  _IfNullRow: {   
12c30 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
12c40 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
12c50 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
12c60 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
12c70 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73   assert( p->apCs
12c80 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b  r[pOp->p1]!=0 );
12c90 0a 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b  .  if( p->apCsr[
12ca0 70 4f 70 2d 3e 70 31 5d 2d 3e 6e 75 6c 6c 52 6f  pOp->p1]->nullRo
12cb0 77 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  w ){.    sqlite3
12cc0 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 61  VdbeMemSetNull(a
12cd0 4d 65 6d 20 2b 20 70 4f 70 2d 3e 70 33 29 3b 0a  Mem + pOp->p3);.
12ce0 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
12cf0 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _p2;.  }.  break
12d00 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  ;.}..#ifdef SQLI
12d10 54 45 5f 45 4e 41 42 4c 45 5f 4f 46 46 53 45 54  TE_ENABLE_OFFSET
12d20 5f 53 51 4c 5f 46 55 4e 43 0a 2f 2a 20 4f 70 63  _SQL_FUNC./* Opc
12d30 6f 64 65 3a 20 4f 66 66 73 65 74 20 50 31 20 50  ode: Offset P1 P
12d40 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
12d50 70 73 69 73 3a 20 72 5b 50 33 5d 20 3d 20 73 71  psis: r[P3] = sq
12d60 6c 69 74 65 5f 6f 66 66 73 65 74 28 50 31 29 0a  lite_offset(P1).
12d70 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72  **.** Store in r
12d80 65 67 69 73 74 65 72 20 72 5b 50 33 5d 20 74 68  egister r[P3] th
12d90 65 20 62 79 74 65 20 6f 66 66 73 65 74 20 69 6e  e byte offset in
12da0 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
12db0 66 69 6c 65 20 74 68 61 74 20 69 73 20 74 68 65  file that is the
12dc0 0a 2a 2a 20 73 74 61 72 74 20 6f 66 20 74 68 65  .** start of the
12dd0 20 70 61 79 6c 6f 61 64 20 66 6f 72 20 74 68 65   payload for the
12de0 20 72 65 63 6f 72 64 20 61 74 20 77 68 69 63 68   record at which
12df0 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20   that cursor P1 
12e00 69 73 20 63 75 72 72 65 6e 74 6c 79 0a 2a 2a 20  is currently.** 
12e10 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20  pointing..**.** 
12e20 50 32 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e  P2 is the column
12e30 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20   number for the 
12e40 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
12e50 73 71 6c 69 74 65 5f 6f 66 66 73 65 74 28 29 20  sqlite_offset() 
12e60 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 20 54 68 69  function..** Thi
12e70 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 6e 6f  s opcode does no
12e80 74 20 75 73 65 20 50 32 20 69 74 73 65 6c 66 2c  t use P2 itself,
12e90 20 62 75 74 20 74 68 65 20 50 32 20 76 61 6c 75   but the P2 valu
12ea0 65 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65  e is used by the
12eb0 0a 2a 2a 20 63 6f 64 65 20 67 65 6e 65 72 61 74  .** code generat
12ec0 6f 72 2e 20 20 54 68 65 20 50 31 2c 20 50 32 2c  or.  The P1, P2,
12ed0 20 61 6e 64 20 50 33 20 6f 70 65 72 61 6e 64 73   and P3 operands
12ee0 20 74 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20   to this opcode 
12ef0 61 72 65 20 74 68 65 0a 2a 2a 20 61 73 20 61 73  are the.** as as
12f00 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 2e 0a   for OP_Column..
12f10 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
12f20 65 20 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c 61  e is only availa
12f30 62 6c 65 20 69 66 20 53 51 4c 69 74 65 20 69 73  ble if SQLite is
12f40 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74   compiled with t
12f50 68 65 0a 2a 2a 20 2d 44 53 51 4c 49 54 45 5f 45  he.** -DSQLITE_E
12f60 4e 41 42 4c 45 5f 4f 46 46 53 45 54 5f 53 51 4c  NABLE_OFFSET_SQL
12f70 5f 46 55 4e 43 20 6f 70 74 69 6f 6e 2e 0a 2a 2f  _FUNC option..*/
12f80 0a 63 61 73 65 20 4f 50 5f 4f 66 66 73 65 74 3a  .case OP_Offset:
12f90 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f   {          /* o
12fa0 75 74 33 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ut3 */.  VdbeCur
12fb0 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54  sor *pC;    /* T
12fc0 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 2a  he VDBE cursor *
12fd0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
12fe0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
12ff0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
13000 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
13010 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74  pOp->p1];.  pOut
13020 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
13030 3e 70 33 5d 3b 0a 20 20 69 66 28 20 4e 45 56 45  >p3];.  if( NEVE
13040 52 28 70 43 3d 3d 30 29 20 7c 7c 20 70 43 2d 3e  R(pC==0) || pC->
13050 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59 50  eCurType!=CURTYP
13060 45 5f 42 54 52 45 45 20 29 7b 0a 20 20 20 20 73  E_BTREE ){.    s
13070 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
13080 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 65  Null(pOut);.  }e
13090 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
130a0 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
130b0 70 4f 75 74 2c 20 73 71 6c 69 74 65 33 42 74 72  pOut, sqlite3Btr
130c0 65 65 4f 66 66 73 65 74 28 70 43 2d 3e 75 63 2e  eeOffset(pC->uc.
130d0 70 43 75 72 73 6f 72 29 29 3b 0a 20 20 7d 0a 20  pCursor));.  }. 
130e0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
130f0 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c   /* SQLITE_ENABL
13100 45 5f 4f 46 46 53 45 54 5f 53 51 4c 5f 46 55 4e  E_OFFSET_SQL_FUN
13110 43 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  C */../* Opcode:
13120 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33   Column P1 P2 P3
13130 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
13140 69 73 3a 20 72 5b 50 33 5d 3d 50 58 0a 2a 2a 0a  is: r[P3]=PX.**.
13150 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
13160 20 64 61 74 61 20 74 68 61 74 20 63 75 72 73 6f   data that curso
13170 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 20 61  r P1 points to a
13180 73 20 61 20 73 74 72 75 63 74 75 72 65 20 62 75  s a structure bu
13190 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65  ilt using.** the
131a0 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74   MakeRecord inst
131b0 72 75 63 74 69 6f 6e 2e 20 20 28 53 65 65 20 74  ruction.  (See t
131c0 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70  he MakeRecord op
131d0 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
131e0 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69  nal.** informati
131f0 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 66 6f 72  on about the for
13200 6d 61 74 20 6f 66 20 74 68 65 20 64 61 74 61 2e  mat of the data.
13210 29 20 20 45 78 74 72 61 63 74 20 74 68 65 20 50  )  Extract the P
13220 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66  2-th column.** f
13230 72 6f 6d 20 74 68 69 73 20 72 65 63 6f 72 64 2e  rom this record.
13240 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6c    If there are l
13250 65 73 73 20 74 68 61 74 20 28 50 32 2b 31 29 20  ess that (P2+1) 
13260 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20 74 68  .** values in th
13270 65 20 72 65 63 6f 72 64 2c 20 65 78 74 72 61 63  e record, extrac
13280 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20  t a NULL..**.** 
13290 54 68 65 20 76 61 6c 75 65 20 65 78 74 72 61 63  The value extrac
132a0 74 65 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ted is stored in
132b0 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
132c0 0a 2a 2a 20 49 66 20 74 68 65 20 72 65 63 6f 72  .** If the recor
132d0 64 20 63 6f 6e 74 61 69 6e 73 20 66 65 77 65 72  d contains fewer
132e0 20 74 68 61 6e 20 50 32 20 66 69 65 6c 64 73 2c   than P2 fields,
132f0 20 74 68 65 6e 20 65 78 74 72 61 63 74 20 61 20   then extract a 
13300 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69 66  NULL.  Or,.** if
13310 20 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74   the P4 argument
13320 20 69 73 20 61 20 50 34 5f 4d 45 4d 20 75 73 65   is a P4_MEM use
13330 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
13340 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20 61 73  e P4 argument as
13350 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 2e 0a  .** the result..
13360 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
13370 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45 20 62  LAG_CLEARCACHE b
13380 69 74 20 69 73 20 73 65 74 20 6f 6e 20 50 35 20  it is set on P5 
13390 61 6e 64 20 50 31 20 69 73 20 61 20 70 73 65 75  and P1 is a pseu
133a0 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 2c  do-table cursor,
133b0 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 61 63  .** then the cac
133c0 68 65 20 6f 66 20 74 68 65 20 63 75 72 73 6f 72  he of the cursor
133d0 20 69 73 20 72 65 73 65 74 20 70 72 69 6f 72 20   is reset prior 
133e0 74 6f 20 65 78 74 72 61 63 74 69 6e 67 20 74 68  to extracting th
133f0 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54 68 65  e column..** The
13400 20 66 69 72 73 74 20 4f 50 5f 43 6f 6c 75 6d 6e   first OP_Column
13410 20 61 67 61 69 6e 73 74 20 61 20 70 73 65 75 64   against a pseud
13420 6f 2d 74 61 62 6c 65 20 61 66 74 65 72 20 74 68  o-table after th
13430 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63  e value of the c
13440 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65 67 69 73 74  ontent.** regist
13450 65 72 20 68 61 73 20 63 68 61 6e 67 65 64 20 73  er has changed s
13460 68 6f 75 6c 64 20 68 61 76 65 20 74 68 69 73 20  hould have this 
13470 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 49  bit set..**.** I
13480 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 45 4e  f the OPFLAG_LEN
13490 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41  GTHARG and OPFLA
134a0 47 5f 54 59 50 45 4f 46 41 52 47 20 62 69 74 73  G_TYPEOFARG bits
134b0 20 61 72 65 20 73 65 74 20 6f 6e 20 50 35 20 74   are set on P5 t
134c0 68 65 6e 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c  hen.** the resul
134d0 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 20  t is guaranteed 
134e0 74 6f 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20  to only be used 
134f0 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  as the argument 
13500 6f 66 20 61 20 6c 65 6e 67 74 68 28 29 0a 2a 2a  of a length().**
13510 20 6f 72 20 74 79 70 65 6f 66 28 29 20 66 75 6e   or typeof() fun
13520 63 74 69 6f 6e 2c 20 72 65 73 70 65 63 74 69 76  ction, respectiv
13530 65 6c 79 2e 20 20 54 68 65 20 6c 6f 61 64 69 6e  ely.  The loadin
13540 67 20 6f 66 20 6c 61 72 67 65 20 62 6c 6f 62 73  g of large blobs
13550 20 63 61 6e 20 62 65 0a 2a 2a 20 73 6b 69 70 70   can be.** skipp
13560 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20  ed for length() 
13570 61 6e 64 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20  and all content 
13580 6c 6f 61 64 69 6e 67 20 63 61 6e 20 62 65 20 73  loading can be s
13590 6b 69 70 70 65 64 20 66 6f 72 20 74 79 70 65 6f  kipped for typeo
135a0 66 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  f()..*/.case OP_
135b0 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69 6e 74 20  Column: {.  int 
135c0 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  p2;            /
135d0 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  * column number 
135e0 74 6f 20 72 65 74 72 69 65 76 65 20 2a 2f 0a 20  to retrieve */. 
135f0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
13600 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20      /* The VDBE 
13610 63 75 72 73 6f 72 20 2a 2f 0a 20 20 42 74 43 75  cursor */.  BtCu
13620 72 73 6f 72 20 2a 70 43 72 73 72 3b 20 20 20 2f  rsor *pCrsr;   /
13630 2a 20 54 68 65 20 42 54 72 65 65 20 63 75 72 73  * The BTree curs
13640 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66  or */.  u32 *aOf
13650 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f  fset;      /* aO
13660 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66 73  ffset[i] is offs
13670 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20 64  et to start of d
13680 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c  ata for i-th col
13690 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e  umn */.  int len
136a0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
136b0 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65  he length of the
136c0 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74 61   serialized data
136d0 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20   for the column 
136e0 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20  */.  int i;     
136f0 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
13700 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4d 65 6d  counter */.  Mem
13710 20 2a 70 44 65 73 74 3b 20 20 20 20 20 20 20 20   *pDest;        
13720 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69 74  /* Where to writ
13730 65 20 74 68 65 20 65 78 74 72 61 63 74 65 64 20  e the extracted 
13740 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73  value */.  Mem s
13750 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Mem;          /*
13760 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65   For storing the
13770 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65   record being de
13780 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74  coded */.  const
13790 20 75 38 20 2a 7a 44 61 74 61 3b 20 20 20 2f 2a   u8 *zData;   /*
137a0 20 50 61 72 74 20 6f 66 20 74 68 65 20 72 65 63   Part of the rec
137b0 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65  ord being decode
137c0 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20  d */.  const u8 
137d0 2a 7a 48 64 72 3b 20 20 20 20 2f 2a 20 4e 65 78  *zHdr;    /* Nex
137e0 74 20 75 6e 70 61 72 73 65 64 20 62 79 74 65 20  t unparsed byte 
137f0 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f  of the header */
13800 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 45 6e  .  const u8 *zEn
13810 64 48 64 72 3b 20 2f 2a 20 50 6f 69 6e 74 65 72  dHdr; /* Pointer
13820 20 74 6f 20 66 69 72 73 74 20 62 79 74 65 20 61   to first byte a
13830 66 74 65 72 20 74 68 65 20 68 65 61 64 65 72 20  fter the header 
13840 2a 2f 0a 20 20 75 36 34 20 6f 66 66 73 65 74 36  */.  u64 offset6
13850 34 3b 20 20 20 20 20 20 2f 2a 20 36 34 2d 62 69  4;      /* 64-bi
13860 74 20 6f 66 66 73 65 74 20 2a 2f 0a 20 20 75 33  t offset */.  u3
13870 32 20 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  2 t;            
13880 20 2f 2a 20 41 20 74 79 70 65 20 63 6f 64 65 20   /* A type code 
13890 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 20  from the record 
138a0 68 65 61 64 65 72 20 2a 2f 0a 20 20 4d 65 6d 20  header */.  Mem 
138b0 2a 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f  *pReg;         /
138c0 2a 20 50 73 65 75 64 6f 54 61 62 6c 65 20 69 6e  * PseudoTable in
138d0 70 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a  put register */.
138e0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
138f0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 32 20  [pOp->p1];.  p2 
13900 3d 20 70 4f 70 2d 3e 70 32 3b 0a 0a 20 20 2f 2a  = pOp->p2;..  /*
13910 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 63   If the cursor c
13920 61 63 68 65 20 69 73 20 73 74 61 6c 65 20 28 6d  ache is stale (m
13930 65 61 6e 69 6e 67 20 69 74 20 69 73 20 6e 6f 74  eaning it is not
13940 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
13950 20 61 74 0a 20 20 2a 2a 20 74 68 65 20 63 6f 72   at.  ** the cor
13960 72 65 63 74 20 72 6f 77 29 20 74 68 65 6e 20 62  rect row) then b
13970 72 69 6e 67 20 69 74 20 75 70 2d 74 6f 2d 64 61  ring it up-to-da
13980 74 65 20 62 79 20 64 6f 69 6e 67 20 74 68 65 20  te by doing the 
13990 6e 65 63 65 73 73 61 72 79 20 0a 20 20 2a 2a 20  necessary .  ** 
139a0 42 2d 54 72 65 65 20 73 65 65 6b 2e 20 2a 2f 0a  B-Tree seek. */.
139b0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
139c0 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 26  beCursorMoveto(&
139d0 70 43 2c 20 26 70 32 29 3b 0a 20 20 69 66 28 20  pC, &p2);.  if( 
139e0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
139f0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20  due_to_error;.. 
13a00 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
13a10 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28  >0 && pOp->p3<=(
13a20 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
13a30 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44 65  Cursor) );.  pDe
13a40 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  st = &aMem[pOp->
13a50 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p3];.  memAboutT
13a60 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74  oChange(p, pDest
13a70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
13a80 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
13a90 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
13aa0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
13ab0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 32   );.  assert( p2
13ac0 3c 70 43 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20  <pC->nField );. 
13ad0 20 61 4f 66 66 73 65 74 20 3d 20 70 43 2d 3e 61   aOffset = pC->a
13ae0 4f 66 66 73 65 74 3b 0a 20 20 61 73 73 65 72 74  Offset;.  assert
13af0 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d  ( pC->eCurType!=
13b00 43 55 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a  CURTYPE_VTAB );.
13b10 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
13b20 75 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f  urType!=CURTYPE_
13b30 50 53 45 55 44 4f 20 7c 7c 20 70 43 2d 3e 6e 75  PSEUDO || pC->nu
13b40 6c 6c 52 6f 77 20 29 3b 0a 20 20 61 73 73 65 72  llRow );.  asser
13b50 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21  t( pC->eCurType!
13b60 3d 43 55 52 54 59 50 45 5f 53 4f 52 54 45 52 20  =CURTYPE_SORTER 
13b70 29 3b 0a 0a 20 20 69 66 28 20 70 43 2d 3e 63 61  );..  if( pC->ca
13b80 63 68 65 53 74 61 74 75 73 21 3d 70 2d 3e 63 61  cheStatus!=p->ca
13b90 63 68 65 43 74 72 20 29 7b 20 20 20 20 20 20 20  cheCtr ){       
13ba0 20 20 20 20 20 20 20 20 20 2f 2a 4f 50 54 49 4d           /*OPTIM
13bb0 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45  IZATION-IF-FALSE
13bc0 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e  */.    if( pC->n
13bd0 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20  ullRow ){.      
13be0 69 66 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  if( pC->eCurType
13bf0 3d 3d 43 55 52 54 59 50 45 5f 50 53 45 55 44 4f  ==CURTYPE_PSEUDO
13c00 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 46   ){.        /* F
13c10 6f 72 20 74 68 65 20 73 70 65 63 69 61 6c 20 63  or the special c
13c20 61 73 65 20 6f 66 20 61 73 20 70 73 65 75 64 6f  ase of as pseudo
13c30 2d 63 75 72 73 6f 72 2c 20 74 68 65 20 73 65 65  -cursor, the see
13c40 6b 52 65 73 75 6c 74 20 66 69 65 6c 64 0a 20 20  kResult field.  
13c50 20 20 20 20 20 20 2a 2a 20 69 64 65 6e 74 69 66        ** identif
13c60 69 65 73 20 74 68 65 20 72 65 67 69 73 74 65 72  ies the register
13c70 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20   that holds the 
13c80 72 65 63 6f 72 64 20 2a 2f 0a 20 20 20 20 20 20  record */.      
13c90 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 73 65    assert( pC->se
13ca0 65 6b 52 65 73 75 6c 74 3e 30 20 29 3b 0a 20 20  ekResult>0 );.  
13cb0 20 20 20 20 20 20 70 52 65 67 20 3d 20 26 61 4d        pReg = &aM
13cc0 65 6d 5b 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c  em[pC->seekResul
13cd0 74 5d 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  t];.        asse
13ce0 72 74 28 20 70 52 65 67 2d 3e 66 6c 61 67 73 20  rt( pReg->flags 
13cf0 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20  & MEM_Blob );.  
13d00 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
13d10 6d 49 73 56 61 6c 69 64 28 70 52 65 67 29 20 29  mIsValid(pReg) )
13d20 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70 61  ;.        pC->pa
13d30 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e  yloadSize = pC->
13d40 73 7a 52 6f 77 20 3d 20 70 52 65 67 2d 3e 6e 3b  szRow = pReg->n;
13d50 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f  .        pC->aRo
13d60 77 20 3d 20 28 75 38 2a 29 70 52 65 67 2d 3e 7a  w = (u8*)pReg->z
13d70 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
13d80 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
13d90 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65  beMemSetNull(pDe
13da0 73 74 29 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  st);.        got
13db0 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b  o op_column_out;
13dc0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
13dd0 73 65 7b 0a 20 20 20 20 20 20 70 43 72 73 72 20  se{.      pCrsr 
13de0 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  = pC->uc.pCursor
13df0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
13e00 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
13e10 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
13e20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 72       assert( pCr
13e30 73 72 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  sr );.      asse
13e40 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
13e50 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43  CursorIsValid(pC
13e60 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20 70 43  rsr) );.      pC
13e70 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20  ->payloadSize = 
13e80 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 79 6c  sqlite3BtreePayl
13e90 6f 61 64 53 69 7a 65 28 70 43 72 73 72 29 3b 0a  oadSize(pCrsr);.
13ea0 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d        pC->aRow =
13eb0 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 79   sqlite3BtreePay
13ec0 6c 6f 61 64 46 65 74 63 68 28 70 43 72 73 72 2c  loadFetch(pCrsr,
13ed0 20 26 70 43 2d 3e 73 7a 52 6f 77 29 3b 0a 20 20   &pC->szRow);.  
13ee0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
13ef0 73 7a 52 6f 77 3c 3d 70 43 2d 3e 70 61 79 6c 6f  szRow<=pC->paylo
13f00 61 64 53 69 7a 65 20 29 3b 0a 20 20 20 20 20 20  adSize );.      
13f10 61 73 73 65 72 74 28 20 70 43 2d 3e 73 7a 52 6f  assert( pC->szRo
13f20 77 3c 3d 36 35 35 33 36 20 29 3b 20 20 2f 2a 20  w<=65536 );  /* 
13f30 4d 61 78 69 6d 75 6d 20 70 61 67 65 20 73 69 7a  Maximum page siz
13f40 65 20 69 73 20 36 34 4b 69 42 20 2a 2f 0a 20 20  e is 64KiB */.  
13f50 20 20 20 20 69 66 28 20 70 43 2d 3e 70 61 79 6c      if( pC->payl
13f60 6f 61 64 53 69 7a 65 20 3e 20 28 75 33 32 29 64  oadSize > (u32)d
13f70 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
13f80 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
13f90 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 74  {.        goto t
13fa0 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 20 20 7d 0a  oo_big;.      }.
13fb0 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 63 61      }.    pC->ca
13fc0 63 68 65 53 74 61 74 75 73 20 3d 20 70 2d 3e 63  cheStatus = p->c
13fd0 61 63 68 65 43 74 72 3b 0a 20 20 20 20 70 43 2d  acheCtr;.    pC-
13fe0 3e 69 48 64 72 4f 66 66 73 65 74 20 3d 20 67 65  >iHdrOffset = ge
13ff0 74 56 61 72 69 6e 74 33 32 28 70 43 2d 3e 61 52  tVarint32(pC->aR
14000 6f 77 2c 20 61 4f 66 66 73 65 74 5b 30 5d 29 3b  ow, aOffset[0]);
14010 0a 20 20 20 20 70 43 2d 3e 6e 48 64 72 50 61 72  .    pC->nHdrPar
14020 73 65 64 20 3d 20 30 3b 0a 0a 0a 20 20 20 20 69  sed = 0;...    i
14030 66 28 20 70 43 2d 3e 73 7a 52 6f 77 3c 61 4f 66  f( pC->szRow<aOf
14040 66 73 65 74 5b 30 5d 20 29 7b 20 20 20 20 20 20  fset[0] ){      
14050 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49  /*OPTIMIZATION-I
14060 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 20 20  F-FALSE*/.      
14070 2f 2a 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73  /* pC->aRow does
14080 20 6e 6f 74 20 68 61 76 65 20 74 6f 20 68 6f 6c   not have to hol
14090 64 20 74 68 65 20 65 6e 74 69 72 65 20 72 6f 77  d the entire row
140a0 2c 20 62 75 74 20 69 74 20 64 6f 65 73 20 61 74  , but it does at
140b0 20 6c 65 61 73 74 0a 20 20 20 20 20 20 2a 2a 20   least.      ** 
140c0 6e 65 65 64 20 74 6f 20 63 6f 76 65 72 20 74 68  need to cover th
140d0 65 20 68 65 61 64 65 72 20 6f 66 20 74 68 65 20  e header of the 
140e0 72 65 63 6f 72 64 2e 20 20 49 66 20 70 43 2d 3e  record.  If pC->
140f0 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20 63 6f  aRow does not co
14100 6e 74 61 69 6e 0a 20 20 20 20 20 20 2a 2a 20 74  ntain.      ** t
14110 68 65 20 63 6f 6d 70 6c 65 74 65 20 68 65 61 64  he complete head
14120 65 72 2c 20 74 68 65 6e 20 73 65 74 20 69 74 20  er, then set it 
14130 74 6f 20 7a 65 72 6f 2c 20 66 6f 72 63 69 6e 67  to zero, forcing
14140 20 74 68 65 20 68 65 61 64 65 72 20 74 6f 20 62   the header to b
14150 65 0a 20 20 20 20 20 20 2a 2a 20 64 79 6e 61 6d  e.      ** dynam
14160 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
14170 2e 20 2a 2f 0a 20 20 20 20 20 20 70 43 2d 3e 61  . */.      pC->a
14180 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 70  Row = 0;.      p
14190 43 2d 3e 73 7a 52 6f 77 20 3d 20 30 3b 0a 0a 20  C->szRow = 0;.. 
141a0 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72       /* Make sur
141b0 65 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61  e a corrupt data
141c0 62 61 73 65 20 68 61 73 20 6e 6f 74 20 67 69 76  base has not giv
141d0 65 6e 20 75 73 20 61 6e 20 6f 76 65 72 73 69 7a  en us an oversiz
141e0 65 20 68 65 61 64 65 72 2e 0a 20 20 20 20 20 20  e header..      
141f0 2a 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77 20 74  ** Do this now t
14200 6f 20 61 76 6f 69 64 20 61 6e 20 6f 76 65 72 73  o avoid an overs
14210 69 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ize memory alloc
14220 61 74 69 6f 6e 2e 0a 20 20 20 20 20 20 2a 2a 0a  ation..      **.
14230 20 20 20 20 20 20 2a 2a 20 54 79 70 65 20 65 6e        ** Type en
14240 74 72 69 65 73 20 63 61 6e 20 62 65 20 62 65 74  tries can be bet
14250 77 65 65 6e 20 31 20 61 6e 64 20 35 20 62 79 74  ween 1 and 5 byt
14260 65 73 20 65 61 63 68 2e 20 20 42 75 74 20 34 20  es each.  But 4 
14270 61 6e 64 20 35 20 62 79 74 65 0a 20 20 20 20 20  and 5 byte.     
14280 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20 73 6f   ** types use so
14290 20 6d 75 63 68 20 64 61 74 61 20 73 70 61 63 65   much data space
142a0 20 74 68 61 74 20 74 68 65 72 65 20 63 61 6e 20   that there can 
142b0 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61 6e 64  only be 4096 and
142c0 20 33 32 20 6f 66 0a 20 20 20 20 20 20 2a 2a 20   32 of.      ** 
142d0 74 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76 65  them, respective
142e0 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78 69  ly.  So the maxi
142f0 6d 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67 74  mum header lengt
14300 68 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 61  h results from a
14310 0a 20 20 20 20 20 20 2a 2a 20 33 2d 62 79 74 65  .      ** 3-byte
14320 20 74 79 70 65 20 66 6f 72 20 65 61 63 68 20 6f   type for each o
14330 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66  f the maximum of
14340 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70   32768 columns p
14350 6c 75 73 20 74 68 72 65 65 0a 20 20 20 20 20 20  lus three.      
14360 2a 2a 20 65 78 74 72 61 20 62 79 74 65 73 20 66  ** extra bytes f
14370 6f 72 20 74 68 65 20 68 65 61 64 65 72 20 6c 65  or the header le
14380 6e 67 74 68 20 69 74 73 65 6c 66 2e 20 20 33 32  ngth itself.  32
14390 37 36 38 2a 33 20 2b 20 33 20 3d 20 39 38 33 30  768*3 + 3 = 9830
143a0 37 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  7..      */.    
143b0 20 20 69 66 28 20 61 4f 66 66 73 65 74 5b 30 5d    if( aOffset[0]
143c0 20 3e 20 39 38 33 30 37 20 7c 7c 20 61 4f 66 66   > 98307 || aOff
143d0 73 65 74 5b 30 5d 20 3e 20 70 43 2d 3e 70 61 79  set[0] > pC->pay
143e0 6c 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20 20 20  loadSize ){.    
143f0 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
14400 6d 6e 5f 63 6f 72 72 75 70 74 3b 0a 20 20 20 20  mn_corrupt;.    
14410 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
14420 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20       /* This is 
14430 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e  an optimization.
14440 20 20 42 79 20 73 6b 69 70 70 69 6e 67 20 6f 76    By skipping ov
14450 65 72 20 74 68 65 20 66 69 72 73 74 20 66 65 77  er the first few
14460 20 74 65 73 74 73 0a 20 20 20 20 20 20 2a 2a 20   tests.      ** 
14470 28 65 78 3a 20 70 43 2d 3e 6e 48 64 72 50 61 72  (ex: pC->nHdrPar
14480 73 65 64 3c 3d 70 32 29 20 69 6e 20 74 68 65 20  sed<=p2) in the 
14490 6e 65 78 74 20 73 65 63 74 69 6f 6e 2c 20 77 65  next section, we
144a0 20 61 63 68 69 65 76 65 20 61 0a 20 20 20 20 20   achieve a.     
144b0 20 2a 2a 20 6d 65 61 73 75 72 61 62 6c 65 20 70   ** measurable p
144c0 65 72 66 6f 72 6d 61 6e 63 65 20 67 61 69 6e 2e  erformance gain.
144d0 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20  .      **.      
144e0 2a 2a 20 54 68 69 73 20 62 72 61 6e 63 68 20 69  ** This branch i
144f0 73 20 74 61 6b 65 6e 20 65 76 65 6e 20 69 66 20  s taken even if 
14500 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 2e 20 20  aOffset[0]==0.  
14510 53 75 63 68 20 61 20 72 65 63 6f 72 64 20 69 73  Such a record is
14520 20 6e 65 76 65 72 0a 20 20 20 20 20 20 2a 2a 20   never.      ** 
14530 67 65 6e 65 72 61 74 65 64 20 62 79 20 53 51 4c  generated by SQL
14540 69 74 65 2c 20 61 6e 64 20 63 6f 75 6c 64 20 62  ite, and could b
14550 65 20 63 6f 6e 73 69 64 65 72 65 64 20 63 6f 72  e considered cor
14560 72 75 70 74 69 6f 6e 2c 20 62 75 74 20 77 65 0a  ruption, but we.
14570 20 20 20 20 20 20 2a 2a 20 61 63 63 65 70 74 20        ** accept 
14580 69 74 20 66 6f 72 20 68 69 73 74 6f 72 69 63 61  it for historica
14590 6c 20 72 65 61 73 6f 6e 73 2e 20 20 57 68 65 6e  l reasons.  When
145a0 20 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 2c 20   aOffset[0]==0, 
145b0 74 68 65 20 63 6f 64 65 20 74 68 69 73 0a 20 20  the code this.  
145c0 20 20 20 20 2a 2a 20 62 72 61 6e 63 68 20 6a 75      ** branch ju
145d0 6d 70 73 20 74 6f 20 72 65 61 64 73 20 70 61 73  mps to reads pas
145e0 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
145f0 20 72 65 63 6f 72 64 2c 20 62 75 74 20 6e 65 76   record, but nev
14600 65 72 20 6d 6f 72 65 0a 20 20 20 20 20 20 2a 2a  er more.      **
14610 20 74 68 61 6e 20 61 20 66 65 77 20 62 79 74 65   than a few byte
14620 73 2e 20 20 45 76 65 6e 20 69 66 20 74 68 65 20  s.  Even if the 
14630 72 65 63 6f 72 64 20 6f 63 63 75 72 73 20 61 74  record occurs at
14640 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
14650 70 61 67 65 0a 20 20 20 20 20 20 2a 2a 20 63 6f  page.      ** co
14660 6e 74 65 6e 74 20 61 72 65 61 2c 20 74 68 65 20  ntent area, the 
14670 22 70 61 67 65 20 68 65 61 64 65 72 22 20 63 6f  "page header" co
14680 6d 65 73 20 61 66 74 65 72 20 74 68 65 20 70 61  mes after the pa
14690 67 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 73  ge content and s
146a0 6f 0a 20 20 20 20 20 20 2a 2a 20 74 68 69 73 20  o.      ** this 
146b0 6f 76 65 72 72 65 61 64 20 69 73 20 68 61 72 6d  overread is harm
146c0 6c 65 73 73 2e 20 20 53 69 6d 69 6c 61 72 20 6f  less.  Similar o
146d0 76 65 72 72 65 61 64 73 20 63 61 6e 20 6f 63 63  verreads can occ
146e0 75 72 20 66 6f 72 20 61 20 63 6f 72 72 75 70 74  ur for a corrupt
146f0 0a 20 20 20 20 20 20 2a 2a 20 64 61 74 61 62 61  .      ** databa
14700 73 65 20 66 69 6c 65 2e 0a 20 20 20 20 20 20 2a  se file..      *
14710 2f 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20  /.      zData = 
14720 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 20 20  pC->aRow;.      
14730 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 48 64 72  assert( pC->nHdr
14740 50 61 72 73 65 64 3c 3d 70 32 20 29 3b 20 20 20  Parsed<=p2 );   
14750 20 20 20 20 20 20 2f 2a 20 43 6f 6e 64 69 74 69        /* Conditi
14760 6f 6e 61 6c 20 73 6b 69 70 70 65 64 20 2a 2f 0a  onal skipped */.
14770 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
14780 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 20 29 3b  aOffset[0]==0 );
14790 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63  .      goto op_c
147a0 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65  olumn_read_heade
147b0 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20  r;.    }.  }..  
147c0 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 74 20  /* Make sure at 
147d0 6c 65 61 73 74 20 74 68 65 20 66 69 72 73 74 20  least the first 
147e0 70 32 2b 31 20 65 6e 74 72 69 65 73 20 6f 66 20  p2+1 entries of 
147f0 74 68 65 20 68 65 61 64 65 72 20 68 61 76 65 20  the header have 
14800 62 65 65 6e 0a 20 20 2a 2a 20 70 61 72 73 65 64  been.  ** parsed
14810 20 61 6e 64 20 76 61 6c 69 64 20 69 6e 66 6f 72   and valid infor
14820 6d 61 74 69 6f 6e 20 69 73 20 69 6e 20 61 4f 66  mation is in aOf
14830 66 73 65 74 5b 5d 20 61 6e 64 20 70 43 2d 3e 61  fset[] and pC->a
14840 54 79 70 65 5b 5d 2e 0a 20 20 2a 2f 0a 20 20 69  Type[]..  */.  i
14850 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65  f( pC->nHdrParse
14860 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 2f 2a 20  d<=p2 ){.    /* 
14870 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65  If there is more
14880 20 68 65 61 64 65 72 20 61 76 61 69 6c 61 62 6c   header availabl
14890 65 20 66 6f 72 20 70 61 72 73 69 6e 67 20 69 6e  e for parsing in
148a0 20 74 68 65 20 72 65 63 6f 72 64 2c 20 74 72 79   the record, try
148b0 0a 20 20 20 20 2a 2a 20 74 6f 20 65 78 74 72 61  .    ** to extra
148c0 63 74 20 61 64 64 69 74 69 6f 6e 61 6c 20 66 69  ct additional fi
148d0 65 6c 64 73 20 75 70 20 74 68 72 6f 75 67 68 20  elds up through 
148e0 74 68 65 20 70 32 2b 31 2d 74 68 20 66 69 65 6c  the p2+1-th fiel
148f0 64 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  d .    */.    if
14900 28 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74  ( pC->iHdrOffset
14910 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b 0a 20  <aOffset[0] ){. 
14920 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72       /* Make sur
14930 65 20 7a 44 61 74 61 20 70 6f 69 6e 74 73 20 74  e zData points t
14940 6f 20 65 6e 6f 75 67 68 20 6f 66 20 74 68 65 20  o enough of the 
14950 72 65 63 6f 72 64 20 74 6f 20 63 6f 76 65 72 20  record to cover 
14960 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20  the header. */. 
14970 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f       if( pC->aRo
14980 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  w==0 ){.        
14990 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c  memset(&sMem, 0,
149a0 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a   sizeof(sMem));.
149b0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
149c0 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42  ite3VdbeMemFromB
149d0 74 72 65 65 28 70 43 2d 3e 75 63 2e 70 43 75 72  tree(pC->uc.pCur
149e0 73 6f 72 2c 20 30 2c 20 61 4f 66 66 73 65 74 5b  sor, 0, aOffset[
149f0 30 5d 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20  0], &sMem);.    
14a00 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
14a10 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
14a20 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
14a30 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d  .        zData =
14a40 20 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20   (u8*)sMem.z;.  
14a50 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
14a60 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61     zData = pC->a
14a70 52 6f 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a  Row;.      }.  .
14a80 20 20 20 20 20 20 2f 2a 20 46 69 6c 6c 20 69 6e        /* Fill in
14a90 20 70 43 2d 3e 61 54 79 70 65 5b 69 5d 20 61 6e   pC->aType[i] an
14aa0 64 20 61 4f 66 66 73 65 74 5b 69 5d 20 76 61 6c  d aOffset[i] val
14ab0 75 65 73 20 74 68 72 6f 75 67 68 20 74 68 65 20  ues through the 
14ac0 70 32 2d 74 68 20 66 69 65 6c 64 2e 20 2a 2f 0a  p2-th field. */.
14ad0 20 20 20 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65      op_column_re
14ae0 61 64 5f 68 65 61 64 65 72 3a 0a 20 20 20 20 20  ad_header:.     
14af0 20 69 20 3d 20 70 43 2d 3e 6e 48 64 72 50 61 72   i = pC->nHdrPar
14b00 73 65 64 3b 0a 20 20 20 20 20 20 6f 66 66 73 65  sed;.      offse
14b10 74 36 34 20 3d 20 61 4f 66 66 73 65 74 5b 69 5d  t64 = aOffset[i]
14b20 3b 0a 20 20 20 20 20 20 7a 48 64 72 20 3d 20 7a  ;.      zHdr = z
14b30 44 61 74 61 20 2b 20 70 43 2d 3e 69 48 64 72 4f  Data + pC->iHdrO
14b40 66 66 73 65 74 3b 0a 20 20 20 20 20 20 7a 45 6e  ffset;.      zEn
14b50 64 48 64 72 20 3d 20 7a 44 61 74 61 20 2b 20 61  dHdr = zData + a
14b60 4f 66 66 73 65 74 5b 30 5d 3b 0a 20 20 20 20 20  Offset[0];.     
14b70 20 74 65 73 74 63 61 73 65 28 20 7a 48 64 72 3e   testcase( zHdr>
14b80 3d 7a 45 6e 64 48 64 72 20 29 3b 0a 20 20 20 20  =zEndHdr );.    
14b90 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 69 66    do{.        if
14ba0 28 20 28 74 20 3d 20 7a 48 64 72 5b 30 5d 29 3c  ( (t = zHdr[0])<
14bb0 30 78 38 30 20 29 7b 0a 20 20 20 20 20 20 20 20  0x80 ){.        
14bc0 20 20 7a 48 64 72 2b 2b 3b 0a 20 20 20 20 20 20    zHdr++;.      
14bd0 20 20 20 20 6f 66 66 73 65 74 36 34 20 2b 3d 20      offset64 += 
14be0 73 71 6c 69 74 65 33 56 64 62 65 4f 6e 65 42 79  sqlite3VdbeOneBy
14bf0 74 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28  teSerialTypeLen(
14c00 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  t);.        }els
14c10 65 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64  e{.          zHd
14c20 72 20 2b 3d 20 73 71 6c 69 74 65 33 47 65 74 56  r += sqlite3GetV
14c30 61 72 69 6e 74 33 32 28 7a 48 64 72 2c 20 26 74  arint32(zHdr, &t
14c40 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 66 66  );.          off
14c50 73 65 74 36 34 20 2b 3d 20 73 71 6c 69 74 65 33  set64 += sqlite3
14c60 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65  VdbeSerialTypeLe
14c70 6e 28 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  n(t);.        }.
14c80 20 20 20 20 20 20 20 20 70 43 2d 3e 61 54 79 70          pC->aTyp
14c90 65 5b 69 2b 2b 5d 20 3d 20 74 3b 0a 20 20 20 20  e[i++] = t;.    
14ca0 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d      aOffset[i] =
14cb0 20 28 75 33 32 29 28 6f 66 66 73 65 74 36 34 20   (u32)(offset64 
14cc0 26 20 30 78 66 66 66 66 66 66 66 66 29 3b 0a 20  & 0xffffffff);. 
14cd0 20 20 20 20 20 7d 77 68 69 6c 65 28 20 69 3c 3d       }while( i<=
14ce0 70 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64 48  p2 && zHdr<zEndH
14cf0 64 72 20 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20  dr );..      /* 
14d00 54 68 65 20 72 65 63 6f 72 64 20 69 73 20 63 6f  The record is co
14d10 72 72 75 70 74 20 69 66 20 61 6e 79 20 6f 66 20  rrupt if any of 
14d20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72  the following ar
14d30 65 20 74 72 75 65 3a 0a 20 20 20 20 20 20 2a 2a  e true:.      **
14d40 20 28 31 29 20 74 68 65 20 62 79 74 65 73 20 6f   (1) the bytes o
14d50 66 20 74 68 65 20 68 65 61 64 65 72 20 65 78 74  f the header ext
14d60 65 6e 64 20 70 61 73 74 20 74 68 65 20 64 65 63  end past the dec
14d70 6c 61 72 65 64 20 68 65 61 64 65 72 20 73 69 7a  lared header siz
14d80 65 0a 20 20 20 20 20 20 2a 2a 20 28 32 29 20 74  e.      ** (2) t
14d90 68 65 20 65 6e 74 69 72 65 20 68 65 61 64 65 72  he entire header
14da0 20 77 61 73 20 75 73 65 64 20 62 75 74 20 6e 6f   was used but no
14db0 74 20 61 6c 6c 20 64 61 74 61 20 77 61 73 20 75  t all data was u
14dc0 73 65 64 0a 20 20 20 20 20 20 2a 2a 20 28 33 29  sed.      ** (3)
14dd0 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
14de0 64 61 74 61 20 65 78 74 65 6e 64 73 20 62 65 79  data extends bey
14df0 6f 6e 64 20 74 68 65 20 65 6e 64 20 6f 66 20 74  ond the end of t
14e00 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20 20 20  he record..     
14e10 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28 7a   */.      if( (z
14e20 48 64 72 3e 3d 7a 45 6e 64 48 64 72 20 26 26 20  Hdr>=zEndHdr && 
14e30 28 7a 48 64 72 3e 7a 45 6e 64 48 64 72 20 7c 7c  (zHdr>zEndHdr ||
14e40 20 6f 66 66 73 65 74 36 34 21 3d 70 43 2d 3e 70   offset64!=pC->p
14e50 61 79 6c 6f 61 64 53 69 7a 65 29 29 0a 20 20 20  ayloadSize)).   
14e60 20 20 20 20 7c 7c 20 28 6f 66 66 73 65 74 36 34      || (offset64
14e70 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69   > pC->payloadSi
14e80 7a 65 29 0a 20 20 20 20 20 20 29 7b 0a 20 20 20  ze).      ){.   
14e90 20 20 20 20 20 69 66 28 20 61 4f 66 66 73 65 74       if( aOffset
14ea0 5b 30 5d 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  [0]==0 ){.      
14eb0 20 20 20 20 69 20 3d 20 30 3b 0a 20 20 20 20 20      i = 0;.     
14ec0 20 20 20 20 20 7a 48 64 72 20 3d 20 7a 45 6e 64       zHdr = zEnd
14ed0 48 64 72 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  Hdr;.        }el
14ee0 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66  se{.          if
14ef0 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 20  ( pC->aRow==0 ) 
14f00 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
14f10 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20  lease(&sMem);.  
14f20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f          goto op_
14f30 63 6f 6c 75 6d 6e 5f 63 6f 72 72 75 70 74 3b 0a  column_corrupt;.
14f40 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
14f50 7d 0a 0a 20 20 20 20 20 20 70 43 2d 3e 6e 48 64  }..      pC->nHd
14f60 72 50 61 72 73 65 64 20 3d 20 69 3b 0a 20 20 20  rParsed = i;.   
14f70 20 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65     pC->iHdrOffse
14f80 74 20 3d 20 28 75 33 32 29 28 7a 48 64 72 20 2d  t = (u32)(zHdr -
14f90 20 7a 44 61 74 61 29 3b 0a 20 20 20 20 20 20 69   zData);.      i
14fa0 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29  f( pC->aRow==0 )
14fb0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
14fc0 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20  elease(&sMem);. 
14fd0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
14fe0 74 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a 20 20  t = 0;.    }..  
14ff0 20 20 2f 2a 20 49 66 20 61 66 74 65 72 20 74 72    /* If after tr
15000 79 69 6e 67 20 74 6f 20 65 78 74 72 61 63 74 20  ying to extract 
15010 6e 65 77 20 65 6e 74 72 69 65 73 20 66 72 6f 6d  new entries from
15020 20 74 68 65 20 68 65 61 64 65 72 2c 20 6e 48 64   the header, nHd
15030 72 50 61 72 73 65 64 20 69 73 0a 20 20 20 20 2a  rParsed is.    *
15040 2a 20 73 74 69 6c 6c 20 6e 6f 74 20 75 70 20 74  * still not up t
15050 6f 20 70 32 2c 20 74 68 61 74 20 6d 65 61 6e 73  o p2, that means
15060 20 74 68 61 74 20 74 68 65 20 72 65 63 6f 72 64   that the record
15070 20 68 61 73 20 66 65 77 65 72 20 74 68 61 6e 20   has fewer than 
15080 70 32 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e  p2.    ** column
15090 73 2e 20 20 53 6f 20 74 68 65 20 72 65 73 75 6c  s.  So the resul
150a0 74 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72  t will be either
150b0 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c   the default val
150c0 75 65 20 6f 72 20 61 20 4e 55 4c 4c 2e 0a 20 20  ue or a NULL..  
150d0 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d    */.    if( pC-
150e0 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20  >nHdrParsed<=p2 
150f0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70  ){.      if( pOp
15100 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d  ->p4type==P4_MEM
15110 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
15120 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
15130 77 43 6f 70 79 28 70 44 65 73 74 2c 20 70 4f 70  wCopy(pDest, pOp
15140 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53  ->p4.pMem, MEM_S
15150 74 61 74 69 63 29 3b 0a 20 20 20 20 20 20 7d 65  tatic);.      }e
15160 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  lse{.        sql
15170 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
15180 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20  ll(pDest);.     
15190 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70   }.      goto op
151a0 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20  _column_out;.   
151b0 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
151c0 74 20 3d 20 70 43 2d 3e 61 54 79 70 65 5b 70 32  t = pC->aType[p2
151d0 5d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 45 78 74  ];.  }..  /* Ext
151e0 72 61 63 74 20 74 68 65 20 63 6f 6e 74 65 6e 74  ract the content
151f0 20 66 6f 72 20 74 68 65 20 70 32 2b 31 2d 74 68   for the p2+1-th
15200 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6e 74 72 6f   column.  Contro
15210 6c 20 63 61 6e 20 6f 6e 6c 79 0a 20 20 2a 2a 20  l can only.  ** 
15220 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74  reach this point
15230 20 69 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c   if aOffset[p2],
15240 20 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d 2c 20   aOffset[p2+1], 
15250 61 6e 64 20 70 43 2d 3e 61 54 79 70 65 5b 70 32  and pC->aType[p2
15260 5d 20 61 72 65 0a 20 20 2a 2a 20 61 6c 6c 20 76  ] are.  ** all v
15270 61 6c 69 64 2e 0a 20 20 2a 2f 0a 20 20 61 73 73  alid..  */.  ass
15280 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 48 64 72  ert( p2<pC->nHdr
15290 50 61 72 73 65 64 20 29 3b 0a 20 20 61 73 73 65  Parsed );.  asse
152a0 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
152b0 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73  K );.  assert( s
152c0 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d  qlite3VdbeCheckM
152d0 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 70 44 65  emInvariants(pDe
152e0 73 74 29 20 29 3b 0a 20 20 69 66 28 20 56 64 62  st) );.  if( Vdb
152f0 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 44 65 73  eMemDynamic(pDes
15300 74 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  t) ){.    sqlite
15310 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
15320 70 44 65 73 74 29 3b 0a 20 20 7d 0a 20 20 61 73  pDest);.  }.  as
15330 73 65 72 74 28 20 74 3d 3d 70 43 2d 3e 61 54 79  sert( t==pC->aTy
15340 70 65 5b 70 32 5d 20 29 3b 0a 20 20 69 66 28 20  pe[p2] );.  if( 
15350 70 43 2d 3e 73 7a 52 6f 77 3e 3d 61 4f 66 66 73  pC->szRow>=aOffs
15360 65 74 5b 70 32 2b 31 5d 20 29 7b 0a 20 20 20 20  et[p2+1] ){.    
15370 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 63  /* This is the c
15380 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 68 65 72 65  ommon case where
15390 20 74 68 65 20 64 65 73 69 72 65 64 20 63 6f 6e   the desired con
153a0 74 65 6e 74 20 66 69 74 73 20 6f 6e 20 74 68 65  tent fits on the
153b0 20 6f 72 69 67 69 6e 61 6c 0a 20 20 20 20 2a 2a   original.    **
153c0 20 70 61 67 65 20 2d 20 77 68 65 72 65 20 74 68   page - where th
153d0 65 20 63 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74  e content is not
153e0 20 6f 6e 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20   on an overflow 
153f0 70 61 67 65 20 2a 2f 0a 20 20 20 20 7a 44 61 74  page */.    zDat
15400 61 20 3d 20 70 43 2d 3e 61 52 6f 77 20 2b 20 61  a = pC->aRow + a
15410 4f 66 66 73 65 74 5b 70 32 5d 3b 0a 20 20 20 20  Offset[p2];.    
15420 69 66 28 20 74 3c 31 32 20 29 7b 0a 20 20 20 20  if( t<12 ){.    
15430 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72    sqlite3VdbeSer
15440 69 61 6c 47 65 74 28 7a 44 61 74 61 2c 20 74 2c  ialGet(zData, t,
15450 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c   pDest);.    }el
15460 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20  se{.      /* If 
15470 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65  the column value
15480 20 69 73 20 61 20 73 74 72 69 6e 67 2c 20 77 65   is a string, we
15490 20 6e 65 65 64 20 61 20 70 65 72 73 69 73 74 65   need a persiste
154a0 6e 74 20 76 61 6c 75 65 2c 20 6e 6f 74 0a 20 20  nt value, not.  
154b0 20 20 20 20 2a 2a 20 61 20 4d 45 4d 5f 45 70 68      ** a MEM_Eph
154c0 65 6d 20 76 61 6c 75 65 2e 20 20 54 68 69 73 20  em value.  This 
154d0 62 72 61 6e 63 68 20 69 73 20 61 20 66 61 73 74  branch is a fast
154e0 20 73 68 6f 72 74 2d 63 75 74 20 74 68 61 74 20   short-cut that 
154f0 69 73 20 65 71 75 69 76 61 6c 65 6e 74 0a 20 20  is equivalent.  
15500 20 20 20 20 2a 2a 20 74 6f 20 63 61 6c 6c 69 6e      ** to callin
15510 67 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  g sqlite3VdbeSer
15520 69 61 6c 47 65 74 28 29 20 61 6e 64 20 73 71 6c  ialGet() and sql
15530 69 74 65 33 56 64 62 65 44 65 65 70 68 65 6d 65  ite3VdbeDeepheme
15540 72 61 6c 69 7a 65 28 29 2e 0a 20 20 20 20 20 20  ralize()..      
15550 2a 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63 20  */.      static 
15560 63 6f 6e 73 74 20 75 31 36 20 61 46 6c 61 67 5b  const u16 aFlag[
15570 5d 20 3d 20 7b 20 4d 45 4d 5f 42 6c 6f 62 2c 20  ] = { MEM_Blob, 
15580 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 54 65 72 6d  MEM_Str|MEM_Term
15590 20 7d 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d   };.      pDest-
155a0 3e 6e 20 3d 20 6c 65 6e 20 3d 20 28 74 2d 31 32  >n = len = (t-12
155b0 29 2f 32 3b 0a 20 20 20 20 20 20 70 44 65 73 74  )/2;.      pDest
155c0 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
155d0 3b 0a 20 20 20 20 20 20 69 66 28 20 70 44 65 73  ;.      if( pDes
155e0 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3c 20 6c 65  t->szMalloc < le
155f0 6e 2b 32 20 29 7b 0a 20 20 20 20 20 20 20 20 70  n+2 ){.        p
15600 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  Dest->flags = ME
15610 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  M_Null;.        
15620 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
15630 65 6d 47 72 6f 77 28 70 44 65 73 74 2c 20 6c 65  emGrow(pDest, le
15640 6e 2b 32 2c 20 30 29 20 29 20 67 6f 74 6f 20 6e  n+2, 0) ) goto n
15650 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65 6c  o_mem;.      }el
15660 73 65 7b 0a 20 20 20 20 20 20 20 20 70 44 65 73  se{.        pDes
15670 74 2d 3e 7a 20 3d 20 70 44 65 73 74 2d 3e 7a 4d  t->z = pDest->zM
15680 61 6c 6c 6f 63 3b 0a 20 20 20 20 20 20 7d 0a 20  alloc;.      }. 
15690 20 20 20 20 20 6d 65 6d 63 70 79 28 70 44 65 73       memcpy(pDes
156a0 74 2d 3e 7a 2c 20 7a 44 61 74 61 2c 20 6c 65 6e  t->z, zData, len
156b0 29 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e  );.      pDest->
156c0 7a 5b 6c 65 6e 5d 20 3d 20 30 3b 0a 20 20 20 20  z[len] = 0;.    
156d0 20 20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 2b 31    pDest->z[len+1
156e0 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 44 65  ] = 0;.      pDe
156f0 73 74 2d 3e 66 6c 61 67 73 20 3d 20 61 46 6c 61  st->flags = aFla
15700 67 5b 74 26 31 5d 3b 0a 20 20 20 20 7d 0a 20 20  g[t&1];.    }.  
15710 7d 65 6c 73 65 7b 0a 20 20 20 20 70 44 65 73 74  }else{.    pDest
15720 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
15730 3b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 62 72  ;.    /* This br
15740 61 6e 63 68 20 68 61 70 70 65 6e 73 20 6f 6e 6c  anch happens onl
15750 79 20 77 68 65 6e 20 63 6f 6e 74 65 6e 74 20 69  y when content i
15760 73 20 6f 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61  s on overflow pa
15770 67 65 73 20 2a 2f 0a 20 20 20 20 69 66 28 20 28  ges */.    if( (
15780 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c  (pOp->p5 & (OPFL
15790 41 47 5f 4c 45 4e 47 54 48 41 52 47 7c 4f 50 46  AG_LENGTHARG|OPF
157a0 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29 29 21  LAG_TYPEOFARG))!
157b0 3d 30 0a 20 20 20 20 20 20 20 20 20 20 26 26 20  =0.          && 
157c0 28 28 74 3e 3d 31 32 20 26 26 20 28 74 26 31 29  ((t>=12 && (t&1)
157d0 3d 3d 30 29 20 7c 7c 20 28 70 4f 70 2d 3e 70 35  ==0) || (pOp->p5
157e0 20 26 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46   & OPFLAG_TYPEOF
157f0 41 52 47 29 21 3d 30 29 29 0a 20 20 20 20 20 7c  ARG)!=0)).     |
15800 7c 20 28 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33  | (len = sqlite3
15810 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65  VdbeSerialTypeLe
15820 6e 28 74 29 29 3d 3d 30 0a 20 20 20 20 29 7b 0a  n(t))==0.    ){.
15830 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 6e 74        /* Content
15840 20 69 73 20 69 72 72 65 6c 65 76 61 6e 74 20 66   is irrelevant f
15850 6f 72 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 31  or.      **    1
15860 2e 20 74 68 65 20 74 79 70 65 6f 66 28 29 20 66  . the typeof() f
15870 75 6e 63 74 69 6f 6e 2c 0a 20 20 20 20 20 20 2a  unction,.      *
15880 2a 20 20 20 20 32 2e 20 74 68 65 20 6c 65 6e 67  *    2. the leng
15890 74 68 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69  th(X) function i
158a0 66 20 58 20 69 73 20 61 20 62 6c 6f 62 2c 20 61  f X is a blob, a
158b0 6e 64 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 33  nd.      **    3
158c0 2e 20 69 66 20 74 68 65 20 63 6f 6e 74 65 6e 74  . if the content
158d0 20 6c 65 6e 67 74 68 20 69 73 20 7a 65 72 6f 2e   length is zero.
158e0 0a 20 20 20 20 20 20 2a 2a 20 53 6f 20 77 65 20  .      ** So we 
158f0 6d 69 67 68 74 20 61 73 20 77 65 6c 6c 20 75 73  might as well us
15900 65 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74 20  e bogus content 
15910 72 61 74 68 65 72 20 74 68 61 6e 20 72 65 61 64  rather than read
15920 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e  ing.      ** con
15930 74 65 6e 74 20 66 72 6f 6d 20 64 69 73 6b 2e 20  tent from disk. 
15940 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20  .      **.      
15950 2a 2a 20 41 6c 74 68 6f 75 67 68 20 73 71 6c 69  ** Although sqli
15960 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74  te3VdbeSerialGet
15970 28 29 20 6d 61 79 20 72 65 61 64 20 61 74 20 6d  () may read at m
15980 6f 73 74 20 38 20 62 79 74 65 73 20 66 72 6f 6d  ost 8 bytes from
15990 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 62 75   the.      ** bu
159a0 66 66 65 72 20 70 61 73 73 65 64 20 74 6f 20 69  ffer passed to i
159b0 74 2c 20 64 65 62 75 67 67 69 6e 67 20 66 75 6e  t, debugging fun
159c0 63 74 69 6f 6e 20 56 64 62 65 4d 65 6d 50 72 65  ction VdbeMemPre
159d0 74 74 79 50 72 69 6e 74 28 29 20 6d 61 79 0a 20  ttyPrint() may. 
159e0 20 20 20 20 20 2a 2a 20 72 65 61 64 20 75 70 20       ** read up 
159f0 74 6f 20 31 36 2e 20 53 6f 20 31 36 20 62 79 74  to 16. So 16 byt
15a00 65 73 20 6f 66 20 62 6f 67 75 73 20 63 6f 6e 74  es of bogus cont
15a10 65 6e 74 20 69 73 20 73 75 70 70 6c 69 65 64 2e  ent is supplied.
15a20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
15a30 73 74 61 74 69 63 20 75 38 20 61 5a 65 72 6f 5b  static u8 aZero[
15a40 31 36 5d 3b 20 20 2f 2a 20 54 68 69 73 20 69 73  16];  /* This is
15a50 20 74 68 65 20 62 6f 67 75 73 20 63 6f 6e 74 65   the bogus conte
15a60 6e 74 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69  nt */.      sqli
15a70 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74  te3VdbeSerialGet
15a80 28 61 5a 65 72 6f 2c 20 74 2c 20 70 44 65 73 74  (aZero, t, pDest
15a90 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
15aa0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
15ab0 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
15ac0 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
15ad0 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65   aOffset[p2], le
15ae0 6e 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20  n, pDest);.     
15af0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
15b00 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
15b10 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
15b20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
15b30 65 72 69 61 6c 47 65 74 28 28 63 6f 6e 73 74 20  erialGet((const 
15b40 75 38 2a 29 70 44 65 73 74 2d 3e 7a 2c 20 74 2c  u8*)pDest->z, t,
15b50 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 70   pDest);.      p
15b60 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  Dest->flags &= ~
15b70 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20 20 20 20 7d  MEM_Ephem;.    }
15b80 0a 20 20 7d 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f  .  }..op_column_
15b90 6f 75 74 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41  out:.  UPDATE_MA
15ba0 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74  X_BLOBSIZE(pDest
15bb0 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
15bc0 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65  ACE(pOp->p3, pDe
15bd0 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 0a 6f  st);.  break;..o
15be0 70 5f 63 6f 6c 75 6d 6e 5f 63 6f 72 72 75 70 74  p_column_corrupt
15bf0 3a 0a 20 20 69 66 28 20 61 4f 70 5b 30 5d 2e 70  :.  if( aOp[0].p
15c00 33 3e 30 20 29 7b 0a 20 20 20 20 70 4f 70 20 3d  3>0 ){.    pOp =
15c10 20 26 61 4f 70 5b 61 4f 70 5b 30 5d 2e 70 33 2d   &aOp[aOp[0].p3-
15c20 31 5d 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  1];.    break;. 
15c30 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d   }else{.    rc =
15c40 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
15c50 42 4b 50 54 3b 0a 20 20 20 20 67 6f 74 6f 20 61  BKPT;.    goto a
15c60 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
15c70 72 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 20 4f 70 63  r;.  }.}../* Opc
15c80 6f 64 65 3a 20 41 66 66 69 6e 69 74 79 20 50 31  ode: Affinity P1
15c90 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
15ca0 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e 69 74 79  nopsis: affinity
15cb0 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a  (r[P1@P2]).**.**
15cc0 20 41 70 70 6c 79 20 61 66 66 69 6e 69 74 69 65   Apply affinitie
15cd0 73 20 74 6f 20 61 20 72 61 6e 67 65 20 6f 66 20  s to a range of 
15ce0 50 32 20 72 65 67 69 73 74 65 72 73 20 73 74 61  P2 registers sta
15cf0 72 74 69 6e 67 20 77 69 74 68 20 50 31 2e 0a 2a  rting with P1..*
15d00 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 73 74 72  *.** P4 is a str
15d10 69 6e 67 20 74 68 61 74 20 69 73 20 50 32 20 63  ing that is P2 c
15d20 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20  haracters long. 
15d30 54 68 65 20 4e 2d 74 68 20 63 68 61 72 61 63 74  The N-th charact
15d40 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72  er of the.** str
15d50 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74 68  ing indicates th
15d60 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74  e column affinit
15d70 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65  y that should be
15d80 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 4e 2d   used for the N-
15d90 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c  th.** memory cel
15da0 6c 20 69 6e 20 74 68 65 20 72 61 6e 67 65 2e 0a  l in the range..
15db0 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66 69 6e  */.case OP_Affin
15dc0 69 74 79 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63  ity: {.  const c
15dd0 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20  har *zAffinity; 
15de0 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
15df0 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20  y to be applied 
15e00 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e 69 74 79 20  */..  zAffinity 
15e10 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61  = pOp->p4.z;.  a
15e20 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79  ssert( zAffinity
15e30 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
15e40 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
15e50 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74  assert( zAffinit
15e60 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b  y[pOp->p2]==0 );
15e70 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
15e80 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 64 6f 7b 0a  pOp->p1];.  do{.
15e90 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31      assert( pIn1
15ea0 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b 28 70 2d   <= &p->aMem[(p-
15eb0 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
15ec0 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73  rsor)] );.    as
15ed0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
15ee0 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 61 70  (pIn1) );.    ap
15ef0 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31  plyAffinity(pIn1
15f00 2c 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29  , *(zAffinity++)
15f10 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
15f20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 77 68 69 6c   pIn1++;.  }whil
15f30 65 28 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d 20  e( zAffinity[0] 
15f40 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
15f50 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52 65  * Opcode: MakeRe
15f60 63 6f 72 64 20 50 31 20 50 32 20 50 33 20 50 34  cord P1 P2 P3 P4
15f70 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
15f80 72 5b 50 33 5d 3d 6d 6b 72 65 63 28 72 5b 50 31  r[P3]=mkrec(r[P1
15f90 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76  @P2]).**.** Conv
15fa0 65 72 74 20 50 32 20 72 65 67 69 73 74 65 72 73  ert P2 registers
15fb0 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
15fc0 50 31 20 69 6e 74 6f 20 74 68 65 20 5b 72 65 63  P1 into the [rec
15fd0 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20 75  ord format].** u
15fe0 73 65 20 61 73 20 61 20 64 61 74 61 20 72 65 63  se as a data rec
15ff0 6f 72 64 20 69 6e 20 61 20 64 61 74 61 62 61 73  ord in a databas
16000 65 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61 20  e table or as a 
16010 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64  key.** in an ind
16020 65 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75  ex.  The OP_Colu
16030 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64 65  mn opcode can de
16040 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64 20  code the record 
16050 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  later..**.** P4 
16060 6d 61 79 20 62 65 20 61 20 73 74 72 69 6e 67 20  may be a string 
16070 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61  that is P2 chara
16080 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65  cters long.  The
16090 20 4e 2d 74 68 20 63 68 61 72 61 63 74 65 72 20   N-th character 
160a0 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67  of the.** string
160b0 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63   indicates the c
160c0 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74  olumn affinity t
160d0 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73  hat should be us
160e0 65 64 20 66 6f 72 20 74 68 65 20 4e 2d 74 68 0a  ed for the N-th.
160f0 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20  ** field of the 
16100 69 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a  index key..**.**
16110 20 54 68 65 20 6d 61 70 70 69 6e 67 20 66 72 6f   The mapping fro
16120 6d 20 63 68 61 72 61 63 74 65 72 20 74 6f 20 61  m character to a
16130 66 66 69 6e 69 74 79 20 69 73 20 67 69 76 65 6e  ffinity is given
16140 20 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f 41   by the SQLITE_A
16150 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65  FF_.** macros de
16160 66 69 6e 65 64 20 69 6e 20 73 71 6c 69 74 65 49  fined in sqliteI
16170 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  nt.h..**.** If P
16180 34 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61  4 is NULL then a
16190 6c 6c 20 69 6e 64 65 78 20 66 69 65 6c 64 73 20  ll index fields 
161a0 68 61 76 65 20 74 68 65 20 61 66 66 69 6e 69 74  have the affinit
161b0 79 20 42 4c 4f 42 2e 0a 2a 2f 0a 63 61 73 65 20  y BLOB..*/.case 
161c0 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b  OP_MakeRecord: {
161d0 0a 20 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72  .  u8 *zNewRecor
161e0 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62  d;        /* A b
161f0 75 66 66 65 72 20 74 6f 20 68 6f 6c 64 20 74 68  uffer to hold th
16200 65 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 6e  e data for the n
16210 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d  ew record */.  M
16220 65 6d 20 2a 70 52 65 63 3b 20 20 20 20 20 20 20  em *pRec;       
16230 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77        /* The new
16240 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34   record */.  u64
16250 20 6e 44 61 74 61 3b 20 20 20 20 20 20 20 20 20   nData;         
16260 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16270 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20 73   bytes of data s
16280 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48  pace */.  int nH
16290 64 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  dr;             
162a0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
162b0 74 65 73 20 6f 66 20 68 65 61 64 65 72 20 73 70  tes of header sp
162c0 61 63 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79  ace */.  i64 nBy
162d0 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
162e0 2f 2a 20 44 61 74 61 20 73 70 61 63 65 20 72 65  /* Data space re
162f0 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73 20  quired for this 
16300 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20  record */.  i64 
16310 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 20 20  nZero;          
16320 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
16330 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68  zero bytes at th
16340 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63  e end of the rec
16350 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61  ord */.  int nVa
16360 72 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  rint;           
16370 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
16380 65 73 20 69 6e 20 61 20 76 61 72 69 6e 74 20 2a  es in a varint *
16390 2f 0a 20 20 75 33 32 20 73 65 72 69 61 6c 5f 74  /.  u32 serial_t
163a0 79 70 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 79  ype;       /* Ty
163b0 70 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65  pe field */.  Me
163c0 6d 20 2a 70 44 61 74 61 30 3b 20 20 20 20 20 20  m *pData0;      
163d0 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 66 69       /* First fi
163e0 65 6c 64 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e  eld to be combin
163f0 65 64 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f  ed into the reco
16400 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61  rd */.  Mem *pLa
16410 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  st;            /
16420 2a 20 4c 61 73 74 20 66 69 65 6c 64 20 6f 66 20  * Last field of 
16430 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
16440 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20  int nField;     
16450 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
16460 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68   of fields in th
16470 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68  e record */.  ch
16480 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20  ar *zAffinity;  
16490 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69       /* The affi
164a0 6e 69 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20  nity string for 
164b0 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
164c0 69 6e 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b  int file_format;
164d0 20 20 20 20 20 20 20 2f 2a 20 46 69 6c 65 20 66         /* File f
164e0 6f 72 6d 61 74 20 74 6f 20 75 73 65 20 66 6f 72  ormat to use for
164f0 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69   encoding */.  i
16500 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20  nt i;           
16510 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75        /* Space u
16520 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72  sed in zNewRecor
16530 64 5b 5d 20 68 65 61 64 65 72 20 2a 2f 0a 20 20  d[] header */.  
16540 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20  int j;          
16550 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20         /* Space 
16560 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f  used in zNewReco
16570 72 64 5b 5d 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a  rd[] content */.
16580 20 20 75 33 32 20 6c 65 6e 3b 20 20 20 20 20 20    u32 len;      
16590 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67           /* Leng
165a0 74 68 20 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f  th of a field */
165b0 0a 0a 20 20 2f 2a 20 41 73 73 75 6d 69 6e 67 20  ..  /* Assuming 
165c0 74 68 65 20 72 65 63 6f 72 64 20 63 6f 6e 74 61  the record conta
165d0 69 6e 73 20 4e 20 66 69 65 6c 64 73 2c 20 74 68  ins N fields, th
165e0 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20  e record format 
165f0 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65 20  looks.  ** like 
16600 74 68 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20  this:.  **.  ** 
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 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20  --------.  ** | 
16660 68 64 72 2d 73 69 7a 65 20 7c 20 74 79 70 65 20  hdr-size | type 
16670 30 20 7c 20 74 79 70 65 20 31 20 7c 20 2e 2e 2e  0 | type 1 | ...
16680 20 7c 20 74 79 70 65 20 4e 2d 31 20 7c 20 64 61   | type N-1 | da
16690 74 61 30 20 7c 20 2e 2e 2e 20 7c 20 64 61 74 61  ta0 | ... | data
166a0 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d   N-1 | .  ** ---
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 2d  ----------------
166f0 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20  -----.  **.  ** 
16700 44 61 74 61 28 30 29 20 69 73 20 74 61 6b 65 6e  Data(0) is taken
16710 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
16720 31 2e 20 20 44 61 74 61 28 31 29 20 63 6f 6d 65  1.  Data(1) come
16730 73 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  s from register 
16740 50 31 2b 31 0a 20 20 2a 2a 20 61 6e 64 20 73 6f  P1+1.  ** and so
16750 20 66 6f 72 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a   forth..  **.  *
16760 2a 20 45 61 63 68 20 74 79 70 65 20 66 69 65 6c  * Each type fiel
16770 64 20 69 73 20 61 20 76 61 72 69 6e 74 20 72 65  d is a varint re
16780 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 73  presenting the s
16790 65 72 69 61 6c 20 74 79 70 65 20 6f 66 20 74 68  erial type of th
167a0 65 20 0a 20 20 2a 2a 20 63 6f 72 72 65 73 70 6f  e .  ** correspo
167b0 6e 64 69 6e 67 20 64 61 74 61 20 65 6c 65 6d 65  nding data eleme
167c0 6e 74 20 28 73 65 65 20 73 71 6c 69 74 65 33 56  nt (see sqlite3V
167d0 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 29 29  dbeSerialType())
167e0 2e 20 54 68 65 0a 20 20 2a 2a 20 68 64 72 2d 73  . The.  ** hdr-s
167f0 69 7a 65 20 66 69 65 6c 64 20 69 73 20 61 6c 73  ize field is als
16800 6f 20 61 20 76 61 72 69 6e 74 20 77 68 69 63 68  o a varint which
16810 20 69 73 20 74 68 65 20 6f 66 66 73 65 74 20 66   is the offset f
16820 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  rom the beginnin
16830 67 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65  g.  ** of the re
16840 63 6f 72 64 20 74 6f 20 64 61 74 61 30 2e 0a 20  cord to data0.. 
16850 20 2a 2f 0a 20 20 6e 44 61 74 61 20 3d 20 30 3b   */.  nData = 0;
16860 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
16870 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64  er of bytes of d
16880 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e  ata space */.  n
16890 48 64 72 20 3d 20 30 3b 20 20 20 20 20 20 20 20  Hdr = 0;        
168a0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
168b0 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 20 73  ytes of header s
168c0 70 61 63 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20  pace */.  nZero 
168d0 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  = 0;         /* 
168e0 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62  Number of zero b
168f0 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64 20  ytes at the end 
16900 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  of the record */
16910 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d  .  nField = pOp-
16920 3e 70 31 3b 0a 20 20 7a 41 66 66 69 6e 69 74 79  >p1;.  zAffinity
16930 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
16940 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30  assert( nField>0
16950 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26   && pOp->p2>0 &&
16960 20 70 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c   pOp->p2+nField<
16970 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
16980 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
16990 20 70 44 61 74 61 30 20 3d 20 26 61 4d 65 6d 5b   pData0 = &aMem[
169a0 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65 6c  nField];.  nFiel
169b0 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70  d = pOp->p2;.  p
169c0 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b 6e  Last = &pData0[n
169d0 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c 65  Field-1];.  file
169e0 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69 6e  _format = p->min
169f0 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 3b  WriteFileFormat;
16a00 0a 0a 20 20 2f 2a 20 49 64 65 6e 74 69 66 79 20  ..  /* Identify 
16a10 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73  the output regis
16a20 74 65 72 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ter */.  assert(
16a30 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 31   pOp->p3<pOp->p1
16a40 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70   || pOp->p3>=pOp
16a50 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b 0a  ->p1+pOp->p2 );.
16a60 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
16a70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p3];.  memAb
16a80 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
16a90 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 41 70 70 6c  Out);..  /* Appl
16aa0 79 20 74 68 65 20 72 65 71 75 65 73 74 65 64 20  y the requested 
16ab0 61 66 66 69 6e 69 74 79 20 74 6f 20 61 6c 6c 20  affinity to all 
16ac0 69 6e 70 75 74 73 0a 20 20 2a 2f 0a 20 20 61 73  inputs.  */.  as
16ad0 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70 4c  sert( pData0<=pL
16ae0 61 73 74 20 29 3b 0a 20 20 69 66 28 20 7a 41 66  ast );.  if( zAf
16af0 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 70 52  finity ){.    pR
16b00 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20 20  ec = pData0;.   
16b10 20 64 6f 7b 0a 20 20 20 20 20 20 61 70 70 6c 79   do{.      apply
16b20 41 66 66 69 6e 69 74 79 28 70 52 65 63 2b 2b 2c  Affinity(pRec++,
16b30 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 2c   *(zAffinity++),
16b40 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
16b50 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e    assert( zAffin
16b60 69 74 79 5b 30 5d 3d 3d 30 20 7c 7c 20 70 52 65  ity[0]==0 || pRe
16b70 63 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 20 20  c<=pLast );.    
16b80 7d 77 68 69 6c 65 28 20 7a 41 66 66 69 6e 69 74  }while( zAffinit
16b90 79 5b 30 5d 20 29 3b 0a 20 20 7d 0a 0a 23 69 66  y[0] );.  }..#if
16ba0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
16bb0 45 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20 20 2f 2a  E_NULL_TRIM.  /*
16bc0 20 4e 55 4c 4c 73 20 63 61 6e 20 62 65 20 73 61   NULLs can be sa
16bd0 66 65 6c 79 20 74 72 69 6d 6d 65 64 20 66 72 6f  fely trimmed fro
16be0 6d 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  m the end of the
16bf0 20 72 65 63 6f 72 64 2c 20 61 73 20 6c 6f 6e 67   record, as long
16c00 20 61 73 0a 20 20 2a 2a 20 61 73 20 74 68 65 20   as.  ** as the 
16c10 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 69 73  schema format is
16c20 20 32 20 6f 72 20 6d 6f 72 65 20 61 6e 64 20 6e   2 or more and n
16c30 6f 6e 65 20 6f 66 20 74 68 65 20 6f 6d 69 74 74  one of the omitt
16c40 65 64 20 63 6f 6c 75 6d 6e 73 0a 20 20 2a 2a 20  ed columns.  ** 
16c50 68 61 76 65 20 61 20 6e 6f 6e 2d 4e 55 4c 4c 20  have a non-NULL 
16c60 64 65 66 61 75 6c 74 20 76 61 6c 75 65 2e 20 20  default value.  
16c70 41 6c 73 6f 2c 20 74 68 65 20 72 65 63 6f 72 64  Also, the record
16c80 20 6d 75 73 74 20 62 65 20 6c 65 66 74 20 77 69   must be left wi
16c90 74 68 0a 20 20 2a 2a 20 61 74 20 6c 65 61 73 74  th.  ** at least
16ca0 20 6f 6e 65 20 66 69 65 6c 64 2e 20 20 49 66 20   one field.  If 
16cb0 50 35 3e 30 20 74 68 65 6e 20 69 74 20 77 69 6c  P5>0 then it wil
16cc0 6c 20 62 65 20 6f 6e 65 20 6d 6f 72 65 20 74 68  l be one more th
16cd0 61 6e 20 74 68 65 0a 20 20 2a 2a 20 69 6e 64 65  an the.  ** inde
16ce0 78 20 6f 66 20 74 68 65 20 72 69 67 68 74 2d 6d  x of the right-m
16cf0 6f 73 74 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20  ost column with 
16d00 61 20 6e 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61 75  a non-NULL defau
16d10 6c 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 69 66  lt value */.  if
16d20 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20  ( pOp->p5 ){.   
16d30 20 77 68 69 6c 65 28 20 28 70 4c 61 73 74 2d 3e   while( (pLast->
16d40 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
16d50 29 21 3d 30 20 26 26 20 6e 46 69 65 6c 64 3e 70  )!=0 && nField>p
16d60 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20 20  Op->p5 ){.      
16d70 70 4c 61 73 74 2d 2d 3b 0a 20 20 20 20 20 20 6e  pLast--;.      n
16d80 46 69 65 6c 64 2d 2d 3b 0a 20 20 20 20 7d 0a 20  Field--;.    }. 
16d90 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20   }.#endif..  /* 
16da0 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20 74 68 65  Loop through the
16db0 20 65 6c 65 6d 65 6e 74 73 20 74 68 61 74 20 77   elements that w
16dc0 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68 65 20  ill make up the 
16dd0 72 65 63 6f 72 64 20 74 6f 20 66 69 67 75 72 65  record to figure
16de0 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d 75  .  ** out how mu
16df0 63 68 20 73 70 61 63 65 20 69 73 20 72 65 71 75  ch space is requ
16e00 69 72 65 64 20 66 6f 72 20 74 68 65 20 6e 65 77  ired for the new
16e10 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20   record..  */.  
16e20 70 52 65 63 20 3d 20 70 4c 61 73 74 3b 0a 20 20  pRec = pLast;.  
16e30 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  do{.    assert( 
16e40 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65 63 29  memIsValid(pRec)
16e50 20 29 3b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74   );.    serial_t
16e60 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ype = sqlite3Vdb
16e70 65 53 65 72 69 61 6c 54 79 70 65 28 70 52 65 63  eSerialType(pRec
16e80 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 2c 20 26  , file_format, &
16e90 6c 65 6e 29 3b 0a 20 20 20 20 69 66 28 20 70 52  len);.    if( pR
16ea0 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ec->flags & MEM_
16eb0 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 69 66  Zero ){.      if
16ec0 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 30  ( serial_type==0
16ed0 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 56   ){.        /* V
16ee0 61 6c 75 65 73 20 77 69 74 68 20 4d 45 4d 5f 4e  alues with MEM_N
16ef0 75 6c 6c 20 61 6e 64 20 4d 45 4d 5f 5a 65 72 6f  ull and MEM_Zero
16f00 20 61 72 65 20 63 72 65 61 74 65 64 20 62 79 20   are created by 
16f10 78 43 6f 6c 75 6d 6e 20 76 69 72 74 75 61 6c 0a  xColumn virtual.
16f20 20 20 20 20 20 20 20 20 2a 2a 20 74 61 62 6c 65          ** table
16f30 20 6d 65 74 68 6f 64 73 20 74 68 61 74 20 6e 65   methods that ne
16f40 76 65 72 20 69 6e 76 6f 6b 65 20 73 71 6c 69 74  ver invoke sqlit
16f50 65 33 5f 72 65 73 75 6c 74 5f 78 78 78 78 78 28  e3_result_xxxxx(
16f60 29 20 77 68 69 6c 65 0a 20 20 20 20 20 20 20 20  ) while.        
16f70 2a 2a 20 63 6f 6d 70 75 74 69 6e 67 20 61 6e 20  ** computing an 
16f80 75 6e 63 68 61 6e 67 69 6e 67 20 63 6f 6c 75 6d  unchanging colum
16f90 6e 20 76 61 6c 75 65 20 69 6e 20 61 6e 20 55 50  n value in an UP
16fa0 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a  DATE statement..
16fb0 20 20 20 20 20 20 20 20 2a 2a 20 47 69 76 65 20          ** Give 
16fc0 73 75 63 68 20 76 61 6c 75 65 73 20 61 20 73 70  such values a sp
16fd0 65 63 69 61 6c 20 69 6e 74 65 72 6e 61 6c 2d 75  ecial internal-u
16fe0 73 65 2d 6f 6e 6c 79 20 73 65 72 69 61 6c 2d 74  se-only serial-t
16ff0 79 70 65 20 6f 66 20 31 30 0a 20 20 20 20 20 20  ype of 10.      
17000 20 20 2a 2a 20 73 6f 20 74 68 61 74 20 74 68 65    ** so that the
17010 79 20 63 61 6e 20 62 65 20 70 61 73 73 65 64 20  y can be passed 
17020 74 68 72 6f 75 67 68 20 74 6f 20 78 55 70 64 61  through to xUpda
17030 74 65 20 61 6e 64 20 68 61 76 65 0a 20 20 20 20  te and have.    
17040 20 20 20 20 2a 2a 20 61 20 74 72 75 65 20 73 71      ** a true sq
17050 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e 6f 63 68  lite3_value_noch
17060 61 6e 67 65 28 29 2e 20 2a 2f 0a 20 20 20 20 20  ange(). */.     
17070 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
17080 70 35 3d 3d 4f 50 46 4c 41 47 5f 4e 4f 43 48 4e  p5==OPFLAG_NOCHN
17090 47 5f 4d 41 47 49 43 20 7c 7c 20 43 4f 52 52 55  G_MAGIC || CORRU
170a0 50 54 5f 44 42 20 29 3b 0a 20 20 20 20 20 20 20  PT_DB );.       
170b0 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 31   serial_type = 1
170c0 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  0;.      }else i
170d0 66 28 20 6e 44 61 74 61 20 29 7b 0a 20 20 20 20  f( nData ){.    
170e0 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56      if( sqlite3V
170f0 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62  dbeMemExpandBlob
17100 28 70 52 65 63 29 20 29 20 67 6f 74 6f 20 6e 6f  (pRec) ) goto no
17110 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65 6c 73  _mem;.      }els
17120 65 7b 0a 20 20 20 20 20 20 20 20 6e 5a 65 72 6f  e{.        nZero
17130 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72   += pRec->u.nZer
17140 6f 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e 20 2d  o;.        len -
17150 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b  = pRec->u.nZero;
17160 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
17170 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e 3b     nData += len;
17180 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20 73  .    testcase( s
17190 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32 37 20  erial_type==127 
171a0 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28  );.    testcase(
171b0 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32   serial_type==12
171c0 38 20 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d  8 );.    nHdr +=
171d0 20 73 65 72 69 61 6c 5f 74 79 70 65 3c 3d 31 32   serial_type<=12
171e0 37 20 3f 20 31 20 3a 20 73 71 6c 69 74 65 33 56  7 ? 1 : sqlite3V
171f0 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c 5f  arintLen(serial_
17200 74 79 70 65 29 3b 0a 20 20 20 20 70 52 65 63 2d  type);.    pRec-
17210 3e 75 54 65 6d 70 20 3d 20 73 65 72 69 61 6c 5f  >uTemp = serial_
17220 74 79 70 65 3b 0a 20 20 20 20 69 66 28 20 70 52  type;.    if( pR
17230 65 63 3d 3d 70 44 61 74 61 30 20 29 20 62 72 65  ec==pData0 ) bre
17240 61 6b 3b 0a 20 20 20 20 70 52 65 63 2d 2d 3b 0a  ak;.    pRec--;.
17250 20 20 7d 77 68 69 6c 65 28 31 29 3b 0a 0a 20 20    }while(1);..  
17260 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  /* EVIDENCE-OF: 
17270 52 2d 32 32 35 36 34 2d 31 31 36 34 37 20 54 68  R-22564-11647 Th
17280 65 20 68 65 61 64 65 72 20 62 65 67 69 6e 73 20  e header begins 
17290 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 76 61  with a single va
172a0 72 69 6e 74 0a 20 20 2a 2a 20 77 68 69 63 68 20  rint.  ** which 
172b0 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 74  determines the t
172c0 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62  otal number of b
172d0 79 74 65 73 20 69 6e 20 74 68 65 20 68 65 61 64  ytes in the head
172e0 65 72 2e 20 54 68 65 20 76 61 72 69 6e 74 0a 20  er. The varint. 
172f0 20 2a 2a 20 76 61 6c 75 65 20 69 73 20 74 68 65   ** value is the
17300 20 73 69 7a 65 20 6f 66 20 74 68 65 20 68 65 61   size of the hea
17310 64 65 72 20 69 6e 20 62 79 74 65 73 20 69 6e 63  der in bytes inc
17320 6c 75 64 69 6e 67 20 74 68 65 20 73 69 7a 65 20  luding the size 
17330 76 61 72 69 6e 74 0a 20 20 2a 2a 20 69 74 73 65  varint.  ** itse
17340 6c 66 2e 20 2a 2f 0a 20 20 74 65 73 74 63 61 73  lf. */.  testcas
17350 65 28 20 6e 48 64 72 3d 3d 31 32 36 20 29 3b 0a  e( nHdr==126 );.
17360 20 20 74 65 73 74 63 61 73 65 28 20 6e 48 64 72    testcase( nHdr
17370 3d 3d 31 32 37 20 29 3b 0a 20 20 69 66 28 20 6e  ==127 );.  if( n
17380 48 64 72 3c 3d 31 32 36 20 29 7b 0a 20 20 20 20  Hdr<=126 ){.    
17390 2f 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61  /* The common ca
173a0 73 65 20 2a 2f 0a 20 20 20 20 6e 48 64 72 20 2b  se */.    nHdr +
173b0 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  = 1;.  }else{.  
173c0 20 20 2f 2a 20 52 61 72 65 20 63 61 73 65 20 6f    /* Rare case o
173d0 66 20 61 20 72 65 61 6c 6c 79 20 6c 61 72 67 65  f a really large
173e0 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 20 20 6e   header */.    n
173f0 56 61 72 69 6e 74 20 3d 20 73 71 6c 69 74 65 33  Varint = sqlite3
17400 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 3b  VarintLen(nHdr);
17410 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 6e 56 61  .    nHdr += nVa
17420 72 69 6e 74 3b 0a 20 20 20 20 69 66 28 20 6e 56  rint;.    if( nV
17430 61 72 69 6e 74 3c 73 71 6c 69 74 65 33 56 61 72  arint<sqlite3Var
17440 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29 20 6e  intLen(nHdr) ) n
17450 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79  Hdr++;.  }.  nBy
17460 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61 3b  te = nHdr+nData;
17470 0a 20 20 69 66 28 20 6e 42 79 74 65 2b 6e 5a 65  .  if( nByte+nZe
17480 72 6f 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  ro>db->aLimit[SQ
17490 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
174a0 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  H] ){.    goto t
174b0 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f  oo_big;.  }..  /
174c0 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20  * Make sure the 
174d0 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20  output register 
174e0 68 61 73 20 61 20 62 75 66 66 65 72 20 6c 61 72  has a buffer lar
174f0 67 65 20 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f  ge enough to sto
17500 72 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77  re .  ** the new
17510 20 72 65 63 6f 72 64 2e 20 54 68 65 20 6f 75 74   record. The out
17520 70 75 74 20 72 65 67 69 73 74 65 72 20 28 70 4f  put register (pO
17530 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20 61 6c  p->p3) is not al
17540 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65  lowed to.  ** be
17550 20 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75   one of the inpu
17560 74 20 72 65 67 69 73 74 65 72 73 20 28 62 65 63  t registers (bec
17570 61 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69  ause the followi
17580 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20  ng call to.  ** 
17590 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c  sqlite3VdbeMemCl
175a0 65 61 72 41 6e 64 52 65 73 69 7a 65 28 29 20 63  earAndResize() c
175b0 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20 74 68 65  ould clobber the
175c0 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 69 74   value before it
175d0 20 69 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f 0a   is used)..  */.
175e0 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
175f0 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73 69  eMemClearAndResi
17600 7a 65 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42  ze(pOut, (int)nB
17610 79 74 65 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  yte) ){.    goto
17620 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a   no_mem;.  }.  z
17630 4e 65 77 52 65 63 6f 72 64 20 3d 20 28 75 38 20  NewRecord = (u8 
17640 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a  *)pOut->z;..  /*
17650 20 57 72 69 74 65 20 74 68 65 20 72 65 63 6f 72   Write the recor
17660 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56 61  d */.  i = putVa
17670 72 69 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f 72  rint32(zNewRecor
17680 64 2c 20 6e 48 64 72 29 3b 0a 20 20 6a 20 3d 20  d, nHdr);.  j = 
17690 6e 48 64 72 3b 0a 20 20 61 73 73 65 72 74 28 20  nHdr;.  assert( 
176a0 70 44 61 74 61 30 3c 3d 70 4c 61 73 74 20 29 3b  pData0<=pLast );
176b0 0a 20 20 70 52 65 63 20 3d 20 70 44 61 74 61 30  .  pRec = pData0
176c0 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 73 65 72 69  ;.  do{.    seri
176d0 61 6c 5f 74 79 70 65 20 3d 20 70 52 65 63 2d 3e  al_type = pRec->
176e0 75 54 65 6d 70 3b 0a 20 20 20 20 2f 2a 20 45 56  uTemp;.    /* EV
176f0 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 36 35  IDENCE-OF: R-065
17700 32 39 2d 34 37 33 36 32 20 46 6f 6c 6c 6f 77 69  29-47362 Followi
17710 6e 67 20 74 68 65 20 73 69 7a 65 20 76 61 72 69  ng the size vari
17720 6e 74 20 61 72 65 20 6f 6e 65 20 6f 72 20 6d 6f  nt are one or mo
17730 72 65 0a 20 20 20 20 2a 2a 20 61 64 64 69 74 69  re.    ** additi
17740 6f 6e 61 6c 20 76 61 72 69 6e 74 73 2c 20 6f 6e  onal varints, on
17750 65 20 70 65 72 20 63 6f 6c 75 6d 6e 2e 20 2a 2f  e per column. */
17760 0a 20 20 20 20 69 20 2b 3d 20 70 75 74 56 61 72  .    i += putVar
17770 69 6e 74 33 32 28 26 7a 4e 65 77 52 65 63 6f 72  int32(&zNewRecor
17780 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70  d[i], serial_typ
17790 65 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  e);            /
177a0 2a 20 73 65 72 69 61 6c 20 74 79 70 65 20 2a 2f  * serial type */
177b0 0a 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45  .    /* EVIDENCE
177c0 2d 4f 46 3a 20 52 2d 36 34 35 33 36 2d 35 31 37  -OF: R-64536-517
177d0 32 38 20 54 68 65 20 76 61 6c 75 65 73 20 66 6f  28 The values fo
177e0 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e  r each column in
177f0 20 74 68 65 20 72 65 63 6f 72 64 0a 20 20 20 20   the record.    
17800 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66  ** immediately f
17810 6f 6c 6c 6f 77 20 74 68 65 20 68 65 61 64 65 72  ollow the header
17820 2e 20 2a 2f 0a 20 20 20 20 6a 20 2b 3d 20 73 71  . */.    j += sq
17830 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 50  lite3VdbeSerialP
17840 75 74 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 6a  ut(&zNewRecord[j
17850 5d 2c 20 70 52 65 63 2c 20 73 65 72 69 61 6c 5f  ], pRec, serial_
17860 74 79 70 65 29 3b 20 2f 2a 20 63 6f 6e 74 65 6e  type); /* conten
17870 74 20 2a 2f 0a 20 20 7d 77 68 69 6c 65 28 20 28  t */.  }while( (
17880 2b 2b 70 52 65 63 29 3c 3d 70 4c 61 73 74 20 29  ++pRec)<=pLast )
17890 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3d 3d 6e  ;.  assert( i==n
178a0 48 64 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Hdr );.  assert(
178b0 20 6a 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a 20 20   j==nByte );..  
178c0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
178d0 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
178e0 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
178f0 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74  ursor) );.  pOut
17900 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65  ->n = (int)nByte
17910 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
17920 3d 20 4d 45 4d 5f 42 6c 6f 62 3b 0a 20 20 69 66  = MEM_Blob;.  if
17930 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70  ( nZero ){.    p
17940 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e  Out->u.nZero = n
17950 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  Zero;.    pOut->
17960 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72  flags |= MEM_Zer
17970 6f 3b 0a 20 20 7d 0a 20 20 52 45 47 49 53 54 45  o;.  }.  REGISTE
17980 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
17990 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45   pOut);.  UPDATE
179a0 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
179b0 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
179c0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 75 6e  ./* Opcode: Coun
179d0 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
179e0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
179f0 3d 63 6f 75 6e 74 28 29 0a 2a 2a 0a 2a 2a 20 53  =count().**.** S
17a00 74 6f 72 65 20 74 68 65 20 6e 75 6d 62 65 72 20  tore the number 
17a10 6f 66 20 65 6e 74 72 69 65 73 20 28 61 6e 20 69  of entries (an i
17a20 6e 74 65 67 65 72 20 76 61 6c 75 65 29 20 69 6e  nteger value) in
17a30 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
17a40 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64 20 62  dex .** opened b
17a50 79 20 63 75 72 73 6f 72 20 50 31 20 69 6e 20 72  y cursor P1 in r
17a60 65 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a 23 69  egister P2.*/.#i
17a70 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
17a80 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63 61 73  T_BTREECOUNT.cas
17a90 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20 20 20  e OP_Count: {   
17aa0 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
17ab0 0a 20 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20  .  i64 nEntry;. 
17ac0 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
17ad0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  ;..  assert( p->
17ae0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e  apCsr[pOp->p1]->
17af0 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
17b00 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72  E_BTREE );.  pCr
17b10 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  sr = p->apCsr[pO
17b20 70 2d 3e 70 31 5d 2d 3e 75 63 2e 70 43 75 72 73  p->p1]->uc.pCurs
17b30 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  or;.  assert( pC
17b40 72 73 72 20 29 3b 0a 20 20 6e 45 6e 74 72 79 20  rsr );.  nEntry 
17b50 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65  = 0;  /* Not nee
17b60 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20  ded.  Only used 
17b70 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72  to silence a war
17b80 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d 20  ning. */.  rc = 
17b90 73 71 6c 69 74 65 33 42 74 72 65 65 43 6f 75 6e  sqlite3BtreeCoun
17ba0 74 28 70 43 72 73 72 2c 20 26 6e 45 6e 74 72 79  t(pCrsr, &nEntry
17bb0 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
17bc0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
17bd0 65 72 72 6f 72 3b 0a 20 20 70 4f 75 74 20 3d 20  error;.  pOut = 
17be0 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
17bf0 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e  , pOp);.  pOut->
17c00 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20  u.i = nEntry;.  
17c10 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
17c20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76 65  ./* Opcode: Save
17c30 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20  point P1 * * P4 
17c40 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65  *.**.** Open, re
17c50 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63  lease or rollbac
17c60 6b 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  k the savepoint 
17c70 6e 61 6d 65 64 20 62 79 20 70 61 72 61 6d 65 74  named by paramet
17c80 65 72 20 50 34 2c 20 64 65 70 65 6e 64 69 6e 67  er P4, depending
17c90 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75 65  .** on the value
17ca0 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20   of P1. To open 
17cb0 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 2c  a new savepoint,
17cc0 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61   P1==0. To relea
17cd0 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a  se (commit) an.*
17ce0 2a 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70  * existing savep
17cf0 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20  oint, P1==1, or 
17d00 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65  to rollback an e
17d10 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e  xisting savepoin
17d20 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65  t P1==2..*/.case
17d30 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b   OP_Savepoint: {
17d40 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20  .  int p1;      
17d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d60 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50     /* Value of P
17d70 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63  1 operand */.  c
17d80 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
17d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
17da0 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76 65 70 6f  * Name of savepo
17db0 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61  int */.  int nNa
17dc0 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20  me;.  Savepoint 
17dd0 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f 69  *pNew;.  Savepoi
17de0 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a  nt *pSavepoint;.
17df0 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d    Savepoint *pTm
17e00 70 3b 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f  p;.  int iSavepo
17e10 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a  int;.  int ii;..
17e20 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a    p1 = pOp->p1;.
17e30 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70    zName = pOp->p
17e40 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72  4.z;..  /* Asser
17e50 74 20 74 68 61 74 20 74 68 65 20 70 31 20 70 61  t that the p1 pa
17e60 72 61 6d 65 74 65 72 20 69 73 20 76 61 6c 69 64  rameter is valid
17e70 2e 20 41 6c 73 6f 20 74 68 61 74 20 69 66 20 74  . Also that if t
17e80 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a  here is no open.
17e90 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e    ** transaction
17ea0 2c 20 74 68 65 6e 20 74 68 65 72 65 20 63 61 6e  , then there can
17eb0 6e 6f 74 20 62 65 20 61 6e 79 20 73 61 76 65 70  not be any savep
17ec0 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61  oints. .  */.  a
17ed0 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65  ssert( db->pSave
17ee0 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e  point==0 || db->
17ef0 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b  autoCommit==0 );
17f00 0a 20 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53  .  assert( p1==S
17f10 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c  AVEPOINT_BEGIN||
17f20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
17f30 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50  LEASE||p1==SAVEP
17f40 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b  OINT_ROLLBACK );
17f50 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70  .  assert( db->p
17f60 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d  Savepoint || db-
17f70 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
17f80 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20  vepoint==0 );.  
17f90 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76  assert( checkSav
17fa0 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20  epointCount(db) 
17fb0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
17fc0 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 20 20  bIsReader );..  
17fd0 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  if( p1==SAVEPOIN
17fe0 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20 20 20 69  T_BEGIN ){.    i
17ff0 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74  f( db->nVdbeWrit
18000 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  e>0 ){.      /* 
18010 41 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20  A new savepoint 
18020 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61 74 65  cannot be create
18030 64 20 69 66 20 74 68 65 72 65 20 61 72 65 20 61  d if there are a
18040 63 74 69 76 65 20 77 72 69 74 65 20 0a 20 20 20  ctive write .   
18050 20 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73     ** statements
18060 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64   (i.e. open read
18070 2f 77 72 69 74 65 20 69 6e 63 72 65 6d 65 6e 74  /write increment
18080 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29  al blob handles)
18090 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
180a0 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
180b0 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65  r(p, "cannot ope
180c0 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 53 51  n savepoint - SQ
180d0 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
180e0 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
180f0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55    rc = SQLITE_BU
18100 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  SY;.    }else{. 
18110 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c       nName = sql
18120 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61  ite3Strlen30(zNa
18130 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  me);..#ifndef SQ
18140 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
18150 4c 54 41 42 4c 45 0a 20 20 20 20 20 20 2f 2a 20  LTABLE.      /* 
18160 54 68 69 73 20 63 61 6c 6c 20 69 73 20 4f 6b 20  This call is Ok 
18170 65 76 65 6e 20 69 66 20 74 68 69 73 20 73 61 76  even if this sav
18180 65 70 6f 69 6e 74 20 69 73 20 61 63 74 75 61 6c  epoint is actual
18190 6c 79 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ly a transaction
181a0 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f  .      ** savepo
181b0 69 6e 74 20 28 61 6e 64 20 74 68 65 72 65 66 6f  int (and therefo
181c0 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 70 72  re should not pr
181d0 6f 6d 70 74 20 78 53 61 76 65 70 6f 69 6e 74 28  ompt xSavepoint(
181e0 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20  )) callbacks..  
181f0 20 20 20 20 2a 2a 20 49 66 20 74 68 69 73 20 69      ** If this i
18200 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  s a transaction 
18210 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20  savepoint being 
18220 6f 70 65 6e 65 64 2c 20 69 74 20 69 73 20 67 75  opened, it is gu
18230 61 72 61 6e 74 65 65 64 0a 20 20 20 20 20 20 2a  aranteed.      *
18240 2a 20 74 68 61 74 20 74 68 65 20 64 62 2d 3e 61  * that the db->a
18250 56 54 72 61 6e 73 5b 5d 20 61 72 72 61 79 20 69  VTrans[] array i
18260 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20 20 20  s empty.  */.   
18270 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61     assert( db->a
18280 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20  utoCommit==0 || 
18290 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30 20 29  db->nVTrans==0 )
182a0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
182b0 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
182c0 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f  t(db, SAVEPOINT_
182d0 42 45 47 49 4e 2c 0a 20 20 20 20 20 20 20 20 20  BEGIN,.         
182e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182f0 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74         db->nStat
18300 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61 76 65 70  ement+db->nSavep
18310 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 69 66 28  oint);.      if(
18320 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
18330 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
18340 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66  to_error;.#endif
18350 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72 65 61 74  ..      /* Creat
18360 65 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  e a new savepoin
18370 74 20 73 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a  t structure. */.
18380 20 20 20 20 20 20 70 4e 65 77 20 3d 20 73 71 6c        pNew = sql
18390 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e  ite3DbMallocRawN
183a0 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28 53 61 76  N(db, sizeof(Sav
183b0 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29  epoint)+nName+1)
183c0 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4e 65 77  ;.      if( pNew
183d0 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4e 65 77   ){.        pNew
183e0 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72 20  ->zName = (char 
183f0 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20 20  *)&pNew[1];.    
18400 20 20 20 20 6d 65 6d 63 70 79 28 70 4e 65 77 2d      memcpy(pNew-
18410 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e  >zName, zName, n
18420 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20 20  Name+1);.    .  
18430 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72        /* If ther
18440 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72 61  e is no open tra
18450 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 6d  nsaction, then m
18460 61 72 6b 20 74 68 69 73 20 61 73 20 61 20 73 70  ark this as a sp
18470 65 63 69 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a  ecial.        **
18480 20 22 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61   "transaction sa
18490 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20 20  vepoint". */.   
184a0 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74       if( db->aut
184b0 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20  oCommit ){.     
184c0 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
184d0 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  mit = 0;.       
184e0 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63     db->isTransac
184f0 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20  tionSavepoint = 
18500 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  1;.        }else
18510 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  {.          db->
18520 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20  nSavepoint++;.  
18530 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20        }..       
18540 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e 65 77   /* Link the new
18550 20 73 61 76 65 70 6f 69 6e 74 20 69 6e 74 6f 20   savepoint into 
18560 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
18570 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f 0a 20  dle's list. */. 
18580 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 70 4e 65         pNew->pNe
18590 78 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f  xt = db->pSavepo
185a0 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  int;.        db-
185b0 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 4e  >pSavepoint = pN
185c0 65 77 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77  ew;.        pNew
185d0 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20  ->nDeferredCons 
185e0 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  = db->nDeferredC
185f0 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 70 4e 65  ons;.        pNe
18600 77 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  w->nDeferredImmC
18610 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72  ons = db->nDefer
18620 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20  redImmCons;.    
18630 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73    }.    }.  }els
18640 65 7b 0a 20 20 20 20 69 53 61 76 65 70 6f 69 6e  e{.    iSavepoin
18650 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46  t = 0;..    /* F
18660 69 6e 64 20 74 68 65 20 6e 61 6d 65 64 20 73 61  ind the named sa
18670 76 65 70 6f 69 6e 74 2e 20 49 66 20 74 68 65 72  vepoint. If ther
18680 65 20 69 73 20 6e 6f 20 73 75 63 68 20 73 61 76  e is no such sav
18690 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a  epoint, then an.
186a0 20 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20      ** an error 
186b0 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74  is returned to t
186c0 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20  he user.  */.   
186d0 20 66 6f 72 28 0a 20 20 20 20 20 20 70 53 61 76   for(.      pSav
186e0 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61  epoint = db->pSa
186f0 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20  vepoint; .      
18700 70 53 61 76 65 70 6f 69 6e 74 20 26 26 20 73 71  pSavepoint && sq
18710 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70 53 61  lite3StrICmp(pSa
18720 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20  vepoint->zName, 
18730 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 70 53  zName);.      pS
18740 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65  avepoint = pSave
18750 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20  point->pNext.   
18760 20 29 7b 0a 20 20 20 20 20 20 69 53 61 76 65 70   ){.      iSavep
18770 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20  oint++;.    }.  
18780 20 20 69 66 28 20 21 70 53 61 76 65 70 6f 69 6e    if( !pSavepoin
18790 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  t ){.      sqlit
187a0 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
187b0 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e  no such savepoin
187c0 74 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a  t: %s", zName);.
187d0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
187e0 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c  E_ERROR;.    }el
187f0 73 65 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65  se if( db->nVdbe
18800 57 72 69 74 65 3e 30 20 26 26 20 70 31 3d 3d 53  Write>0 && p1==S
18810 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
18820 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 74 20   ){.      /* It 
18830 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20  is not possible 
18840 74 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d  to release (comm
18850 69 74 29 20 61 20 73 61 76 65 70 6f 69 6e 74 20  it) a savepoint 
18860 69 66 20 74 68 65 72 65 20 61 72 65 20 0a 20 20  if there are .  
18870 20 20 20 20 2a 2a 20 61 63 74 69 76 65 20 77 72      ** active wr
18880 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  ite statements..
18890 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73        */.      s
188a0 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
188b0 70 2c 20 22 63 61 6e 6e 6f 74 20 72 65 6c 65 61  p, "cannot relea
188c0 73 65 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 22  se savepoint - "
188d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
188e0 20 20 20 20 20 20 20 20 20 20 20 22 53 51 4c 20             "SQL 
188f0 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
18900 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20  ogress");.      
18910 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
18920 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20  ;.    }else{..  
18930 20 20 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65      /* Determine
18940 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
18950 74 68 69 73 20 69 73 20 61 20 74 72 61 6e 73 61  this is a transa
18960 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e  ction savepoint.
18970 20 49 66 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a   If so,.      **
18980 20 61 6e 64 20 74 68 69 73 20 69 73 20 61 20 52   and this is a R
18990 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20  ELEASE command, 
189a0 74 68 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74  then the current
189b0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20   transaction .  
189c0 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74      ** is commit
189d0 74 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20  ted. .      */. 
189e0 20 20 20 20 20 69 6e 74 20 69 73 54 72 61 6e 73       int isTrans
189f0 61 63 74 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f  action = pSavepo
18a00 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26  int->pNext==0 &&
18a10 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
18a20 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20  onSavepoint;.   
18a30 20 20 20 69 66 28 20 69 73 54 72 61 6e 73 61 63     if( isTransac
18a40 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41 56 45  tion && p1==SAVE
18a50 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b  POINT_RELEASE ){
18a60 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 72 63  .        if( (rc
18a70 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68   = sqlite3VdbeCh
18a80 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51  eckFk(p, 1))!=SQ
18a90 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
18aa0 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
18ab0 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d  eturn;.        }
18ac0 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74  .        db->aut
18ad0 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20  oCommit = 1;.   
18ae0 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
18af0 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c  VdbeHalt(p)==SQL
18b00 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
18b10 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69        p->pc = (i
18b20 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a  nt)(pOp - aOp);.
18b30 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75            db->au
18b40 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20  toCommit = 0;.  
18b50 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20          p->rc = 
18b60 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
18b70 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  ;.          goto
18b80 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
18b90 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
18ba0 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
18bb0 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a  nSavepoint = 0;.
18bc0 20 20 20 20 20 20 20 20 72 63 20 3d 20 70 2d 3e          rc = p->
18bd0 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  rc;.      }else{
18be0 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 73 53  .        int isS
18bf0 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20 20 20  chemaChange;.   
18c00 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20       iSavepoint 
18c10 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  = db->nSavepoint
18c20 20 2d 20 69 53 61 76 65 70 6f 69 6e 74 20 2d 20   - iSavepoint - 
18c30 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  1;.        if( p
18c40 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  1==SAVEPOINT_ROL
18c50 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20 20 20 20  LBACK ){.       
18c60 20 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67     isSchemaChang
18c70 65 20 3d 20 28 64 62 2d 3e 6d 44 62 46 6c 61 67  e = (db->mDbFlag
18c80 73 20 26 20 44 42 46 4c 41 47 5f 53 63 68 65 6d  s & DBFLAG_Schem
18c90 61 43 68 61 6e 67 65 29 21 3d 30 3b 0a 20 20 20  aChange)!=0;.   
18ca0 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b         for(ii=0;
18cb0 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b   ii<db->nDb; ii+
18cc0 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  +){.            
18cd0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
18ce0 65 54 72 69 70 41 6c 6c 43 75 72 73 6f 72 73 28  eTripAllCursors(
18cf0 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c  db->aDb[ii].pBt,
18d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 41          SQLITE_A
18d30 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 2c 0a 20  BORT_ROLLBACK,. 
18d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d60 20 20 20 20 20 20 69 73 53 63 68 65 6d 61 43 68        isSchemaCh
18d70 61 6e 67 65 3d 3d 30 29 3b 0a 20 20 20 20 20 20  ange==0);.      
18d80 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
18d90 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
18da0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
18db0 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  r;.          }. 
18dc0 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
18dd0 20 20 20 20 20 20 20 20 69 73 53 63 68 65 6d 61          isSchema
18de0 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 20 20  Change = 0;.    
18df0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 66 6f      }.        fo
18e00 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e  r(ii=0; ii<db->n
18e10 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20  Db; ii++){.     
18e20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
18e30 33 42 74 72 65 65 53 61 76 65 70 6f 69 6e 74 28  3BtreeSavepoint(
18e40 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c  db->aDb[ii].pBt,
18e50 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29   p1, iSavepoint)
18e60 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
18e70 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
18e80 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 6f 74  .            got
18e90 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
18ea0 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20  rror;.          
18eb0 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
18ec0 20 20 20 20 69 66 28 20 69 73 53 63 68 65 6d 61      if( isSchema
18ed0 43 68 61 6e 67 65 20 29 7b 0a 20 20 20 20 20 20  Change ){.      
18ee0 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72      sqlite3Expir
18ef0 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
18f00 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 20 20 20  nts(db);.       
18f10 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 41     sqlite3ResetA
18f20 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65  llSchemasOfConne
18f30 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 20 20 20  ction(db);.     
18f40 20 20 20 20 20 64 62 2d 3e 6d 44 62 46 6c 61 67       db->mDbFlag
18f50 73 20 7c 3d 20 44 42 46 4c 41 47 5f 53 63 68 65  s |= DBFLAG_Sche
18f60 6d 61 43 68 61 6e 67 65 3b 0a 20 20 20 20 20 20  maChange;.      
18f70 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20    }.      }.  . 
18f80 20 20 20 20 20 2f 2a 20 52 65 67 61 72 64 6c 65       /* Regardle
18f90 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 74 68  ss of whether th
18fa0 69 73 20 69 73 20 61 20 52 45 4c 45 41 53 45 20  is is a RELEASE 
18fb0 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65 73  or ROLLBACK, des
18fc0 74 72 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20 20  troy all .      
18fd0 2a 2a 20 73 61 76 65 70 6f 69 6e 74 73 20 6e 65  ** savepoints ne
18fe0 73 74 65 64 20 69 6e 73 69 64 65 20 6f 66 20 74  sted inside of t
18ff0 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69  he savepoint bei
19000 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e 20  ng operated on. 
19010 2a 2f 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20  */.      while( 
19020 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21 3d  db->pSavepoint!=
19030 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20  pSavepoint ){.  
19040 20 20 20 20 20 20 70 54 6d 70 20 3d 20 64 62 2d        pTmp = db-
19050 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20  >pSavepoint;.   
19060 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f       db->pSavepo
19070 69 6e 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65 78  int = pTmp->pNex
19080 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  t;.        sqlit
19090 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 54 6d  e3DbFree(db, pTm
190a0 70 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  p);.        db->
190b0 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20  nSavepoint--;.  
190c0 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20      }..      /* 
190d0 49 66 20 69 74 20 69 73 20 61 20 52 45 4c 45 41  If it is a RELEA
190e0 53 45 2c 20 74 68 65 6e 20 64 65 73 74 72 6f 79  SE, then destroy
190f0 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62   the savepoint b
19100 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e  eing operated on
19110 20 0a 20 20 20 20 20 20 2a 2a 20 74 6f 6f 2e 20   .      ** too. 
19120 49 66 20 69 74 20 69 73 20 61 20 52 4f 4c 4c 42  If it is a ROLLB
19130 41 43 4b 20 54 4f 2c 20 74 68 65 6e 20 73 65 74  ACK TO, then set
19140 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64   the number of d
19150 65 66 65 72 72 65 64 20 0a 20 20 20 20 20 20 2a  eferred .      *
19160 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  * constraint vio
19170 6c 61 74 69 6f 6e 73 20 70 72 65 73 65 6e 74 20  lations present 
19180 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
19190 74 6f 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f  to the value sto
191a0 72 65 64 0a 20 20 20 20 20 20 2a 2a 20 77 68 65  red.      ** whe
191b0 6e 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  n the savepoint 
191c0 77 61 73 20 63 72 65 61 74 65 64 2e 20 20 2a 2f  was created.  */
191d0 0a 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53  .      if( p1==S
191e0 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
191f0 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
19200 72 74 28 20 70 53 61 76 65 70 6f 69 6e 74 3d 3d  rt( pSavepoint==
19210 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 29  db->pSavepoint )
19220 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53  ;.        db->pS
19230 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65  avepoint = pSave
19240 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20 20  point->pNext;.  
19250 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
19260 72 65 65 28 64 62 2c 20 70 53 61 76 65 70 6f 69  ree(db, pSavepoi
19270 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  nt);.        if(
19280 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20   !isTransaction 
19290 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  ){.          db-
192a0 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20  >nSavepoint--;. 
192b0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
192c0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 64 62  else{.        db
192d0 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20  ->nDeferredCons 
192e0 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44  = pSavepoint->nD
192f0 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20  eferredCons;.   
19300 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72       db->nDeferr
19310 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 70 53 61 76  edImmCons = pSav
19320 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65  epoint->nDeferre
19330 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20  dImmCons;.      
19340 7d 0a 0a 20 20 20 20 20 20 69 66 28 20 21 69 73  }..      if( !is
19350 54 72 61 6e 73 61 63 74 69 6f 6e 20 7c 7c 20 70  Transaction || p
19360 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  1==SAVEPOINT_ROL
19370 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20 20 20 20  LBACK ){.       
19380 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
19390 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 70  bSavepoint(db, p
193a0 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a  1, iSavepoint);.
193b0 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
193c0 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
193d0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
193e0 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
193f0 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20   }.  }.  if( rc 
19400 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
19410 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 62 72  _to_error;..  br
19420 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
19430 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20 50 31  e: AutoCommit P1
19440 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
19450 53 65 74 20 74 68 65 20 64 61 74 61 62 61 73 65  Set the database
19460 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61   auto-commit fla
19470 67 20 74 6f 20 50 31 20 28 31 20 6f 72 20 30 29  g to P1 (1 or 0)
19480 2e 20 49 66 20 50 32 20 69 73 20 74 72 75 65 2c  . If P2 is true,
19490 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e   roll.** back an
194a0 79 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74 69  y currently acti
194b0 76 65 20 62 74 72 65 65 20 74 72 61 6e 73 61 63  ve btree transac
194c0 74 69 6f 6e 73 2e 20 49 66 20 74 68 65 72 65 20  tions. If there 
194d0 61 72 65 20 61 6e 79 20 61 63 74 69 76 65 0a 2a  are any active.*
194e0 2a 20 56 4d 73 20 28 61 70 61 72 74 20 66 72 6f  * VMs (apart fro
194f0 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20 74 68 65  m this one), the
19500 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66 61 69  n a ROLLBACK fai
19510 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20 66 61  ls.  A COMMIT fa
19520 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72 65 20  ils if.** there 
19530 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74 69  are active writi
19540 6e 67 20 56 4d 73 20 6f 72 20 61 63 74 69 76 65  ng VMs or active
19550 20 56 4d 73 20 74 68 61 74 20 75 73 65 20 73 68   VMs that use sh
19560 61 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a  ared cache..**.*
19570 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
19580 6f 6e 20 63 61 75 73 65 73 20 74 68 65 20 56 4d  on causes the VM
19590 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73   to halt..*/.cas
195a0 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a  e OP_AutoCommit:
195b0 20 7b 0a 20 20 69 6e 74 20 64 65 73 69 72 65 64   {.  int desired
195c0 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e  AutoCommit;.  in
195d0 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a 0a 20 20  t iRollback;..  
195e0 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
195f0 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69  t = pOp->p1;.  i
19600 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f 70 2d 3e  Rollback = pOp->
19610 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65  p2;.  assert( de
19620 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d  siredAutoCommit=
19630 3d 31 20 7c 7c 20 64 65 73 69 72 65 64 41 75 74  =1 || desiredAut
19640 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20  oCommit==0 );.  
19650 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41  assert( desiredA
19660 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20  utoCommit==1 || 
19670 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a  iRollback==0 );.
19680 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 56    assert( db->nV
19690 64 62 65 41 63 74 69 76 65 3e 30 20 29 3b 20 20  dbeActive>0 );  
196a0 2f 2a 20 41 74 20 6c 65 61 73 74 20 74 68 69 73  /* At least this
196b0 20 6f 6e 65 20 56 4d 20 69 73 20 61 63 74 69 76   one VM is activ
196c0 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  e */.  assert( p
196d0 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a  ->bIsReader );..
196e0 20 20 69 66 28 20 64 65 73 69 72 65 64 41 75 74    if( desiredAut
196f0 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75 74  oCommit!=db->aut
19700 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69  oCommit ){.    i
19710 66 28 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a  f( iRollback ){.
19720 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 65        assert( de
19730 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d  siredAutoCommit=
19740 3d 31 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  =1 );.      sqli
19750 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64  te3RollbackAll(d
19760 62 2c 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f  b, SQLITE_ABORT_
19770 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20 20 20 20  ROLLBACK);.     
19780 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
19790 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  = 1;.    }else i
197a0 66 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  f( desiredAutoCo
197b0 6d 6d 69 74 20 26 26 20 64 62 2d 3e 6e 56 64 62  mmit && db->nVdb
197c0 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20  eWrite>0 ){.    
197d0 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73    /* If this ins
197e0 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  truction impleme
197f0 6e 74 73 20 61 20 43 4f 4d 4d 49 54 20 61 6e 64  nts a COMMIT and
19800 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65 20 77   other VMs are w
19810 72 69 74 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20  riting.      ** 
19820 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20  return an error 
19830 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20  indicating that 
19840 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75  the other VMs mu
19850 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73  st complete firs
19860 74 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  t. .      */.   
19870 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
19880 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 63  ror(p, "cannot c
19890 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63 74 69 6f  ommit transactio
198a0 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20 20 20  n - ".          
198b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198c0 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20  "SQL statements 
198d0 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20  in progress");. 
198e0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
198f0 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74  _BUSY;.      got
19900 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
19910 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 20  rror;.    }else 
19920 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65  if( (rc = sqlite
19930 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20  3VdbeCheckFk(p, 
19940 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  1))!=SQLITE_OK )
19950 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62  {.      goto vdb
19960 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 65  e_return;.    }e
19970 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 61  lse{.      db->a
19980 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29  utoCommit = (u8)
19990 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
199a0 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  t;.    }.    if(
199b0 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
199c0 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59  (p)==SQLITE_BUSY
199d0 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63 20   ){.      p->pc 
199e0 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f  = (int)(pOp - aO
199f0 70 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75  p);.      db->au
19a00 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28  toCommit = (u8)(
19a10 31 2d 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  1-desiredAutoCom
19a20 6d 69 74 29 3b 0a 20 20 20 20 20 20 70 2d 3e 72  mit);.      p->r
19a30 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  c = rc = SQLITE_
19a40 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f  BUSY;.      goto
19a50 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
19a60 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20    }.    assert( 
19a70 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3d 3d  db->nStatement==
19a80 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 );.    sqlite3
19a90 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28  CloseSavepoints(
19aa0 64 62 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e  db);.    if( p->
19ab0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
19ac0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
19ad0 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c  TE_DONE;.    }el
19ae0 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  se{.      rc = S
19af0 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
19b00 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65   }.    goto vdbe
19b10 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73 65  _return;.  }else
19b20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
19b30 65 45 72 72 6f 72 28 70 2c 0a 20 20 20 20 20 20  eError(p,.      
19b40 20 20 28 21 64 65 73 69 72 65 64 41 75 74 6f 43    (!desiredAutoC
19b50 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74 20 73  ommit)?"cannot s
19b60 74 61 72 74 20 61 20 74 72 61 6e 73 61 63 74 69  tart a transacti
19b70 6f 6e 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e  on within a tran
19b80 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20  saction":(.     
19b90 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29 3f 22     (iRollback)?"
19ba0 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20  cannot rollback 
19bb0 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e  - no transaction
19bc0 20 69 73 20 61 63 74 69 76 65 22 3a 0a 20 20 20   is active":.   
19bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19be0 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d  "cannot commit -
19bf0 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20   no transaction 
19c00 69 73 20 61 63 74 69 76 65 22 29 29 3b 0a 20 20  is active"));.  
19c10 20 20 20 20 20 20 20 0a 20 20 20 20 72 63 20 3d         .    rc =
19c20 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
19c30 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
19c40 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
19c50 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
19c60 70 63 6f 64 65 3a 20 54 72 61 6e 73 61 63 74 69  pcode: Transacti
19c70 6f 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50  on P1 P2 P3 P4 P
19c80 35 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20  5.**.** Begin a 
19c90 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 64  transaction on d
19ca0 61 74 61 62 61 73 65 20 50 31 20 69 66 20 61 20  atabase P1 if a 
19cb0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
19cc0 6f 74 20 61 6c 72 65 61 64 79 0a 2a 2a 20 61 63  ot already.** ac
19cd0 74 69 76 65 2e 0a 2a 2a 20 49 66 20 50 32 20 69  tive..** If P2 i
19ce0 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
19cf0 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63   a write-transac
19d00 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2c  tion is started,
19d10 20 6f 72 20 69 66 20 61 20 0a 2a 2a 20 72 65 61   or if a .** rea
19d20 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  d-transaction is
19d30 20 61 6c 72 65 61 64 79 20 61 63 74 69 76 65 2c   already active,
19d40 20 69 74 20 69 73 20 75 70 67 72 61 64 65 64 20   it is upgraded 
19d50 74 6f 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73  to a write-trans
19d60 61 63 74 69 6f 6e 2e 0a 2a 2a 20 49 66 20 50 32  action..** If P2
19d70 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61   is zero, then a
19d80 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69 6f   read-transactio
19d90 6e 20 69 73 20 73 74 61 72 74 65 64 2e 0a 2a 2a  n is started..**
19da0 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e  .** P1 is the in
19db0 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62  dex of the datab
19dc0 61 73 65 20 66 69 6c 65 20 6f 6e 20 77 68 69 63  ase file on whic
19dd0 68 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  h the transactio
19de0 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e  n is.** started.
19df0 20 20 49 6e 64 65 78 20 30 20 69 73 20 74 68 65    Index 0 is the
19e00 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
19e10 69 6c 65 20 61 6e 64 20 69 6e 64 65 78 20 31 20  ile and index 1 
19e20 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75  is the.** file u
19e30 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72  sed for temporar
19e40 79 20 74 61 62 6c 65 73 2e 20 20 49 6e 64 69 63  y tables.  Indic
19e50 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20  es of 2 or more 
19e60 61 72 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20  are used for.** 
19e70 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
19e80 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20 77  es..**.** If a w
19e90 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e  rite-transaction
19ea0 20 69 73 20 73 74 61 72 74 65 64 20 61 6e 64 20   is started and 
19eb0 74 68 65 20 56 64 62 65 2e 75 73 65 73 53 74 6d  the Vdbe.usesStm
19ec0 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67 20 69 73  tJournal flag is
19ed0 0a 2a 2a 20 74 72 75 65 20 28 74 68 69 73 20 66  .** true (this f
19ee0 6c 61 67 20 69 73 20 73 65 74 20 69 66 20 74 68  lag is set if th
19ef0 65 20 56 64 62 65 20 6d 61 79 20 6d 6f 64 69 66  e Vdbe may modif
19f00 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  y more than one 
19f10 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a 2a 20 74  row and may.** t
19f20 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78  hrow an ABORT ex
19f30 63 65 70 74 69 6f 6e 29 2c 20 61 20 73 74 61 74  ception), a stat
19f40 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
19f50 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f 70  n may also be op
19f60 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70  ened..** More sp
19f70 65 63 69 66 69 63 61 6c 6c 79 2c 20 61 20 73 74  ecifically, a st
19f80 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
19f90 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64 20 69 66  ion is opened if
19fa0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  f the database.*
19fb0 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  * connection is 
19fc0 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74 20 69 6e  currently not in
19fd0 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65   autocommit mode
19fe0 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20 61 72  , or if there ar
19ff0 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63 74 69 76  e other.** activ
1a000 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 41 20  e statements. A 
1a010 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
1a020 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20 74 68 65  ction allows the
1a030 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79   changes made by
1a040 20 74 68 69 73 0a 2a 2a 20 56 44 42 45 20 74 6f   this.** VDBE to
1a050 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20   be rolled back 
1a060 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 77  after an error w
1a070 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f  ithout having to
1a080 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a 2a   roll back the.*
1a090 2a 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63  * entire transac
1a0a0 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65 72 72 6f  tion. If no erro
1a0b0 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  r is encountered
1a0c0 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  , the statement 
1a0d0 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 77  transaction.** w
1a0e0 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ill automaticall
1a0f0 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68  y commit when th
1a100 65 20 56 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a  e VDBE halts..**
1a110 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65  .** If P5!=0 the
1a120 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 61 6c  n this opcode al
1a130 73 6f 20 63 68 65 63 6b 73 20 74 68 65 20 73 63  so checks the sc
1a140 68 65 6d 61 20 63 6f 6f 6b 69 65 20 61 67 61 69  hema cookie agai
1a150 6e 73 74 20 50 33 0a 2a 2a 20 61 6e 64 20 74 68  nst P3.** and th
1a160 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61 74  e schema generat
1a170 69 6f 6e 20 63 6f 75 6e 74 65 72 20 61 67 61 69  ion counter agai
1a180 6e 73 74 20 50 34 2e 0a 2a 2a 20 54 68 65 20 63  nst P4..** The c
1a190 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 20 69 74  ookie changes it
1a1a0 73 20 76 61 6c 75 65 20 77 68 65 6e 65 76 65 72  s value whenever
1a1b0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
1a1c0 68 65 6d 61 20 63 68 61 6e 67 65 73 2e 0a 2a 2a  hema changes..**
1a1d0 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20   This operation 
1a1e0 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 63  is used to detec
1a1f0 74 20 77 68 65 6e 20 74 68 61 74 20 74 68 65 20  t when that the 
1a200 63 6f 6f 6b 69 65 20 68 61 73 20 63 68 61 6e 67  cookie has chang
1a210 65 64 0a 2a 2a 20 61 6e 64 20 74 68 61 74 20 74  ed.** and that t
1a220 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65  he current proce
1a230 73 73 20 6e 65 65 64 73 20 74 6f 20 72 65 72 65  ss needs to rere
1a240 61 64 20 74 68 65 20 73 63 68 65 6d 61 2e 20 20  ad the schema.  
1a250 49 66 20 74 68 65 20 73 63 68 65 6d 61 0a 2a 2a  If the schema.**
1a260 20 63 6f 6f 6b 69 65 20 69 6e 20 50 33 20 64 69   cookie in P3 di
1a270 66 66 65 72 73 20 66 72 6f 6d 20 74 68 65 20 73  ffers from the s
1a280 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 69 6e 20  chema cookie in 
1a290 74 68 65 20 64 61 74 61 62 61 73 65 20 68 65 61  the database hea
1a2a0 64 65 72 20 6f 72 0a 2a 2a 20 69 66 20 74 68 65  der or.** if the
1a2b0 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61 74 69   schema generati
1a2c0 6f 6e 20 63 6f 75 6e 74 65 72 20 69 6e 20 50 34  on counter in P4
1a2d0 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68   differs from th
1a2e0 65 20 63 75 72 72 65 6e 74 0a 2a 2a 20 67 65 6e  e current.** gen
1a2f0 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2c  eration counter,
1a300 20 74 68 65 6e 20 61 6e 20 53 51 4c 49 54 45 5f   then an SQLITE_
1a310 53 43 48 45 4d 41 20 65 72 72 6f 72 20 69 73 20  SCHEMA error is 
1a320 72 61 69 73 65 64 20 61 6e 64 20 65 78 65 63 75  raised and execu
1a330 74 69 6f 6e 0a 2a 2a 20 68 61 6c 74 73 2e 20 20  tion.** halts.  
1a340 54 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70  The sqlite3_step
1a350 28 29 20 77 72 61 70 70 65 72 20 66 75 6e 63 74  () wrapper funct
1a360 69 6f 6e 20 6d 69 67 68 74 20 74 68 65 6e 20 72  ion might then r
1a370 65 70 72 65 70 61 72 65 20 74 68 65 0a 2a 2a 20  eprepare the.** 
1a380 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 72 65  statement and re
1a390 72 75 6e 20 69 74 20 66 72 6f 6d 20 74 68 65 20  run it from the 
1a3a0 62 65 67 69 6e 6e 69 6e 67 2e 0a 2a 2f 0a 63 61  beginning..*/.ca
1a3b0 73 65 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f  se OP_Transactio
1a3c0 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a 70 42  n: {.  Btree *pB
1a3d0 74 3b 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a  t;.  int iMeta;.
1a3e0 20 20 69 6e 74 20 69 47 65 6e 3b 0a 0a 20 20 61    int iGen;..  a
1a3f0 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
1a400 64 65 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  der );.  assert(
1a410 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
1a420 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b  || pOp->p2==0 );
1a430 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1a440 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1a450 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
1a460 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
1a470 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
1a480 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 69 66 28  Op->p1) );.  if(
1a490 20 70 4f 70 2d 3e 70 32 20 26 26 20 28 64 62 2d   pOp->p2 && (db-
1a4a0 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
1a4b0 51 75 65 72 79 4f 6e 6c 79 29 21 3d 30 20 29 7b  QueryOnly)!=0 ){
1a4c0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
1a4d0 5f 52 45 41 44 4f 4e 4c 59 3b 0a 20 20 20 20 67  _READONLY;.    g
1a4e0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1a4f0 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 42  _error;.  }.  pB
1a500 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
1a510 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28  >p1].pBt;..  if(
1a520 20 70 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d   pBt ){.    rc =
1a530 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67   sqlite3BtreeBeg
1a540 69 6e 54 72 61 6e 73 28 70 42 74 2c 20 70 4f 70  inTrans(pBt, pOp
1a550 2d 3e 70 32 29 3b 0a 20 20 20 20 74 65 73 74 63  ->p2);.    testc
1a560 61 73 65 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ase( rc==SQLITE_
1a570 42 55 53 59 5f 53 4e 41 50 53 48 4f 54 20 29 3b  BUSY_SNAPSHOT );
1a580 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72  .    testcase( r
1a590 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 5f 52  c==SQLITE_BUSY_R
1a5a0 45 43 4f 56 45 52 59 20 29 3b 0a 20 20 20 20 69  ECOVERY );.    i
1a5b0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1a5c0 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 72   ){.      if( (r
1a5d0 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f  c&0xff)==SQLITE_
1a5e0 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20  BUSY ){.        
1a5f0 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f  p->pc = (int)(pO
1a600 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20 20  p - aOp);.      
1a610 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20    p->rc = rc;.  
1a620 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
1a630 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a  return;.      }.
1a640 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
1a650 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1a660 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 70 4f     }..    if( pO
1a670 70 2d 3e 70 32 20 26 26 20 70 2d 3e 75 73 65 73  p->p2 && p->uses
1a680 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20 20  StmtJournal .   
1a690 20 20 26 26 20 28 64 62 2d 3e 61 75 74 6f 43 6f    && (db->autoCo
1a6a0 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e  mmit==0 || db->n
1a6b0 56 64 62 65 52 65 61 64 3e 31 29 20 0a 20 20 20  VdbeRead>1) .   
1a6c0 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
1a6d0 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 73  ( sqlite3BtreeIs
1a6e0 49 6e 54 72 61 6e 73 28 70 42 74 29 20 29 3b 0a  InTrans(pBt) );.
1a6f0 20 20 20 20 20 20 69 66 28 20 70 2d 3e 69 53 74        if( p->iSt
1a700 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20 20  atement==0 ){.  
1a710 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62        assert( db
1a720 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30 20  ->nStatement>=0 
1a730 26 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e  && db->nSavepoin
1a740 74 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20  t>=0 );.        
1a750 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b  db->nStatement++
1a760 3b 20 0a 20 20 20 20 20 20 20 20 70 2d 3e 69 53  ; .        p->iS
1a770 74 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e  tatement = db->n
1a780 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e  Savepoint + db->
1a790 6e 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20  nStatement;.    
1a7a0 20 20 7d 0a 0a 20 20 20 20 20 20 72 63 20 3d 20    }..      rc = 
1a7b0 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
1a7c0 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49  oint(db, SAVEPOI
1a7d0 4e 54 5f 42 45 47 49 4e 2c 20 70 2d 3e 69 53 74  NT_BEGIN, p->iSt
1a7e0 61 74 65 6d 65 6e 74 2d 31 29 3b 0a 20 20 20 20  atement-1);.    
1a7f0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1a800 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72  _OK ){.        r
1a810 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1a820 42 65 67 69 6e 53 74 6d 74 28 70 42 74 2c 20 70  BeginStmt(pBt, p
1a830 2d 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a 20  ->iStatement);. 
1a840 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
1a850 20 53 74 6f 72 65 20 74 68 65 20 63 75 72 72 65   Store the curre
1a860 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  nt value of the 
1a870 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 73  database handles
1a880 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72   deferred constr
1a890 61 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63 6f  aint.      ** co
1a8a0 75 6e 74 65 72 2e 20 49 66 20 74 68 65 20 73 74  unter. If the st
1a8b0 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
1a8c0 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20  ion needs to be 
1a8d0 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20 20  rolled back,.   
1a8e0 20 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20     ** the value 
1a8f0 6f 66 20 74 68 69 73 20 63 6f 75 6e 74 65 72 20  of this counter 
1a900 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65 73 74  needs to be rest
1a910 6f 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20 20  ored too.  */.  
1a920 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 43      p->nStmtDefC
1a930 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72  ons = db->nDefer
1a940 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 70  redCons;.      p
1a950 2d 3e 6e 53 74 6d 74 44 65 66 49 6d 6d 43 6f 6e  ->nStmtDefImmCon
1a960 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
1a970 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 7d 0a  dImmCons;.    }.
1a980 0a 20 20 20 20 2f 2a 20 47 61 74 68 65 72 20 74  .    /* Gather t
1a990 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  he schema versio
1a9a0 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 68 65  n number for che
1a9b0 63 6b 69 6e 67 3a 0a 20 20 20 20 2a 2a 20 49 4d  cking:.    ** IM
1a9c0 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a  PLEMENTATION-OF:
1a9d0 20 52 2d 30 33 31 38 39 2d 35 31 31 33 35 20 41   R-03189-51135 A
1a9e0 73 20 65 61 63 68 20 53 51 4c 20 73 74 61 74 65  s each SQL state
1a9f0 6d 65 6e 74 20 72 75 6e 73 2c 20 74 68 65 20 73  ment runs, the s
1aa00 63 68 65 6d 61 0a 20 20 20 20 2a 2a 20 76 65 72  chema.    ** ver
1aa10 73 69 6f 6e 20 69 73 20 63 68 65 63 6b 65 64 20  sion is checked 
1aa20 74 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 74  to ensure that t
1aa30 68 65 20 73 63 68 65 6d 61 20 68 61 73 20 6e 6f  he schema has no
1aa40 74 20 63 68 61 6e 67 65 64 20 73 69 6e 63 65 20  t changed since 
1aa50 74 68 65 0a 20 20 20 20 2a 2a 20 53 51 4c 20 73  the.    ** SQL s
1aa60 74 61 74 65 6d 65 6e 74 20 77 61 73 20 70 72 65  tatement was pre
1aa70 70 61 72 65 64 2e 0a 20 20 20 20 2a 2f 0a 20 20  pared..    */.  
1aa80 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65    sqlite3BtreeGe
1aa90 74 4d 65 74 61 28 70 42 74 2c 20 42 54 52 45 45  tMeta(pBt, BTREE
1aaa0 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 2c  _SCHEMA_VERSION,
1aab0 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b   (u32 *)&iMeta);
1aac0 0a 20 20 20 20 69 47 65 6e 20 3d 20 64 62 2d 3e  .    iGen = db->
1aad0 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63  aDb[pOp->p1].pSc
1aae0 68 65 6d 61 2d 3e 69 47 65 6e 65 72 61 74 69 6f  hema->iGeneratio
1aaf0 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  n;.  }else{.    
1ab00 69 47 65 6e 20 3d 20 69 4d 65 74 61 20 3d 20 30  iGen = iMeta = 0
1ab10 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
1ab20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f  pOp->p5==0 || pO
1ab30 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
1ab40 54 33 32 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  T32 );.  if( pOp
1ab50 2d 3e 70 35 20 26 26 20 28 69 4d 65 74 61 21 3d  ->p5 && (iMeta!=
1ab60 70 4f 70 2d 3e 70 33 20 7c 7c 20 69 47 65 6e 21  pOp->p3 || iGen!
1ab70 3d 70 4f 70 2d 3e 70 34 2e 69 29 20 29 7b 0a 20  =pOp->p4.i) ){. 
1ab80 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
1ab90 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29  (db, p->zErrMsg)
1aba0 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67  ;.    p->zErrMsg
1abb0 20 3d 20 73 71 6c 69 74 65 33 44 62 53 74 72 44   = sqlite3DbStrD
1abc0 75 70 28 64 62 2c 20 22 64 61 74 61 62 61 73 65  up(db, "database
1abd0 20 73 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e   schema has chan
1abe0 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66  ged");.    /* If
1abf0 20 74 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b   the schema-cook
1ac00 69 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ie from the data
1ac10 62 61 73 65 20 66 69 6c 65 20 6d 61 74 63 68 65  base file matche
1ac20 73 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20  s the cookie .  
1ac30 20 20 2a 2a 20 73 74 6f 72 65 64 20 77 69 74 68    ** stored with
1ac40 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72   the in-memory r
1ac50 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
1ac60 20 74 68 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a   the schema, do.
1ac70 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61      ** not reloa
1ac80 64 20 74 68 65 20 73 63 68 65 6d 61 20 66 72 6f  d the schema fro
1ac90 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  m the database f
1aca0 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20  ile..    **.    
1acb0 2a 2a 20 49 66 20 76 69 72 74 75 61 6c 2d 74 61  ** If virtual-ta
1acc0 62 6c 65 73 20 61 72 65 20 69 6e 20 75 73 65 2c  bles are in use,
1acd0 20 74 68 69 73 20 69 73 20 6e 6f 74 20 6a 75 73   this is not jus
1ace0 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f  t an optimizatio
1acf0 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c  n..    ** Often,
1ad00 20 76 2d 74 61 62 6c 65 73 20 73 74 6f 72 65 20   v-tables store 
1ad10 74 68 65 69 72 20 64 61 74 61 20 69 6e 20 6f 74  their data in ot
1ad20 68 65 72 20 53 51 4c 69 74 65 20 74 61 62 6c 65  her SQLite table
1ad30 73 2c 20 77 68 69 63 68 0a 20 20 20 20 2a 2a 20  s, which.    ** 
1ad40 61 72 65 20 71 75 65 72 69 65 64 20 66 72 6f 6d  are queried from
1ad50 20 77 69 74 68 69 6e 20 78 4e 65 78 74 28 29 20   within xNext() 
1ad60 61 6e 64 20 6f 74 68 65 72 20 76 2d 74 61 62 6c  and other v-tabl
1ad70 65 20 6d 65 74 68 6f 64 73 20 75 73 69 6e 67 0a  e methods using.
1ad80 20 20 20 20 2a 2a 20 70 72 65 70 61 72 65 64 20      ** prepared 
1ad90 71 75 65 72 69 65 73 2e 20 49 66 20 73 75 63 68  queries. If such
1ada0 20 61 20 71 75 65 72 79 20 69 73 20 6f 75 74 2d   a query is out-
1adb0 6f 66 2d 64 61 74 65 2c 20 77 65 20 64 6f 20 6e  of-date, we do n
1adc0 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a  ot want to.    *
1add0 2a 20 64 69 73 63 61 72 64 20 74 68 65 20 64 61  * discard the da
1ade0 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20 61  tabase schema, a
1adf0 73 20 74 68 65 20 75 73 65 72 20 63 6f 64 65 20  s the user code 
1ae00 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65  implementing the
1ae10 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20  .    ** v-table 
1ae20 77 6f 75 6c 64 20 68 61 76 65 20 74 6f 20 62 65  would have to be
1ae30 20 72 65 61 64 79 20 66 6f 72 20 74 68 65 20 73   ready for the s
1ae40 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
1ae50 63 74 75 72 65 20 69 74 73 65 6c 66 0a 20 20 20  cture itself.   
1ae60 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61 6c 69   ** to be invali
1ae70 64 61 74 65 64 20 77 68 65 6e 65 76 65 72 20 73  dated whenever s
1ae80 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69 73  qlite3_step() is
1ae90 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74   called from wit
1aea0 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d  hin .    ** a v-
1aeb0 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20  table method..  
1aec0 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d    */.    if( db-
1aed0 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53  >aDb[pOp->p1].pS
1aee0 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f  chema->schema_co
1aef0 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20  okie!=iMeta ){. 
1af00 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65       sqlite3Rese
1af10 74 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c 20 70  tOneSchema(db, p
1af20 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 20  Op->p1);.    }. 
1af30 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20     p->expired = 
1af40 31 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  1;.    rc = SQLI
1af50 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20  TE_SCHEMA;.  }. 
1af60 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
1af70 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1af80 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  r;.  break;.}../
1af90 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 64 43 6f  * Opcode: ReadCo
1afa0 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a 20  okie P1 P2 P3 * 
1afb0 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f  *.**.** Read coo
1afc0 6b 69 65 20 6e 75 6d 62 65 72 20 50 33 20 66 72  kie number P3 fr
1afd0 6f 6d 20 64 61 74 61 62 61 73 65 20 50 31 20 61  om database P1 a
1afe0 6e 64 20 77 72 69 74 65 20 69 74 20 69 6e 74 6f  nd write it into
1aff0 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
1b000 20 50 33 3d 3d 31 20 69 73 20 74 68 65 20 73 63   P3==1 is the sc
1b010 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50  hema version.  P
1b020 33 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61  3==2 is the data
1b030 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20  base format..** 
1b040 50 33 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63  P3==3 is the rec
1b050 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63  ommended pager c
1b060 61 63 68 65 20 73 69 7a 65 2c 20 61 6e 64 20 73  ache size, and s
1b070 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20  o forth.  P1==0 
1b080 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64  is.** the main d
1b090 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
1b0a0 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20 64 61   P1==1 is the da
1b0b0 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64  tabase file used
1b0c0 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d   to store.** tem
1b0d0 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a  porary tables..*
1b0e0 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73 74 20  *.** There must 
1b0f0 62 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f  be a read-lock o
1b100 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 28  n the database (
1b110 65 69 74 68 65 72 20 61 20 74 72 61 6e 73 61 63  either a transac
1b120 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20  tion.** must be 
1b130 73 74 61 72 74 65 64 20 6f 72 20 74 68 65 72 65  started or there
1b140 20 6d 75 73 74 20 62 65 20 61 6e 20 6f 70 65 6e   must be an open
1b150 20 63 75 72 73 6f 72 29 20 62 65 66 6f 72 65 0a   cursor) before.
1b160 2a 2a 20 65 78 65 63 75 74 69 6e 67 20 74 68 69  ** executing thi
1b170 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  s instruction..*
1b180 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 64 43 6f  /.case OP_ReadCo
1b190 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 20 20  okie: {         
1b1a0 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
1b1b0 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20  .  int iMeta;.  
1b1c0 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 69  int iDb;.  int i
1b1d0 43 6f 6f 6b 69 65 3b 0a 0a 20 20 61 73 73 65 72  Cookie;..  asser
1b1e0 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
1b1f0 29 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  );.  iDb = pOp->
1b200 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20  p1;.  iCookie = 
1b210 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72  pOp->p3;.  asser
1b220 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54  t( pOp->p3<SQLIT
1b230 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29  E_N_BTREE_META )
1b240 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e  ;.  assert( iDb>
1b250 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44  =0 && iDb<db->nD
1b260 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  b );.  assert( d
1b270 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 21  b->aDb[iDb].pBt!
1b280 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1b290 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
1b2a0 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b  reeMask, iDb) );
1b2b0 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65  ..  sqlite3Btree
1b2c0 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b  GetMeta(db->aDb[
1b2d0 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69  iDb].pBt, iCooki
1b2e0 65 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61  e, (u32 *)&iMeta
1b2f0 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  );.  pOut = out2
1b300 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
1b310 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  p);.  pOut->u.i 
1b320 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b  = iMeta;.  break
1b330 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1b340 53 65 74 43 6f 6f 6b 69 65 20 50 31 20 50 32 20  SetCookie P1 P2 
1b350 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69  P3 * *.**.** Wri
1b360 74 65 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  te the integer v
1b370 61 6c 75 65 20 50 33 20 69 6e 74 6f 20 63 6f 6f  alue P3 into coo
1b380 6b 69 65 20 6e 75 6d 62 65 72 20 50 32 20 6f 66  kie number P2 of
1b390 20 64 61 74 61 62 61 73 65 20 50 31 2e 0a 2a 2a   database P1..**
1b3a0 20 50 32 3d 3d 31 20 69 73 20 74 68 65 20 73 63   P2==1 is the sc
1b3b0 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50  hema version.  P
1b3c0 32 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61  2==2 is the data
1b3d0 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20  base format..** 
1b3e0 50 32 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63  P2==3 is the rec
1b3f0 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63  ommended pager c
1b400 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c 20 61  ache .** size, a
1b410 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31  nd so forth.  P1
1b420 3d 3d 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20  ==0 is the main 
1b430 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
1b440 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20 0a  d P1==1 is the .
1b450 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ** database file
1b460 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
1b470 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
1b480 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63  .**.** A transac
1b490 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73 74 61  tion must be sta
1b4a0 72 74 65 64 20 62 65 66 6f 72 65 20 65 78 65 63  rted before exec
1b4b0 75 74 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64  uting this opcod
1b4c0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  e..*/.case OP_Se
1b4d0 74 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20 44 62 20  tCookie: {.  Db 
1b4e0 2a 70 44 62 3b 0a 20 20 61 73 73 65 72 74 28 20  *pDb;.  assert( 
1b4f0 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54 45 5f 4e  pOp->p2<SQLITE_N
1b500 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20  _BTREE_META );. 
1b510 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1b520 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
1b530 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
1b540 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
1b550 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70  ->btreeMask, pOp
1b560 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72  ->p1) );.  asser
1b570 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
1b580 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62  0 );.  pDb = &db
1b590 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  ->aDb[pOp->p1];.
1b5a0 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70    assert( pDb->p
1b5b0 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  Bt!=0 );.  asser
1b5c0 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  t( sqlite3Schema
1b5d0 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 70 4f  MutexHeld(db, pO
1b5e0 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a 20 20 2f  p->p1, 0) );.  /
1b5f0 2a 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 75 74  * See note about
1b600 20 69 6e 64 65 78 20 73 68 69 66 74 69 6e 67 20   index shifting 
1b610 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65  on OP_ReadCookie
1b620 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   */.  rc = sqlit
1b630 65 33 42 74 72 65 65 55 70 64 61 74 65 4d 65 74  e3BtreeUpdateMet
1b640 61 28 70 44 62 2d 3e 70 42 74 2c 20 70 4f 70 2d  a(pDb->pBt, pOp-
1b650 3e 70 32 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a 20  >p2, pOp->p3);. 
1b660 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54   if( pOp->p2==BT
1b670 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49  REE_SCHEMA_VERSI
1b680 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65  ON ){.    /* Whe
1b690 6e 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f  n the schema coo
1b6a0 6b 69 65 20 63 68 61 6e 67 65 73 2c 20 72 65 63  kie changes, rec
1b6b0 6f 72 64 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b  ord the new cook
1b6c0 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f  ie internally */
1b6d0 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d  .    pDb->pSchem
1b6e0 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65  a->schema_cookie
1b6f0 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20   = pOp->p3;.    
1b700 64 62 2d 3e 6d 44 62 46 6c 61 67 73 20 7c 3d 20  db->mDbFlags |= 
1b710 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 43 68 61  DBFLAG_SchemaCha
1b720 6e 67 65 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  nge;.  }else if(
1b730 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f   pOp->p2==BTREE_
1b740 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29 7b 0a 20  FILE_FORMAT ){. 
1b750 20 20 20 2f 2a 20 52 65 63 6f 72 64 20 63 68 61     /* Record cha
1b760 6e 67 65 73 20 69 6e 20 74 68 65 20 66 69 6c 65  nges in the file
1b770 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70   format */.    p
1b780 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c  Db->pSchema->fil
1b790 65 5f 66 6f 72 6d 61 74 20 3d 20 70 4f 70 2d 3e  e_format = pOp->
1b7a0 70 33 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f  p3;.  }.  if( pO
1b7b0 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20  p->p1==1 ){.    
1b7c0 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c  /* Invalidate al
1b7d0 6c 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  l prepared state
1b7e0 6d 65 6e 74 73 20 77 68 65 6e 65 76 65 72 20 74  ments whenever t
1b7f0 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65  he TEMP database
1b800 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 69  .    ** schema i
1b810 73 20 63 68 61 6e 67 65 64 2e 20 20 54 69 63 6b  s changed.  Tick
1b820 65 74 20 23 31 36 34 34 20 2a 2f 0a 20 20 20 20  et #1644 */.    
1b830 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
1b840 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
1b850 64 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69  db);.    p->expi
1b860 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69  red = 0;.  }.  i
1b870 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
1b880 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1b890 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1b8a0 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64  Opcode: OpenRead
1b8b0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
1b8c0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f  ** Synopsis: roo
1b8d0 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a  t=P2 iDb=P3.**.*
1b8e0 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e  * Open a read-on
1b8f0 6c 79 20 63 75 72 73 6f 72 20 66 6f 72 20 74 68  ly cursor for th
1b900 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
1b910 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65   whose root page
1b920 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64   is.** P2 in a d
1b930 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54  atabase file.  T
1b940 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
1b950 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
1b960 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20  y P3. .** P3==0 
1b970 6d 65 61 6e 73 20 74 68 65 20 6d 61 69 6e 20 64  means the main d
1b980 61 74 61 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d  atabase, P3==1 m
1b990 65 61 6e 73 20 74 68 65 20 64 61 74 61 62 61 73  eans the databas
1b9a0 65 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74  e used for .** t
1b9b0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2c  emporary tables,
1b9c0 20 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73 20   and P3>1 means 
1b9d0 75 73 65 64 20 74 68 65 20 63 6f 72 72 65 73 70  used the corresp
1b9e0 6f 6e 64 69 6e 67 20 61 74 74 61 63 68 65 64 0a  onding attached.
1b9f0 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20 47 69  ** database.  Gi
1ba00 76 65 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f  ve the new curso
1ba10 72 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  r an identifier 
1ba20 6f 66 20 50 31 2e 20 20 54 68 65 20 50 31 0a 2a  of P1.  The P1.*
1ba30 2a 20 76 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f  * values need no
1ba40 74 20 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 20  t be contiguous 
1ba50 62 75 74 20 61 6c 6c 20 50 31 20 76 61 6c 75 65  but all P1 value
1ba60 73 20 73 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c  s should be smal
1ba70 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49  l integers..** I
1ba80 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f  t is an error fo
1ba90 72 20 50 31 20 74 6f 20 62 65 20 6e 65 67 61 74  r P1 to be negat
1baa0 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ive..**.** If P5
1bab0 21 3d 30 20 74 68 65 6e 20 75 73 65 20 74 68 65  !=0 then use the
1bac0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
1bad0 73 74 65 72 20 50 32 20 61 73 20 74 68 65 20 72  ster P2 as the r
1bae0 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a  oot page, not.**
1baf0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50 32   the value of P2
1bb00 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54   itself..**.** T
1bb10 68 65 72 65 20 77 69 6c 6c 20 62 65 20 61 20 72  here will be a r
1bb20 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20  ead lock on the 
1bb30 64 61 74 61 62 61 73 65 20 77 68 65 6e 65 76 65  database wheneve
1bb40 72 20 74 68 65 72 65 20 69 73 20 61 6e 0a 2a 2a  r there is an.**
1bb50 20 6f 70 65 6e 20 63 75 72 73 6f 72 2e 20 20 49   open cursor.  I
1bb60 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77  f the database w
1bb70 61 73 20 75 6e 6c 6f 63 6b 65 64 20 70 72 69 6f  as unlocked prio
1bb80 72 20 74 6f 20 74 68 69 73 20 69 6e 73 74 72 75  r to this instru
1bb90 63 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61 20  ction.** then a 
1bba0 72 65 61 64 20 6c 6f 63 6b 20 69 73 20 61 63 71  read lock is acq
1bbb0 75 69 72 65 64 20 61 73 20 70 61 72 74 20 6f 66  uired as part of
1bbc0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
1bbd0 6e 2e 20 20 41 20 72 65 61 64 0a 2a 2a 20 6c 6f  n.  A read.** lo
1bbe0 63 6b 20 61 6c 6c 6f 77 73 20 6f 74 68 65 72 20  ck allows other 
1bbf0 70 72 6f 63 65 73 73 65 73 20 74 6f 20 72 65 61  processes to rea
1bc00 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 62  d the database b
1bc10 75 74 20 70 72 6f 68 69 62 69 74 73 0a 2a 2a 20  ut prohibits.** 
1bc20 61 6e 79 20 6f 74 68 65 72 20 70 72 6f 63 65 73  any other proces
1bc30 73 20 66 72 6f 6d 20 6d 6f 64 69 66 79 69 6e 67  s from modifying
1bc40 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20   the database.  
1bc50 54 68 65 20 72 65 61 64 20 6c 6f 63 6b 20 69 73  The read lock is
1bc60 0a 2a 2a 20 72 65 6c 65 61 73 65 64 20 77 68 65  .** released whe
1bc70 6e 20 61 6c 6c 20 63 75 72 73 6f 72 73 20 61 72  n all cursors ar
1bc80 65 20 63 6c 6f 73 65 64 2e 20 20 49 66 20 74 68  e closed.  If th
1bc90 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  is instruction a
1bca0 74 74 65 6d 70 74 73 0a 2a 2a 20 74 6f 20 67 65  ttempts.** to ge
1bcb0 74 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 62 75  t a read lock bu
1bcc0 74 20 66 61 69 6c 73 2c 20 74 68 65 20 73 63 72  t fails, the scr
1bcd0 69 70 74 20 74 65 72 6d 69 6e 61 74 65 73 20 77  ipt terminates w
1bce0 69 74 68 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45  ith an.** SQLITE
1bcf0 5f 42 55 53 59 20 65 72 72 6f 72 20 63 6f 64 65  _BUSY error code
1bd00 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76  ..**.** The P4 v
1bd10 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68  alue may be eith
1bd20 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50  er an integer (P
1bd30 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f  4_INT32) or a po
1bd40 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65  inter to.** a Ke
1bd50 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  yInfo structure 
1bd60 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66  (P4_KEYINFO). If
1bd70 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72   it is a pointer
1bd80 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a   to a KeyInfo .*
1bd90 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74 68 65  * structure, the
1bda0 6e 20 73 61 69 64 20 73 74 72 75 63 74 75 72 65  n said structure
1bdb0 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e   defines the con
1bdc0 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69  tent and collati
1bdd0 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20  ng .** sequence 
1bde0 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62 65 69  of the index bei
1bdf0 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72  ng opened. Other
1be00 77 69 73 65 2c 20 69 66 20 50 34 20 69 73 20 61  wise, if P4 is a
1be10 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61  n integer .** va
1be20 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74 20 74  lue, it is set t
1be30 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
1be40 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
1be50 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  able..**.** See 
1be60 61 6c 73 6f 3a 20 4f 70 65 6e 57 72 69 74 65 2c  also: OpenWrite,
1be70 20 52 65 6f 70 65 6e 49 64 78 0a 2a 2f 0a 2f 2a   ReopenIdx.*/./*
1be80 20 4f 70 63 6f 64 65 3a 20 52 65 6f 70 65 6e 49   Opcode: ReopenI
1be90 64 78 20 50 31 20 50 32 20 50 33 20 50 34 20 50  dx P1 P2 P3 P4 P
1bea0 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  5.** Synopsis: r
1beb0 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a  oot=P2 iDb=P3.**
1bec0 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e 49 64  .** The ReopenId
1bed0 78 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 65  x opcode works e
1bee0 78 61 63 74 6c 79 20 6c 69 6b 65 20 52 65 61 64  xactly like Read
1bef0 4f 70 65 6e 20 65 78 63 65 70 74 20 74 68 61 74  Open except that
1bf00 20 69 74 20 66 69 72 73 74 0a 2a 2a 20 63 68 65   it first.** che
1bf10 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74 68  cks to see if th
1bf20 65 20 63 75 72 73 6f 72 20 6f 6e 20 50 31 20 69  e cursor on P1 i
1bf30 73 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 77  s already open w
1bf40 69 74 68 20 61 20 72 6f 6f 74 20 70 61 67 65 0a  ith a root page.
1bf50 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 50 32 20  ** number of P2 
1bf60 61 6e 64 20 69 66 20 69 74 20 69 73 20 74 68 69  and if it is thi
1bf70 73 20 6f 70 63 6f 64 65 20 62 65 63 6f 6d 65 73  s opcode becomes
1bf80 20 61 20 6e 6f 2d 6f 70 2e 20 20 49 6e 20 6f 74   a no-op.  In ot
1bf90 68 65 72 20 77 6f 72 64 73 2c 0a 2a 2a 20 69 66  her words,.** if
1bfa0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 61   the cursor is a
1bfb0 6c 72 65 61 64 79 20 6f 70 65 6e 2c 20 64 6f 20  lready open, do 
1bfc0 6e 6f 74 20 72 65 6f 70 65 6e 20 69 74 2e 0a 2a  not reopen it..*
1bfd0 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e 49  *.** The ReopenI
1bfe0 64 78 20 6f 70 63 6f 64 65 20 6d 61 79 20 6f 6e  dx opcode may on
1bff0 6c 79 20 62 65 20 75 73 65 64 20 77 69 74 68 20  ly be used with 
1c000 50 35 3d 3d 30 20 61 6e 64 20 77 69 74 68 20 50  P5==0 and with P
1c010 34 20 62 65 69 6e 67 0a 2a 2a 20 61 20 50 34 5f  4 being.** a P4_
1c020 4b 45 59 49 4e 46 4f 20 6f 62 6a 65 63 74 2e 20  KEYINFO object. 
1c030 20 46 75 72 74 68 65 72 6d 6f 72 65 2c 20 74 68   Furthermore, th
1c040 65 20 50 33 20 76 61 6c 75 65 20 6d 75 73 74 20  e P3 value must 
1c050 62 65 20 74 68 65 20 73 61 6d 65 20 61 73 0a 2a  be the same as.*
1c060 2a 20 65 76 65 72 79 20 6f 74 68 65 72 20 52 65  * every other Re
1c070 6f 70 65 6e 49 64 78 20 6f 72 20 4f 70 65 6e 52  openIdx or OpenR
1c080 65 61 64 20 66 6f 72 20 74 68 65 20 73 61 6d 65  ead for the same
1c090 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 0a   cursor number..
1c0a0 2a 2a 0a 2a 2a 20 53 65 65 20 74 68 65 20 4f 70  **.** See the Op
1c0b0 65 6e 52 65 61 64 20 6f 70 63 6f 64 65 20 64 6f  enRead opcode do
1c0c0 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20  cumentation for 
1c0d0 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
1c0e0 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70  mation..*/./* Op
1c0f0 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20  code: OpenWrite 
1c100 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
1c110 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74  * Synopsis: root
1c120 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a  =P2 iDb=P3.**.**
1c130 20 4f 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69   Open a read/wri
1c140 74 65 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20  te cursor named 
1c150 50 31 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20  P1 on the table 
1c160 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72  or index whose r
1c170 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50  oot.** page is P
1c180 32 2e 20 20 4f 72 20 69 66 20 50 35 21 3d 30 20  2.  Or if P5!=0 
1c190 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  use the content 
1c1a0 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20 74  of register P2 t
1c1b0 6f 20 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f  o find the.** ro
1c1c0 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54  ot page..**.** T
1c1d0 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20  he P4 value may 
1c1e0 62 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74  be either an int
1c1f0 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20  eger (P4_INT32) 
1c200 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a  or a pointer to.
1c210 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72  ** a KeyInfo str
1c220 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e  ucture (P4_KEYIN
1c230 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20  FO). If it is a 
1c240 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79  pointer to a Key
1c250 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75  Info .** structu
1c260 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74  re, then said st
1c270 72 75 63 74 75 72 65 20 64 65 66 69 6e 65 73 20  ructure defines 
1c280 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20  the content and 
1c290 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65  collating .** se
1c2a0 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e  quence of the in
1c2b0 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64  dex being opened
1c2c0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20  . Otherwise, if 
1c2d0 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  P4 is an integer
1c2e0 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69   .** value, it i
1c2f0 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d  s set to the num
1c300 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
1c310 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 6f 72 20  n the table, or 
1c320 74 6f 20 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73  to the.** larges
1c330 74 20 69 6e 64 65 78 20 6f 66 20 61 6e 79 20 63  t index of any c
1c340 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 74 61 62  olumn of the tab
1c350 6c 65 20 74 68 61 74 20 69 73 20 61 63 74 75 61  le that is actua
1c360 6c 6c 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  lly used..**.** 
1c370 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
1c380 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
1c390 20 4f 70 65 6e 52 65 61 64 20 65 78 63 65 70 74   OpenRead except
1c3a0 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74   that it opens t
1c3b0 68 65 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20  he cursor.** in 
1c3c0 72 65 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e  read/write mode.
1c3d0 20 20 46 6f 72 20 61 20 67 69 76 65 6e 20 74 61    For a given ta
1c3e0 62 6c 65 2c 20 74 68 65 72 65 20 63 61 6e 20 62  ble, there can b
1c3f0 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65  e one or more re
1c400 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f  ad-only.** curso
1c410 72 73 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 72  rs or a single r
1c420 65 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72  ead/write cursor
1c430 20 62 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a   but not both..*
1c440 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70  *.** See also Op
1c450 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20  enRead..*/.case 
1c460 4f 50 5f 52 65 6f 70 65 6e 49 64 78 3a 20 7b 0a  OP_ReopenIdx: {.
1c470 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20    int nField;.  
1c480 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
1c490 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 69  o;.  int p2;.  i
1c4a0 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 77 72  nt iDb;.  int wr
1c4b0 46 6c 61 67 3b 0a 20 20 42 74 72 65 65 20 2a 70  Flag;.  Btree *p
1c4c0 58 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  X;.  VdbeCursor 
1c4d0 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a 70 44 62  *pCur;.  Db *pDb
1c4e0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
1c4f0 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  ->p5==0 || pOp->
1c500 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45  p5==OPFLAG_SEEKE
1c510 51 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Q );.  assert( p
1c520 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b  Op->p4type==P4_K
1c530 45 59 49 4e 46 4f 20 29 3b 0a 20 20 70 43 75 72  EYINFO );.  pCur
1c540 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1c550 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43 75 72  >p1];.  if( pCur
1c560 20 26 26 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f   && pCur->pgnoRo
1c570 6f 74 3d 3d 28 75 33 32 29 70 4f 70 2d 3e 70 32  ot==(u32)pOp->p2
1c580 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
1c590 70 43 75 72 2d 3e 69 44 62 3d 3d 70 4f 70 2d 3e  pCur->iDb==pOp->
1c5a0 70 33 20 29 3b 20 20 20 20 20 20 2f 2a 20 47 75  p3 );      /* Gu
1c5b0 61 72 61 6e 74 65 65 64 20 62 79 20 74 68 65 20  aranteed by the 
1c5c0 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a  code generator *
1c5d0 2f 0a 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e 5f  /.    goto open_
1c5e0 63 75 72 73 6f 72 5f 73 65 74 5f 68 69 6e 74 73  cursor_set_hints
1c5f0 3b 0a 20 20 7d 0a 20 20 2f 2a 20 49 66 20 74 68  ;.  }.  /* If th
1c600 65 20 63 75 72 73 6f 72 20 69 73 20 6e 6f 74 20  e cursor is not 
1c610 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 6f  currently open o
1c620 72 20 69 73 20 6f 70 65 6e 20 6f 6e 20 61 20 64  r is open on a d
1c630 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 69 6e  ifferent.  ** in
1c640 64 65 78 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74  dex, then fall t
1c650 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 4f  hrough into OP_O
1c660 70 65 6e 52 65 61 64 20 74 6f 20 66 6f 72 63 65  penRead to force
1c670 20 61 20 72 65 6f 70 65 6e 20 2a 2f 0a 63 61 73   a reopen */.cas
1c680 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63  e OP_OpenRead:.c
1c690 61 73 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65  ase OP_OpenWrite
1c6a0 3a 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  :..  assert( pOp
1c6b0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65  ->opcode==OP_Ope
1c6c0 6e 57 72 69 74 65 20 7c 7c 20 70 4f 70 2d 3e 70  nWrite || pOp->p
1c6d0 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  5==0 || pOp->p5=
1c6e0 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29  =OPFLAG_SEEKEQ )
1c6f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ;.  assert( p->b
1c700 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73  IsReader );.  as
1c710 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
1c720 65 3d 3d 4f 50 5f 4f 70 65 6e 52 65 61 64 20 7c  e==OP_OpenRead |
1c730 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
1c740 50 5f 52 65 6f 70 65 6e 49 64 78 0a 20 20 20 20  P_ReopenIdx.    
1c750 20 20 20 20 20 20 7c 7c 20 70 2d 3e 72 65 61 64        || p->read
1c760 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 69 66  Only==0 );..  if
1c770 28 20 70 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a  ( p->expired ){.
1c780 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
1c790 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 3b 0a  ABORT_ROLLBACK;.
1c7a0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1c7b0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
1c7c0 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20 30 3b 0a  ..  nField = 0;.
1c7d0 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a    pKeyInfo = 0;.
1c7e0 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a    p2 = pOp->p2;.
1c7f0 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b    iDb = pOp->p3;
1c800 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d  .  assert( iDb>=
1c810 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62  0 && iDb<db->nDb
1c820 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
1c830 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
1c840 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20  eMask, iDb) );. 
1c850 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b   pDb = &db->aDb[
1c860 69 44 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62  iDb];.  pX = pDb
1c870 2d 3e 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28  ->pBt;.  assert(
1c880 20 70 58 21 3d 30 20 29 3b 0a 20 20 69 66 28 20   pX!=0 );.  if( 
1c890 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
1c8a0 4f 70 65 6e 57 72 69 74 65 20 29 7b 0a 20 20 20  OpenWrite ){.   
1c8b0 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f   assert( OPFLAG_
1c8c0 46 4f 52 44 45 4c 45 54 45 3d 3d 42 54 52 45 45  FORDELETE==BTREE
1c8d0 5f 46 4f 52 44 45 4c 45 54 45 20 29 3b 0a 20 20  _FORDELETE );.  
1c8e0 20 20 77 72 46 6c 61 67 20 3d 20 42 54 52 45 45    wrFlag = BTREE
1c8f0 5f 57 52 43 53 52 20 7c 20 28 70 4f 70 2d 3e 70  _WRCSR | (pOp->p
1c900 35 20 26 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45  5 & OPFLAG_FORDE
1c910 4c 45 54 45 29 3b 0a 20 20 20 20 61 73 73 65 72  LETE);.    asser
1c920 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  t( sqlite3Schema
1c930 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44  MutexHeld(db, iD
1c940 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28  b, 0) );.    if(
1c950 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66   pDb->pSchema->f
1c960 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e  ile_format < p->
1c970 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d  minWriteFileForm
1c980 61 74 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d  at ){.      p->m
1c990 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61  inWriteFileForma
1c9a0 74 20 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d 61  t = pDb->pSchema
1c9b0 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20  ->file_format;. 
1c9c0 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
1c9d0 20 20 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20    wrFlag = 0;.  
1c9e0 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  }.  if( pOp->p5 
1c9f0 26 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47  & OPFLAG_P2ISREG
1ca00 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
1ca10 70 32 3e 30 20 29 3b 0a 20 20 20 20 61 73 73 65  p2>0 );.    asse
1ca20 72 74 28 20 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d  rt( p2<=(p->nMem
1ca30 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
1ca40 20 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26   );.    pIn2 = &
1ca50 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61 73  aMem[p2];.    as
1ca60 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
1ca70 28 70 49 6e 32 29 20 29 3b 0a 20 20 20 20 61 73  (pIn2) );.    as
1ca80 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61  sert( (pIn2->fla
1ca90 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
1caa0 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   );.    sqlite3V
1cab0 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
1cac0 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 32 20 3d  (pIn2);.    p2 =
1cad0 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69 3b   (int)pIn2->u.i;
1cae0 0a 20 20 20 20 2f 2a 20 54 68 65 20 70 32 20 76  .    /* The p2 v
1caf0 61 6c 75 65 20 61 6c 77 61 79 73 20 63 6f 6d 65  alue always come
1cb00 73 20 66 72 6f 6d 20 61 20 70 72 69 6f 72 20 4f  s from a prior O
1cb10 50 5f 43 72 65 61 74 65 42 74 72 65 65 20 6f 70  P_CreateBtree op
1cb20 63 6f 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a 20  code and.    ** 
1cb30 74 68 61 74 20 6f 70 63 6f 64 65 20 77 69 6c 6c  that opcode will
1cb40 20 61 6c 77 61 79 73 20 73 65 74 20 74 68 65 20   always set the 
1cb50 70 32 20 76 61 6c 75 65 20 74 6f 20 32 20 6f 72  p2 value to 2 or
1cb60 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65 20 66 61   more or else fa
1cb70 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68  il..    ** If th
1cb80 65 72 65 20 77 65 72 65 20 61 20 66 61 69 6c 75  ere were a failu
1cb90 72 65 2c 20 74 68 65 20 70 72 65 70 61 72 65 64  re, the prepared
1cba0 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64   statement would
1cbb0 20 68 61 76 65 20 68 61 6c 74 65 64 0a 20 20 20   have halted.   
1cbc0 20 2a 2a 20 62 65 66 6f 72 65 20 72 65 61 63 68   ** before reach
1cbd0 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63  ing this instruc
1cbe0 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 73 73  tion. */.    ass
1cbf0 65 72 74 28 20 70 32 3e 3d 32 20 29 3b 0a 20 20  ert( p2>=2 );.  
1cc00 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74  }.  if( pOp->p4t
1cc10 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20  ype==P4_KEYINFO 
1cc20 29 7b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 20  ){.    pKeyInfo 
1cc30 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  = pOp->p4.pKeyIn
1cc40 66 6f 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  fo;.    assert( 
1cc50 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45  pKeyInfo->enc==E
1cc60 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20 61 73  NC(db) );.    as
1cc70 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e  sert( pKeyInfo->
1cc80 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20 6e 46  db==db );.    nF
1cc90 69 65 6c 64 20 3d 20 70 4b 65 79 49 6e 66 6f 2d  ield = pKeyInfo-
1cca0 3e 6e 41 6c 6c 46 69 65 6c 64 3b 0a 20 20 7d 65  >nAllField;.  }e
1ccb0 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 34 74  lse if( pOp->p4t
1ccc0 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 7b  ype==P4_INT32 ){
1ccd0 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f  .    nField = pO
1cce0 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a 20 20 61  p->p4.i;.  }.  a
1ccf0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1cd00 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  0 );.  assert( n
1cd10 46 69 65 6c 64 3e 3d 30 20 29 3b 0a 20 20 74 65  Field>=0 );.  te
1cd20 73 74 63 61 73 65 28 20 6e 46 69 65 6c 64 3d 3d  stcase( nField==
1cd30 30 20 29 3b 20 20 2f 2a 20 54 61 62 6c 65 20 77  0 );  /* Table w
1cd40 69 74 68 20 49 4e 54 45 47 45 52 20 50 52 49 4d  ith INTEGER PRIM
1cd50 41 52 59 20 4b 45 59 20 61 6e 64 20 6e 6f 74 68  ARY KEY and noth
1cd60 69 6e 67 20 65 6c 73 65 20 2a 2f 0a 20 20 70 43  ing else */.  pC
1cd70 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  ur = allocateCur
1cd80 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
1cd90 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20 43 55 52  nField, iDb, CUR
1cda0 54 59 50 45 5f 42 54 52 45 45 29 3b 0a 20 20 69  TYPE_BTREE);.  i
1cdb0 66 28 20 70 43 75 72 3d 3d 30 20 29 20 67 6f 74  f( pCur==0 ) got
1cdc0 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75 72  o no_mem;.  pCur
1cdd0 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
1cde0 20 70 43 75 72 2d 3e 69 73 4f 72 64 65 72 65 64   pCur->isOrdered
1cdf0 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 70 67   = 1;.  pCur->pg
1ce00 6e 6f 52 6f 6f 74 20 3d 20 70 32 3b 0a 23 69 66  noRoot = p2;.#if
1ce10 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
1ce20 0a 20 20 70 43 75 72 2d 3e 77 72 46 6c 61 67 20  .  pCur->wrFlag 
1ce30 3d 20 77 72 46 6c 61 67 3b 0a 23 65 6e 64 69 66  = wrFlag;.#endif
1ce40 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
1ce50 74 72 65 65 43 75 72 73 6f 72 28 70 58 2c 20 70  treeCursor(pX, p
1ce60 32 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65 79 49  2, wrFlag, pKeyI
1ce70 6e 66 6f 2c 20 70 43 75 72 2d 3e 75 63 2e 70 43  nfo, pCur->uc.pC
1ce80 75 72 73 6f 72 29 3b 0a 20 20 70 43 75 72 2d 3e  ursor);.  pCur->
1ce90 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49  pKeyInfo = pKeyI
1cea0 6e 66 6f 3b 0a 20 20 2f 2a 20 53 65 74 20 74 68  nfo;.  /* Set th
1ceb0 65 20 56 64 62 65 43 75 72 73 6f 72 2e 69 73 54  e VdbeCursor.isT
1cec0 61 62 6c 65 20 76 61 72 69 61 62 6c 65 2e 20 50  able variable. P
1ced0 72 65 76 69 6f 75 73 20 76 65 72 73 69 6f 6e 73  revious versions
1cee0 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20   of.  ** SQLite 
1cef0 75 73 65 64 20 74 6f 20 63 68 65 63 6b 20 69 66  used to check if
1cf00 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 66   the root-page f
1cf10 6c 61 67 73 20 77 65 72 65 20 73 61 6e 65 20 61  lags were sane a
1cf20 74 20 74 68 69 73 20 70 6f 69 6e 74 0a 20 20 2a  t this point.  *
1cf30 2a 20 61 6e 64 20 72 65 70 6f 72 74 20 64 61 74  * and report dat
1cf40 61 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e  abase corruption
1cf50 20 69 66 20 74 68 65 79 20 77 65 72 65 20 6e 6f   if they were no
1cf60 74 2c 20 62 75 74 20 74 68 69 73 20 63 68 65 63  t, but this chec
1cf70 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69 6e 63 65  k has.  ** since
1cf80 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20   moved into the 
1cf90 62 74 72 65 65 20 6c 61 79 65 72 2e 20 20 2a 2f  btree layer.  */
1cfa0 20 20 0a 20 20 70 43 75 72 2d 3e 69 73 54 61 62    .  pCur->isTab
1cfb0 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65  le = pOp->p4type
1cfc0 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 0a 6f  !=P4_KEYINFO;..o
1cfd0 70 65 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68  pen_cursor_set_h
1cfe0 69 6e 74 73 3a 0a 20 20 61 73 73 65 72 74 28 20  ints:.  assert( 
1cff0 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 3d 3d  OPFLAG_BULKCSR==
1d000 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 20 29  BTREE_BULKLOAD )
1d010 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c  ;.  assert( OPFL
1d020 41 47 5f 53 45 45 4b 45 51 3d 3d 42 54 52 45 45  AG_SEEKEQ==BTREE
1d030 5f 53 45 45 4b 5f 45 51 20 29 3b 0a 20 20 74 65  _SEEK_EQ );.  te
1d040 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 20  stcase( pOp->p5 
1d050 26 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52  & OPFLAG_BULKCSR
1d060 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   );.#ifdef SQLIT
1d070 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f  E_ENABLE_CURSOR_
1d080 48 49 4e 54 53 0a 20 20 74 65 73 74 63 61 73 65  HINTS.  testcase
1d090 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c  ( pOp->p2 & OPFL
1d0a0 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a 23 65 6e  AG_SEEKEQ );.#en
1d0b0 64 69 66 0a 20 20 73 71 6c 69 74 65 33 42 74 72  dif.  sqlite3Btr
1d0c0 65 65 43 75 72 73 6f 72 48 69 6e 74 46 6c 61 67  eeCursorHintFlag
1d0d0 73 28 70 43 75 72 2d 3e 75 63 2e 70 43 75 72 73  s(pCur->uc.pCurs
1d0e0 6f 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  or,.            
1d0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d100 20 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f     (pOp->p5 & (O
1d110 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 7c 4f 50  PFLAG_BULKCSR|OP
1d120 46 4c 41 47 5f 53 45 45 4b 45 51 29 29 29 3b 0a  FLAG_SEEKEQ)));.
1d130 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
1d140 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1d150 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  or;.  break;.}..
1d160 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 44  /* Opcode: OpenD
1d170 75 70 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  up P1 P2 * * *.*
1d180 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20  *.** Open a new 
1d190 63 75 72 73 6f 72 20 50 31 20 74 68 61 74 20 70  cursor P1 that p
1d1a0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 61 6d  oints to the sam
1d1b0 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  e ephemeral tabl
1d1c0 65 20 61 73 0a 2a 2a 20 63 75 72 73 6f 72 20 50  e as.** cursor P
1d1d0 32 2e 20 20 54 68 65 20 50 32 20 63 75 72 73 6f  2.  The P2 curso
1d1e0 72 20 6d 75 73 74 20 68 61 76 65 20 62 65 65 6e  r must have been
1d1f0 20 6f 70 65 6e 65 64 20 62 79 20 61 20 70 72 69   opened by a pri
1d200 6f 72 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  or OP_OpenEpheme
1d210 72 61 6c 0a 2a 2a 20 6f 70 63 6f 64 65 2e 20 20  ral.** opcode.  
1d220 4f 6e 6c 79 20 65 70 68 65 6d 65 72 61 6c 20 63  Only ephemeral c
1d230 75 72 73 6f 72 73 20 6d 61 79 20 62 65 20 64 75  ursors may be du
1d240 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  plicated..**.** 
1d250 44 75 70 6c 69 63 61 74 65 20 65 70 68 65 6d 65  Duplicate epheme
1d260 72 61 6c 20 63 75 72 73 6f 72 73 20 61 72 65 20  ral cursors are 
1d270 75 73 65 64 20 66 6f 72 20 73 65 6c 66 2d 6a 6f  used for self-jo
1d280 69 6e 73 20 6f 66 20 6d 61 74 65 72 69 61 6c 69  ins of materiali
1d290 7a 65 64 20 76 69 65 77 73 2e 0a 2a 2f 0a 63 61  zed views..*/.ca
1d2a0 73 65 20 4f 50 5f 4f 70 65 6e 44 75 70 3a 20 7b  se OP_OpenDup: {
1d2b0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1d2c0 4f 72 69 67 3b 20 20 20 20 2f 2a 20 54 68 65 20  Orig;    /* The 
1d2d0 6f 72 69 67 69 6e 61 6c 20 63 75 72 73 6f 72 20  original cursor 
1d2e0 74 6f 20 62 65 20 64 75 70 6c 69 63 61 74 65 64  to be duplicated
1d2f0 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
1d300 20 2a 70 43 78 3b 20 20 20 20 20 20 2f 2a 20 54   *pCx;      /* T
1d310 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20 2a 2f  he new cursor */
1d320 0a 0a 20 20 70 4f 72 69 67 20 3d 20 70 2d 3e 61  ..  pOrig = p->a
1d330 70 43 73 72 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  pCsr[pOp->p2];. 
1d340 20 61 73 73 65 72 74 28 20 70 4f 72 69 67 2d 3e   assert( pOrig->
1d350 70 42 74 78 21 3d 30 20 29 3b 20 20 2f 2a 20 4f  pBtx!=0 );  /* O
1d360 6e 6c 79 20 65 70 68 65 6d 65 72 61 6c 20 63 75  nly ephemeral cu
1d370 72 73 6f 72 73 20 63 61 6e 20 62 65 20 64 75 70  rsors can be dup
1d380 6c 69 63 61 74 65 64 20 2a 2f 0a 0a 20 20 70 43  licated */..  pC
1d390 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  x = allocateCurs
1d3a0 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  or(p, pOp->p1, p
1d3b0 4f 72 69 67 2d 3e 6e 46 69 65 6c 64 2c 20 2d 31  Orig->nField, -1
1d3c0 2c 20 43 55 52 54 59 50 45 5f 42 54 52 45 45 29  , CURTYPE_BTREE)
1d3d0 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29  ;.  if( pCx==0 )
1d3e0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
1d3f0 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31  pCx->nullRow = 1
1d400 3b 0a 20 20 70 43 78 2d 3e 69 73 45 70 68 65 6d  ;.  pCx->isEphem
1d410 65 72 61 6c 20 3d 20 31 3b 0a 20 20 70 43 78 2d  eral = 1;.  pCx-
1d420 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 72 69  >pKeyInfo = pOri
1d430 67 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 70  g->pKeyInfo;.  p
1d440 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f  Cx->isTable = pO
1d450 72 69 67 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20  rig->isTable;.  
1d460 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1d470 65 43 75 72 73 6f 72 28 70 4f 72 69 67 2d 3e 70  eCursor(pOrig->p
1d480 42 74 78 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54  Btx, MASTER_ROOT
1d490 2c 20 42 54 52 45 45 5f 57 52 43 53 52 2c 0a 20  , BTREE_WRCSR,. 
1d4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4b0 20 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70 4b           pCx->pK
1d4c0 65 79 49 6e 66 6f 2c 20 70 43 78 2d 3e 75 63 2e  eyInfo, pCx->uc.
1d4d0 70 43 75 72 73 6f 72 29 3b 0a 20 20 2f 2a 20 54  pCursor);.  /* T
1d4e0 68 65 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  he sqlite3BtreeC
1d4f0 75 72 73 6f 72 28 29 20 72 6f 75 74 69 6e 65 20  ursor() routine 
1d500 63 61 6e 20 6f 6e 6c 79 20 66 61 69 6c 20 66 6f  can only fail fo
1d510 72 20 74 68 65 20 66 69 72 73 74 20 63 75 72 73  r the first curs
1d520 6f 72 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20 66  or.  ** opened f
1d530 6f 72 20 61 20 64 61 74 61 62 61 73 65 2e 20 20  or a database.  
1d540 53 69 6e 63 65 20 74 68 65 72 65 20 69 73 20 61  Since there is a
1d550 6c 72 65 61 64 79 20 61 6e 20 6f 70 65 6e 20 63  lready an open c
1d560 75 72 73 6f 72 20 77 68 65 6e 20 74 68 69 73 0a  ursor when this.
1d570 20 20 2a 2a 20 6f 70 63 6f 64 65 20 69 73 20 72    ** opcode is r
1d580 75 6e 2c 20 74 68 65 20 73 71 6c 69 74 65 33 42  un, the sqlite3B
1d590 74 72 65 65 43 75 72 73 6f 72 28 29 20 63 61 6e  treeCursor() can
1d5a0 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20 61 73  not fail */.  as
1d5b0 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
1d5c0 5f 4f 4b 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  _OK );.  break;.
1d5d0 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  }.../* Opcode: O
1d5e0 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 50 31 20  penEphemeral P1 
1d5f0 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 20 53 79  P2 * P4 P5.** Sy
1d600 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d  nopsis: nColumn=
1d610 50 32 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20  P2.**.** Open a 
1d620 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20 74 6f  new cursor P1 to
1d630 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62   a transient tab
1d640 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f  le..** The curso
1d650 72 20 69 73 20 61 6c 77 61 79 73 20 6f 70 65 6e  r is always open
1d660 65 64 20 72 65 61 64 2f 77 72 69 74 65 20 65 76  ed read/write ev
1d670 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61  en if .** the ma
1d680 69 6e 20 64 61 74 61 62 61 73 65 20 69 73 20 72  in database is r
1d690 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 65  ead-only.  The e
1d6a0 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 74 61 62 6c  phemeral.** tabl
1d6b0 65 20 69 73 20 64 65 6c 65 74 65 64 20 61 75 74  e is deleted aut
1d6c0 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e 20  omatically when 
1d6d0 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 6c  the cursor is cl
1d6e0 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69  osed..**.** P2 i
1d6f0 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
1d700 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 65  columns in the e
1d710 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 2e 0a  phemeral table..
1d720 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 70 6f  ** The cursor po
1d730 69 6e 74 73 20 74 6f 20 61 20 42 54 72 65 65 20  ints to a BTree 
1d740 74 61 62 6c 65 20 69 66 20 50 34 3d 3d 30 20 61  table if P4==0 a
1d750 6e 64 20 74 6f 20 61 20 42 54 72 65 65 20 69 6e  nd to a BTree in
1d760 64 65 78 0a 2a 2a 20 69 66 20 50 34 20 69 73 20  dex.** if P4 is 
1d770 6e 6f 74 20 30 2e 20 20 49 66 20 50 34 20 69 73  not 0.  If P4 is
1d780 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f   not NULL, it po
1d790 69 6e 74 73 20 74 6f 20 61 20 4b 65 79 49 6e 66  ints to a KeyInf
1d7a0 6f 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 74  o structure.** t
1d7b0 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 20  hat defines the 
1d7c0 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73 20 69  format of keys i
1d7d0 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a  n the index..**.
1d7e0 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d 65  ** The P5 parame
1d7f0 74 65 72 20 63 61 6e 20 62 65 20 61 20 6d 61 73  ter can be a mas
1d800 6b 20 6f 66 20 74 68 65 20 42 54 52 45 45 5f 2a  k of the BTREE_*
1d810 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 0a 2a   flags defined.*
1d820 2a 20 69 6e 20 62 74 72 65 65 2e 68 2e 20 20 54  * in btree.h.  T
1d830 68 65 73 65 20 66 6c 61 67 73 20 63 6f 6e 74 72  hese flags contr
1d840 6f 6c 20 61 73 70 65 63 74 73 20 6f 66 20 74 68  ol aspects of th
1d850 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 0a 2a  e operation of.*
1d860 2a 20 74 68 65 20 62 74 72 65 65 2e 20 20 54 68  * the btree.  Th
1d870 65 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55  e BTREE_OMIT_JOU
1d880 52 4e 41 4c 20 61 6e 64 20 42 54 52 45 45 5f 53  RNAL and BTREE_S
1d890 49 4e 47 4c 45 20 66 6c 61 67 73 20 61 72 65 0a  INGLE flags are.
1d8a0 2a 2a 20 61 64 64 65 64 20 61 75 74 6f 6d 61 74  ** added automat
1d8b0 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70  ically..*/./* Op
1d8c0 63 6f 64 65 3a 20 4f 70 65 6e 41 75 74 6f 69 6e  code: OpenAutoin
1d8d0 64 65 78 20 50 31 20 50 32 20 2a 20 50 34 20 2a  dex P1 P2 * P4 *
1d8e0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43  .** Synopsis: nC
1d8f0 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 54  olumn=P2.**.** T
1d900 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73  his opcode works
1d910 20 74 68 65 20 73 61 6d 65 20 61 73 20 4f 50 5f   the same as OP_
1d920 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 2e 20 20  OpenEphemeral.  
1d930 49 74 20 68 61 73 20 61 0a 2a 2a 20 64 69 66 66  It has a.** diff
1d940 65 72 65 6e 74 20 6e 61 6d 65 20 74 6f 20 64 69  erent name to di
1d950 73 74 69 6e 67 75 69 73 68 20 69 74 73 20 75 73  stinguish its us
1d960 65 2e 20 20 54 61 62 6c 65 73 20 63 72 65 61 74  e.  Tables creat
1d970 65 64 20 75 73 69 6e 67 0a 2a 2a 20 62 79 20 74  ed using.** by t
1d980 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20  his opcode will 
1d990 62 65 20 75 73 65 64 20 66 6f 72 20 61 75 74 6f  be used for auto
1d9a0 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65  matically create
1d9b0 64 20 74 72 61 6e 73 69 65 6e 74 0a 2a 2a 20 69  d transient.** i
1d9c0 6e 64 69 63 65 73 20 69 6e 20 6a 6f 69 6e 73 2e  ndices in joins.
1d9d0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  .*/.case OP_Open
1d9e0 41 75 74 6f 69 6e 64 65 78 3a 20 0a 63 61 73 65  Autoindex: .case
1d9f0 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1da00 6c 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  l: {.  VdbeCurso
1da10 72 20 2a 70 43 78 3b 0a 20 20 4b 65 79 49 6e 66  r *pCx;.  KeyInf
1da20 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20  o *pKeyInfo;..  
1da30 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74  static const int
1da40 20 76 66 73 46 6c 61 67 73 20 3d 20 0a 20 20 20   vfsFlags = .   
1da50 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52     SQLITE_OPEN_R
1da60 45 41 44 57 52 49 54 45 20 7c 0a 20 20 20 20 20  EADWRITE |.     
1da70 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45   SQLITE_OPEN_CRE
1da80 41 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49  ATE |.      SQLI
1da90 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56  TE_OPEN_EXCLUSIV
1daa0 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
1dab0 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c  _OPEN_DELETEONCL
1dac0 4f 53 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49  OSE |.      SQLI
1dad0 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e  TE_OPEN_TRANSIEN
1dae0 54 5f 44 42 3b 0a 20 20 61 73 73 65 72 74 28 20  T_DB;.  assert( 
1daf0 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20  pOp->p1>=0 );.  
1db00 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
1db10 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c  =0 );.  pCx = al
1db20 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
1db30 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32  pOp->p1, pOp->p2
1db40 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 42 54  , -1, CURTYPE_BT
1db50 52 45 45 29 3b 0a 20 20 69 66 28 20 70 43 78 3d  REE);.  if( pCx=
1db60 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1db70 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77  ;.  pCx->nullRow
1db80 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73 45   = 1;.  pCx->isE
1db90 70 68 65 6d 65 72 61 6c 20 3d 20 31 3b 0a 20 20  phemeral = 1;.  
1dba0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1dbb0 65 4f 70 65 6e 28 64 62 2d 3e 70 56 66 73 2c 20  eOpen(db->pVfs, 
1dbc0 30 2c 20 64 62 2c 20 26 70 43 78 2d 3e 70 42 74  0, db, &pCx->pBt
1dbd0 78 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  x, .            
1dbe0 20 20 20 20 20 20 20 20 20 20 20 20 42 54 52 45              BTRE
1dbf0 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 7c  E_OMIT_JOURNAL |
1dc00 20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20 7c 20   BTREE_SINGLE | 
1dc10 70 4f 70 2d 3e 70 35 2c 20 76 66 73 46 6c 61 67  pOp->p5, vfsFlag
1dc20 73 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  s);.  if( rc==SQ
1dc30 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
1dc40 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1dc50 42 65 67 69 6e 54 72 61 6e 73 28 70 43 78 2d 3e  BeginTrans(pCx->
1dc60 70 42 74 78 2c 20 31 29 3b 0a 20 20 7d 0a 20 20  pBtx, 1);.  }.  
1dc70 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
1dc80 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 61  K ){.    /* If a
1dc90 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78   transient index
1dca0 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 63 72   is required, cr
1dcb0 65 61 74 65 20 69 74 20 62 79 20 63 61 6c 6c 69  eate it by calli
1dcc0 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  ng.    ** sqlite
1dcd0 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c  3BtreeCreateTabl
1dce0 65 28 29 20 77 69 74 68 20 74 68 65 20 42 54 52  e() with the BTR
1dcf0 45 45 5f 42 4c 4f 42 4b 45 59 20 66 6c 61 67 20  EE_BLOBKEY flag 
1dd00 62 65 66 6f 72 65 0a 20 20 20 20 2a 2a 20 6f 70  before.    ** op
1dd10 65 6e 69 6e 67 20 69 74 2e 20 49 66 20 61 20 74  ening it. If a t
1dd20 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 20 69  ransient table i
1dd30 73 20 72 65 71 75 69 72 65 64 2c 20 6a 75 73 74  s required, just
1dd40 20 75 73 65 20 74 68 65 0a 20 20 20 20 2a 2a 20   use the.    ** 
1dd50 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72  automatically cr
1dd60 65 61 74 65 64 20 74 61 62 6c 65 20 77 69 74 68  eated table with
1dd70 20 72 6f 6f 74 2d 70 61 67 65 20 31 20 28 61 6e   root-page 1 (an
1dd80 20 42 4c 4f 42 5f 49 4e 54 4b 45 59 20 74 61 62   BLOB_INTKEY tab
1dd90 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  le)..    */.    
1dda0 69 66 28 20 28 70 43 78 2d 3e 70 4b 65 79 49 6e  if( (pCx->pKeyIn
1ddb0 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 20 3d 20  fo = pKeyInfo = 
1ddc0 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
1ddd0 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e  )!=0 ){.      in
1dde0 74 20 70 67 6e 6f 3b 0a 20 20 20 20 20 20 61 73  t pgno;.      as
1ddf0 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
1de00 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b  e==P4_KEYINFO );
1de10 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
1de20 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61  te3BtreeCreateTa
1de30 62 6c 65 28 70 43 78 2d 3e 70 42 74 78 2c 20 26  ble(pCx->pBtx, &
1de40 70 67 6e 6f 2c 20 42 54 52 45 45 5f 42 4c 4f 42  pgno, BTREE_BLOB
1de50 4b 45 59 20 7c 20 70 4f 70 2d 3e 70 35 29 3b 20  KEY | pOp->p5); 
1de60 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
1de70 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1de80 20 20 20 20 61 73 73 65 72 74 28 20 70 67 6e 6f      assert( pgno
1de90 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54 2b 31 20  ==MASTER_ROOT+1 
1dea0 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
1deb0 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d  t( pKeyInfo->db=
1dec0 3d 64 62 20 29 3b 0a 20 20 20 20 20 20 20 20 61  =db );.        a
1ded0 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d  ssert( pKeyInfo-
1dee0 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b  >enc==ENC(db) );
1def0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
1df00 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
1df10 28 70 43 78 2d 3e 70 42 74 78 2c 20 70 67 6e 6f  (pCx->pBtx, pgno
1df20 2c 20 42 54 52 45 45 5f 57 52 43 53 52 2c 0a 20  , BTREE_WRCSR,. 
1df30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
1df50 4b 65 79 49 6e 66 6f 2c 20 70 43 78 2d 3e 75 63  KeyInfo, pCx->uc
1df60 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20  .pCursor);.     
1df70 20 7d 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73   }.      pCx->is
1df80 54 61 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20 7d  Table = 0;.    }
1df90 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d  else{.      rc =
1dfa0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
1dfb0 73 6f 72 28 70 43 78 2d 3e 70 42 74 78 2c 20 4d  sor(pCx->pBtx, M
1dfc0 41 53 54 45 52 5f 52 4f 4f 54 2c 20 42 54 52 45  ASTER_ROOT, BTRE
1dfd0 45 5f 57 52 43 53 52 2c 0a 20 20 20 20 20 20 20  E_WRCSR,.       
1dfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dff0 20 20 20 20 20 20 20 30 2c 20 70 43 78 2d 3e 75         0, pCx->u
1e000 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  c.pCursor);.    
1e010 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d    pCx->isTable =
1e020 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   1;.    }.  }.  
1e030 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
1e040 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1e050 3b 0a 20 20 70 43 78 2d 3e 69 73 4f 72 64 65 72  ;.  pCx->isOrder
1e060 65 64 20 3d 20 28 70 4f 70 2d 3e 70 35 21 3d 42  ed = (pOp->p5!=B
1e070 54 52 45 45 5f 55 4e 4f 52 44 45 52 45 44 29 3b  TREE_UNORDERED);
1e080 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1e090 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 4f 70  Opcode: SorterOp
1e0a0 65 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  en P1 P2 P3 P4 *
1e0b0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
1e0c0 64 65 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f 50  de works like OP
1e0d0 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 65  _OpenEphemeral e
1e0e0 78 63 65 70 74 20 74 68 61 74 20 69 74 20 6f 70  xcept that it op
1e0f0 65 6e 73 0a 2a 2a 20 61 20 74 72 61 6e 73 69 65  ens.** a transie
1e100 6e 74 20 69 6e 64 65 78 20 74 68 61 74 20 69 73  nt index that is
1e110 20 73 70 65 63 69 66 69 63 61 6c 6c 79 20 64 65   specifically de
1e120 73 69 67 6e 65 64 20 74 6f 20 73 6f 72 74 20 6c  signed to sort l
1e130 61 72 67 65 0a 2a 2a 20 74 61 62 6c 65 73 20 75  arge.** tables u
1e140 73 69 6e 67 20 61 6e 20 65 78 74 65 72 6e 61 6c  sing an external
1e150 20 6d 65 72 67 65 2d 73 6f 72 74 20 61 6c 67 6f   merge-sort algo
1e160 72 69 74 68 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  rithm..**.** If 
1e170 61 72 67 75 6d 65 6e 74 20 50 33 20 69 73 20 6e  argument P3 is n
1e180 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74  on-zero, then it
1e190 20 69 6e 64 69 63 61 74 65 73 20 74 68 61 74 20   indicates that 
1e1a0 74 68 65 20 73 6f 72 74 65 72 20 6d 61 79 0a 2a  the sorter may.*
1e1b0 2a 20 61 73 73 75 6d 65 20 74 68 61 74 20 61 20  * assume that a 
1e1c0 73 74 61 62 6c 65 20 73 6f 72 74 20 63 6f 6e 73  stable sort cons
1e1d0 69 64 65 72 69 6e 67 20 74 68 65 20 66 69 72 73  idering the firs
1e1e0 74 20 50 33 20 66 69 65 6c 64 73 20 6f 66 20 65  t P3 fields of e
1e1f0 61 63 68 0a 2a 2a 20 6b 65 79 20 69 73 20 73 75  ach.** key is su
1e200 66 66 69 63 69 65 6e 74 20 74 6f 20 70 72 6f 64  fficient to prod
1e210 75 63 65 20 74 68 65 20 72 65 71 75 69 72 65 64  uce the required
1e220 20 72 65 73 75 6c 74 73 2e 0a 2a 2f 0a 63 61 73   results..*/.cas
1e230 65 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 3a  e OP_SorterOpen:
1e240 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
1e250 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28  *pCx;..  assert(
1e260 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20   pOp->p1>=0 );. 
1e270 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
1e280 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61  >=0 );.  pCx = a
1e290 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c  llocateCursor(p,
1e2a0 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
1e2b0 32 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 53  2, -1, CURTYPE_S
1e2c0 4f 52 54 45 52 29 3b 0a 20 20 69 66 28 20 70 43  ORTER);.  if( pC
1e2d0 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  x==0 ) goto no_m
1e2e0 65 6d 3b 0a 20 20 70 43 78 2d 3e 70 4b 65 79 49  em;.  pCx->pKeyI
1e2f0 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b  nfo = pOp->p4.pK
1e300 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74  eyInfo;.  assert
1e310 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d  ( pCx->pKeyInfo-
1e320 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 61 73 73  >db==db );.  ass
1e330 65 72 74 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e  ert( pCx->pKeyIn
1e340 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29  fo->enc==ENC(db)
1e350 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
1e360 65 33 56 64 62 65 53 6f 72 74 65 72 49 6e 69 74  e3VdbeSorterInit
1e370 28 64 62 2c 20 70 4f 70 2d 3e 70 33 2c 20 70 43  (db, pOp->p3, pC
1e380 78 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  x);.  if( rc ) g
1e390 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1e3a0 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
1e3b0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
1e3c0 65 71 75 65 6e 63 65 54 65 73 74 20 50 31 20 50  equenceTest P1 P
1e3d0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
1e3e0 73 69 73 3a 20 69 66 28 20 63 75 72 73 6f 72 5b  sis: if( cursor[
1e3f0 50 31 5d 2e 63 74 72 2b 2b 20 29 20 70 63 20 3d  P1].ctr++ ) pc =
1e400 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20   P2.**.** P1 is 
1e410 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 2e  a sorter cursor.
1e420 20 49 66 20 74 68 65 20 73 65 71 75 65 6e 63 65   If the sequence
1e430 20 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72   counter is curr
1e440 65 6e 74 6c 79 20 7a 65 72 6f 2c 20 6a 75 6d 70  ently zero, jump
1e450 0a 2a 2a 20 74 6f 20 50 32 2e 20 52 65 67 61 72  .** to P2. Regar
1e460 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72  dless of whether
1e470 20 6f 72 20 6e 6f 74 20 74 68 65 20 6a 75 6d 70   or not the jump
1e480 20 69 73 20 74 61 6b 65 6e 2c 20 69 6e 63 72 65   is taken, incre
1e490 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 74 68 65 20  ment the.** the 
1e4a0 73 65 71 75 65 6e 63 65 20 76 61 6c 75 65 2e 0a  sequence value..
1e4b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75 65  */.case OP_Seque
1e4c0 6e 63 65 54 65 73 74 3a 20 7b 0a 20 20 56 64 62  nceTest: {.  Vdb
1e4d0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61  eCursor *pC;.  a
1e4e0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1e4f0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1e500 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
1e510 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1e520 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69  p1];.  assert( i
1e530 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20  sSorter(pC) );. 
1e540 20 69 66 28 20 28 70 43 2d 3e 73 65 71 43 6f 75   if( (pC->seqCou
1e550 6e 74 2b 2b 29 3d 3d 30 20 29 7b 0a 20 20 20 20  nt++)==0 ){.    
1e560 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
1e570 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1e580 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1e590 50 73 65 75 64 6f 20 50 31 20 50 32 20 50 33 20  Pseudo P1 P2 P3 
1e5a0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
1e5b0 20 50 33 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 72   P3 columns in r
1e5c0 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20  [P2].**.** Open 
1e5d0 61 20 6e 65 77 20 63 75 72 73 6f 72 20 74 68 61  a new cursor tha
1e5e0 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66 61  t points to a fa
1e5f0 6b 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f  ke table that co
1e600 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a  ntains a single.
1e610 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74 61 2e 20  ** row of data. 
1e620 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   The content of 
1e630 74 68 61 74 20 6f 6e 65 20 72 6f 77 20 69 73 20  that one row is 
1e640 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 6d  the content of m
1e650 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74 65  emory.** registe
1e660 72 20 50 32 2e 20 20 49 6e 20 6f 74 68 65 72 20  r P2.  In other 
1e670 77 6f 72 64 73 2c 20 63 75 72 73 6f 72 20 50 31  words, cursor P1
1e680 20 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61   becomes an alia
1e690 73 20 66 6f 72 20 74 68 65 20 0a 2a 2a 20 4d 45  s for the .** ME
1e6a0 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 20 63  M_Blob content c
1e6b0 6f 6e 74 61 69 6e 65 64 20 69 6e 20 72 65 67 69  ontained in regi
1e6c0 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41  ster P2..**.** A
1e6d0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 72   pseudo-table cr
1e6e0 65 61 74 65 64 20 62 79 20 74 68 69 73 20 6f 70  eated by this op
1e6f0 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20  code is used to 
1e700 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65 0a 2a 2a  hold a single.**
1e710 20 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f 6d   row output from
1e720 20 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20 74   the sorter so t
1e730 68 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e 20  hat the row can 
1e740 62 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e  be decomposed in
1e750 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c  to.** individual
1e760 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74   columns using t
1e770 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  he OP_Column opc
1e780 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c  ode.  The OP_Col
1e790 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73  umn opcode.** is
1e7a0 20 74 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72   the only cursor
1e7b0 20 6f 70 63 6f 64 65 20 74 68 61 74 20 77 6f 72   opcode that wor
1e7c0 6b 73 20 77 69 74 68 20 61 20 70 73 65 75 64 6f  ks with a pseudo
1e7d0 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33  -table..**.** P3
1e7e0 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
1e7f0 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
1e800 72 65 63 6f 72 64 73 20 74 68 61 74 20 77 69 6c  records that wil
1e810 6c 20 62 65 20 73 74 6f 72 65 64 20 62 79 0a 2a  l be stored by.*
1e820 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62  * the pseudo-tab
1e830 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  le..*/.case OP_O
1e840 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56  penPseudo: {.  V
1e850 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a  dbeCursor *pCx;.
1e860 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1e870 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  p1>=0 );.  asser
1e880 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 29 3b  t( pOp->p3>=0 );
1e890 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74  .  pCx = allocat
1e8a0 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
1e8b0 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c  p1, pOp->p3, -1,
1e8c0 20 43 55 52 54 59 50 45 5f 50 53 45 55 44 4f 29   CURTYPE_PSEUDO)
1e8d0 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29  ;.  if( pCx==0 )
1e8e0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
1e8f0 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31  pCx->nullRow = 1
1e900 3b 0a 20 20 70 43 78 2d 3e 73 65 65 6b 52 65 73  ;.  pCx->seekRes
1e910 75 6c 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  ult = pOp->p2;. 
1e920 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20   pCx->isTable = 
1e930 31 3b 0a 20 20 2f 2a 20 47 69 76 65 20 74 68 69  1;.  /* Give thi
1e940 73 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 20  s pseudo-cursor 
1e950 61 20 66 61 6b 65 20 42 74 43 75 72 73 6f 72 20  a fake BtCursor 
1e960 70 6f 69 6e 74 65 72 20 73 6f 20 74 68 61 74 20  pointer so that 
1e970 70 43 78 0a 20 20 2a 2a 20 63 61 6e 20 62 65 20  pCx.  ** can be 
1e980 73 61 66 65 6c 79 20 70 61 73 73 65 64 20 74 6f  safely passed to
1e990 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
1e9a0 6f 72 4d 6f 76 65 74 6f 28 29 2e 20 20 54 68 69  orMoveto().  Thi
1e9b0 73 20 61 76 6f 69 64 73 20 61 20 74 65 73 74 0a  s avoids a test.
1e9c0 20 20 2a 2a 20 66 6f 72 20 70 43 78 2d 3e 65 43    ** for pCx->eC
1e9d0 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
1e9e0 42 54 52 45 45 20 69 6e 73 69 64 65 20 6f 66 20  BTREE inside of 
1e9f0 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
1ea00 72 4d 6f 76 65 74 6f 28 29 0a 20 20 2a 2a 20 77  rMoveto().  ** w
1ea10 68 69 63 68 20 69 73 20 61 20 70 65 72 66 6f 72  hich is a perfor
1ea20 6d 61 6e 63 65 20 6f 70 74 69 6d 69 7a 61 74 69  mance optimizati
1ea30 6f 6e 20 2a 2f 0a 20 20 70 43 78 2d 3e 75 63 2e  on */.  pCx->uc.
1ea40 70 43 75 72 73 6f 72 20 3d 20 73 71 6c 69 74 65  pCursor = sqlite
1ea50 33 42 74 72 65 65 46 61 6b 65 56 61 6c 69 64 43  3BtreeFakeValidC
1ea60 75 72 73 6f 72 28 29 3b 0a 20 20 61 73 73 65 72  ursor();.  asser
1ea70 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b  t( pOp->p5==0 );
1ea80 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1ea90 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50 31  Opcode: Close P1
1eaa0 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43   * * * *.**.** C
1eab0 6c 6f 73 65 20 61 20 63 75 72 73 6f 72 20 70 72  lose a cursor pr
1eac0 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20  eviously opened 
1ead0 61 73 20 50 31 2e 20 20 49 66 20 50 31 20 69 73  as P1.  If P1 is
1eae0 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c   not.** currentl
1eaf0 79 20 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e 73  y open, this ins
1eb00 74 72 75 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f  truction is a no
1eb10 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  -op..*/.case OP_
1eb20 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65 72  Close: {.  asser
1eb30 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1eb40 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
1eb50 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  sor );.  sqlite3
1eb60 56 64 62 65 46 72 65 65 43 75 72 73 6f 72 28 70  VdbeFreeCursor(p
1eb70 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  , p->apCsr[pOp->
1eb80 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72  p1]);.  p->apCsr
1eb90 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20  [pOp->p1] = 0;. 
1eba0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 64 65   break;.}..#ifde
1ebb0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
1ebc0 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f 4d 41 53 4b  COLUMN_USED_MASK
1ebd0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75  ./* Opcode: Colu
1ebe0 6d 6e 73 55 73 65 64 20 50 31 20 2a 20 2a 20 50  mnsUsed P1 * * P
1ebf0 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  4 *.**.** This o
1ec00 70 63 6f 64 65 20 28 77 68 69 63 68 20 6f 6e 6c  pcode (which onl
1ec10 79 20 65 78 69 73 74 73 20 69 66 20 53 51 4c 69  y exists if SQLi
1ec20 74 65 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 20  te was compiled 
1ec30 77 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 45  with.** SQLITE_E
1ec40 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45  NABLE_COLUMN_USE
1ec50 44 5f 4d 41 53 4b 29 20 69 64 65 6e 74 69 66 69  D_MASK) identifi
1ec60 65 73 20 77 68 69 63 68 20 63 6f 6c 75 6d 6e 73  es which columns
1ec70 20 6f 66 20 74 68 65 0a 2a 2a 20 74 61 62 6c 65   of the.** table
1ec80 20 6f 72 20 69 6e 64 65 78 20 66 6f 72 20 63 75   or index for cu
1ec90 72 73 6f 72 20 50 31 20 61 72 65 20 75 73 65 64  rsor P1 are used
1eca0 2e 20 20 50 34 20 69 73 20 61 20 36 34 2d 62 69  .  P4 is a 64-bi
1ecb0 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20 28 50 34  t integer.** (P4
1ecc0 5f 49 4e 54 36 34 29 20 69 6e 20 77 68 69 63 68  _INT64) in which
1ecd0 20 74 68 65 20 66 69 72 73 74 20 36 33 20 62 69   the first 63 bi
1ece0 74 73 20 61 72 65 20 6f 6e 65 20 66 6f 72 20 65  ts are one for e
1ecf0 61 63 68 20 6f 66 20 74 68 65 0a 2a 2a 20 66 69  ach of the.** fi
1ed00 72 73 74 20 36 33 20 63 6f 6c 75 6d 6e 73 20 6f  rst 63 columns o
1ed10 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
1ed20 6e 64 65 78 20 74 68 61 74 20 61 72 65 20 61 63  ndex that are ac
1ed30 74 75 61 6c 6c 79 20 75 73 65 64 0a 2a 2a 20 62  tually used.** b
1ed40 79 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 54  y the cursor.  T
1ed50 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69  he high-order bi
1ed60 74 20 69 73 20 73 65 74 20 69 66 20 61 6e 79 20  t is set if any 
1ed70 63 6f 6c 75 6d 6e 20 61 66 74 65 72 0a 2a 2a 20  column after.** 
1ed80 74 68 65 20 36 34 74 68 20 69 73 20 75 73 65 64  the 64th is used
1ed90 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c  ..*/.case OP_Col
1eda0 75 6d 6e 73 55 73 65 64 3a 20 7b 0a 20 20 56 64  umnsUsed: {.  Vd
1edb0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
1edc0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1edd0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1ede0 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
1edf0 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
1ee00 0a 20 20 70 43 2d 3e 6d 61 73 6b 55 73 65 64 20  .  pC->maskUsed 
1ee10 3d 20 2a 28 75 36 34 2a 29 70 4f 70 2d 3e 70 34  = *(u64*)pOp->p4
1ee20 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a  .pI64;.  break;.
1ee30 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63  }.#endif../* Opc
1ee40 6f 64 65 3a 20 53 65 65 6b 47 45 20 50 31 20 50  ode: SeekGE P1 P
1ee50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
1ee60 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
1ee70 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72  P4].**.** If cur
1ee80 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f  sor P1 refers to
1ee90 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42   an SQL table (B
1eea0 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20  -Tree that uses 
1eeb0 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a  integer keys), .
1eec0 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  ** use the value
1eed0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
1eee0 61 73 20 74 68 65 20 6b 65 79 2e 20 20 49 66 20  as the key.  If 
1eef0 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
1ef00 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69   .** to an SQL i
1ef10 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73  ndex, then P3 is
1ef20 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e   the first in an
1ef30 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67   array of P4 reg
1ef40 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20  isters .** that 
1ef50 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75  are used as an u
1ef60 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
1ef70 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69  y. .**.** Reposi
1ef80 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73  tion cursor P1 s
1ef90 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74  o that  it point
1efa0 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73  s to the smalles
1efb0 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  t entry that .**
1efc0 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
1efd0 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
1efe0 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74   key value. If t
1eff0 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
1f000 72 64 73 20 0a 2a 2a 20 67 72 65 61 74 65 72 20  rds .** greater 
1f010 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
1f020 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20   the key and P2 
1f030 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
1f040 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
1f050 0a 2a 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f  .** If the curso
1f060 72 20 50 31 20 77 61 73 20 6f 70 65 6e 65 64 20  r P1 was opened 
1f070 75 73 69 6e 67 20 74 68 65 20 4f 50 46 4c 41 47  using the OPFLAG
1f080 5f 53 45 45 4b 45 51 20 66 6c 61 67 2c 20 74 68  _SEEKEQ flag, th
1f090 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64  en this.** opcod
1f0a0 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 6c 61  e will always la
1f0b0 6e 64 20 6f 6e 20 61 20 72 65 63 6f 72 64 20 74  nd on a record t
1f0c0 68 61 74 20 65 71 75 61 6c 6c 79 20 65 71 75 61  hat equally equa
1f0d0 6c 73 20 74 68 65 20 6b 65 79 2c 20 6f 72 0a 2a  ls the key, or.*
1f0e0 2a 20 65 6c 73 65 20 6a 75 6d 70 20 69 6d 6d 65  * else jump imme
1f0f0 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20  diately to P2.  
1f100 57 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20  When the cursor 
1f110 69 73 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51  is OPFLAG_SEEKEQ
1f120 2c 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65  , this.** opcode
1f130 20 6d 75 73 74 20 62 65 20 66 6f 6c 6c 6f 77 65   must be followe
1f140 64 20 62 79 20 61 6e 20 49 64 78 4c 45 20 6f 70  d by an IdxLE op
1f150 63 6f 64 65 20 77 69 74 68 20 74 68 65 20 73 61  code with the sa
1f160 6d 65 20 61 72 67 75 6d 65 6e 74 73 2e 0a 2a 2a  me arguments..**
1f170 20 54 68 65 20 49 64 78 4c 45 20 6f 70 63 6f 64   The IdxLE opcod
1f180 65 20 77 69 6c 6c 20 62 65 20 73 6b 69 70 70 65  e will be skippe
1f190 64 20 69 66 20 74 68 69 73 20 6f 70 63 6f 64 65  d if this opcode
1f1a0 20 73 75 63 63 65 65 64 73 2c 20 62 75 74 20 74   succeeds, but t
1f1b0 68 65 0a 2a 2a 20 49 64 78 4c 45 20 6f 70 63 6f  he.** IdxLE opco
1f1c0 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20  de will be used 
1f1d0 6f 6e 20 73 75 62 73 65 71 75 65 6e 74 20 6c 6f  on subsequent lo
1f1e0 6f 70 20 69 74 65 72 61 74 69 6f 6e 73 2e 0a 2a  op iterations..*
1f1f0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
1f200 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
1f210 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  or configured to
1f220 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64   move in forward
1f230 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20   order,.** from 
1f240 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f  the beginning to
1f250 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49  ward the end.  I
1f260 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
1f270 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
1f280 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73  configured to us
1f290 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76  e Next, not Prev
1f2a0 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1f2b0 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
1f2c0 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47  d, SeekLt, SeekG
1f2d0 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20  t, SeekLe.*/./* 
1f2e0 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 54 20 50  Opcode: SeekGT P
1f2f0 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
1f300 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
1f310 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
1f320 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
1f330 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   to an SQL table
1f340 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73   (B-Tree that us
1f350 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29  es integer keys)
1f360 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61  , .** use the va
1f370 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
1f380 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20  P3 as a key. If 
1f390 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
1f3a0 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69   .** to an SQL i
1f3b0 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73  ndex, then P3 is
1f3c0 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e   the first in an
1f3d0 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67   array of P4 reg
1f3e0 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20  isters .** that 
1f3f0 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75  are used as an u
1f400 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
1f410 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69  y. .**.** Reposi
1f420 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73  tion cursor P1 s
1f430 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74  o that  it point
1f440 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73  s to the smalles
1f450 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  t entry that .**
1f460 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
1f470 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
1f480 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
1f490 72 65 63 6f 72 64 73 20 67 72 65 61 74 65 72 20  records greater 
1f4a0 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79  than .** the key
1f4b0 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a   and P2 is not z
1f4c0 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  ero, then jump t
1f4d0 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  o P2..**.** This
1f4e0 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74   opcode leaves t
1f4f0 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67  he cursor config
1f500 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20  ured to move in 
1f510 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a  forward order,.*
1f520 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  * from the begin
1f530 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20  ning toward the 
1f540 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  end.  In other w
1f550 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72  ords, the cursor
1f560 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65   is.** configure
1f570 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e  d to use Next, n
1f580 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53  ot Prev..**.** S
1f590 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
1f5a0 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74  NotFound, SeekLt
1f5b0 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65  , SeekGe, SeekLe
1f5c0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
1f5d0 65 65 6b 4c 54 20 50 31 20 50 32 20 50 33 20 50  eekLT P1 P2 P3 P
1f5e0 34 20 2a 20 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 * .** Synopsis
1f5f0 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
1f600 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50  *.** If cursor P
1f610 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53  1 refers to an S
1f620 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65  QL table (B-Tree
1f630 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67   that uses integ
1f640 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73  er keys), .** us
1f650 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
1f660 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20  egister P3 as a 
1f670 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50  key. If cursor P
1f680 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20  1 refers .** to 
1f690 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68  an SQL index, th
1f6a0 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72  en P3 is the fir
1f6b0 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  st in an array o
1f6c0 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a  f P4 registers .
1f6d0 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ** that are used
1f6e0 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20   as an unpacked 
1f6f0 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a  index key. .**.*
1f700 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72  * Reposition cur
1f710 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20  sor P1 so that  
1f720 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
1f730 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74   largest entry t
1f740 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20  hat .** is less 
1f750 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c  than the key val
1f760 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ue. If there are
1f770 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c 65 73 73   no records less
1f780 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65   than .** the ke
1f790 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20  y and P2 is not 
1f7a0 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20  zero, then jump 
1f7b0 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  to P2..**.** Thi
1f7c0 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
1f7d0 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69  the cursor confi
1f7e0 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e  gured to move in
1f7f0 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a   reverse order,.
1f800 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20  ** from the end 
1f810 74 6f 77 61 72 64 20 74 68 65 20 62 65 67 69 6e  toward the begin
1f820 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20  ning.  In other 
1f830 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f  words, the curso
1f840 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72  r is.** configur
1f850 65 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20  ed to use Prev, 
1f860 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20  not Next..**.** 
1f870 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
1f880 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47   NotFound, SeekG
1f890 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c  t, SeekGe, SeekL
1f8a0 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
1f8b0 53 65 65 6b 4c 45 20 50 31 20 50 32 20 50 33 20  SeekLE P1 P2 P3 
1f8c0 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
1f8d0 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
1f8e0 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50  *.** If cursor P
1f8f0 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53  1 refers to an S
1f900 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65  QL table (B-Tree
1f910 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67   that uses integ
1f920 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73  er keys), .** us
1f930 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
1f940 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20  egister P3 as a 
1f950 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50  key. If cursor P
1f960 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20  1 refers .** to 
1f970 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68  an SQL index, th
1f980 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72  en P3 is the fir
1f990 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  st in an array o
1f9a0 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a  f P4 registers .
1f9b0 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ** that are used
1f9c0 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20   as an unpacked 
1f9d0 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a  index key. .**.*
1f9e0 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72  * Reposition cur
1f9f0 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69  sor P1 so that i
1fa00 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
1fa10 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68  largest entry th
1fa20 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74  at .** is less t
1fa30 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
1fa40 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49  the key value. I
1fa50 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72  f there are no r
1fa60 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73 20  ecords .** less 
1fa70 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
1fa80 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20   the key and P2 
1fa90 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
1faa0 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
1fab0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
1fac0 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
1fad0 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  r configured to 
1fae0 6d 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65 20  move in reverse 
1faf0 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74  order,.** from t
1fb00 68 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68  he end toward th
1fb10 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e  e beginning.  In
1fb20 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
1fb30 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63  e cursor is.** c
1fb40 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65  onfigured to use
1fb50 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e   Prev, not Next.
1fb60 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 75  .**.** If the cu
1fb70 72 73 6f 72 20 50 31 20 77 61 73 20 6f 70 65 6e  rsor P1 was open
1fb80 65 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50 46  ed using the OPF
1fb90 4c 41 47 5f 53 45 45 4b 45 51 20 66 6c 61 67 2c  LAG_SEEKEQ flag,
1fba0 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70   then this.** op
1fbb0 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73  code will always
1fbc0 20 6c 61 6e 64 20 6f 6e 20 61 20 72 65 63 6f 72   land on a recor
1fbd0 64 20 74 68 61 74 20 65 71 75 61 6c 6c 79 20 65  d that equally e
1fbe0 71 75 61 6c 73 20 74 68 65 20 6b 65 79 2c 20 6f  quals the key, o
1fbf0 72 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d 70 20 69  r.** else jump i
1fc00 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
1fc10 2e 20 20 57 68 65 6e 20 74 68 65 20 63 75 72 73  .  When the curs
1fc20 6f 72 20 69 73 20 4f 50 46 4c 41 47 5f 53 45 45  or is OPFLAG_SEE
1fc30 4b 45 51 2c 20 74 68 69 73 0a 2a 2a 20 6f 70 63  KEQ, this.** opc
1fc40 6f 64 65 20 6d 75 73 74 20 62 65 20 66 6f 6c 6c  ode must be foll
1fc50 6f 77 65 64 20 62 79 20 61 6e 20 49 64 78 47 45  owed by an IdxGE
1fc60 20 6f 70 63 6f 64 65 20 77 69 74 68 20 74 68 65   opcode with the
1fc70 20 73 61 6d 65 20 61 72 67 75 6d 65 6e 74 73 2e   same arguments.
1fc80 0a 2a 2a 20 54 68 65 20 49 64 78 47 45 20 6f 70  .** The IdxGE op
1fc90 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 6b 69  code will be ski
1fca0 70 70 65 64 20 69 66 20 74 68 69 73 20 6f 70 63  pped if this opc
1fcb0 6f 64 65 20 73 75 63 63 65 65 64 73 2c 20 62 75  ode succeeds, bu
1fcc0 74 20 74 68 65 0a 2a 2a 20 49 64 78 47 45 20 6f  t the.** IdxGE o
1fcd0 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73  pcode will be us
1fce0 65 64 20 6f 6e 20 73 75 62 73 65 71 75 65 6e 74  ed on subsequent
1fcf0 20 6c 6f 6f 70 20 69 74 65 72 61 74 69 6f 6e 73   loop iterations
1fd00 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1fd10 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
1fd20 64 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47  d, SeekGt, SeekG
1fd30 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73  e, SeekLt.*/.cas
1fd40 65 20 4f 50 5f 53 65 65 6b 4c 54 3a 20 20 20 20  e OP_SeekLT:    
1fd50 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1fd60 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  3 */.case OP_See
1fd70 6b 4c 45 3a 20 20 20 20 20 20 20 20 20 2f 2a 20  kLE:         /* 
1fd80 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
1fd90 65 20 4f 50 5f 53 65 65 6b 47 45 3a 20 20 20 20  e OP_SeekGE:    
1fda0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1fdb0 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  3 */.case OP_See
1fdc0 6b 47 54 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20  kGT: {       /* 
1fdd0 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69  jump, in3 */.  i
1fde0 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20  nt res;         
1fdf0 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20    /* Comparison 
1fe00 72 65 73 75 6c 74 20 2a 2f 0a 20 20 69 6e 74 20  result */.  int 
1fe10 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  oc;            /
1fe20 2a 20 4f 70 63 6f 64 65 20 2a 2f 0a 20 20 56 64  * Opcode */.  Vd
1fe30 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
1fe40 20 2f 2a 20 54 68 65 20 63 75 72 73 6f 72 20 74   /* The cursor t
1fe50 6f 20 73 65 65 6b 20 2a 2f 0a 20 20 55 6e 70 61  o seek */.  Unpa
1fe60 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 20 20 2f  ckedRecord r;  /
1fe70 2a 20 54 68 65 20 6b 65 79 20 74 6f 20 73 65 65  * The key to see
1fe80 6b 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  k for */.  int n
1fe90 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a  Field;        /*
1fea0 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
1feb0 6e 73 20 6f 72 20 66 69 65 6c 64 73 20 69 6e 20  ns or fields in 
1fec0 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20 69 36 34  the key */.  i64
1fed0 20 69 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20   iKey;          
1fee0 2f 2a 20 54 68 65 20 72 6f 77 69 64 20 77 65 20  /* The rowid we 
1fef0 61 72 65 20 74 6f 20 73 65 65 6b 20 74 6f 20 2a  are to seek to *
1ff00 2f 0a 20 20 69 6e 74 20 65 71 4f 6e 6c 79 3b 20  /.  int eqOnly; 
1ff10 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 69         /* Only i
1ff20 6e 74 65 72 65 73 74 65 64 20 69 6e 20 3d 3d 20  nterested in == 
1ff30 72 65 73 75 6c 74 73 20 2a 2f 0a 0a 20 20 61 73  results */..  as
1ff40 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1ff50 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1ff60 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
1ff70 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d 30 20 29  rt( pOp->p2!=0 )
1ff80 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1ff90 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
1ffa0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
1ffb0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
1ffc0 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
1ffd0 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74  TREE );.  assert
1ffe0 28 20 4f 50 5f 53 65 65 6b 4c 45 20 3d 3d 20 4f  ( OP_SeekLE == O
1fff0 50 5f 53 65 65 6b 4c 54 2b 31 20 29 3b 0a 20 20  P_SeekLT+1 );.  
20000 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47  assert( OP_SeekG
20010 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 32  E == OP_SeekLT+2
20020 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50   );.  assert( OP
20030 5f 53 65 65 6b 47 54 20 3d 3d 20 4f 50 5f 53 65  _SeekGT == OP_Se
20040 65 6b 4c 54 2b 33 20 29 3b 0a 20 20 61 73 73 65  ekLT+3 );.  asse
20050 72 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65  rt( pC->isOrdere
20060 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  d );.  assert( p
20070 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30  C->uc.pCursor!=0
20080 20 29 3b 0a 20 20 6f 63 20 3d 20 70 4f 70 2d 3e   );.  oc = pOp->
20090 6f 70 63 6f 64 65 3b 0a 20 20 65 71 4f 6e 6c 79  opcode;.  eqOnly
200a0 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c   = 0;.  pC->null
200b0 52 6f 77 20 3d 20 30 3b 0a 23 69 66 64 65 66 20  Row = 0;.#ifdef 
200c0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70  SQLITE_DEBUG.  p
200d0 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d  C->seekOp = pOp-
200e0 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a  >opcode;.#endif.
200f0 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62  .  if( pC->isTab
20100 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65  le ){.    /* The
20110 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 20 66   BTREE_SEEK_EQ f
20120 6c 61 67 20 69 73 20 6f 6e 6c 79 20 73 65 74 20  lag is only set 
20130 6f 6e 20 69 6e 64 65 78 20 63 75 72 73 6f 72 73  on index cursors
20140 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20   */.    assert( 
20150 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
20160 6f 72 48 61 73 48 69 6e 74 28 70 43 2d 3e 75 63  orHasHint(pC->uc
20170 2e 70 43 75 72 73 6f 72 2c 20 42 54 52 45 45 5f  .pCursor, BTREE_
20180 53 45 45 4b 5f 45 51 29 3d 3d 30 0a 20 20 20 20  SEEK_EQ)==0.    
20190 20 20 20 20 20 20 20 20 20 20 7c 7c 20 43 4f 52            || COR
201a0 52 55 50 54 5f 44 42 20 29 3b 0a 0a 20 20 20 20  RUPT_DB );..    
201b0 2f 2a 20 54 68 65 20 69 6e 70 75 74 20 76 61 6c  /* The input val
201c0 75 65 20 69 6e 20 50 33 20 6d 69 67 68 74 20 62  ue in P3 might b
201d0 65 20 6f 66 20 61 6e 79 20 74 79 70 65 3a 20 69  e of any type: i
201e0 6e 74 65 67 65 72 2c 20 72 65 61 6c 2c 20 73 74  nteger, real, st
201f0 72 69 6e 67 2c 0a 20 20 20 20 2a 2a 20 62 6c 6f  ring,.    ** blo
20200 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74  b, or NULL.  But
20210 20 69 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20   it needs to be 
20220 61 6e 20 69 6e 74 65 67 65 72 20 62 65 66 6f 72  an integer befor
20230 65 20 77 65 20 63 61 6e 20 64 6f 0a 20 20 20 20  e we can do.    
20240 2a 2a 20 74 68 65 20 73 65 65 6b 2c 20 73 6f 20  ** the seek, so 
20250 63 6f 6e 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20  convert it. */. 
20260 20 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b     pIn3 = &aMem[
20270 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 69 66  pOp->p3];.    if
20280 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
20290 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65   (MEM_Int|MEM_Re
202a0 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45  al|MEM_Str))==ME
202b0 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20 61  M_Str ){.      a
202c0 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
202d0 69 74 79 28 70 49 6e 33 2c 20 30 29 3b 0a 20 20  ity(pIn3, 0);.  
202e0 20 20 7d 0a 20 20 20 20 69 4b 65 79 20 3d 20 73    }.    iKey = s
202f0 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
20300 75 65 28 70 49 6e 33 29 3b 0a 0a 20 20 20 20 2f  ue(pIn3);..    /
20310 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75  * If the P3 valu
20320 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 63  e could not be c
20330 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e  onverted into an
20340 20 69 6e 74 65 67 65 72 20 77 69 74 68 6f 75 74   integer without
20350 0a 20 20 20 20 2a 2a 20 6c 6f 73 73 20 6f 66 20  .    ** loss of 
20360 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65  information, the
20370 6e 20 73 70 65 63 69 61 6c 20 70 72 6f 63 65 73  n special proces
20380 73 69 6e 67 20 69 73 20 72 65 71 75 69 72 65 64  sing is required
20390 2e 2e 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 28  ... */.    if( (
203a0 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
203b0 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20  M_Int)==0 ){.   
203c0 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c     if( (pIn3->fl
203d0 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d  ags & MEM_Real)=
203e0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  =0 ){.        /*
203f0 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65   If the P3 value
20400 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65   cannot be conve
20410 72 74 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b 69  rted into any ki
20420 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c 0a  nd of a number,.
20430 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20          ** then 
20440 74 68 65 20 73 65 65 6b 20 69 73 20 6e 6f 74 20  the seek is not 
20450 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75 6d  possible, so jum
20460 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 20  p to P2 */.     
20470 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
20480 65 6e 28 31 2c 32 29 3b 20 67 6f 74 6f 20 6a 75  en(1,2); goto ju
20490 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20  mp_to_p2;.      
204a0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
204b0 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  ..      /* If th
204c0 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20  e approximation 
204d0 69 4b 65 79 20 69 73 20 6c 61 72 67 65 72 20 74  iKey is larger t
204e0 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72  han the actual r
204f0 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20  eal search.     
20500 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69   ** term, substi
20510 74 75 74 65 20 3e 3d 20 66 6f 72 20 3e 20 61 6e  tute >= for > an
20520 64 20 3c 20 66 6f 72 20 3c 3d 2e 20 65 2e 67 2e  d < for <=. e.g.
20530 20 69 66 20 74 68 65 20 73 65 61 72 63 68 20 74   if the search t
20540 65 72 6d 0a 20 20 20 20 20 20 2a 2a 20 69 73 20  erm.      ** is 
20550 34 2e 39 20 61 6e 64 20 74 68 65 20 69 6e 74 65  4.9 and the inte
20560 67 65 72 20 61 70 70 72 6f 78 69 6d 61 74 69 6f  ger approximatio
20570 6e 20 35 3a 0a 20 20 20 20 20 20 2a 2a 0a 20 20  n 5:.      **.  
20580 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78      **        (x
20590 20 3e 20 20 34 2e 39 29 20 20 20 20 2d 3e 20 20   >  4.9)    ->  
205a0 20 20 20 28 78 20 3e 3d 20 35 29 0a 20 20 20 20     (x >= 5).    
205b0 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78 20 3c    **        (x <
205c0 3d 20 34 2e 39 29 20 20 20 20 2d 3e 20 20 20 20  = 4.9)    ->    
205d0 20 28 78 20 3c 20 20 35 29 0a 20 20 20 20 20 20   (x <  5).      
205e0 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 49 6e  */.      if( pIn
205f0 33 2d 3e 75 2e 72 3c 28 64 6f 75 62 6c 65 29 69  3->u.r<(double)i
20600 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61  Key ){.        a
20610 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 45  ssert( OP_SeekGE
20620 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 2d 31 29 20  ==(OP_SeekGT-1) 
20630 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
20640 74 28 20 4f 50 5f 53 65 65 6b 4c 54 3d 3d 28 4f  t( OP_SeekLT==(O
20650 50 5f 53 65 65 6b 4c 45 2d 31 29 20 29 3b 0a 20  P_SeekLE-1) );. 
20660 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28         assert( (
20670 4f 50 5f 53 65 65 6b 4c 45 20 26 20 30 78 30 30  OP_SeekLE & 0x00
20680 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20  01)==(OP_SeekGT 
20690 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20  & 0x0001) );.   
206a0 20 20 20 20 20 69 66 28 20 28 6f 63 20 26 20 30       if( (oc & 0
206b0 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b  x0001)==(OP_Seek
206c0 47 54 20 26 20 30 78 30 30 30 31 29 20 29 20 6f  GT & 0x0001) ) o
206d0 63 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  c--;.      }..  
206e0 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 61 70      /* If the ap
206f0 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79  proximation iKey
20700 20 69 73 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e   is smaller than
20710 20 74 68 65 20 61 63 74 75 61 6c 20 72 65 61 6c   the actual real
20720 20 73 65 61 72 63 68 0a 20 20 20 20 20 20 2a 2a   search.      **
20730 20 74 65 72 6d 2c 20 73 75 62 73 74 69 74 75 74   term, substitut
20740 65 20 3c 3d 20 66 6f 72 20 3c 20 61 6e 64 20 3e  e <= for < and >
20750 20 66 6f 72 20 3e 3d 2e 20 20 2a 2f 0a 20 20 20   for >=.  */.   
20760 20 20 20 65 6c 73 65 20 69 66 28 20 70 49 6e 33     else if( pIn3
20770 2d 3e 75 2e 72 3e 28 64 6f 75 62 6c 65 29 69 4b  ->u.r>(double)iK
20780 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  ey ){.        as
20790 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 3d  sert( OP_SeekLE=
207a0 3d 28 4f 50 5f 53 65 65 6b 4c 54 2b 31 29 20 29  =(OP_SeekLT+1) )
207b0 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
207c0 28 20 4f 50 5f 53 65 65 6b 47 54 3d 3d 28 4f 50  ( OP_SeekGT==(OP
207d0 5f 53 65 65 6b 47 45 2b 31 29 20 29 3b 0a 20 20  _SeekGE+1) );.  
207e0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 4f        assert( (O
207f0 50 5f 53 65 65 6b 4c 54 20 26 20 30 78 30 30 30  P_SeekLT & 0x000
20800 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 20 26  1)==(OP_SeekGE &
20810 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20 20   0x0001) );.    
20820 20 20 20 20 69 66 28 20 28 6f 63 20 26 20 30 78      if( (oc & 0x
20830 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 4c  0001)==(OP_SeekL
20840 54 20 26 20 30 78 30 30 30 31 29 20 29 20 6f 63  T & 0x0001) ) oc
20850 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ++;.      }.    
20860 7d 20 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  } .    rc = sqli
20870 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
20880 70 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43  packed(pC->uc.pC
20890 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 69  ursor, 0, (u64)i
208a0 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  Key, 0, &res);. 
208b0 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72     pC->movetoTar
208c0 67 65 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20  get = iKey;  /* 
208d0 55 73 65 64 20 62 79 20 4f 50 5f 44 65 6c 65 74  Used by OP_Delet
208e0 65 20 2a 2f 0a 20 20 20 20 69 66 28 20 72 63 21  e */.    if( rc!
208f0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
20900 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
20910 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
20920 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
20930 2f 2a 20 46 6f 72 20 61 20 63 75 72 73 6f 72 20  /* For a cursor 
20940 77 69 74 68 20 74 68 65 20 42 54 52 45 45 5f 53  with the BTREE_S
20950 45 45 4b 5f 45 51 20 68 69 6e 74 2c 20 6f 6e 6c  EEK_EQ hint, onl
20960 79 20 74 68 65 20 4f 50 5f 53 65 65 6b 47 45 20  y the OP_SeekGE 
20970 61 6e 64 0a 20 20 20 20 2a 2a 20 4f 50 5f 53 65  and.    ** OP_Se
20980 65 6b 4c 45 20 6f 70 63 6f 64 65 73 20 61 72 65  ekLE opcodes are
20990 20 61 6c 6c 6f 77 65 64 2c 20 61 6e 64 20 74 68   allowed, and th
209a0 65 73 65 20 6d 75 73 74 20 62 65 20 69 6d 6d 65  ese must be imme
209b0 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 65 64  diately followed
209c0 0a 20 20 20 20 2a 2a 20 62 79 20 61 6e 20 4f 50  .    ** by an OP
209d0 5f 49 64 78 47 54 20 6f 72 20 4f 50 5f 49 64 78  _IdxGT or OP_Idx
209e0 4c 54 20 6f 70 63 6f 64 65 2c 20 72 65 73 70 65  LT opcode, respe
209f0 63 74 69 76 65 6c 79 2c 20 77 69 74 68 20 74 68  ctively, with th
20a00 65 20 73 61 6d 65 20 6b 65 79 2e 0a 20 20 20 20  e same key..    
20a10 2a 2f 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  */.    if( sqlit
20a20 65 33 42 74 72 65 65 43 75 72 73 6f 72 48 61 73  e3BtreeCursorHas
20a30 48 69 6e 74 28 70 43 2d 3e 75 63 2e 70 43 75 72  Hint(pC->uc.pCur
20a40 73 6f 72 2c 20 42 54 52 45 45 5f 53 45 45 4b 5f  sor, BTREE_SEEK_
20a50 45 51 29 20 29 7b 0a 20 20 20 20 20 20 65 71 4f  EQ) ){.      eqO
20a60 6e 6c 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 61  nly = 1;.      a
20a70 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
20a80 64 65 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c  de==OP_SeekGE ||
20a90 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
20aa0 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20 20  _SeekLE );.     
20ab0 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e   assert( pOp[1].
20ac0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54  opcode==OP_IdxLT
20ad0 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64   || pOp[1].opcod
20ae0 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20  e==OP_IdxGT );. 
20af0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
20b00 5b 31 5d 2e 70 31 3d 3d 70 4f 70 5b 30 5d 2e 70  [1].p1==pOp[0].p
20b10 31 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  1 );.      asser
20b20 74 28 20 70 4f 70 5b 31 5d 2e 70 32 3d 3d 70 4f  t( pOp[1].p2==pO
20b30 70 5b 30 5d 2e 70 32 20 29 3b 0a 20 20 20 20 20  p[0].p2 );.     
20b40 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e   assert( pOp[1].
20b50 70 33 3d 3d 70 4f 70 5b 30 5d 2e 70 33 20 29 3b  p3==pOp[0].p3 );
20b60 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
20b70 4f 70 5b 31 5d 2e 70 34 2e 69 3d 3d 70 4f 70 5b  Op[1].p4.i==pOp[
20b80 30 5d 2e 70 34 2e 69 20 29 3b 0a 20 20 20 20 7d  0].p4.i );.    }
20b90 0a 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70  ..    nField = p
20ba0 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 61 73  Op->p4.i;.    as
20bb0 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
20bc0 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
20bd0 20 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c     assert( nFiel
20be0 64 3e 30 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65  d>0 );.    r.pKe
20bf0 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79  yInfo = pC->pKey
20c00 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65  Info;.    r.nFie
20c10 6c 64 20 3d 20 28 75 31 36 29 6e 46 69 65 6c 64  ld = (u16)nField
20c20 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65  ;..    /* The ne
20c30 78 74 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65 20  xt line of code 
20c40 63 6f 6d 70 75 74 65 73 20 61 73 20 66 6f 6c 6c  computes as foll
20c50 6f 77 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65 72  ows, only faster
20c60 3a 0a 20 20 20 20 2a 2a 20 20 20 69 66 28 20 6f  :.    **   if( o
20c70 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20  c==OP_SeekGT || 
20c80 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 7b  oc==OP_SeekLE ){
20c90 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65  .    **     r.de
20ca0 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20  fault_rc = -1;. 
20cb0 20 20 20 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a 20     **   }else{. 
20cc0 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65 66 61     **     r.defa
20cd0 75 6c 74 5f 72 63 20 3d 20 2b 31 3b 0a 20 20 20  ult_rc = +1;.   
20ce0 20 2a 2a 20 20 20 7d 0a 20 20 20 20 2a 2f 0a 20   **   }.    */. 
20cf0 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20     r.default_rc 
20d00 3d 20 28 28 31 20 26 20 28 6f 63 20 2d 20 4f 50  = ((1 & (oc - OP
20d10 5f 53 65 65 6b 4c 54 29 29 20 3f 20 2d 31 20 3a  _SeekLT)) ? -1 :
20d20 20 2b 31 29 3b 0a 20 20 20 20 61 73 73 65 72 74   +1);.    assert
20d30 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 54 20  ( oc!=OP_SeekGT 
20d40 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d  || r.default_rc=
20d50 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  =-1 );.    asser
20d60 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 45  t( oc!=OP_SeekLE
20d70 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63   || r.default_rc
20d80 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65  ==-1 );.    asse
20d90 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47  rt( oc!=OP_SeekG
20da0 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72  E || r.default_r
20db0 63 3d 3d 2b 31 20 29 3b 0a 20 20 20 20 61 73 73  c==+1 );.    ass
20dc0 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b  ert( oc!=OP_Seek
20dd0 4c 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f  LT || r.default_
20de0 72 63 3d 3d 2b 31 20 29 3b 0a 0a 20 20 20 20 72  rc==+1 );..    r
20df0 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f  .aMem = &aMem[pO
20e00 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53  p->p3];.#ifdef S
20e10 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
20e20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30  { int i; for(i=0
20e30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b  ; i<r.nField; i+
20e40 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  +) assert( memIs
20e50 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d  Valid(&r.aMem[i]
20e60 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20  ) ); }.#endif.  
20e70 20 20 72 2e 65 71 53 65 65 6e 20 3d 20 30 3b 0a    r.eqSeen = 0;.
20e80 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
20e90 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
20ea0 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ked(pC->uc.pCurs
20eb0 6f 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72  or, &r, 0, 0, &r
20ec0 65 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21  es);.    if( rc!
20ed0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
20ee0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
20ef0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
20f00 20 7d 0a 20 20 20 20 69 66 28 20 65 71 4f 6e 6c   }.    if( eqOnl
20f10 79 20 26 26 20 72 2e 65 71 53 65 65 6e 3d 3d 30  y && r.eqSeen==0
20f20 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
20f30 28 20 72 65 73 21 3d 30 20 29 3b 0a 20 20 20 20  ( res!=0 );.    
20f40 20 20 67 6f 74 6f 20 73 65 65 6b 5f 6e 6f 74 5f    goto seek_not_
20f50 66 6f 75 6e 64 3b 0a 20 20 20 20 7d 0a 20 20 7d  found;.    }.  }
20f60 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  .  pC->deferredM
20f70 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d  oveto = 0;.  pC-
20f80 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
20f90 41 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64  ACHE_STALE;.#ifd
20fa0 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
20fb0 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
20fc0 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a  count++;.#endif.
20fd0 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65    if( oc>=OP_See
20fe0 6b 47 45 20 29 7b 20 20 61 73 73 65 72 74 28 20  kGE ){  assert( 
20ff0 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c  oc==OP_SeekGE ||
21000 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 29   oc==OP_SeekGT )
21010 3b 0a 20 20 20 20 69 66 28 20 72 65 73 3c 30 20  ;.    if( res<0 
21020 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63  || (res==0 && oc
21030 3d 3d 4f 50 5f 53 65 65 6b 47 54 29 20 29 7b 0a  ==OP_SeekGT) ){.
21040 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20        res = 0;. 
21050 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
21060 33 42 74 72 65 65 4e 65 78 74 28 70 43 2d 3e 75  3BtreeNext(pC->u
21070 63 2e 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20  c.pCursor, 0);. 
21080 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
21090 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
210a0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
210b0 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 20 20 20  _DONE ){.       
210c0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
210d0 4b 3b 0a 20 20 20 20 20 20 20 20 20 20 72 65 73  K;.          res
210e0 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65   = 1;.        }e
210f0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 67  lse{.          g
21100 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
21110 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
21120 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  }.      }.    }e
21130 6c 73 65 7b 0a 20 20 20 20 20 20 72 65 73 20 3d  lse{.      res =
21140 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73   0;.    }.  }els
21150 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f  e{.    assert( o
21160 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20  c==OP_SeekLT || 
21170 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b  oc==OP_SeekLE );
21180 0a 20 20 20 20 69 66 28 20 72 65 73 3e 30 20 7c  .    if( res>0 |
21190 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d  | (res==0 && oc=
211a0 3d 4f 50 5f 53 65 65 6b 4c 54 29 20 29 7b 0a 20  =OP_SeekLT) ){. 
211b0 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20       res = 0;.  
211c0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
211d0 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 70 43  BtreePrevious(pC
211e0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 29  ->uc.pCursor, 0)
211f0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
21200 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
21210 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
21220 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20  ITE_DONE ){.    
21230 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
21240 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 20 20 20 20  E_OK;.          
21250 72 65 73 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  res = 1;.       
21260 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
21270 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
21280 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
21290 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
212a0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a   }else{.      /*
212b0 20 72 65 73 20 6d 69 67 68 74 20 62 65 20 6e 65   res might be ne
212c0 67 61 74 69 76 65 20 62 65 63 61 75 73 65 20 74  gative because t
212d0 68 65 20 74 61 62 6c 65 20 69 73 20 65 6d 70 74  he table is empt
212e0 79 2e 20 20 43 68 65 63 6b 20 74 6f 0a 20 20 20  y.  Check to.   
212f0 20 20 20 2a 2a 20 73 65 65 20 69 66 20 74 68 69     ** see if thi
21300 73 20 69 73 20 74 68 65 20 63 61 73 65 2e 0a 20  s is the case.. 
21310 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 72 65       */.      re
21320 73 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  s = sqlite3Btree
21330 45 6f 66 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  Eof(pC->uc.pCurs
21340 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 73  or);.    }.  }.s
21350 65 65 6b 5f 6e 6f 74 5f 66 6f 75 6e 64 3a 0a 20  eek_not_found:. 
21360 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
21370 3e 30 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  >0 );.  VdbeBran
21380 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32  chTaken(res!=0,2
21390 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a  );.  if( res ){.
213a0 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
213b0 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  _p2;.  }else if(
213c0 20 65 71 4f 6e 6c 79 20 29 7b 0a 20 20 20 20 61   eqOnly ){.    a
213d0 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 6f 70  ssert( pOp[1].op
213e0 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 7c  code==OP_IdxLT |
213f0 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d  | pOp[1].opcode=
21400 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20  =OP_IdxGT );.   
21410 20 70 4f 70 2b 2b 3b 20 2f 2a 20 53 6b 69 70 20   pOp++; /* Skip 
21420 74 68 65 20 4f 50 5f 49 64 78 4c 74 20 6f 72 20  the OP_IdxLt or 
21430 4f 50 5f 49 64 78 47 54 20 74 68 61 74 20 66 6f  OP_IdxGT that fo
21440 6c 6c 6f 77 73 20 2a 2f 0a 20 20 7d 0a 20 20 62  llows */.  }.  b
21450 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
21460 64 65 3a 20 46 6f 75 6e 64 20 50 31 20 50 32 20  de: Found P1 P2 
21470 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
21480 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
21490 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30  ].**.** If P4==0
214a0 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
214b0 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63  3 holds a blob c
214c0 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61  onstructed by Ma
214d0 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a  keRecord.  If.**
214e0 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73   P4>0 then regis
214f0 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69  ter P3 is the fi
21500 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74  rst of P4 regist
21510 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e  ers that form an
21520 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63   unpacked.** rec
21530 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f  ord..**.** Curso
21540 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e  r P1 is on an in
21550 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74  dex btree.  If t
21560 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69  he record identi
21570 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50  fied by P3 and P
21580 34 0a 2a 2a 20 69 73 20 61 20 70 72 65 66 69 78  4.** is a prefix
21590 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e   of any entry in
215a0 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20   P1 then a jump 
215b0 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20 61 6e  is made to P2 an
215c0 64 0a 2a 2a 20 50 31 20 69 73 20 6c 65 66 74 20  d.** P1 is left 
215d0 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20  pointing at the 
215e0 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a  matching entry..
215f0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61  **.** This opera
21600 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20  tion leaves the 
21610 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74  cursor in a stat
21620 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 20 62  e where it can b
21630 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e  e.** advanced in
21640 20 74 68 65 20 66 6f 72 77 61 72 64 20 64 69 72   the forward dir
21650 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 4e 65 78  ection.  The Nex
21660 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69  t instruction wi
21670 6c 6c 20 77 6f 72 6b 2c 0a 2a 2a 20 62 75 74 20  ll work,.** but 
21680 6e 6f 74 20 74 68 65 20 50 72 65 76 20 69 6e 73  not the Prev ins
21690 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
216a0 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75  See also: NotFou
216b0 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20  nd, NoConflict, 
216c0 4e 6f 74 45 78 69 73 74 73 2e 20 53 65 65 6b 47  NotExists. SeekG
216d0 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
216e0 4e 6f 74 46 6f 75 6e 64 20 50 31 20 50 32 20 50  NotFound P1 P2 P
216f0 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
21700 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
21710 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20  .**.** If P4==0 
21720 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
21730 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f   holds a blob co
21740 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b  nstructed by Mak
21750 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20  eRecord.  If.** 
21760 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74  P4>0 then regist
21770 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72  er P3 is the fir
21780 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  st of P4 registe
21790 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20  rs that form an 
217a0 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f  unpacked.** reco
217b0 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f  rd..** .** Curso
217c0 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e  r P1 is on an in
217d0 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74  dex btree.  If t
217e0 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69  he record identi
217f0 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50  fied by P3 and P
21800 34 0a 2a 2a 20 69 73 20 6e 6f 74 20 74 68 65 20  4.** is not the 
21810 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e  prefix of any en
21820 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61  try in P1 then a
21830 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f   jump is made to
21840 20 50 32 2e 20 20 49 66 20 50 31 20 0a 2a 2a 20   P2.  If P1 .** 
21850 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20  does contain an 
21860 65 6e 74 72 79 20 77 68 6f 73 65 20 70 72 65 66  entry whose pref
21870 69 78 20 6d 61 74 63 68 65 73 20 74 68 65 20 50  ix matches the P
21880 33 2f 50 34 20 72 65 63 6f 72 64 20 74 68 65 6e  3/P4 record then
21890 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c   control.** fall
218a0 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  s through to the
218b0 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
218c0 6e 20 61 6e 64 20 50 31 20 69 73 20 6c 65 66 74  n and P1 is left
218d0 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65   pointing at the
218e0 0a 2a 2a 20 6d 61 74 63 68 69 6e 67 20 65 6e 74  .** matching ent
218f0 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  ry..**.** This o
21900 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20  peration leaves 
21910 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20  the cursor in a 
21920 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63  state where it c
21930 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61  annot be.** adva
21940 6e 63 65 64 20 69 6e 20 65 69 74 68 65 72 20 64  nced in either d
21950 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74  irection.  In ot
21960 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e  her words, the N
21970 65 78 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20  ext and Prev.** 
21980 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77  opcodes do not w
21990 6f 72 6b 20 61 66 74 65 72 20 74 68 69 73 20 6f  ork after this o
219a0 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  peration..**.** 
219b0 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
219c0 20 4e 6f 74 45 78 69 73 74 73 2c 20 4e 6f 43 6f   NotExists, NoCo
219d0 6e 66 6c 69 63 74 0a 2a 2f 0a 2f 2a 20 4f 70 63  nflict.*/./* Opc
219e0 6f 64 65 3a 20 4e 6f 43 6f 6e 66 6c 69 63 74 20  ode: NoConflict 
219f0 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
21a00 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
21a10 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
21a20 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69   P4==0 then regi
21a30 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20  ster P3 holds a 
21a40 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64  blob constructed
21a50 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20   by MakeRecord. 
21a60 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e   If.** P4>0 then
21a70 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
21a80 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20  the first of P4 
21a90 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66  registers that f
21aa0 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a  orm an unpacked.
21ab0 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a  ** record..** .*
21ac0 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f  * Cursor P1 is o
21ad0 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65  n an index btree
21ae0 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64  .  If the record
21af0 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50   identified by P
21b00 33 20 61 6e 64 20 50 34 0a 2a 2a 20 63 6f 6e 74  3 and P4.** cont
21b10 61 69 6e 73 20 61 6e 79 20 4e 55 4c 4c 20 76 61  ains any NULL va
21b20 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69  lue, jump immedi
21b30 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66  ately to P2.  If
21b40 20 61 6c 6c 20 74 65 72 6d 73 20 6f 66 20 74 68   all terms of th
21b50 65 0a 2a 2a 20 72 65 63 6f 72 64 20 61 72 65 20  e.** record are 
21b60 6e 6f 74 2d 4e 55 4c 4c 20 74 68 65 6e 20 61 20  not-NULL then a 
21b70 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 74 6f  check is done to
21b80 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61 6e   determine if an
21b90 79 20 72 6f 77 20 69 6e 20 74 68 65 0a 2a 2a 20  y row in the.** 
21ba0 50 31 20 69 6e 64 65 78 20 62 74 72 65 65 20 68  P1 index btree h
21bb0 61 73 20 61 20 6d 61 74 63 68 69 6e 67 20 6b 65  as a matching ke
21bc0 79 20 70 72 65 66 69 78 2e 20 20 49 66 20 74 68  y prefix.  If th
21bd0 65 72 65 20 61 72 65 20 6e 6f 20 6d 61 74 63 68  ere are no match
21be0 65 73 2c 20 6a 75 6d 70 0a 2a 2a 20 69 6d 6d 65  es, jump.** imme
21bf0 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20  diately to P2.  
21c00 49 66 20 74 68 65 72 65 20 69 73 20 61 20 6d 61  If there is a ma
21c10 74 63 68 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  tch, fall throug
21c20 68 20 61 6e 64 20 6c 65 61 76 65 20 74 68 65 20  h and leave the 
21c30 50 31 0a 2a 2a 20 63 75 72 73 6f 72 20 70 6f 69  P1.** cursor poi
21c40 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 6d 61 74  nting to the mat
21c50 63 68 69 6e 67 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a  ching row..**.**
21c60 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
21c70 73 69 6d 69 6c 61 72 20 74 6f 20 4f 50 5f 4e 6f  similar to OP_No
21c80 74 46 6f 75 6e 64 20 77 69 74 68 20 74 68 65 20  tFound with the 
21c90 65 78 63 65 70 74 69 6f 6e 73 20 74 68 61 74 20  exceptions that 
21ca0 74 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 69 73  the.** branch is
21cb0 20 61 6c 77 61 79 73 20 74 61 6b 65 6e 20 69 66   always taken if
21cc0 20 61 6e 79 20 70 61 72 74 20 6f 66 20 74 68 65   any part of the
21cd0 20 73 65 61 72 63 68 20 6b 65 79 20 69 6e 70 75   search key inpu
21ce0 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  t is NULL..**.**
21cf0 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20   This operation 
21d00 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
21d10 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65  r in a state whe
21d20 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a  re it cannot be.
21d30 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20 65  ** advanced in e
21d40 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e  ither direction.
21d50 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
21d60 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50  , the Next and P
21d70 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64  rev.** opcodes d
21d80 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65 72  o not work after
21d90 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e   this operation.
21da0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
21db0 20 4e 6f 74 46 6f 75 6e 64 2c 20 46 6f 75 6e 64   NotFound, Found
21dc0 2c 20 4e 6f 74 45 78 69 73 74 73 0a 2a 2f 0a 63  , NotExists.*/.c
21dd0 61 73 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63  ase OP_NoConflic
21de0 74 3a 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20  t:     /* jump, 
21df0 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  in3 */.case OP_N
21e00 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f  otFound:       /
21e10 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
21e20 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20  ase OP_Found: { 
21e30 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
21e40 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72  in3 */.  int alr
21e50 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20 69 6e  eadyExists;.  in
21e60 74 20 74 61 6b 65 4a 75 6d 70 3b 0a 20 20 69 6e  t takeJump;.  in
21e70 74 20 69 69 3b 0a 20 20 56 64 62 65 43 75 72 73  t ii;.  VdbeCurs
21e80 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65  or *pC;.  int re
21e90 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  s;.  UnpackedRec
21ea0 6f 72 64 20 2a 70 46 72 65 65 3b 0a 20 20 55 6e  ord *pFree;.  Un
21eb0 70 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70 49  packedRecord *pI
21ec0 64 78 4b 65 79 3b 0a 20 20 55 6e 70 61 63 6b 65  dxKey;.  Unpacke
21ed0 64 52 65 63 6f 72 64 20 72 3b 0a 0a 23 69 66 64  dRecord r;..#ifd
21ee0 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
21ef0 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
21f00 21 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20  !=OP_NoConflict 
21f10 29 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f  ) sqlite3_found_
21f20 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a  count++;.#endif.
21f30 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
21f40 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
21f50 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
21f60 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
21f70 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
21f80 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
21f90 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
21fa0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23  sert( pC!=0 );.#
21fb0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
21fc0 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20  UG.  pC->seekOp 
21fd0 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23  = pOp->opcode;.#
21fe0 65 6e 64 69 66 0a 20 20 70 49 6e 33 20 3d 20 26  endif.  pIn3 = &
21ff0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
22000 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
22010 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
22020 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74  TREE );.  assert
22030 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  ( pC->uc.pCursor
22040 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
22050 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
22060 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  );.  if( pOp->p4
22070 2e 69 3e 30 20 29 7b 0a 20 20 20 20 72 2e 70 4b  .i>0 ){.    r.pK
22080 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65  eyInfo = pC->pKe
22090 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69  yInfo;.    r.nFi
220a0 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e  eld = (u16)pOp->
220b0 70 34 2e 69 3b 0a 20 20 20 20 72 2e 61 4d 65 6d  p4.i;.    r.aMem
220c0 20 3d 20 70 49 6e 33 3b 0a 23 69 66 64 65 66 20   = pIn3;.#ifdef 
220d0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
220e0 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 72 2e   for(ii=0; ii<r.
220f0 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20  nField; ii++){. 
22100 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
22110 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b  IsValid(&r.aMem[
22120 69 69 5d 29 20 29 3b 0a 20 20 20 20 20 20 61 73  ii]) );.      as
22130 73 65 72 74 28 20 28 72 2e 61 4d 65 6d 5b 69 69  sert( (r.aMem[ii
22140 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65  ].flags & MEM_Ze
22150 72 6f 29 3d 3d 30 20 7c 7c 20 72 2e 61 4d 65 6d  ro)==0 || r.aMem
22160 5b 69 69 5d 2e 6e 3d 3d 30 20 29 3b 0a 20 20 20  [ii].n==0 );.   
22170 20 20 20 69 66 28 20 69 69 20 29 20 52 45 47 49     if( ii ) REGI
22180 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
22190 70 33 2b 69 69 2c 20 26 72 2e 61 4d 65 6d 5b 69  p3+ii, &r.aMem[i
221a0 69 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  i]);.    }.#endi
221b0 66 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20  f.    pIdxKey = 
221c0 26 72 3b 0a 20 20 20 20 70 46 72 65 65 20 3d 20  &r;.    pFree = 
221d0 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  0;.  }else{.    
221e0 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c  assert( pIn3->fl
221f0 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29  ags & MEM_Blob )
22200 3b 0a 20 20 20 20 72 63 20 3d 20 45 78 70 61 6e  ;.    rc = Expan
22210 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20  dBlob(pIn3);.   
22220 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
22230 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51  ITE_OK || rc==SQ
22240 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 3b 0a 20 20  LITE_NOMEM );.  
22250 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
22260 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 70 46 72 65  no_mem;.    pFre
22270 65 20 3d 20 70 49 64 78 4b 65 79 20 3d 20 73 71  e = pIdxKey = sq
22280 6c 69 74 65 33 56 64 62 65 41 6c 6c 6f 63 55 6e  lite3VdbeAllocUn
22290 70 61 63 6b 65 64 52 65 63 6f 72 64 28 70 43 2d  packedRecord(pC-
222a0 3e 70 4b 65 79 49 6e 66 6f 29 3b 0a 20 20 20 20  >pKeyInfo);.    
222b0 69 66 28 20 70 49 64 78 4b 65 79 3d 3d 30 20 29  if( pIdxKey==0 )
222c0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
222d0 20 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 63    sqlite3VdbeRec
222e0 6f 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b  ordUnpack(pC->pK
222f0 65 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c  eyInfo, pIn3->n,
22300 20 70 49 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b 65   pIn3->z, pIdxKe
22310 79 29 3b 0a 20 20 7d 0a 20 20 70 49 64 78 4b 65  y);.  }.  pIdxKe
22320 79 2d 3e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20  y->default_rc = 
22330 30 3b 0a 20 20 74 61 6b 65 4a 75 6d 70 20 3d 20  0;.  takeJump = 
22340 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  0;.  if( pOp->op
22350 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c  code==OP_NoConfl
22360 69 63 74 20 29 7b 0a 20 20 20 20 2f 2a 20 46 6f  ict ){.    /* Fo
22370 72 20 74 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c  r the OP_NoConfl
22380 69 63 74 20 6f 70 63 6f 64 65 2c 20 74 61 6b 65  ict opcode, take
22390 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 79   the jump if any
223a0 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 69   of the.    ** i
223b0 6e 70 75 74 20 66 69 65 6c 64 73 20 61 72 65 20  nput fields are 
223c0 4e 55 4c 4c 2c 20 73 69 6e 63 65 20 61 6e 79 20  NULL, since any 
223d0 6b 65 79 20 77 69 74 68 20 61 20 4e 55 4c 4c 20  key with a NULL 
223e0 77 69 6c 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a 20  will not.    ** 
223f0 63 6f 6e 66 6c 69 63 74 20 2a 2f 0a 20 20 20 20  conflict */.    
22400 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 70 49 64  for(ii=0; ii<pId
22410 78 4b 65 79 2d 3e 6e 46 69 65 6c 64 3b 20 69 69  xKey->nField; ii
22420 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70  ++){.      if( p
22430 49 64 78 4b 65 79 2d 3e 61 4d 65 6d 5b 69 69 5d  IdxKey->aMem[ii]
22440 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  .flags & MEM_Nul
22450 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 74 61 6b  l ){.        tak
22460 65 4a 75 6d 70 20 3d 20 31 3b 0a 20 20 20 20 20  eJump = 1;.     
22470 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
22480 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 63  }.    }.  }.  rc
22490 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
224a0 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
224b0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 70 49  ->uc.pCursor, pI
224c0 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72 65  dxKey, 0, 0, &re
224d0 73 29 3b 0a 20 20 69 66 28 20 70 46 72 65 65 20  s);.  if( pFree 
224e0 29 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 4e  ) sqlite3DbFreeN
224f0 4e 28 64 62 2c 20 70 46 72 65 65 29 3b 0a 20 20  N(db, pFree);.  
22500 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
22510 4b 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 61 62  K ){.    goto ab
22520 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
22530 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b  ;.  }.  pC->seek
22540 52 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20  Result = res;.  
22550 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d 20  alreadyExists = 
22560 28 72 65 73 3d 3d 30 29 3b 0a 20 20 70 43 2d 3e  (res==0);.  pC->
22570 6e 75 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c 72 65  nullRow = 1-alre
22580 61 64 79 45 78 69 73 74 73 3b 0a 20 20 70 43 2d  adyExists;.  pC-
22590 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
225a0 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
225b0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
225c0 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d  TALE;.  if( pOp-
225d0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e  >opcode==OP_Foun
225e0 64 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61  d ){.    VdbeBra
225f0 6e 63 68 54 61 6b 65 6e 28 61 6c 72 65 61 64 79  nchTaken(already
22600 45 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20  Exists!=0,2);.  
22610 20 20 69 66 28 20 61 6c 72 65 61 64 79 45 78 69    if( alreadyExi
22620 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  sts ) goto jump_
22630 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a  to_p2;.  }else{.
22640 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
22650 6b 65 6e 28 74 61 6b 65 4a 75 6d 70 7c 7c 61 6c  ken(takeJump||al
22660 72 65 61 64 79 45 78 69 73 74 73 3d 3d 30 2c 32  readyExists==0,2
22670 29 3b 0a 20 20 20 20 69 66 28 20 74 61 6b 65 4a  );.    if( takeJ
22680 75 6d 70 20 7c 7c 20 21 61 6c 72 65 61 64 79 45  ump || !alreadyE
22690 78 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d  xists ) goto jum
226a0 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62  p_to_p2;.  }.  b
226b0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
226c0 64 65 3a 20 53 65 65 6b 52 6f 77 69 64 20 50 31  de: SeekRowid P1
226d0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
226e0 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72  nopsis: intkey=r
226f0 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  [P3].**.** P1 is
22700 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20   the index of a 
22710 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61  cursor open on a
22720 6e 20 53 51 4c 20 74 61 62 6c 65 20 62 74 72 65  n SQL table btre
22730 65 20 28 77 69 74 68 20 69 6e 74 65 67 65 72 0a  e (with integer.
22740 2a 2a 20 6b 65 79 73 29 2e 20 20 49 66 20 72 65  ** keys).  If re
22750 67 69 73 74 65 72 20 50 33 20 64 6f 65 73 20 6e  gister P3 does n
22760 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  ot contain an in
22770 74 65 67 65 72 20 6f 72 20 69 66 20 50 31 20 64  teger or if P1 d
22780 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 6f 6e 74 61  oes not.** conta
22790 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74 68  in a record with
227a0 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 6a   rowid P3 then j
227b0 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
227c0 74 6f 20 50 32 2e 20 20 0a 2a 2a 20 4f 72 2c 20  to P2.  .** Or, 
227d0 69 66 20 50 32 20 69 73 20 30 2c 20 72 61 69 73  if P2 is 0, rais
227e0 65 20 61 6e 20 53 51 4c 49 54 45 5f 43 4f 52 52  e an SQLITE_CORR
227f0 55 50 54 20 65 72 72 6f 72 2e 20 49 66 20 50 31  UPT error. If P1
22800 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 0a 2a 2a   does contain.**
22810 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 20 72   a record with r
22820 6f 77 69 64 20 50 33 20 74 68 65 6e 20 0a 2a 2a  owid P3 then .**
22830 20 6c 65 61 76 65 20 74 68 65 20 63 75 72 73 6f   leave the curso
22840 72 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68  r pointing at th
22850 61 74 20 72 65 63 6f 72 64 20 61 6e 64 20 66 61  at record and fa
22860 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
22870 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75  e next.** instru
22880 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ction..**.** The
22890 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70   OP_NotExists op
228a0 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68  code performs th
228b0 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e  e same operation
228c0 2c 20 62 75 74 20 77 69 74 68 20 4f 50 5f 4e 6f  , but with OP_No
228d0 74 45 78 69 73 74 73 0a 2a 2a 20 74 68 65 20 50  tExists.** the P
228e0 33 20 72 65 67 69 73 74 65 72 20 6d 75 73 74 20  3 register must 
228f0 62 65 20 67 75 61 72 61 6e 74 65 65 64 20 74 6f  be guaranteed to
22900 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
22910 67 65 72 20 76 61 6c 75 65 2e 20 20 57 69 74 68  ger value.  With
22920 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 2c   this.** opcode,
22930 20 72 65 67 69 73 74 65 72 20 50 33 20 6d 69 67   register P3 mig
22940 68 74 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61  ht not contain a
22950 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a  n integer..**.**
22960 20 54 68 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64   The OP_NotFound
22970 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73   opcode performs
22980 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74   the same operat
22990 69 6f 6e 20 6f 6e 20 69 6e 64 65 78 20 62 74 72  ion on index btr
229a0 65 65 73 0a 2a 2a 20 28 77 69 74 68 20 61 72 62  ees.** (with arb
229b0 69 74 72 61 72 79 20 6d 75 6c 74 69 2d 76 61 6c  itrary multi-val
229c0 75 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20  ue keys)..**.** 
229d0 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
229e0 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e  es the cursor in
229f0 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69   a state where i
22a00 74 20 63 61 6e 6e 6f 74 20 62 65 20 61 64 76 61  t cannot be adva
22a10 6e 63 65 64 0a 2a 2a 20 69 6e 20 65 69 74 68 65  nced.** in eithe
22a20 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e  r direction.  In
22a30 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
22a40 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76 20  e Next and Prev 
22a50 6f 70 63 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a 20  opcodes will.** 
22a60 6e 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69  not work followi
22a70 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  ng this opcode..
22a80 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
22a90 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
22aa0 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 53 65 65   NoConflict, See
22ab0 6b 52 6f 77 69 64 0a 2a 2f 0a 2f 2a 20 4f 70 63  kRowid.*/./* Opc
22ac0 6f 64 65 3a 20 4e 6f 74 45 78 69 73 74 73 20 50  ode: NotExists P
22ad0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
22ae0 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d  ynopsis: intkey=
22af0 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69  r[P3].**.** P1 i
22b00 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61  s the index of a
22b10 20 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20   cursor open on 
22b20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 62 74 72  an SQL table btr
22b30 65 65 20 28 77 69 74 68 20 69 6e 74 65 67 65 72  ee (with integer
22b40 0a 2a 2a 20 6b 65 79 73 29 2e 20 20 50 33 20 69  .** keys).  P3 i
22b50 73 20 61 6e 20 69 6e 74 65 67 65 72 20 72 6f 77  s an integer row
22b60 69 64 2e 20 20 49 66 20 50 31 20 64 6f 65 73 20  id.  If P1 does 
22b70 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20 72 65  not contain a re
22b80 63 6f 72 64 20 77 69 74 68 0a 2a 2a 20 72 6f 77  cord with.** row
22b90 69 64 20 50 33 20 74 68 65 6e 20 6a 75 6d 70 20  id P3 then jump 
22ba0 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
22bb0 32 2e 20 20 4f 72 2c 20 69 66 20 50 32 20 69 73  2.  Or, if P2 is
22bc0 20 30 2c 20 72 61 69 73 65 20 61 6e 0a 2a 2a 20   0, raise an.** 
22bd0 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 65  SQLITE_CORRUPT e
22be0 72 72 6f 72 2e 20 49 66 20 50 31 20 64 6f 65 73  rror. If P1 does
22bf0 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72   contain a recor
22c00 64 20 77 69 74 68 20 72 6f 77 69 64 20 50 33 20  d with rowid P3 
22c10 74 68 65 6e 20 0a 2a 2a 20 6c 65 61 76 65 20 74  then .** leave t
22c20 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69  he cursor pointi
22c30 6e 67 20 61 74 20 74 68 61 74 20 72 65 63 6f 72  ng at that recor
22c40 64 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75  d and fall throu
22c50 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a  gh to the next.*
22c60 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  * instruction..*
22c70 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 53 65 65 6b  *.** The OP_Seek
22c80 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 70 65 72  Rowid opcode per
22c90 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f  forms the same o
22ca0 70 65 72 61 74 69 6f 6e 20 62 75 74 20 61 6c 73  peration but als
22cb0 6f 20 61 6c 6c 6f 77 73 20 74 68 65 0a 2a 2a 20  o allows the.** 
22cc0 50 33 20 72 65 67 69 73 74 65 72 20 74 6f 20 63  P3 register to c
22cd0 6f 6e 74 61 69 6e 20 61 20 6e 6f 6e 2d 69 6e 74  ontain a non-int
22ce0 65 67 65 72 20 76 61 6c 75 65 2c 20 69 6e 20 77  eger value, in w
22cf0 68 69 63 68 20 63 61 73 65 20 74 68 65 20 6a 75  hich case the ju
22d00 6d 70 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20  mp is.** always 
22d10 74 61 6b 65 6e 2e 20 20 54 68 69 73 20 6f 70 63  taken.  This opc
22d20 6f 64 65 20 72 65 71 75 69 72 65 73 20 74 68 61  ode requires tha
22d30 74 20 50 33 20 61 6c 77 61 79 73 20 63 6f 6e 74  t P3 always cont
22d40 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  ain an integer..
22d50 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74  **.** The OP_Not
22d60 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70 65 72  Found opcode per
22d70 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f  forms the same o
22d80 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64 65  peration on inde
22d90 78 20 62 74 72 65 65 73 0a 2a 2a 20 28 77 69 74  x btrees.** (wit
22da0 68 20 61 72 62 69 74 72 61 72 79 20 6d 75 6c 74  h arbitrary mult
22db0 69 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a 2a  i-value keys)..*
22dc0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
22dd0 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
22de0 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68  or in a state wh
22df0 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65  ere it cannot be
22e00 20 61 64 76 61 6e 63 65 64 0a 2a 2a 20 69 6e 20   advanced.** in 
22e10 65 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e  either direction
22e20 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
22e30 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20  s, the Next and 
22e40 50 72 65 76 20 6f 70 63 6f 64 65 73 20 77 69 6c  Prev opcodes wil
22e50 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20 66 6f  l.** not work fo
22e60 6c 6c 6f 77 69 6e 67 20 74 68 69 73 20 6f 70 63  llowing this opc
22e70 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ode..**.** See a
22e80 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
22e90 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74  ound, NoConflict
22ea0 2c 20 53 65 65 6b 52 6f 77 69 64 0a 2a 2f 0a 63  , SeekRowid.*/.c
22eb0 61 73 65 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64  ase OP_SeekRowid
22ec0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
22ed0 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62  mp, in3 */.  Vdb
22ee0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
22ef0 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
22f00 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 75 36 34    int res;.  u64
22f10 20 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20 3d   iKey;..  pIn3 =
22f20 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
22f30 0a 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c  .  if( (pIn3->fl
22f40 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d  ags & MEM_Int)==
22f50 30 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66  0 ){.    applyAf
22f60 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 53 51 4c  finity(pIn3, SQL
22f70 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c  ITE_AFF_NUMERIC,
22f80 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
22f90 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  if( (pIn3->flags
22fa0 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29   & MEM_Int)==0 )
22fb0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
22fc0 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20  ;.  }.  /* Fall 
22fd0 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f  through into OP_
22fe0 4e 6f 74 45 78 69 73 74 73 20 2a 2f 0a 63 61 73  NotExists */.cas
22ff0 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20  e OP_NotExists: 
23000 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
23010 2c 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20  , in3 */.  pIn3 
23020 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
23030 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33  ;.  assert( pIn3
23040 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
23050 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t );.  assert( p
23060 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
23070 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
23080 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
23090 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
230a0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
230b0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
230c0 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70  BUG.  pC->seekOp
230d0 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 61   = 0;.#endif.  a
230e0 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
230f0 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  le );.  assert( 
23100 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
23110 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
23120 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e   pCrsr = pC->uc.
23130 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72  pCursor;.  asser
23140 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20  t( pCrsr!=0 );. 
23150 20 72 65 73 20 3d 20 30 3b 0a 20 20 69 4b 65 79   res = 0;.  iKey
23160 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20   = pIn3->u.i;.  
23170 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
23180 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
23190 70 43 72 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20  pCrsr, 0, iKey, 
231a0 30 2c 20 26 72 65 73 29 3b 0a 20 20 61 73 73 65  0, &res);.  asse
231b0 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
231c0 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29 3b 0a 20  K || res==0 );. 
231d0 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65   pC->movetoTarge
231e0 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73  t = iKey;  /* Us
231f0 65 64 20 62 79 20 4f 50 5f 44 65 6c 65 74 65 20  ed by OP_Delete 
23200 2a 2f 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  */.  pC->nullRow
23210 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
23220 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
23230 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 64 65 66  STALE;.  pC->def
23240 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
23250 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
23260 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
23270 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d  pC->seekResult =
23280 20 72 65 73 3b 0a 20 20 69 66 28 20 72 65 73 21   res;.  if( res!
23290 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
232a0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
232b0 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  );.    if( pOp->
232c0 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72  p2==0 ){.      r
232d0 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  c = SQLITE_CORRU
232e0 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 7d 65 6c  PT_BKPT;.    }el
232f0 73 65 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a  se{.      goto j
23300 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d  ump_to_p2;.    }
23310 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20  .  }.  if( rc ) 
23320 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
23330 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
23340 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
23350 53 65 71 75 65 6e 63 65 20 50 31 20 50 32 20 2a  Sequence P1 P2 *
23360 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
23370 3a 20 72 5b 50 32 5d 3d 63 75 72 73 6f 72 5b 50  : r[P2]=cursor[P
23380 31 5d 2e 63 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46  1].ctr++.**.** F
23390 69 6e 64 20 74 68 65 20 6e 65 78 74 20 61 76 61  ind the next ava
233a0 69 6c 61 62 6c 65 20 73 65 71 75 65 6e 63 65 20  ilable sequence 
233b0 6e 75 6d 62 65 72 20 66 6f 72 20 63 75 72 73 6f  number for curso
233c0 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65 20 74  r P1..** Write t
233d0 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62  he sequence numb
233e0 65 72 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  er into register
233f0 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65 71 75   P2..** The sequ
23400 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e 20 74  ence number on t
23410 68 65 20 63 75 72 73 6f 72 20 69 73 20 69 6e 63  he cursor is inc
23420 72 65 6d 65 6e 74 65 64 20 61 66 74 65 72 20 74  remented after t
23430 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69  his.** instructi
23440 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50  on.  .*/.case OP
23450 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20 20 20 20  _Sequence: {    
23460 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
23470 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
23480 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
23490 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
234a0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43    assert( p->apC
234b0 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29  sr[pOp->p1]!=0 )
234c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61  ;.  assert( p->a
234d0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 65  pCsr[pOp->p1]->e
234e0 43 75 72 54 79 70 65 21 3d 43 55 52 54 59 50 45  CurType!=CURTYPE
234f0 5f 56 54 41 42 20 29 3b 0a 20 20 70 4f 75 74 20  _VTAB );.  pOut 
23500 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
23510 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74  (p, pOp);.  pOut
23520 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61 70 43 73 72  ->u.i = p->apCsr
23530 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f  [pOp->p1]->seqCo
23540 75 6e 74 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a  unt++;.  break;.
23550 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  }.../* Opcode: N
23560 65 77 52 6f 77 69 64 20 50 31 20 50 32 20 50 33  ewRowid P1 P2 P3
23570 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
23580 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a  : r[P2]=rowid.**
23590 0a 2a 2a 20 47 65 74 20 61 20 6e 65 77 20 69 6e  .** Get a new in
235a0 74 65 67 65 72 20 72 65 63 6f 72 64 20 6e 75 6d  teger record num
235b0 62 65 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69  ber (a.k.a "rowi
235c0 64 22 29 20 75 73 65 64 20 61 73 20 74 68 65 20  d") used as the 
235d0 6b 65 79 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a  key to a table..
235e0 2a 2a 20 54 68 65 20 72 65 63 6f 72 64 20 6e 75  ** The record nu
235f0 6d 62 65 72 20 69 73 20 6e 6f 74 20 70 72 65 76  mber is not prev
23600 69 6f 75 73 6c 79 20 75 73 65 64 20 61 73 20 61  iously used as a
23610 20 6b 65 79 20 69 6e 20 74 68 65 20 64 61 74 61   key in the data
23620 62 61 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68  base.** table th
23630 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69  at cursor P1 poi
23640 6e 74 73 20 74 6f 2e 20 20 54 68 65 20 6e 65 77  nts to.  The new
23650 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69   record number i
23660 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69  s written.** wri
23670 74 74 65 6e 20 74 6f 20 72 65 67 69 73 74 65 72  tten to register
23680 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33   P2..**.** If P3
23690 3e 30 20 74 68 65 6e 20 50 33 20 69 73 20 61 20  >0 then P3 is a 
236a0 72 65 67 69 73 74 65 72 20 69 6e 20 74 68 65 20  register in the 
236b0 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68  root frame of th
236c0 69 73 20 56 44 42 45 20 74 68 61 74 20 68 6f 6c  is VDBE that hol
236d0 64 73 20 0a 2a 2a 20 74 68 65 20 6c 61 72 67 65  ds .** the large
236e0 73 74 20 70 72 65 76 69 6f 75 73 6c 79 20 67 65  st previously ge
236f0 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e  nerated record n
23700 75 6d 62 65 72 2e 20 4e 6f 20 6e 65 77 20 72 65  umber. No new re
23710 63 6f 72 64 20 6e 75 6d 62 65 72 73 20 61 72 65  cord numbers are
23720 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62  .** allowed to b
23730 65 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73  e less than this
23740 20 76 61 6c 75 65 2e 20 57 68 65 6e 20 74 68 69   value. When thi
23750 73 20 76 61 6c 75 65 20 72 65 61 63 68 65 73 20  s value reaches 
23760 69 74 73 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a  its maximum, .**
23770 20 61 6e 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20   an SQLITE_FULL 
23780 65 72 72 6f 72 20 69 73 20 67 65 6e 65 72 61 74  error is generat
23790 65 64 2e 20 54 68 65 20 50 33 20 72 65 67 69 73  ed. The P3 regis
237a0 74 65 72 20 69 73 20 75 70 64 61 74 65 64 20 77  ter is updated w
237b0 69 74 68 20 74 68 65 20 27 0a 2a 2a 20 67 65 6e  ith the '.** gen
237c0 65 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75  erated record nu
237d0 6d 62 65 72 2e 20 54 68 69 73 20 50 33 20 6d 65  mber. This P3 me
237e0 63 68 61 6e 69 73 6d 20 69 73 20 75 73 65 64 20  chanism is used 
237f0 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e  to help implemen
23800 74 20 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43  t the.** AUTOINC
23810 52 45 4d 45 4e 54 20 66 65 61 74 75 72 65 2e 0a  REMENT feature..
23820 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f  */.case OP_NewRo
23830 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20  wid: {          
23840 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 36   /* out2 */.  i6
23850 34 20 76 3b 20 20 20 20 20 20 20 20 20 20 20 20  4 v;            
23860 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20       /* The new 
23870 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62 65 43  rowid */.  VdbeC
23880 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20 20  ursor *pC;      
23890 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66 20 74    /* Cursor of t
238a0 61 62 6c 65 20 74 6f 20 67 65 74 20 74 68 65 20  able to get the 
238b0 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69  new rowid */.  i
238c0 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20  nt res;         
238d0 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
238e0 6f 66 20 61 6e 20 73 71 6c 69 74 65 33 42 74 72  of an sqlite3Btr
238f0 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 69 6e  eeLast() */.  in
23900 74 20 63 6e 74 3b 20 20 20 20 20 20 20 20 20 20  t cnt;          
23910 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20       /* Counter 
23920 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d  to limit the num
23930 62 65 72 20 6f 66 20 73 65 61 72 63 68 65 73 20  ber of searches 
23940 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20  */.  Mem *pMem; 
23950 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
23960 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
23970 6c 61 72 67 65 73 74 20 72 6f 77 69 64 20 66 6f  largest rowid fo
23980 72 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  r AUTOINCREMENT 
23990 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a  */.  VdbeFrame *
239a0 70 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a 20 52  pFrame;     /* R
239b0 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 56 44 42  oot frame of VDB
239c0 45 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a 20  E */..  v = 0;. 
239d0 20 72 65 73 20 3d 20 30 3b 0a 20 20 70 4f 75 74   res = 0;.  pOut
239e0 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
239f0 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73  e(p, pOp);.  ass
23a00 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
23a10 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
23a20 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
23a30 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
23a40 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
23a50 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
23a60 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
23a70 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
23a80 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e   assert( pC->uc.
23a90 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
23aa0 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78  {.    /* The nex
23ab0 74 20 72 6f 77 69 64 20 6f 72 20 72 65 63 6f 72  t rowid or recor
23ac0 64 20 6e 75 6d 62 65 72 20 28 64 69 66 66 65 72  d number (differ
23ad0 65 6e 74 20 74 65 72 6d 73 20 66 6f 72 20 74 68  ent terms for th
23ae0 65 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74 68  e same.    ** th
23af0 69 6e 67 29 20 69 73 20 6f 62 74 61 69 6e 65 64  ing) is obtained
23b00 20 69 6e 20 61 20 74 77 6f 2d 73 74 65 70 20 61   in a two-step a
23b10 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a 2a  lgorithm..    **
23b20 0a 20 20 20 20 2a 2a 20 46 69 72 73 74 20 77 65  .    ** First we
23b30 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64   attempt to find
23b40 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69   the largest exi
23b50 73 74 69 6e 67 20 72 6f 77 69 64 20 61 6e 64 20  sting rowid and 
23b60 61 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 74  add one.    ** t
23b70 6f 20 74 68 61 74 2e 20 20 42 75 74 20 69 66 20  o that.  But if 
23b80 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73  the largest exis
23b90 74 69 6e 67 20 72 6f 77 69 64 20 69 73 20 61 6c  ting rowid is al
23ba0 72 65 61 64 79 20 74 68 65 20 6d 61 78 69 6d 75  ready the maximu
23bb0 6d 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74 69 76  m.    ** positiv
23bc0 65 20 69 6e 74 65 67 65 72 2c 20 77 65 20 68 61  e integer, we ha
23bd0 76 65 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f 75  ve to fall throu
23be0 67 68 20 74 6f 20 74 68 65 20 73 65 63 6f 6e 64  gh to the second
23bf0 0a 20 20 20 20 2a 2a 20 70 72 6f 62 61 62 69 6c  .    ** probabil
23c00 69 73 74 69 63 20 61 6c 67 6f 72 69 74 68 6d 0a  istic algorithm.
23c10 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68      **.    ** Th
23c20 65 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69 74  e second algorit
23c30 68 6d 20 69 73 20 74 6f 20 73 65 6c 65 63 74 20  hm is to select 
23c40 61 20 72 6f 77 69 64 20 61 74 20 72 61 6e 64 6f  a rowid at rando
23c50 6d 20 61 6e 64 20 73 65 65 20 69 66 0a 20 20 20  m and see if.   
23c60 20 2a 2a 20 69 74 20 61 6c 72 65 61 64 79 20 65   ** it already e
23c70 78 69 73 74 73 20 69 6e 20 74 68 65 20 74 61 62  xists in the tab
23c80 6c 65 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20  le.  If it does 
23c90 6e 6f 74 20 65 78 69 73 74 2c 20 77 65 20 68 61  not exist, we ha
23ca0 76 65 0a 20 20 20 20 2a 2a 20 73 75 63 63 65 65  ve.    ** succee
23cb0 64 65 64 2e 20 20 49 66 20 74 68 65 20 72 61 6e  ded.  If the ran
23cc0 64 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73 20 65  dom rowid does e
23cd0 78 69 73 74 2c 20 77 65 20 73 65 6c 65 63 74 20  xist, we select 
23ce0 61 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a 2a  a new one.    **
23cf0 20 61 6e 64 20 74 72 79 20 61 67 61 69 6e 2c 20   and try again, 
23d00 75 70 20 74 6f 20 31 30 30 20 74 69 6d 65 73 2e  up to 100 times.
23d10 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65  .    */.    asse
23d20 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
23d30 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
23d40 45 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a 23 20  E_32BIT_ROWID.# 
23d50 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57    define MAX_ROW
23d60 49 44 20 30 78 37 66 66 66 66 66 66 66 0a 23 65  ID 0x7fffffff.#e
23d70 6c 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65 20  lse.    /* Some 
23d80 63 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c 61  compilers compla
23d90 69 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74 61 6e  in about constan
23da0 74 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 30  ts of the form 0
23db0 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66  x7ffffffffffffff
23dc0 66 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72 73  f..    ** Others
23dd0 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20   complain about 
23de0 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66  0x7fffffffffffff
23df0 66 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c 6c  fffLL.  The foll
23e00 6f 77 69 6e 67 20 6d 61 63 72 6f 20 73 65 65 6d  owing macro seem
23e10 73 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f 76  s.    ** to prov
23e20 69 64 65 20 74 68 65 20 63 6f 6e 73 74 61 6e 74  ide the constant
23e30 20 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61 6c   while making al
23e40 6c 20 63 6f 6d 70 69 6c 65 72 73 20 68 61 70 70  l compilers happ
23e50 79 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64 65  y..    */.#   de
23e60 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 20  fine MAX_ROWID  
23e70 28 69 36 34 29 28 20 28 28 28 75 36 34 29 30 78  (i64)( (((u64)0x
23e80 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29 20 7c  7fffffff)<<32) |
23e90 20 28 75 36 34 29 30 78 66 66 66 66 66 66 66 66   (u64)0xffffffff
23ea0 20 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 69   ).#endif..    i
23eb0 66 28 20 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f  f( !pC->useRando
23ec0 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20  mRowid ){.      
23ed0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
23ee0 65 4c 61 73 74 28 70 43 2d 3e 75 63 2e 70 43 75  eLast(pC->uc.pCu
23ef0 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  rsor, &res);.   
23f00 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
23f10 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
23f20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
23f30 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
23f40 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 20 29  .      if( res )
23f50 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20 31 3b  {.        v = 1;
23f60 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 36 31 39     /* IMP: R-619
23f70 31 34 2d 34 38 30 37 34 20 2a 2f 0a 20 20 20 20  14-48074 */.    
23f80 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
23f90 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
23fa0 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c  BtreeCursorIsVal
23fb0 69 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  id(pC->uc.pCurso
23fc0 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 76 20  r) );.        v 
23fd0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
23fe0 74 65 67 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e  tegerKey(pC->uc.
23ff0 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20  pCursor);.      
24000 20 20 69 66 28 20 76 3e 3d 4d 41 58 5f 52 4f 57    if( v>=MAX_ROW
24010 49 44 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  ID ){.          
24020 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
24030 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  id = 1;.        
24040 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
24050 20 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a 20   v++;   /* IMP: 
24060 52 2d 32 39 35 33 38 2d 33 34 39 38 37 20 2a 2f  R-29538-34987 */
24070 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
24080 20 7d 0a 20 20 20 20 7d 0a 0a 23 69 66 6e 64 65   }.    }..#ifnde
24090 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
240a0 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 20  TOINCREMENT.    
240b0 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20  if( pOp->p3 ){. 
240c0 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74       /* Assert t
240d0 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69  hat P3 is a vali
240e0 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a  d memory cell. *
240f0 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
24100 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20  pOp->p3>0 );.   
24110 20 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65     if( p->pFrame
24120 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28   ){.        for(
24130 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65  pFrame=p->pFrame
24140 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  ; pFrame->pParen
24150 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65  t; pFrame=pFrame
24160 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20  ->pParent);.    
24170 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68      /* Assert th
24180 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64  at P3 is a valid
24190 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f   memory cell. */
241a0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
241b0 20 70 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d 65   pOp->p3<=pFrame
241c0 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20  ->nMem );.      
241d0 20 20 70 4d 65 6d 20 3d 20 26 70 46 72 61 6d 65    pMem = &pFrame
241e0 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b  ->aMem[pOp->p3];
241f0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
24200 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20        /* Assert 
24210 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c  that P3 is a val
24220 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20  id memory cell. 
24230 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  */.        asser
24240 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  t( pOp->p3<=(p->
24250 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
24260 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20  sor) );.        
24270 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pMem = &aMem[pOp
24280 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20 6d  ->p3];.        m
24290 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
242a0 70 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20  p, pMem);.      
242b0 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  }.      assert( 
242c0 6d 65 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d 29  memIsValid(pMem)
242d0 20 29 3b 0a 0a 20 20 20 20 20 20 52 45 47 49 53   );..      REGIS
242e0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
242f0 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20  3, pMem);.      
24300 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
24310 74 65 67 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a  tegerify(pMem);.
24320 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70        assert( (p
24330 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Mem->flags & MEM
24340 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20  _Int)!=0 );  /* 
24350 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73 20 61 6e  mem(P3) holds an
24360 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20 20 20   integer */.    
24370 20 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d    if( pMem->u.i=
24380 3d 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20 70 43  =MAX_ROWID || pC
24390 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64  ->useRandomRowid
243a0 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
243b0 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20   SQLITE_FULL;   
243c0 2f 2a 20 49 4d 50 3a 20 52 2d 31 37 38 31 37 2d  /* IMP: R-17817-
243d0 30 30 36 33 30 20 2a 2f 0a 20 20 20 20 20 20 20  00630 */.       
243e0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
243f0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
24400 7d 0a 20 20 20 20 20 20 69 66 28 20 76 3c 70 4d  }.      if( v<pM
24410 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20  em->u.i+1 ){.   
24420 20 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e 75       v = pMem->u
24430 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 7d 0a  .i + 1;.      }.
24440 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20        pMem->u.i 
24450 3d 20 76 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  = v;.    }.#endi
24460 66 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 75 73  f.    if( pC->us
24470 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a  eRandomRowid ){.
24480 20 20 20 20 20 20 2f 2a 20 49 4d 50 4c 45 4d 45        /* IMPLEME
24490 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30 37  NTATION-OF: R-07
244a0 36 37 37 2d 34 31 38 38 31 20 49 66 20 74 68 65  677-41881 If the
244b0 20 6c 61 72 67 65 73 74 20 52 4f 57 49 44 20 69   largest ROWID i
244c0 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65 0a 20  s equal to the. 
244d0 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 73 74 20       ** largest 
244e0 70 6f 73 73 69 62 6c 65 20 69 6e 74 65 67 65 72  possible integer
244f0 20 28 39 32 32 33 33 37 32 30 33 36 38 35 34 37   (92233720368547
24500 37 35 38 30 37 29 20 74 68 65 6e 20 74 68 65 20  75807) then the 
24510 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 20 2a  database.      *
24520 2a 20 65 6e 67 69 6e 65 20 73 74 61 72 74 73 20  * engine starts 
24530 70 69 63 6b 69 6e 67 20 70 6f 73 69 74 69 76 65  picking positive
24540 20 63 61 6e 64 69 64 61 74 65 20 52 4f 57 49 44   candidate ROWID
24550 73 20 61 74 20 72 61 6e 64 6f 6d 20 75 6e 74 69  s at random unti
24560 6c 0a 20 20 20 20 20 20 2a 2a 20 69 74 20 66 69  l.      ** it fi
24570 6e 64 73 20 6f 6e 65 20 74 68 61 74 20 69 73 20  nds one that is 
24580 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75  not previously u
24590 73 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73  sed. */.      as
245a0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 30  sert( pOp->p3==0
245b0 20 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e 6e 6f   );  /* We canno
245c0 74 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d 20 72  t be in random r
245d0 6f 77 69 64 20 6d 6f 64 65 20 69 66 20 74 68 69  owid mode if thi
245e0 73 20 69 73 0a 20 20 20 20 20 20 20 20 20 20 20  s is.           
245f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24600 20 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e 43 52    ** an AUTOINCR
24610 45 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a 2f 0a  EMENT table. */.
24620 20 20 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20        cnt = 0;. 
24630 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20       do{.       
24640 20 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e   sqlite3_randomn
24650 65 73 73 28 73 69 7a 65 6f 66 28 76 29 2c 20 26  ess(sizeof(v), &
24660 76 29 3b 0a 20 20 20 20 20 20 20 20 76 20 26 3d  v);.        v &=
24670 20 28 4d 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b   (MAX_ROWID>>1);
24680 20 76 2b 2b 3b 20 20 2f 2a 20 45 6e 73 75 72 65   v++;  /* Ensure
24690 20 74 68 61 74 20 76 20 69 73 20 67 72 65 61 74   that v is great
246a0 65 72 20 74 68 61 6e 20 7a 65 72 6f 20 2a 2f 0a  er than zero */.
246b0 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20 20 28        }while(  (
246c0 28 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72  (rc = sqlite3Btr
246d0 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
246e0 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
246f0 20 30 2c 20 28 75 36 34 29 76 2c 0a 20 20 20 20   0, (u64)v,.    
24700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24720 20 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20               0, 
24730 26 72 65 73 29 29 3d 3d 53 51 4c 49 54 45 5f 4f  &res))==SQLITE_O
24740 4b 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 26  K).            &
24750 26 20 28 72 65 73 3d 3d 30 29 0a 20 20 20 20 20  & (res==0).     
24760 20 20 20 20 20 20 20 26 26 20 28 2b 2b 63 6e 74         && (++cnt
24770 3c 31 30 30 29 29 3b 0a 20 20 20 20 20 20 69 66  <100));.      if
24780 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
24790 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
247a0 20 20 20 20 20 20 69 66 28 20 72 65 73 3d 3d 30        if( res==0
247b0 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
247c0 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20   SQLITE_FULL;   
247d0 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31 39 2d  /* IMP: R-38219-
247e0 35 33 30 30 32 20 2a 2f 0a 20 20 20 20 20 20 20  53002 */.       
247f0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
24800 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
24810 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  }.      assert( 
24820 76 3e 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20 52  v>0 );  /* EV: R
24830 2d 34 30 38 31 32 2d 30 33 35 37 30 20 2a 2f 0a  -40812-03570 */.
24840 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64 65      }.    pC->de
24850 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
24860 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
24870 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
24880 41 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  ALE;.  }.  pOut-
24890 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61  >u.i = v;.  brea
248a0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
248b0 20 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33   Insert P1 P2 P3
248c0 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
248d0 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d  is: intkey=r[P3]
248e0 20 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a   data=r[P2].**.*
248f0 2a 20 57 72 69 74 65 20 61 6e 20 65 6e 74 72 79  * Write an entry
24900 20 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20   into the table 
24910 6f 66 20 63 75 72 73 6f 72 20 50 31 2e 20 20 41  of cursor P1.  A
24920 20 6e 65 77 20 65 6e 74 72 79 20 69 73 0a 2a 2a   new entry is.**
24930 20 63 72 65 61 74 65 64 20 69 66 20 69 74 20 64   created if it d
24940 6f 65 73 6e 27 74 20 61 6c 72 65 61 64 79 20 65  oesn't already e
24950 78 69 73 74 20 6f 72 20 74 68 65 20 64 61 74 61  xist or the data
24960 20 66 6f 72 20 61 6e 20 65 78 69 73 74 69 6e 67   for an existing
24970 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20 6f 76 65  .** entry is ove
24980 72 77 72 69 74 74 65 6e 2e 20 20 54 68 65 20 64  rwritten.  The d
24990 61 74 61 20 69 73 20 74 68 65 20 76 61 6c 75 65  ata is the value
249a0 20 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f 72 65 64   MEM_Blob stored
249b0 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20   in register.** 
249c0 6e 75 6d 62 65 72 20 50 32 2e 20 54 68 65 20 6b  number P2. The k
249d0 65 79 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ey is stored in 
249e0 72 65 67 69 73 74 65 72 20 50 33 2e 20 54 68 65  register P3. The
249f0 20 6b 65 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20   key must.** be 
24a00 61 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a  a MEM_Int..**.**
24a10 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e   If the OPFLAG_N
24a20 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50  CHANGE flag of P
24a30 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74  5 is set, then t
24a40 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f  he row change co
24a50 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d  unt is.** increm
24a60 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65  ented (otherwise
24a70 20 6e 6f 74 29 2e 20 20 49 66 20 74 68 65 20 4f   not).  If the O
24a80 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20  PFLAG_LASTROWID 
24a90 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65  flag of P5 is se
24aa0 74 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64  t,.** then rowid
24ab0 20 69 73 20 73 74 6f 72 65 64 20 66 6f 72 20 73   is stored for s
24ac0 75 62 73 65 71 75 65 6e 74 20 72 65 74 75 72 6e  ubsequent return
24ad0 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74   by the.** sqlit
24ae0 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  e3_last_insert_r
24af0 6f 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20  owid() function 
24b00 28 6f 74 68 65 72 77 69 73 65 20 69 74 20 69 73  (otherwise it is
24b10 20 75 6e 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a   unmodified)..**
24b20 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
24b30 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20  G_USESEEKRESULT 
24b40 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65  flag of P5 is se
24b50 74 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  t, the implement
24b60 61 74 69 6f 6e 20 6d 69 67 68 74 0a 2a 2a 20 72  ation might.** r
24b70 75 6e 20 66 61 73 74 65 72 20 62 79 20 61 76 6f  un faster by avo
24b80 69 64 69 6e 67 20 61 6e 20 75 6e 6e 65 63 65 73  iding an unneces
24b90 73 61 72 79 20 73 65 65 6b 20 6f 6e 20 63 75 72  sary seek on cur
24ba0 73 6f 72 20 50 31 2e 20 20 48 6f 77 65 76 65 72  sor P1.  However
24bb0 2c 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f  ,.** the OPFLAG_
24bc0 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c  USESEEKRESULT fl
24bd0 61 67 20 6d 75 73 74 20 6f 6e 6c 79 20 62 65 20  ag must only be 
24be0 73 65 74 20 69 66 20 74 68 65 72 65 20 68 61 76  set if there hav
24bf0 65 20 62 65 65 6e 20 6e 6f 20 70 72 69 6f 72 0a  e been no prior.
24c00 2a 2a 20 73 65 65 6b 73 20 6f 6e 20 74 68 65 20  ** seeks on the 
24c10 63 75 72 73 6f 72 20 6f 72 20 69 66 20 74 68 65  cursor or if the
24c20 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 65 65   most recent see
24c30 6b 20 75 73 65 64 20 61 20 6b 65 79 20 65 71 75  k used a key equ
24c40 61 6c 20 74 6f 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  al to P3..**.** 
24c50 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53  If the OPFLAG_IS
24c60 55 50 44 41 54 45 20 66 6c 61 67 20 69 73 20 73  UPDATE flag is s
24c70 65 74 2c 20 74 68 65 6e 20 74 68 69 73 20 6f 70  et, then this op
24c80 63 6f 64 65 20 69 73 20 70 61 72 74 20 6f 66 20  code is part of 
24c90 61 6e 0a 2a 2a 20 55 50 44 41 54 45 20 6f 70 65  an.** UPDATE ope
24ca0 72 61 74 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69  ration.  Otherwi
24cb0 73 65 20 28 69 66 20 74 68 65 20 66 6c 61 67 20  se (if the flag 
24cc0 69 73 20 63 6c 65 61 72 29 20 74 68 65 6e 20 74  is clear) then t
24cd0 68 69 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73  his opcode.** is
24ce0 20 70 61 72 74 20 6f 66 20 61 6e 20 49 4e 53 45   part of an INSE
24cf0 52 54 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54  RT operation.  T
24d00 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 69 73  he difference is
24d10 20 6f 6e 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20   only important 
24d20 74 6f 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65  to.** the update
24d30 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72   hook..**.** Par
24d40 61 6d 65 74 65 72 20 50 34 20 6d 61 79 20 70 6f  ameter P4 may po
24d50 69 6e 74 20 74 6f 20 61 20 54 61 62 6c 65 20 73  int to a Table s
24d60 74 72 75 63 74 75 72 65 2c 20 6f 72 20 6d 61 79  tructure, or may
24d70 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20   be NULL. If it 
24d80 69 73 20 0a 2a 2a 20 6e 6f 74 20 4e 55 4c 4c 2c  is .** not NULL,
24d90 20 74 68 65 6e 20 74 68 65 20 75 70 64 61 74 65   then the update
24da0 2d 68 6f 6f 6b 20 28 73 71 6c 69 74 65 33 2e 78  -hook (sqlite3.x
24db0 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 20  UpdateCallback) 
24dc0 69 73 20 69 6e 76 6f 6b 65 64 20 0a 2a 2a 20 66  is invoked .** f
24dd0 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63 63 65  ollowing a succe
24de0 73 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a  ssful insert..**
24df0 0a 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44  .** (WARNING/TOD
24e00 4f 3a 20 49 66 20 50 31 20 69 73 20 61 20 70 73  O: If P1 is a ps
24e10 65 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20  eudo-cursor and 
24e20 50 32 20 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c  P2 is dynamicall
24e30 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20  y.** allocated, 
24e40 74 68 65 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f  then ownership o
24e50 66 20 50 32 20 69 73 20 74 72 61 6e 73 66 65 72  f P2 is transfer
24e60 72 65 64 20 74 6f 20 74 68 65 20 70 73 65 75 64  red to the pseud
24e70 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20  o-cursor.** and 
24e80 72 65 67 69 73 74 65 72 20 50 32 20 62 65 63 6f  register P2 beco
24e90 6d 65 73 20 65 70 68 65 6d 65 72 61 6c 2e 20 20  mes ephemeral.  
24ea0 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  If the cursor is
24eb0 20 63 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a   changed, the.**
24ec0 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
24ed0 65 72 20 50 32 20 77 69 6c 6c 20 74 68 65 6e 20  er P2 will then 
24ee0 63 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75  change.  Make su
24ef0 72 65 20 74 68 69 73 20 64 6f 65 73 20 6e 6f 74  re this does not
24f00 0a 2a 2a 20 63 61 75 73 65 20 61 6e 79 20 70 72  .** cause any pr
24f10 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54  oblems.).**.** T
24f20 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
24f30 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61  only works on ta
24f40 62 6c 65 73 2e 20 20 54 68 65 20 65 71 75 69 76  bles.  The equiv
24f50 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  alent instructio
24f60 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65 73  n.** for indices
24f70 20 69 73 20 4f 50 5f 49 64 78 49 6e 73 65 72 74   is OP_IdxInsert
24f80 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
24f90 49 6e 73 65 72 74 49 6e 74 20 50 31 20 50 32 20  InsertInt P1 P2 
24fa0 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
24fb0 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 50 33 20  psis: intkey=P3 
24fc0 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  data=r[P2].**.**
24fd0 20 54 68 69 73 20 77 6f 72 6b 73 20 65 78 61 63   This works exac
24fe0 74 6c 79 20 6c 69 6b 65 20 4f 50 5f 49 6e 73 65  tly like OP_Inse
24ff0 72 74 20 65 78 63 65 70 74 20 74 68 61 74 20 74  rt except that t
25000 68 65 20 6b 65 79 20 69 73 20 74 68 65 0a 2a 2a  he key is the.**
25010 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50   integer value P
25020 33 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c 75 65  3, not the value
25030 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72 20   of the integer 
25040 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
25050 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P3..*/.case O
25060 50 5f 49 6e 73 65 72 74 3a 20 0a 63 61 73 65 20  P_Insert: .case 
25070 4f 50 5f 49 6e 73 65 72 74 49 6e 74 3a 20 7b 0a  OP_InsertInt: {.
25080 20 20 4d 65 6d 20 2a 70 44 61 74 61 3b 20 20 20    Mem *pData;   
25090 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20      /* MEM cell 
250a0 68 6f 6c 64 69 6e 67 20 64 61 74 61 20 66 6f 72  holding data for
250b0 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62   the record to b
250c0 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20  e inserted */.  
250d0 4d 65 6d 20 2a 70 4b 65 79 3b 20 20 20 20 20 20  Mem *pKey;      
250e0 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f    /* MEM cell ho
250f0 6c 64 69 6e 67 20 6b 65 79 20 20 66 6f 72 20 74  lding key  for t
25100 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 56  he record */.  V
25110 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20  dbeCursor *pC;  
25120 20 2f 2a 20 43 75 72 73 6f 72 20 74 6f 20 74 61   /* Cursor to ta
25130 62 6c 65 20 69 6e 74 6f 20 77 68 69 63 68 20 69  ble into which i
25140 6e 73 65 72 74 20 69 73 20 77 72 69 74 74 65 6e  nsert is written
25150 20 2a 2f 0a 20 20 69 6e 74 20 73 65 65 6b 52 65   */.  int seekRe
25160 73 75 6c 74 3b 20 20 20 2f 2a 20 52 65 73 75 6c  sult;   /* Resul
25170 74 20 6f 66 20 70 72 69 6f 72 20 73 65 65 6b 20  t of prior seek 
25180 6f 72 20 30 20 69 66 20 6e 6f 20 55 53 45 53 45  or 0 if no USESE
25190 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 2a 2f  EKRESULT flag */
251a0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
251b0 44 62 3b 20 20 2f 2a 20 64 61 74 61 62 61 73 65  Db;  /* database
251c0 20 6e 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20   name - used by 
251d0 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20  the update hook 
251e0 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  */.  Table *pTab
251f0 3b 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  ;      /* Table 
25200 73 74 72 75 63 74 75 72 65 20 2d 20 75 73 65 64  structure - used
25210 20 62 79 20 75 70 64 61 74 65 20 61 6e 64 20 70   by update and p
25220 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 73 20  re-update hooks 
25230 2a 2f 0a 20 20 42 74 72 65 65 50 61 79 6c 6f 61  */.  BtreePayloa
25240 64 20 78 3b 20 20 20 2f 2a 20 50 61 79 6c 6f 61  d x;   /* Payloa
25250 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64  d to be inserted
25260 20 2a 2f 0a 0a 20 20 70 44 61 74 61 20 3d 20 26   */..  pData = &
25270 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
25280 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
25290 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
252a0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
252b0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
252c0 64 28 70 44 61 74 61 29 20 29 3b 0a 20 20 70 43  d(pData) );.  pC
252d0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
252e0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
252f0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
25300 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
25310 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
25320 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
25330 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  uc.pCursor!=0 );
25340 0a 20 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d  .  assert( (pOp-
25350 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 4e  >p5 & OPFLAG_ISN
25360 4f 4f 50 29 20 7c 7c 20 70 43 2d 3e 69 73 54 61  OOP) || pC->isTa
25370 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ble );.  assert(
25380 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
25390 5f 54 41 42 4c 45 20 7c 7c 20 70 4f 70 2d 3e 70  _TABLE || pOp->p
253a0 34 74 79 70 65 3e 3d 50 34 5f 53 54 41 54 49 43  4type>=P4_STATIC
253b0 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54   );.  REGISTER_T
253c0 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44  RACE(pOp->p2, pD
253d0 61 74 61 29 3b 0a 0a 20 20 69 66 28 20 70 4f 70  ata);..  if( pOp
253e0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73  ->opcode==OP_Ins
253f0 65 72 74 20 29 7b 0a 20 20 20 20 70 4b 65 79 20  ert ){.    pKey 
25400 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
25410 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b  ;.    assert( pK
25420 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ey->flags & MEM_
25430 49 6e 74 20 29 3b 0a 20 20 20 20 61 73 73 65 72  Int );.    asser
25440 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4b  t( memIsValid(pK
25450 65 79 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53  ey) );.    REGIS
25460 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
25470 33 2c 20 70 4b 65 79 29 3b 0a 20 20 20 20 78 2e  3, pKey);.    x.
25480 6e 4b 65 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69  nKey = pKey->u.i
25490 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
254a0 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
254b0 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 49 6e 74  de==OP_InsertInt
254c0 20 29 3b 0a 20 20 20 20 78 2e 6e 4b 65 79 20 3d   );.    x.nKey =
254d0 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20   pOp->p3;.  }.. 
254e0 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
254f0 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26 20 48 41  ==P4_TABLE && HA
25500 53 5f 55 50 44 41 54 45 5f 48 4f 4f 4b 28 64 62  S_UPDATE_HOOK(db
25510 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ) ){.    assert(
25520 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20   pC->iDb>=0 );. 
25530 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62     zDb = db->aDb
25540 5b 70 43 2d 3e 69 44 62 5d 2e 7a 44 62 53 4e 61  [pC->iDb].zDbSNa
25550 6d 65 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 70  me;.    pTab = p
25560 4f 70 2d 3e 70 34 2e 70 54 61 62 3b 0a 20 20 20  Op->p4.pTab;.   
25570 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70   assert( (pOp->p
25580 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f  5 & OPFLAG_ISNOO
25590 50 29 20 7c 7c 20 48 61 73 52 6f 77 69 64 28 70  P) || HasRowid(p
255a0 54 61 62 29 20 29 3b 0a 20 20 7d 65 6c 73 65 7b  Tab) );.  }else{
255b0 0a 20 20 20 20 70 54 61 62 20 3d 20 30 3b 0a 20  .    pTab = 0;. 
255c0 20 20 20 7a 44 62 20 3d 20 30 3b 20 20 2f 2a 20     zDb = 0;  /* 
255d0 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69 6c  Not needed.  Sil
255e0 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65 72 20  ence a compiler 
255f0 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 7d 0a  warning. */.  }.
25600 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
25610 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f  NABLE_PREUPDATE_
25620 48 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65  HOOK.  /* Invoke
25630 20 74 68 65 20 70 72 65 2d 75 70 64 61 74 65 20   the pre-update 
25640 68 6f 6f 6b 2c 20 69 66 20 61 6e 79 20 2a 2f 0a  hook, if any */.
25650 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20    if( pTab ){.  
25660 20 20 69 66 28 20 64 62 2d 3e 78 50 72 65 55 70    if( db->xPreUp
25670 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20  dateCallback && 
25680 21 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  !(pOp->p5 & OPFL
25690 41 47 5f 49 53 55 50 44 41 54 45 29 20 29 7b 0a  AG_ISUPDATE) ){.
256a0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
256b0 65 50 72 65 55 70 64 61 74 65 48 6f 6f 6b 28 70  ePreUpdateHook(p
256c0 2c 20 70 43 2c 20 53 51 4c 49 54 45 5f 49 4e 53  , pC, SQLITE_INS
256d0 45 52 54 2c 20 7a 44 62 2c 20 70 54 61 62 2c 20  ERT, zDb, pTab, 
256e0 78 2e 6e 4b 65 79 2c 70 4f 70 2d 3e 70 32 29 3b  x.nKey,pOp->p2);
256f0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 64  .    }.    if( d
25700 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
25710 63 6b 3d 3d 30 20 7c 7c 20 70 54 61 62 2d 3e 61  ck==0 || pTab->a
25720 43 6f 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Col==0 ){.      
25730 2f 2a 20 50 72 65 76 65 6e 74 20 70 6f 73 74 2d  /* Prevent post-
25740 75 70 64 61 74 65 20 68 6f 6f 6b 20 66 72 6f 6d  update hook from
25750 20 72 75 6e 6e 69 6e 67 20 69 6e 20 63 61 73 65   running in case
25760 73 20 77 68 65 6e 20 69 74 20 73 68 6f 75 6c 64  s when it should
25770 20 6e 6f 74 20 2a 2f 0a 20 20 20 20 20 20 70 54   not */.      pT
25780 61 62 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  ab = 0;.    }.  
25790 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  }.  if( pOp->p5 
257a0 26 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20  & OPFLAG_ISNOOP 
257b0 29 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a  ) break;.#endif.
257c0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
257d0 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
257e0 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a  ) p->nChange++;.
257f0 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
25800 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44  OPFLAG_LASTROWID
25810 20 29 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64   ) db->lastRowid
25820 20 3d 20 78 2e 6e 4b 65 79 3b 0a 20 20 61 73 73   = x.nKey;.  ass
25830 65 72 74 28 20 70 44 61 74 61 2d 3e 66 6c 61 67  ert( pData->flag
25840 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45  s & (MEM_Blob|ME
25850 4d 5f 53 74 72 29 20 29 3b 0a 20 20 78 2e 70 44  M_Str) );.  x.pD
25860 61 74 61 20 3d 20 70 44 61 74 61 2d 3e 7a 3b 0a  ata = pData->z;.
25870 20 20 78 2e 6e 44 61 74 61 20 3d 20 70 44 61 74    x.nData = pDat
25880 61 2d 3e 6e 3b 0a 20 20 73 65 65 6b 52 65 73 75  a->n;.  seekResu
25890 6c 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26  lt = ((pOp->p5 &
258a0 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
258b0 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65  ESULT) ? pC->see
258c0 6b 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20  kResult : 0);.  
258d0 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73  if( pData->flags
258e0 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20   & MEM_Zero ){. 
258f0 20 20 20 78 2e 6e 5a 65 72 6f 20 3d 20 70 44 61     x.nZero = pDa
25900 74 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d  ta->u.nZero;.  }
25910 65 6c 73 65 7b 0a 20 20 20 20 78 2e 6e 5a 65 72  else{.    x.nZer
25920 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 78 2e 70  o = 0;.  }.  x.p
25930 4b 65 79 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20  Key = 0;.  rc = 
25940 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65  sqlite3BtreeInse
25950 72 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  rt(pC->uc.pCurso
25960 72 2c 20 26 78 2c 0a 20 20 20 20 20 20 28 70 4f  r, &x,.      (pO
25970 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f  p->p5 & (OPFLAG_
25980 41 50 50 45 4e 44 7c 4f 50 46 4c 41 47 5f 53 41  APPEND|OPFLAG_SA
25990 56 45 50 4f 53 49 54 49 4f 4e 29 29 2c 20 73 65  VEPOSITION)), se
259a0 65 6b 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20 20  ekResult.  );.  
259b0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
259c0 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  to = 0;.  pC->ca
259d0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
259e0 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49  E_STALE;..  /* I
259f0 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65  nvoke the update
25a00 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65  -hook if require
25a10 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 20 29  d. */.  if( rc )
25a20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
25a30 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20  to_error;.  if( 
25a40 70 54 61 62 20 29 7b 0a 20 20 20 20 61 73 73 65  pTab ){.    asse
25a50 72 74 28 20 64 62 2d 3e 78 55 70 64 61 74 65 43  rt( db->xUpdateC
25a60 61 6c 6c 62 61 63 6b 21 3d 30 20 29 3b 0a 20 20  allback!=0 );.  
25a70 20 20 61 73 73 65 72 74 28 20 70 54 61 62 2d 3e    assert( pTab->
25a80 61 43 6f 6c 21 3d 30 20 29 3b 0a 20 20 20 20 64  aCol!=0 );.    d
25a90 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
25aa0 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72  ck(db->pUpdateAr
25ab0 67 2c 0a 20 20 20 20 20 20 20 20 20 20 20 28 70  g,.           (p
25ac0 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
25ad0 49 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49  ISUPDATE) ? SQLI
25ae0 54 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49  TE_UPDATE : SQLI
25af0 54 45 5f 49 4e 53 45 52 54 2c 0a 20 20 20 20 20  TE_INSERT,.     
25b00 20 20 20 20 20 20 7a 44 62 2c 20 70 54 61 62 2d        zDb, pTab-
25b10 3e 7a 4e 61 6d 65 2c 20 78 2e 6e 4b 65 79 29 3b  >zName, x.nKey);
25b20 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
25b30 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 6c 65  ./* Opcode: Dele
25b40 74 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  te P1 P2 P3 P4 P
25b50 35 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74  5.**.** Delete t
25b60 68 65 20 72 65 63 6f 72 64 20 61 74 20 77 68 69  he record at whi
25b70 63 68 20 74 68 65 20 50 31 20 63 75 72 73 6f 72  ch the P1 cursor
25b80 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
25b90 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 49 66  inting..**.** If
25ba0 20 74 68 65 20 4f 50 46 4c 41 47 5f 53 41 56 45   the OPFLAG_SAVE
25bb0 50 4f 53 49 54 49 4f 4e 20 62 69 74 20 6f 66 20  POSITION bit of 
25bc0 74 68 65 20 50 35 20 70 61 72 61 6d 65 74 65 72  the P5 parameter
25bd0 20 69 73 20 73 65 74 2c 20 74 68 65 6e 0a 2a 2a   is set, then.**
25be0 20 74 68 65 20 63 75 72 73 6f 72 20 77 69 6c 6c   the cursor will
25bf0 20 62 65 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e   be left pointin
25c00 67 20 61 74 20 20 65 69 74 68 65 72 20 74 68 65  g at  either the
25c10 20 6e 65 78 74 20 6f 72 20 74 68 65 20 70 72 65   next or the pre
25c20 76 69 6f 75 73 0a 2a 2a 20 72 65 63 6f 72 64 20  vious.** record 
25c30 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 49 66  in the table. If
25c40 20 69 74 20 69 73 20 6c 65 66 74 20 70 6f 69 6e   it is left poin
25c50 74 69 6e 67 20 61 74 20 74 68 65 20 6e 65 78 74  ting at the next
25c60 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a   record, then.**
25c70 20 74 68 65 20 6e 65 78 74 20 4e 65 78 74 20 69   the next Next i
25c80 6e 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20  nstruction will 
25c90 62 65 20 61 20 6e 6f 2d 6f 70 2e 20 41 73 20 61  be a no-op. As a
25ca0 20 72 65 73 75 6c 74 2c 20 69 6e 20 74 68 69 73   result, in this
25cb0 20 63 61 73 65 0a 2a 2a 20 69 74 20 69 73 20 6f   case.** it is o
25cc0 6b 20 74 6f 20 64 65 6c 65 74 65 20 61 20 72 65  k to delete a re
25cd0 63 6f 72 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  cord from within
25ce0 20 61 20 4e 65 78 74 20 6c 6f 6f 70 2e 20 49 66   a Next loop. If
25cf0 20 0a 2a 2a 20 4f 50 46 4c 41 47 5f 53 41 56 45   .** OPFLAG_SAVE
25d00 50 4f 53 49 54 49 4f 4e 20 62 69 74 20 6f 66 20  POSITION bit of 
25d10 50 35 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65  P5 is clear, the
25d20 6e 20 74 68 65 20 63 75 72 73 6f 72 20 77 69 6c  n the cursor wil
25d30 6c 20 62 65 0a 2a 2a 20 6c 65 66 74 20 69 6e 20  l be.** left in 
25d40 61 6e 20 75 6e 64 65 66 69 6e 65 64 20 73 74 61  an undefined sta
25d50 74 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  te..**.** If the
25d60 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54   OPFLAG_AUXDELET
25d70 45 20 62 69 74 20 69 73 20 73 65 74 20 6f 6e 20  E bit is set on 
25d80 50 35 2c 20 74 68 61 74 20 69 6e 64 69 63 61 74  P5, that indicat
25d90 65 73 20 74 68 61 74 20 74 68 69 73 0a 2a 2a 20  es that this.** 
25da0 64 65 6c 65 74 65 20 6f 6e 65 20 6f 66 20 73 65  delete one of se
25db0 76 65 72 61 6c 20 61 73 73 6f 63 69 61 74 65 64  veral associated
25dc0 20 77 69 74 68 20 64 65 6c 65 74 69 6e 67 20 61   with deleting a
25dd0 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 61   table row and a
25de0 6c 6c 20 69 74 73 0a 2a 2a 20 61 73 73 6f 63 69  ll its.** associ
25df0 61 74 65 64 20 69 6e 64 65 78 20 65 6e 74 72 69  ated index entri
25e00 65 73 2e 20 20 45 78 61 63 74 6c 79 20 6f 6e 65  es.  Exactly one
25e10 20 6f 66 20 74 68 6f 73 65 20 64 65 6c 65 74 65   of those delete
25e20 73 20 69 73 20 74 68 65 20 22 70 72 69 6d 61 72  s is the "primar
25e30 79 22 0a 2a 2a 20 64 65 6c 65 74 65 2e 20 20 54  y".** delete.  T
25e40 68 65 20 6f 74 68 65 72 73 20 61 72 65 20 61 6c  he others are al
25e50 6c 20 6f 6e 20 4f 50 46 4c 41 47 5f 46 4f 52 44  l on OPFLAG_FORD
25e60 45 4c 45 54 45 20 63 75 72 73 6f 72 73 20 6f 72  ELETE cursors or
25e70 20 65 6c 73 65 20 61 72 65 0a 2a 2a 20 6d 61 72   else are.** mar
25e80 6b 65 64 20 77 69 74 68 20 74 68 65 20 41 55 58  ked with the AUX
25e90 44 45 4c 45 54 45 20 66 6c 61 67 2e 0a 2a 2a 0a  DELETE flag..**.
25ea0 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
25eb0 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66  _NCHANGE flag of
25ec0 20 50 32 20 28 4e 42 3a 20 50 32 20 6e 6f 74 20   P2 (NB: P2 not 
25ed0 50 35 29 20 69 73 20 73 65 74 2c 20 74 68 65 6e  P5) is set, then
25ee0 20 74 68 65 20 72 6f 77 0a 2a 2a 20 63 68 61 6e   the row.** chan
25ef0 67 65 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72  ge count is incr
25f00 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69  emented (otherwi
25f10 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50  se not)..**.** P
25f20 31 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 70 73  1 must not be ps
25f30 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49 74 20  eudo-table.  It 
25f40 68 61 73 20 74 6f 20 62 65 20 61 20 72 65 61 6c  has to be a real
25f50 20 74 61 62 6c 65 20 77 69 74 68 0a 2a 2a 20 6d   table with.** m
25f60 75 6c 74 69 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a  ultiple rows..**
25f70 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74  .** If P4 is not
25f80 20 4e 55 4c 4c 20 74 68 65 6e 20 69 74 20 70 6f   NULL then it po
25f90 69 6e 74 73 20 74 6f 20 61 20 54 61 62 6c 65 20  ints to a Table 
25fa0 6f 62 6a 65 63 74 2e 20 49 6e 20 74 68 69 73 20  object. In this 
25fb0 63 61 73 65 20 65 69 74 68 65 72 20 0a 2a 2a 20  case either .** 
25fc0 74 68 65 20 75 70 64 61 74 65 20 6f 72 20 70 72  the update or pr
25fd0 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 2c 20 6f  e-update hook, o
25fe0 72 20 62 6f 74 68 2c 20 6d 61 79 20 62 65 20 69  r both, may be i
25ff0 6e 76 6f 6b 65 64 2e 20 54 68 65 20 50 31 20 63  nvoked. The P1 c
26000 75 72 73 6f 72 20 6d 75 73 74 0a 2a 2a 20 68 61  ursor must.** ha
26010 76 65 20 62 65 65 6e 20 70 6f 73 69 74 69 6f 6e  ve been position
26020 65 64 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46  ed using OP_NotF
26030 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f 20 69 6e  ound prior to in
26040 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70 63 6f  voking this opco
26050 64 65 20 69 6e 20 0a 2a 2a 20 74 68 69 73 20 63  de in .** this c
26060 61 73 65 2e 20 53 70 65 63 69 66 69 63 61 6c 6c  ase. Specificall
26070 79 2c 20 69 66 20 6f 6e 65 20 69 73 20 63 6f 6e  y, if one is con
26080 66 69 67 75 72 65 64 2c 20 74 68 65 20 70 72 65  figured, the pre
26090 2d 75 70 64 61 74 65 20 68 6f 6f 6b 20 69 73 20  -update hook is 
260a0 0a 2a 2a 20 69 6e 76 6f 6b 65 64 20 69 66 20 50  .** invoked if P
260b0 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 54  4 is not NULL. T
260c0 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69  he update-hook i
260d0 73 20 69 6e 76 6f 6b 65 64 20 69 66 20 6f 6e 65  s invoked if one
260e0 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64 2c 20   is configured, 
260f0 0a 2a 2a 20 50 34 20 69 73 20 6e 6f 74 20 4e 55  .** P4 is not NU
26100 4c 4c 2c 20 61 6e 64 20 74 68 65 20 4f 50 46 4c  LL, and the OPFL
26110 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20  AG_NCHANGE flag 
26120 69 73 20 73 65 74 20 69 6e 20 50 32 2e 0a 2a 2a  is set in P2..**
26130 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
26140 47 5f 49 53 55 50 44 41 54 45 20 66 6c 61 67 20  G_ISUPDATE flag 
26150 69 73 20 73 65 74 20 69 6e 20 50 32 2c 20 74 68  is set in P2, th
26160 65 6e 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74  en P3 contains t
26170 68 65 20 61 64 64 72 65 73 73 0a 2a 2a 20 6f 66  he address.** of
26180 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   the memory cell
26190 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74   that contains t
261a0 68 65 20 76 61 6c 75 65 20 74 68 61 74 20 74 68  he value that th
261b0 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 72  e rowid of the r
261c0 6f 77 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 73 65  ow will.** be se
261d0 74 20 74 6f 20 62 79 20 74 68 65 20 75 70 64 61  t to by the upda
261e0 74 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  te..*/.case OP_D
261f0 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43  elete: {.  VdbeC
26200 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 63 6f 6e  ursor *pC;.  con
26210 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 0a 20 20  st char *zDb;.  
26220 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 69  Table *pTab;.  i
26230 6e 74 20 6f 70 66 6c 61 67 73 3b 0a 0a 20 20 6f  nt opflags;..  o
26240 70 66 6c 61 67 73 20 3d 20 70 4f 70 2d 3e 70 32  pflags = pOp->p2
26250 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
26260 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
26270 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
26280 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
26290 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
262a0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
262b0 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
262c0 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
262d0 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  EE );.  assert( 
262e0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d  pC->uc.pCursor!=
262f0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
26300 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
26310 6f 3d 3d 30 20 29 3b 0a 0a 23 69 66 64 65 66 20  o==0 );..#ifdef 
26320 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
26330 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
26340 50 34 5f 54 41 42 4c 45 20 26 26 20 48 61 73 52  P4_TABLE && HasR
26350 6f 77 69 64 28 70 4f 70 2d 3e 70 34 2e 70 54 61  owid(pOp->p4.pTa
26360 62 29 20 26 26 20 70 4f 70 2d 3e 70 35 3d 3d 30  b) && pOp->p5==0
26370 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 70 35   ){.    /* If p5
26380 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 73 65   is zero, the se
26390 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 74 68 61  ek operation tha
263a0 74 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68 65  t positioned the
263b0 20 63 75 72 73 6f 72 20 70 72 69 6f 72 20 74 6f   cursor prior to
263c0 0a 20 20 20 20 2a 2a 20 4f 50 5f 44 65 6c 65 74  .    ** OP_Delet
263d0 65 20 77 69 6c 6c 20 68 61 76 65 20 61 6c 73 6f  e will have also
263e0 20 73 65 74 20 74 68 65 20 70 43 2d 3e 6d 6f 76   set the pC->mov
263f0 65 74 6f 54 61 72 67 65 74 20 66 69 65 6c 64 20  etoTarget field 
26400 74 6f 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a  to the rowid of.
26410 20 20 20 20 2a 2a 20 74 68 65 20 72 6f 77 20 74      ** the row t
26420 68 61 74 20 69 73 20 62 65 69 6e 67 20 64 65 6c  hat is being del
26430 65 74 65 64 20 2a 2f 0a 20 20 20 20 69 36 34 20  eted */.    i64 
26440 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 42 74  iKey = sqlite3Bt
26450 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43  reeIntegerKey(pC
26460 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
26470 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6d     assert( pC->m
26480 6f 76 65 74 6f 54 61 72 67 65 74 3d 3d 69 4b 65  ovetoTarget==iKe
26490 79 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  y );.  }.#endif.
264a0 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 75 70 64  .  /* If the upd
264b0 61 74 65 2d 68 6f 6f 6b 20 6f 72 20 70 72 65 2d  ate-hook or pre-
264c0 75 70 64 61 74 65 2d 68 6f 6f 6b 20 77 69 6c 6c  update-hook will
264d0 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 73 65 74   be invoked, set
264e0 20 7a 44 62 20 74 6f 0a 20 20 2a 2a 20 74 68 65   zDb to.  ** the
264f0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 62 20   name of the db 
26500 74 6f 20 70 61 73 73 20 61 73 20 74 6f 20 69 74  to pass as to it
26510 2e 20 41 6c 73 6f 20 73 65 74 20 6c 6f 63 61 6c  . Also set local
26520 20 70 54 61 62 20 74 6f 20 61 20 63 6f 70 79 0a   pTab to a copy.
26530 20 20 2a 2a 20 6f 66 20 70 34 2e 70 54 61 62 2e    ** of p4.pTab.
26540 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 70 35 20   Finally, if p5 
26550 69 73 20 74 72 75 65 2c 20 69 6e 64 69 63 61 74  is true, indicat
26560 69 6e 67 20 74 68 61 74 20 74 68 69 73 20 63 75  ing that this cu
26570 72 73 6f 72 20 77 61 73 0a 20 20 2a 2a 20 6c 61  rsor was.  ** la
26580 73 74 20 6d 6f 76 65 64 20 77 69 74 68 20 4f 50  st moved with OP
26590 5f 4e 65 78 74 20 6f 72 20 4f 50 5f 50 72 65 76  _Next or OP_Prev
265a0 2c 20 6e 6f 74 20 53 65 65 6b 20 6f 72 20 4e 6f  , not Seek or No
265b0 74 46 6f 75 6e 64 2c 20 73 65 74 20 0a 20 20 2a  tFound, set .  *
265c0 2a 20 56 64 62 65 43 75 72 73 6f 72 2e 6d 6f 76  * VdbeCursor.mov
265d0 65 74 6f 54 61 72 67 65 74 20 74 6f 20 74 68 65  etoTarget to the
265e0 20 63 75 72 72 65 6e 74 20 72 6f 77 69 64 2e 20   current rowid. 
265f0 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   */.  if( pOp->p
26600 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20  4type==P4_TABLE 
26610 26 26 20 48 41 53 5f 55 50 44 41 54 45 5f 48 4f  && HAS_UPDATE_HO
26620 4f 4b 28 64 62 29 20 29 7b 0a 20 20 20 20 61 73  OK(db) ){.    as
26630 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30  sert( pC->iDb>=0
26640 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
26650 70 4f 70 2d 3e 70 34 2e 70 54 61 62 21 3d 30 20  pOp->p4.pTab!=0 
26660 29 3b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d  );.    zDb = db-
26670 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 44  >aDb[pC->iDb].zD
26680 62 53 4e 61 6d 65 3b 0a 20 20 20 20 70 54 61 62  bSName;.    pTab
26690 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 3b   = pOp->p4.pTab;
266a0 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 70  .    if( (pOp->p
266b0 35 20 26 20 4f 50 46 4c 41 47 5f 53 41 56 45 50  5 & OPFLAG_SAVEP
266c0 4f 53 49 54 49 4f 4e 29 21 3d 30 20 26 26 20 70  OSITION)!=0 && p
266d0 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20  C->isTable ){.  
266e0 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61      pC->movetoTa
266f0 72 67 65 74 20 3d 20 73 71 6c 69 74 65 33 42 74  rget = sqlite3Bt
26700 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43  reeIntegerKey(pC
26710 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
26720 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
26730 20 20 7a 44 62 20 3d 20 30 3b 20 20 20 2f 2a 20    zDb = 0;   /* 
26740 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69 6c  Not needed.  Sil
26750 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65 72 20  ence a compiler 
26760 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20  warning. */.    
26770 70 54 61 62 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f  pTab = 0;  /* No
26780 74 20 6e 65 65 64 65 64 2e 20 20 53 69 6c 65 6e  t needed.  Silen
26790 63 65 20 61 20 63 6f 6d 70 69 6c 65 72 20 77 61  ce a compiler wa
267a0 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 7d 0a 0a 23  rning. */.  }..#
267b0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
267c0 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f  BLE_PREUPDATE_HO
267d0 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  OK.  /* Invoke t
267e0 68 65 20 70 72 65 2d 75 70 64 61 74 65 2d 68 6f  he pre-update-ho
267f0 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20  ok if required. 
26800 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72  */.  if( db->xPr
26810 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  eUpdateCallback 
26820 26 26 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 20  && pOp->p4.pTab 
26830 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 21  ){.    assert( !
26840 28 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41  (opflags & OPFLA
26850 47 5f 49 53 55 50 44 41 54 45 29 20 0a 20 20 20  G_ISUPDATE) .   
26860 20 20 20 20 20 20 7c 7c 20 48 61 73 52 6f 77 69        || HasRowi
26870 64 28 70 54 61 62 29 3d 3d 30 20 0a 20 20 20 20  d(pTab)==0 .    
26880 20 20 20 20 20 7c 7c 20 28 61 4d 65 6d 5b 70 4f       || (aMem[pO
26890 70 2d 3e 70 33 5d 2e 66 6c 61 67 73 20 26 20 4d  p->p3].flags & M
268a0 45 4d 5f 49 6e 74 29 20 0a 20 20 20 20 29 3b 0a  EM_Int) .    );.
268b0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
268c0 72 65 55 70 64 61 74 65 48 6f 6f 6b 28 70 2c 20  reUpdateHook(p, 
268d0 70 43 2c 0a 20 20 20 20 20 20 20 20 28 6f 70 66  pC,.        (opf
268e0 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 49 53  lags & OPFLAG_IS
268f0 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45  UPDATE) ? SQLITE
26900 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45  _UPDATE : SQLITE
26910 5f 44 45 4c 45 54 45 2c 20 0a 20 20 20 20 20 20  _DELETE, .      
26920 20 20 7a 44 62 2c 20 70 54 61 62 2c 20 70 43 2d    zDb, pTab, pC-
26930 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 2c 0a 20  >movetoTarget,. 
26940 20 20 20 20 20 20 20 70 4f 70 2d 3e 70 33 0a 20         pOp->p3. 
26950 20 20 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20     );.  }.  if( 
26960 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47  opflags & OPFLAG
26970 5f 49 53 4e 4f 4f 50 20 29 20 62 72 65 61 6b 3b  _ISNOOP ) break;
26980 0a 23 65 6e 64 69 66 0a 20 0a 20 20 2f 2a 20 4f  .#endif. .  /* O
26990 6e 6c 79 20 66 6c 61 67 73 20 74 68 61 74 20 63  nly flags that c
269a0 61 6e 20 62 65 20 73 65 74 20 61 72 65 20 53 41  an be set are SA
269b0 56 45 50 4f 49 53 54 49 4f 4e 20 61 6e 64 20 41  VEPOISTION and A
269c0 55 58 44 45 4c 45 54 45 20 2a 2f 20 0a 20 20 61  UXDELETE */ .  a
269d0 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20  ssert( (pOp->p5 
269e0 26 20 7e 28 4f 50 46 4c 41 47 5f 53 41 56 45 50  & ~(OPFLAG_SAVEP
269f0 4f 53 49 54 49 4f 4e 7c 4f 50 46 4c 41 47 5f 41  OSITION|OPFLAG_A
26a00 55 58 44 45 4c 45 54 45 29 29 3d 3d 30 20 29 3b  UXDELETE))==0 );
26a10 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41  .  assert( OPFLA
26a20 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 3d 3d  G_SAVEPOSITION==
26a30 42 54 52 45 45 5f 53 41 56 45 50 4f 53 49 54 49  BTREE_SAVEPOSITI
26a40 4f 4e 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ON );.  assert( 
26a50 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45  OPFLAG_AUXDELETE
26a60 3d 3d 42 54 52 45 45 5f 41 55 58 44 45 4c 45 54  ==BTREE_AUXDELET
26a70 45 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  E );..#ifdef SQL
26a80 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20  ITE_DEBUG.  if( 
26a90 70 2d 3e 70 46 72 61 6d 65 3d 3d 30 20 29 7b 0a  p->pFrame==0 ){.
26aa0 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73 45 70      if( pC->isEp
26ab0 68 65 6d 65 72 61 6c 3d 3d 30 0a 20 20 20 20 20  hemeral==0.     
26ac0 20 20 20 26 26 20 28 70 4f 70 2d 3e 70 35 20 26     && (pOp->p5 &
26ad0 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54   OPFLAG_AUXDELET
26ae0 45 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 26 26  E)==0.        &&
26af0 20 28 70 43 2d 3e 77 72 46 6c 61 67 20 26 20 4f   (pC->wrFlag & O
26b00 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 29  PFLAG_FORDELETE)
26b10 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20  ==0.      ){.   
26b20 20 20 20 6e 45 78 74 72 61 44 65 6c 65 74 65 2b     nExtraDelete+
26b30 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  +;.    }.    if(
26b40 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41   pOp->p2 & OPFLA
26b50 47 5f 4e 43 48 41 4e 47 45 20 29 7b 0a 20 20 20  G_NCHANGE ){.   
26b60 20 20 20 6e 45 78 74 72 61 44 65 6c 65 74 65 2d     nExtraDelete-
26b70 2d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e  -;.    }.  }.#en
26b80 64 69 66 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69  dif..  rc = sqli
26b90 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28 70  te3BtreeDelete(p
26ba0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 70  C->uc.pCursor, p
26bb0 4f 70 2d 3e 70 35 29 3b 0a 20 20 70 43 2d 3e 63  Op->p5);.  pC->c
26bc0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
26bd0 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e  HE_STALE;.  pC->
26be0 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a  seekResult = 0;.
26bf0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
26c00 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
26c10 6f 72 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65  or;..  /* Invoke
26c20 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   the update-hook
26c30 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f   if required. */
26c40 0a 20 20 69 66 28 20 6f 70 66 6c 61 67 73 20 26  .  if( opflags &
26c50 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
26c60 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67  ){.    p->nChang
26c70 65 2b 2b 3b 0a 20 20 20 20 69 66 28 20 64 62 2d  e++;.    if( db-
26c80 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
26c90 20 26 26 20 48 61 73 52 6f 77 69 64 28 70 54 61   && HasRowid(pTa
26ca0 62 29 20 29 7b 0a 20 20 20 20 20 20 64 62 2d 3e  b) ){.      db->
26cb0 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28  xUpdateCallback(
26cc0 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20  db->pUpdateArg, 
26cd0 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20 7a  SQLITE_DELETE, z
26ce0 44 62 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c  Db, pTab->zName,
26cf0 0a 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e 6d  .          pC->m
26d00 6f 76 65 74 6f 54 61 72 67 65 74 29 3b 0a 20 20  ovetoTarget);.  
26d10 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
26d20 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20 7d 0a  iDb>=0 );.    }.
26d30 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a    }..  break;.}.
26d40 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74  /* Opcode: Reset
26d50 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a 0a  Count * * * * *.
26d60 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  **.** The value 
26d70 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f  of the change co
26d80 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65 64 20  unter is copied 
26d90 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
26da0 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65  handle.** change
26db0 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75 72 6e   counter (return
26dc0 65 64 20 62 79 20 73 75 62 73 65 71 75 65 6e 74  ed by subsequent
26dd0 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65   calls to sqlite
26de0 33 5f 63 68 61 6e 67 65 73 28 29 29 2e 0a 2a 2a  3_changes())..**
26df0 20 54 68 65 6e 20 74 68 65 20 56 4d 73 20 69 6e   Then the VMs in
26e00 74 65 72 6e 61 6c 20 63 68 61 6e 67 65 20 63 6f  ternal change co
26e10 75 6e 74 65 72 20 72 65 73 65 74 73 20 74 6f 20  unter resets to 
26e20 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 75 73  0..** This is us
26e30 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70 72  ed by trigger pr
26e40 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20  ograms..*/.case 
26e50 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b  OP_ResetCount: {
26e60 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  .  sqlite3VdbeSe
26e70 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e  tChanges(db, p->
26e80 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70 2d 3e 6e  nChange);.  p->n
26e90 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62 72  Change = 0;.  br
26ea0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
26eb0 65 3a 20 53 6f 72 74 65 72 43 6f 6d 70 61 72 65  e: SorterCompare
26ec0 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 20   P1 P2 P3 P4.** 
26ed0 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 6b 65 79  Synopsis: if key
26ee0 28 50 31 29 21 3d 74 72 69 6d 28 72 5b 50 33 5d  (P1)!=trim(r[P3]
26ef0 2c 50 34 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  ,P4) goto P2.**.
26f00 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72 74 65  ** P1 is a sorte
26f10 72 20 63 75 72 73 6f 72 2e 20 54 68 69 73 20 69  r cursor. This i
26f20 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 6d 70 61  nstruction compa
26f30 72 65 73 20 61 20 70 72 65 66 69 78 20 6f 66 20  res a prefix of 
26f40 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20 62 6c  the.** record bl
26f50 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ob in register P
26f60 33 20 61 67 61 69 6e 73 74 20 61 20 70 72 65 66  3 against a pref
26f70 69 78 20 6f 66 20 74 68 65 20 65 6e 74 72 79 20  ix of the entry 
26f80 74 68 61 74 20 0a 2a 2a 20 74 68 65 20 73 6f 72  that .** the sor
26f90 74 65 72 20 63 75 72 73 6f 72 20 63 75 72 72 65  ter cursor curre
26fa0 6e 74 6c 79 20 70 6f 69 6e 74 73 20 74 6f 2e 20  ntly points to. 
26fb0 20 4f 6e 6c 79 20 74 68 65 20 66 69 72 73 74 20   Only the first 
26fc0 50 34 20 66 69 65 6c 64 73 0a 2a 2a 20 6f 66 20  P4 fields.** of 
26fd0 72 5b 50 33 5d 20 61 6e 64 20 74 68 65 20 73 6f  r[P3] and the so
26fe0 72 74 65 72 20 72 65 63 6f 72 64 20 61 72 65 20  rter record are 
26ff0 63 6f 6d 70 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20  compared..**.** 
27000 49 66 20 65 69 74 68 65 72 20 50 33 20 6f 72 20  If either P3 or 
27010 74 68 65 20 73 6f 72 74 65 72 20 63 6f 6e 74 61  the sorter conta
27020 69 6e 73 20 61 20 4e 55 4c 4c 20 69 6e 20 6f 6e  ins a NULL in on
27030 65 20 6f 66 20 74 68 65 69 72 20 73 69 67 6e 69  e of their signi
27040 66 69 63 61 6e 74 0a 2a 2a 20 66 69 65 6c 64 73  ficant.** fields
27050 20 28 6e 6f 74 20 63 6f 75 6e 74 69 6e 67 20 74   (not counting t
27060 68 65 20 50 34 20 66 69 65 6c 64 73 20 61 74 20  he P4 fields at 
27070 74 68 65 20 65 6e 64 20 77 68 69 63 68 20 61 72  the end which ar
27080 65 20 69 67 6e 6f 72 65 64 29 20 74 68 65 6e 0a  e ignored) then.
27090 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  ** the compariso
270a0 6e 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20  n is assumed to 
270b0 62 65 20 65 71 75 61 6c 2e 0a 2a 2a 0a 2a 2a 20  be equal..**.** 
270c0 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  Fall through to 
270d0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
270e0 20 69 66 20 74 68 65 20 74 77 6f 20 72 65 63 6f   if the two reco
270f0 72 64 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61  rds compare equa
27100 6c 20 74 6f 0a 2a 2a 20 65 61 63 68 20 6f 74 68  l to.** each oth
27110 65 72 2e 20 20 4a 75 6d 70 20 74 6f 20 50 32 20  er.  Jump to P2 
27120 69 66 20 74 68 65 79 20 61 72 65 20 64 69 66 66  if they are diff
27130 65 72 65 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  erent..*/.case O
27140 50 5f 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 3a  P_SorterCompare:
27150 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
27160 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  *pC;.  int res;.
27170 20 20 69 6e 74 20 6e 4b 65 79 43 6f 6c 3b 0a 0a    int nKeyCol;..
27180 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
27190 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
271a0 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
271b0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
271c0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
271d0 54 33 32 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20  T32 );.  pIn3 = 
271e0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
271f0 20 20 6e 4b 65 79 43 6f 6c 20 3d 20 70 4f 70 2d    nKeyCol = pOp-
27200 3e 70 34 2e 69 3b 0a 20 20 72 65 73 20 3d 20 30  >p4.i;.  res = 0
27210 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
27220 56 64 62 65 53 6f 72 74 65 72 43 6f 6d 70 61 72  VdbeSorterCompar
27230 65 28 70 43 2c 20 70 49 6e 33 2c 20 6e 4b 65 79  e(pC, pIn3, nKey
27240 43 6f 6c 2c 20 26 72 65 73 29 3b 0a 20 20 56 64  Col, &res);.  Vd
27250 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
27260 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72  s!=0,2);.  if( r
27270 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
27280 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69  ue_to_error;.  i
27290 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75  f( res ) goto ju
272a0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
272b0 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.};../* Opcode
272c0 3a 20 53 6f 72 74 65 72 44 61 74 61 20 50 31 20  : SorterData P1 
272d0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
272e0 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74  opsis: r[P2]=dat
272f0 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e  a.**.** Write in
27300 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74  to register P2 t
27310 68 65 20 63 75 72 72 65 6e 74 20 73 6f 72 74 65  he current sorte
27320 72 20 64 61 74 61 20 66 6f 72 20 73 6f 72 74 65  r data for sorte
27330 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20  r cursor P1..** 
27340 54 68 65 6e 20 63 6c 65 61 72 20 74 68 65 20 63  Then clear the c
27350 6f 6c 75 6d 6e 20 68 65 61 64 65 72 20 63 61 63  olumn header cac
27360 68 65 20 6f 6e 20 63 75 72 73 6f 72 20 50 33 2e  he on cursor P3.
27370 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
27380 64 65 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 75  de is normally u
27390 73 65 20 74 6f 20 6d 6f 76 65 20 61 20 72 65 63  se to move a rec
273a0 6f 72 64 20 6f 75 74 20 6f 66 20 74 68 65 20 73  ord out of the s
273b0 6f 72 74 65 72 20 61 6e 64 20 69 6e 74 6f 0a 2a  orter and into.*
273c0 2a 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  * a register tha
273d0 74 20 69 73 20 74 68 65 20 73 6f 75 72 63 65 20  t is the source 
273e0 66 6f 72 20 61 20 70 73 65 75 64 6f 2d 74 61 62  for a pseudo-tab
273f0 6c 65 20 63 75 72 73 6f 72 20 63 72 65 61 74 65  le cursor create
27400 64 20 75 73 69 6e 67 0a 2a 2a 20 4f 70 65 6e 50  d using.** OpenP
27410 73 65 75 64 6f 2e 20 20 54 68 61 74 20 70 73 65  seudo.  That pse
27420 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72  udo-table cursor
27430 20 69 73 20 74 68 65 20 6f 6e 65 20 74 68 61 74   is the one that
27440 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62   is identified b
27450 79 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 50  y.** parameter P
27460 33 2e 20 20 43 6c 65 61 72 69 6e 67 20 74 68 65  3.  Clearing the
27470 20 50 33 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65   P3 column cache
27480 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 69 73   as part of this
27490 20 6f 70 63 6f 64 65 20 73 61 76 65 73 0a 2a 2a   opcode saves.**
274a0 20 75 73 20 66 72 6f 6d 20 68 61 76 69 6e 67 20   us from having 
274b0 74 6f 20 69 73 73 75 65 20 61 20 73 65 70 61 72  to issue a separ
274c0 61 74 65 20 4e 75 6c 6c 52 6f 77 20 69 6e 73 74  ate NullRow inst
274d0 72 75 63 74 69 6f 6e 20 74 6f 20 63 6c 65 61 72  ruction to clear
274e0 20 74 68 61 74 20 63 61 63 68 65 2e 0a 2a 2f 0a   that cache..*/.
274f0 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 44 61  case OP_SorterDa
27500 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  ta: {.  VdbeCurs
27510 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 4f 75 74 20  or *pC;..  pOut 
27520 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
27530 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
27540 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
27550 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
27560 43 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  C) );.  rc = sql
27570 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 6f  ite3VdbeSorterRo
27580 77 6b 65 79 28 70 43 2c 20 70 4f 75 74 29 3b 0a  wkey(pC, pOut);.
27590 20 20 61 73 73 65 72 74 28 20 72 63 21 3d 53 51    assert( rc!=SQ
275a0 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 4f 75 74  LITE_OK || (pOut
275b0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
275c0 6f 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ob) );.  assert(
275d0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
275e0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
275f0 72 20 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  r );.  if( rc ) 
27600 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
27610 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 2d 3e 61 70  o_error;.  p->ap
27620 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 2d 3e 63 61  Csr[pOp->p3]->ca
27630 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
27640 45 5f 53 54 41 4c 45 3b 0a 20 20 62 72 65 61 6b  E_STALE;.  break
27650 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
27660 52 6f 77 44 61 74 61 20 50 31 20 50 32 20 50 33  RowData P1 P2 P3
27670 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
27680 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a  : r[P2]=data.**.
27690 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65  ** Write into re
276a0 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63 6f  gister P2 the co
276b0 6d 70 6c 65 74 65 20 72 6f 77 20 63 6f 6e 74 65  mplete row conte
276c0 6e 74 20 66 6f 72 20 74 68 65 20 72 6f 77 20 61  nt for the row a
276d0 74 20 0a 2a 2a 20 77 68 69 63 68 20 63 75 72 73  t .** which curs
276e0 6f 72 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  or P1 is current
276f0 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 20  ly pointing..** 
27700 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65  There is no inte
27710 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68  rpretation of th
27720 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74 20  e data.  .** It 
27730 69 73 20 6a 75 73 74 20 63 6f 70 69 65 64 20 6f  is just copied o
27740 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67 69 73  nto the P2 regis
27750 74 65 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a  ter exactly as .
27760 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69  ** it is found i
27770 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
27780 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  ile..**.** If cu
27790 72 73 6f 72 20 50 31 20 69 73 20 61 6e 20 69 6e  rsor P1 is an in
277a0 64 65 78 2c 20 74 68 65 6e 20 74 68 65 20 63 6f  dex, then the co
277b0 6e 74 65 6e 74 20 69 73 20 74 68 65 20 6b 65 79  ntent is the key
277c0 20 6f 66 20 74 68 65 20 72 6f 77 2e 0a 2a 2a 20   of the row..** 
277d0 49 66 20 63 75 72 73 6f 72 20 50 32 20 69 73 20  If cursor P2 is 
277e0 61 20 74 61 62 6c 65 2c 20 74 68 65 6e 20 74 68  a table, then th
277f0 65 20 63 6f 6e 74 65 6e 74 20 65 78 74 72 61 63  e content extrac
27800 74 65 64 20 69 73 20 74 68 65 20 64 61 74 61 2e  ted is the data.
27810 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
27820 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
27830 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61  pointing to a va
27840 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e  lid row (not a N
27850 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61  ULL row).** of a
27860 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
27870 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
27880 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 21 3d 30 20  .**.** If P3!=0 
27890 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  then this opcode
278a0 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f 20 6d   is allowed to m
278b0 61 6b 65 20 61 6e 20 65 70 68 65 72 6d 65 72 61  ake an ephermera
278c0 6c 20 70 6f 69 6e 74 65 72 0a 2a 2a 20 69 6e 74  l pointer.** int
278d0 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 70  o the database p
278e0 61 67 65 2e 20 20 54 68 61 74 20 6d 65 61 6e 73  age.  That means
278f0 20 74 68 61 74 20 74 68 65 20 63 6f 6e 74 65 6e   that the conten
27900 74 20 6f 66 20 74 68 65 20 6f 75 74 70 75 74 0a  t of the output.
27910 2a 2a 20 72 65 67 69 73 74 65 72 20 77 69 6c 6c  ** register will
27920 20 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64 20   be invalidated 
27930 61 73 20 73 6f 6f 6e 20 61 73 20 74 68 65 20 63  as soon as the c
27940 75 72 73 6f 72 20 6d 6f 76 65 73 20 2d 20 69 6e  ursor moves - in
27950 63 6c 75 64 69 6e 67 0a 2a 2a 20 6d 6f 76 65 73  cluding.** moves
27960 20 63 61 75 73 65 64 20 62 79 20 6f 74 68 65 72   caused by other
27970 20 63 75 72 73 6f 72 73 20 74 68 61 74 20 22 73   cursors that "s
27980 61 76 65 22 20 74 68 65 20 74 68 65 20 63 75 72  ave" the the cur
27990 72 65 6e 74 20 63 75 72 73 6f 72 73 0a 2a 2a 20  rent cursors.** 
279a0 70 6f 73 69 74 69 6f 6e 20 69 6e 20 6f 72 64 65  position in orde
279b0 72 20 74 68 61 74 20 74 68 65 79 20 63 61 6e 20  r that they can 
279c0 77 72 69 74 65 20 74 6f 20 74 68 65 20 73 61 6d  write to the sam
279d0 65 20 74 61 62 6c 65 2e 20 20 49 66 20 50 33 3d  e table.  If P3=
279e0 3d 30 0a 2a 2a 20 74 68 65 6e 20 61 20 63 6f 70  =0.** then a cop
279f0 79 20 6f 66 20 74 68 65 20 64 61 74 61 20 69 73  y of the data is
27a00 20 6d 61 64 65 20 69 6e 74 6f 20 6d 65 6d 6f 72   made into memor
27a10 79 2e 20 20 50 33 21 3d 30 20 69 73 20 66 61 73  y.  P3!=0 is fas
27a20 74 65 72 2c 20 62 75 74 0a 2a 2a 20 50 33 3d 3d  ter, but.** P3==
27a30 30 20 69 73 20 73 61 66 65 72 2e 0a 2a 2a 0a 2a  0 is safer..**.*
27a40 2a 20 49 66 20 50 33 21 3d 30 20 74 68 65 6e 20  * If P3!=0 then 
27a50 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  the content of t
27a60 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20 69  he P2 register i
27a70 73 20 75 6e 73 75 69 74 61 62 6c 65 20 66 6f 72  s unsuitable for
27a80 20 75 73 65 0a 2a 2a 20 69 6e 20 4f 50 5f 52 65   use.** in OP_Re
27a90 73 75 6c 74 20 61 6e 64 20 61 6e 79 20 4f 50 5f  sult and any OP_
27aa0 52 65 73 75 6c 74 20 77 69 6c 6c 20 69 6e 76 61  Result will inva
27ab0 6c 69 64 61 74 65 20 74 68 65 20 50 32 20 72 65  lidate the P2 re
27ac0 67 69 73 74 65 72 20 63 6f 6e 74 65 6e 74 2e 0a  gister content..
27ad0 2a 2a 20 54 68 65 20 50 32 20 72 65 67 69 73 74  ** The P2 regist
27ae0 65 72 20 63 6f 6e 74 65 6e 74 20 69 73 20 69 6e  er content is in
27af0 76 61 6c 69 64 61 74 65 64 20 62 79 20 6f 70 63  validated by opc
27b00 6f 64 65 73 20 6c 69 6b 65 20 4f 50 5f 46 75 6e  odes like OP_Fun
27b10 63 74 69 6f 6e 20 6f 72 0a 2a 2a 20 62 79 20 61  ction or.** by a
27b20 6e 79 20 75 73 65 20 6f 66 20 61 6e 6f 74 68 65  ny use of anothe
27b30 72 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e  r cursor pointin
27b40 67 20 74 6f 20 74 68 65 20 73 61 6d 65 20 74 61  g to the same ta
27b50 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ble..*/.case OP_
27b60 52 6f 77 44 61 74 61 3a 20 7b 0a 20 20 56 64 62  RowData: {.  Vdb
27b70 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
27b80 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
27b90 20 20 75 33 32 20 6e 3b 0a 0a 20 20 70 4f 75 74    u32 n;..  pOut
27ba0 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
27bb0 65 28 70 2c 20 70 4f 70 29 3b 0a 0a 20 20 61 73  e(p, pOp);..  as
27bc0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
27bd0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
27be0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
27bf0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
27c00 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
27c10 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
27c20 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
27c30 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
27c40 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74    assert( isSort
27c50 65 72 28 70 43 29 3d 3d 30 20 29 3b 0a 20 20 61  er(pC)==0 );.  a
27c60 73 73 65 72 74 28 20 70 43 2d 3e 6e 75 6c 6c 52  ssert( pC->nullR
27c70 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ow==0 );.  asser
27c80 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
27c90 72 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20  r!=0 );.  pCrsr 
27ca0 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  = pC->uc.pCursor
27cb0 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 52  ;..  /* The OP_R
27cc0 6f 77 44 61 74 61 20 6f 70 63 6f 64 65 73 20 61  owData opcodes a
27cd0 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f  lways follow OP_
27ce0 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a 20 20 2a  NotExists or.  *
27cf0 2a 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64 20 6f  * OP_SeekRowid o
27d00 72 20 4f 50 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e  r OP_Rewind/Op_N
27d10 65 78 74 20 77 69 74 68 20 6e 6f 20 69 6e 74 65  ext with no inte
27d20 72 76 65 6e 69 6e 67 20 69 6e 73 74 72 75 63 74  rvening instruct
27d30 69 6f 6e 73 0a 20 20 2a 2a 20 74 68 61 74 20 6d  ions.  ** that m
27d40 69 67 68 74 20 69 6e 76 61 6c 69 64 61 74 65 20  ight invalidate 
27d50 74 68 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2a  the cursor..  **
27d60 20 49 66 20 74 68 69 73 20 77 68 65 72 65 20 6e   If this where n
27d70 6f 74 20 74 68 65 20 63 61 73 65 2c 20 6f 6e 20  ot the case, on 
27d80 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
27d90 20 61 73 73 65 72 74 28 29 73 0a 20 20 2a 2a 20   assert()s.  ** 
27da0 77 6f 75 6c 64 20 66 61 69 6c 2e 20 20 53 68 6f  would fail.  Sho
27db0 75 6c 64 20 74 68 69 73 20 65 76 65 72 20 63 68  uld this ever ch
27dc0 61 6e 67 65 20 28 62 65 63 61 75 73 65 20 6f 66  ange (because of
27dd0 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20   changes in the 
27de0 63 6f 64 65 0a 20 20 2a 2a 20 67 65 6e 65 72 61  code.  ** genera
27df0 74 6f 72 29 20 74 68 65 6e 20 74 68 65 20 66 69  tor) then the fi
27e00 78 20 77 6f 75 6c 64 20 62 65 20 74 6f 20 69 6e  x would be to in
27e10 73 65 72 74 20 61 20 63 61 6c 6c 20 74 6f 0a 20  sert a call to. 
27e20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 43   ** sqlite3VdbeC
27e30 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 2e 0a 20  ursorMoveto().. 
27e40 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43   */.  assert( pC
27e50 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
27e60 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
27e70 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
27e80 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72  sorIsValid(pCrsr
27e90 29 20 29 3b 0a 23 69 66 20 30 20 20 2f 2a 20 4e  ) );.#if 0  /* N
27ea0 6f 74 20 72 65 71 75 69 72 65 64 20 64 75 65 20  ot required due 
27eb0 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  to the previous 
27ec0 74 6f 20 61 73 73 65 72 74 28 29 20 73 74 61 74  to assert() stat
27ed0 65 6d 65 6e 74 73 20 2a 2f 0a 20 20 72 63 20 3d  ements */.  rc =
27ee0 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
27ef0 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20  orMoveto(pC);.  
27f00 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
27f10 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
27f20 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e  ue_to_error;.#en
27f30 64 69 66 0a 0a 20 20 6e 20 3d 20 73 71 6c 69 74  dif..  n = sqlit
27f40 65 33 42 74 72 65 65 50 61 79 6c 6f 61 64 53 69  e3BtreePayloadSi
27f50 7a 65 28 70 43 72 73 72 29 3b 0a 20 20 69 66 28  ze(pCrsr);.  if(
27f60 20 6e 3e 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d   n>(u32)db->aLim
27f70 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
27f80 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67  LENGTH] ){.    g
27f90 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
27fa0 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 3d 3d  .  testcase( n==
27fb0 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
27fc0 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74  te3VdbeMemFromBt
27fd0 72 65 65 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c  ree(pCrsr, 0, n,
27fe0 20 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 72 63   pOut);.  if( rc
27ff0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
28000 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66  e_to_error;.  if
28010 28 20 21 70 4f 70 2d 3e 70 33 20 29 20 44 65 65  ( !pOp->p3 ) Dee
28020 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74  phemeralize(pOut
28030 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
28040 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
28050 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
28060 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
28070 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
28080 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64 20 50 31  Opcode: Rowid P1
28090 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
280a0 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77  opsis: r[P2]=row
280b0 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69  id.**.** Store i
280c0 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  n register P2 an
280d0 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69   integer which i
280e0 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65  s the key of the
280f0 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 68 61   table entry tha
28100 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72 72 65  t.** P1 is curre
28110 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a  ntly point to..*
28120 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65 20 65  *.** P1 can be e
28130 69 74 68 65 72 20 61 6e 20 6f 72 64 69 6e 61 72  ither an ordinar
28140 79 20 74 61 62 6c 65 20 6f 72 20 61 20 76 69 72  y table or a vir
28150 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65  tual table.  The
28160 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65  re used to.** be
28170 20 61 20 73 65 70 61 72 61 74 65 20 4f 50 5f 56   a separate OP_V
28180 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 66 6f 72  Rowid opcode for
28190 20 75 73 65 20 77 69 74 68 20 76 69 72 74 75 61   use with virtua
281a0 6c 20 74 61 62 6c 65 73 2c 20 62 75 74 20 74 68  l tables, but th
281b0 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65  is.** one opcode
281c0 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20 62   now works for b
281d0 6f 74 68 20 74 61 62 6c 65 20 74 79 70 65 73 2e  oth table types.
281e0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69  .*/.case OP_Rowi
281f0 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  d: {            
28200 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
28210 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
28220 3b 0a 20 20 69 36 34 20 76 3b 0a 20 20 73 71 6c  ;.  i64 v;.  sql
28230 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
28240 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  ;.  const sqlite
28250 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
28260 65 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74  e;..  pOut = out
28270 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
28280 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Op);.  assert( p
28290 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
282a0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
282b0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
282c0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
282d0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
282e0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
282f0 75 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f  urType!=CURTYPE_
28300 50 53 45 55 44 4f 20 7c 7c 20 70 43 2d 3e 6e 75  PSEUDO || pC->nu
28310 6c 6c 52 6f 77 20 29 3b 0a 20 20 69 66 28 20 70  llRow );.  if( p
28320 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  C->nullRow ){.  
28330 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
28340 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62 72  MEM_Null;.    br
28350 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  eak;.  }else if(
28360 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
28370 65 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20 70  eto ){.    v = p
28380 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b  C->movetoTarget;
28390 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
283a0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
283b0 45 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43  E.  }else if( pC
283c0 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
283d0 59 50 45 5f 56 54 41 42 20 29 7b 0a 20 20 20 20  YPE_VTAB ){.    
283e0 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
283f0 56 43 75 72 21 3d 30 20 29 3b 0a 20 20 20 20 70  VCur!=0 );.    p
28400 56 74 61 62 20 3d 20 70 43 2d 3e 75 63 2e 70 56  Vtab = pC->uc.pV
28410 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20  Cur->pVtab;.    
28420 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
28430 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73  >pModule;.    as
28440 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78  sert( pModule->x
28450 52 6f 77 69 64 20 29 3b 0a 20 20 20 20 72 63 20  Rowid );.    rc 
28460 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69  = pModule->xRowi
28470 64 28 70 43 2d 3e 75 63 2e 70 56 43 75 72 2c 20  d(pC->uc.pVCur, 
28480 26 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  &v);.    sqlite3
28490 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
284a0 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20  (p, pVtab);.    
284b0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
284c0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
284d0 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
284e0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
284f0 41 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b  ABLE */.  }else{
28500 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
28510 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
28520 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20  PE_BTREE );.    
28530 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
28540 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20  Cursor!=0 );.   
28550 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
28560 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 70  eCursorRestore(p
28570 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29  C);.    if( rc )
28580 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
28590 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66  to_error;.    if
285a0 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  ( pC->nullRow ){
285b0 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  .      pOut->fla
285c0 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
285d0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
285e0 7d 0a 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65  }.    v = sqlite
285f0 33 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79  3BtreeIntegerKey
28600 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  (pC->uc.pCursor)
28610 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e  ;.  }.  pOut->u.
28620 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a  i = v;.  break;.
28630 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75  }../* Opcode: Nu
28640 6c 6c 52 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a  llRow P1 * * * *
28650 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20  .**.** Move the 
28660 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 6e  cursor P1 to a n
28670 75 6c 6c 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50  ull row.  Any OP
28680 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f  _Column operatio
28690 6e 73 0a 2a 2a 20 74 68 61 74 20 6f 63 63 75 72  ns.** that occur
286a0 20 77 68 69 6c 65 20 74 68 65 20 63 75 72 73 6f   while the curso
286b0 72 20 69 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c  r is on the null
286c0 20 72 6f 77 20 77 69 6c 6c 20 61 6c 77 61 79 73   row will always
286d0 0a 2a 2a 20 77 72 69 74 65 20 61 20 4e 55 4c 4c  .** write a NULL
286e0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c  ..*/.case OP_Nul
286f0 6c 52 6f 77 3a 20 7b 0a 20 20 56 64 62 65 43 75  lRow: {.  VdbeCu
28700 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73  rsor *pC;..  ass
28710 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
28720 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
28730 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
28740 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
28750 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
28760 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c  =0 );.  pC->null
28770 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 2d 3e 63  Row = 1;.  pC->c
28780 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
28790 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20  HE_STALE;.  if( 
287a0 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
287b0 52 54 59 50 45 5f 42 54 52 45 45 20 29 7b 0a 20  RTYPE_BTREE ){. 
287c0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75     assert( pC->u
287d0 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  c.pCursor!=0 );.
287e0 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
287f0 43 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e  ClearCursor(pC->
28800 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d  uc.pCursor);.  }
28810 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
28820 4f 70 63 6f 64 65 3a 20 53 65 65 6b 45 6e 64 20  Opcode: SeekEnd 
28830 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
28840 20 50 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72   Position cursor
28850 20 50 31 20 61 74 20 74 68 65 20 65 6e 64 20 6f   P1 at the end o
28860 66 20 74 68 65 20 62 74 72 65 65 20 66 6f 72 20  f the btree for 
28870 74 68 65 20 70 75 72 70 6f 73 65 20 6f 66 0a 2a  the purpose of.*
28880 2a 20 61 70 70 65 6e 64 69 6e 67 20 61 20 6e 65  * appending a ne
28890 77 20 65 6e 74 72 79 20 6f 6e 74 6f 20 74 68 65  w entry onto the
288a0 20 62 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 74   btree..**.** It
288b0 20 69 73 20 61 73 73 75 6d 65 64 20 74 68 61 74   is assumed that
288c0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 75   the cursor is u
288d0 73 65 64 20 6f 6e 6c 79 20 66 6f 72 20 61 70 70  sed only for app
288e0 65 6e 64 69 6e 67 20 61 6e 64 20 73 6f 0a 2a 2a  ending and so.**
288f0 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 69   if the cursor i
28900 73 20 76 61 6c 69 64 2c 20 74 68 65 6e 20 74 68  s valid, then th
28910 65 20 63 75 72 73 6f 72 20 6d 75 73 74 20 61 6c  e cursor must al
28920 72 65 61 64 79 20 62 65 20 70 6f 69 6e 74 69 6e  ready be pointin
28930 67 0a 2a 2a 20 61 74 20 74 68 65 20 65 6e 64 20  g.** at the end 
28940 6f 66 20 74 68 65 20 62 74 72 65 65 20 61 6e 64  of the btree and
28950 20 73 6f 20 6e 6f 20 63 68 61 6e 67 65 73 20 61   so no changes a
28960 72 65 20 6d 61 64 65 20 74 6f 0a 2a 2a 20 74 68  re made to.** th
28970 65 20 63 75 72 73 6f 72 2e 0a 2a 2f 0a 2f 2a 20  e cursor..*/./* 
28980 4f 70 63 6f 64 65 3a 20 4c 61 73 74 20 50 31 20  Opcode: Last P1 
28990 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
289a0 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74  he next use of t
289b0 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75  he Rowid or Colu
289c0 6d 6e 20 6f 72 20 50 72 65 76 20 69 6e 73 74 72  mn or Prev instr
289d0 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a  uction for P1 .*
289e0 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20  * will refer to 
289f0 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69  the last entry i
28a00 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  n the database t
28a10 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a  able or index..*
28a20 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f  * If the table o
28a30 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79  r index is empty
28a40 20 61 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20   and P2>0, then 
28a50 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
28a60 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32   to P2..** If P2
28a70 20 69 73 20 30 20 6f 72 20 69 66 20 74 68 65 20   is 0 or if the 
28a80 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69  table or index i
28a90 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c  s not empty, fal
28aa0 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20  l through.** to 
28ab0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
28ac0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
28ad0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
28ae0 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63  ves the cursor c
28af0 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76  onfigured to mov
28b00 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64  e in reverse ord
28b10 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  er,.** from the 
28b20 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20 62  end toward the b
28b30 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74  eginning.  In ot
28b40 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63  her words, the c
28b50 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66  ursor is.** conf
28b60 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 50 72  igured to use Pr
28b70 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2f  ev, not Next..*/
28b80 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 45 6e 64  .case OP_SeekEnd
28b90 3a 0a 63 61 73 65 20 4f 50 5f 4c 61 73 74 3a 20  :.case OP_Last: 
28ba0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
28bb0 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
28bc0 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
28bd0 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
28be0 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  es;..  assert( p
28bf0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
28c00 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
28c10 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
28c20 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
28c30 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
28c40 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
28c50 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
28c60 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72 73 72  BTREE );.  pCrsr
28c70 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f   = pC->uc.pCurso
28c80 72 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  r;.  res = 0;.  
28c90 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30  assert( pCrsr!=0
28ca0 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   );.#ifdef SQLIT
28cb0 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65  E_DEBUG.  pC->se
28cc0 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f  ekOp = pOp->opco
28cd0 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28  de;.#endif.  if(
28ce0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
28cf0 5f 53 65 65 6b 45 6e 64 20 29 7b 0a 20 20 20 20  _SeekEnd ){.    
28d00 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d  assert( pOp->p2=
28d10 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e 73 65  =0 );.    pC->se
28d20 65 6b 52 65 73 75 6c 74 20 3d 20 2d 31 3b 0a 20  ekResult = -1;. 
28d30 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 42 74     if( sqlite3Bt
28d40 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64  reeCursorIsValid
28d50 4e 4e 28 70 43 72 73 72 29 20 29 7b 0a 20 20 20  NN(pCrsr) ){.   
28d60 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
28d70 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
28d80 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 72 73  e3BtreeLast(pCrs
28d90 72 2c 20 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e  r, &res);.  pC->
28da0 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65  nullRow = (u8)re
28db0 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65  s;.  pC->deferre
28dc0 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70  dMoveto = 0;.  p
28dd0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
28de0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
28df0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
28e00 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
28e10 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3e  ;.  if( pOp->p2>
28e20 30 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61  0 ){.    VdbeBra
28e30 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
28e40 32 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 20  2);.    if( res 
28e50 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
28e60 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
28e70 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  }../* Opcode: If
28e80 53 6d 61 6c 6c 65 72 20 50 31 20 50 32 20 50 33  Smaller P1 P2 P3
28e90 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45 73 74 69 6d   * *.**.** Estim
28ea0 61 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ate the number o
28eb0 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61  f rows in the ta
28ec0 62 6c 65 20 50 31 2e 20 20 4a 75 6d 70 20 74 6f  ble P1.  Jump to
28ed0 20 50 32 20 69 66 20 74 68 61 74 0a 2a 2a 20 65   P2 if that.** e
28ee0 73 74 69 6d 61 74 65 20 69 73 20 6c 65 73 73 20  stimate is less 
28ef0 74 68 61 6e 20 61 70 70 72 6f 78 69 6d 61 74 65  than approximate
28f00 6c 79 20 32 2a 2a 28 30 2e 31 2a 50 33 29 2e 0a  ly 2**(0.1*P3)..
28f10 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 53 6d 61  */.case OP_IfSma
28f20 6c 6c 65 72 3a 20 7b 20 20 20 20 20 20 20 20 2f  ller: {        /
28f30 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65  * jump */.  Vdbe
28f40 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
28f50 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
28f60 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 36 34 20   int res;.  i64 
28f70 73 7a 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  sz;..  assert( p
28f80 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
28f90 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
28fa0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
28fb0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
28fc0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
28fd0 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63    pCrsr = pC->uc
28fe0 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65  .pCursor;.  asse
28ff0 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 72  rt( pCrsr );.  r
29000 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
29010 46 69 72 73 74 28 70 43 72 73 72 2c 20 26 72 65  First(pCrsr, &re
29020 73 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  s);.  if( rc ) g
29030 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
29040 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65  _error;.  if( re
29050 73 3d 3d 30 20 29 7b 0a 20 20 20 20 73 7a 20 3d  s==0 ){.    sz =
29060 20 73 71 6c 69 74 65 33 42 74 72 65 65 52 6f 77   sqlite3BtreeRow
29070 43 6f 75 6e 74 45 73 74 28 70 43 72 73 72 29 3b  CountEst(pCrsr);
29080 0a 20 20 20 20 69 66 28 20 41 4c 57 41 59 53 28  .    if( ALWAYS(
29090 73 7a 3e 3d 30 29 20 26 26 20 73 71 6c 69 74 65  sz>=0) && sqlite
290a0 33 4c 6f 67 45 73 74 28 28 75 36 34 29 73 7a 29  3LogEst((u64)sz)
290b0 3c 70 4f 70 2d 3e 70 33 20 29 20 72 65 73 20 3d  <pOp->p3 ) res =
290c0 20 31 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72   1;.  }.  VdbeBr
290d0 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
290e0 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29  ,2);.  if( res )
290f0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
29100 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  ;.  break;.}.../
29110 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72  * Opcode: Sorter
29120 53 6f 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  Sort P1 P2 * * *
29130 0a 2a 2a 0a 2a 2a 20 41 66 74 65 72 20 61 6c 6c  .**.** After all
29140 20 72 65 63 6f 72 64 73 20 68 61 76 65 20 62 65   records have be
29150 65 6e 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f  en inserted into
29160 20 74 68 65 20 53 6f 72 74 65 72 20 6f 62 6a 65   the Sorter obje
29170 63 74 0a 2a 2a 20 69 64 65 6e 74 69 66 69 65 64  ct.** identified
29180 20 62 79 20 50 31 2c 20 69 6e 76 6f 6b 65 20 74   by P1, invoke t
29190 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 61 63  his opcode to ac
291a0 74 75 61 6c 6c 79 20 64 6f 20 74 68 65 20 73 6f  tually do the so
291b0 72 74 69 6e 67 2e 0a 2a 2a 20 4a 75 6d 70 20 74  rting..** Jump t
291c0 6f 20 50 32 20 69 66 20 74 68 65 72 65 20 61 72  o P2 if there ar
291d0 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 74 6f 20  e no records to 
291e0 62 65 20 73 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a  be sorted..**.**
291f0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
29200 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 4f 50 5f  an alias for OP_
29210 53 6f 72 74 20 61 6e 64 20 4f 50 5f 52 65 77 69  Sort and OP_Rewi
29220 6e 64 20 74 68 61 74 20 69 73 20 75 73 65 64 0a  nd that is used.
29230 2a 2a 20 66 6f 72 20 53 6f 72 74 65 72 20 6f 62  ** for Sorter ob
29240 6a 65 63 74 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  jects..*/./* Opc
29250 6f 64 65 3a 20 53 6f 72 74 20 50 31 20 50 32 20  ode: Sort P1 P2 
29260 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73  * * *.**.** This
29270 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 65 78 61   opcode does exa
29280 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 74 68  ctly the same th
29290 69 6e 67 20 61 73 20 4f 50 5f 52 65 77 69 6e 64  ing as OP_Rewind
292a0 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20   except that.** 
292b0 69 74 20 69 6e 63 72 65 6d 65 6e 74 73 20 61 6e  it increments an
292c0 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67 6c   undocumented gl
292d0 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 75 73  obal variable us
292e0 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 2e 0a  ed for testing..
292f0 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69 73  **.** Sorting is
29300 20 61 63 63 6f 6d 70 6c 69 73 68 65 64 20 62 79   accomplished by
29310 20 77 72 69 74 69 6e 67 20 72 65 63 6f 72 64 73   writing records
29320 20 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67 20   into a sorting 
29330 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20 72  index,.** then r
29340 65 77 69 6e 64 69 6e 67 20 74 68 61 74 20 69 6e  ewinding that in
29350 64 65 78 20 61 6e 64 20 70 6c 61 79 69 6e 67 20  dex and playing 
29360 69 74 20 62 61 63 6b 20 66 72 6f 6d 20 62 65 67  it back from beg
29370 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64  inning to.** end
29380 2e 20 20 57 65 20 75 73 65 20 74 68 65 20 4f 50  .  We use the OP
29390 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e 73  _Sort opcode ins
293a0 74 65 61 64 20 6f 66 20 4f 50 5f 52 65 77 69 6e  tead of OP_Rewin
293b0 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20 72  d to do the.** r
293c0 65 77 69 6e 64 69 6e 67 20 73 6f 20 74 68 61 74  ewinding so that
293d0 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69   the global vari
293e0 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e 63  able will be inc
293f0 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a 20  remented and.** 
29400 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73  regression tests
29410 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65 20 77   can determine w
29420 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
29430 65 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a 2a  e optimizer is.*
29440 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f 70 74 69  * correctly opti
29450 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74 73  mizing out sorts
29460 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
29470 74 65 72 53 6f 72 74 3a 20 20 20 20 2f 2a 20 6a  terSort:    /* j
29480 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ump */.case OP_S
29490 6f 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ort: {        /*
294a0 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20   jump */.#ifdef 
294b0 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71  SQLITE_TEST.  sq
294c0 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74  lite3_sort_count
294d0 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 65  ++;.  sqlite3_se
294e0 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65  arch_count--;.#e
294f0 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74  ndif.  p->aCount
29500 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54  er[SQLITE_STMTST
29510 41 54 55 53 5f 53 4f 52 54 5d 2b 2b 3b 0a 20 20  ATUS_SORT]++;.  
29520 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
29530 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20 2a  into OP_Rewind *
29540 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  /.}./* Opcode: R
29550 65 77 69 6e 64 20 50 31 20 50 32 20 2a 20 2a 20  ewind P1 P2 * * 
29560 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74  *.**.** The next
29570 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69   use of the Rowi
29580 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e  d or Column or N
29590 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
295a0 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20  for P1 .** will 
295b0 72 65 66 65 72 20 74 6f 20 74 68 65 20 66 69 72  refer to the fir
295c0 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20  st entry in the 
295d0 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
295e0 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74  r index..** If t
295f0 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
29600 78 20 69 73 20 65 6d 70 74 79 2c 20 6a 75 6d 70  x is empty, jump
29610 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
29620 50 32 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61  P2..** If the ta
29630 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
29640 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20  not empty, fall 
29650 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 66  through to the f
29660 6f 6c 6c 6f 77 69 6e 67 20 0a 2a 2a 20 69 6e 73  ollowing .** ins
29670 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
29680 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
29690 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  es the cursor co
296a0 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65  nfigured to move
296b0 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65   in forward orde
296c0 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62  r,.** from the b
296d0 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20  eginning toward 
296e0 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68  the end.  In oth
296f0 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75  er words, the cu
29700 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69  rsor is.** confi
29710 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78  gured to use Nex
29720 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2f 0a  t, not Prev..*/.
29730 63 61 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20  case OP_Rewind: 
29740 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
29750 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
29760 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
29770 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
29780 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  es;..  assert( p
29790 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
297a0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
297b0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
297c0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
297d0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
297e0 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74    assert( isSort
297f0 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70  er(pC)==(pOp->op
29800 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 53  code==OP_SorterS
29810 6f 72 74 29 20 29 3b 0a 20 20 72 65 73 20 3d 20  ort) );.  res = 
29820 31 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  1;.#ifdef SQLITE
29830 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65  _DEBUG.  pC->see
29840 6b 4f 70 20 3d 20 4f 50 5f 52 65 77 69 6e 64 3b  kOp = OP_Rewind;
29850 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 69 73  .#endif.  if( is
29860 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20  Sorter(pC) ){.  
29870 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
29880 62 65 53 6f 72 74 65 72 52 65 77 69 6e 64 28 70  beSorterRewind(p
29890 43 2c 20 26 72 65 73 29 3b 0a 20 20 7d 65 6c 73  C, &res);.  }els
298a0 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
298b0 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
298c0 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
298d0 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63    pCrsr = pC->uc
298e0 2e 70 43 75 72 73 6f 72 3b 0a 20 20 20 20 61 73  .pCursor;.    as
298f0 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20  sert( pCrsr );. 
29900 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
29910 74 72 65 65 46 69 72 73 74 28 70 43 72 73 72 2c  treeFirst(pCrsr,
29920 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e   &res);.    pC->
29930 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
29940 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   0;.    pC->cach
29950 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
29960 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66 28  STALE;.  }.  if(
29970 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
29980 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
29990 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28   pC->nullRow = (
299a0 75 38 29 72 65 73 3b 0a 20 20 61 73 73 65 72 74  u8)res;.  assert
299b0 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70  ( pOp->p2>0 && p
299c0 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b  Op->p2<p->nOp );
299d0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
299e0 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
299f0 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a  if( res ) goto j
29a00 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65  ump_to_p2;.  bre
29a10 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
29a20 3a 20 4e 65 78 74 20 50 31 20 50 32 20 50 33 20  : Next P1 P2 P3 
29a30 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61  P4 P5.**.** Adva
29a40 6e 63 65 20 63 75 72 73 6f 72 20 50 31 20 73 6f  nce cursor P1 so
29a50 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
29a60 74 6f 20 74 68 65 20 6e 65 78 74 20 6b 65 79 2f  to the next key/
29a70 64 61 74 61 20 70 61 69 72 20 69 6e 20 69 74 73  data pair in its
29a80 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  .** table or ind
29a90 65 78 2e 20 20 49 66 20 74 68 65 72 65 20 61 72  ex.  If there ar
29aa0 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61  e no more key/va
29ab0 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66  lue pairs then f
29ac0 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  all through.** t
29ad0 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
29ae0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75  instruction.  Bu
29af0 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20  t if the cursor 
29b00 61 64 76 61 6e 63 65 20 77 61 73 20 73 75 63 63  advance was succ
29b10 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20  essful,.** jump 
29b20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
29b30 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4e 65 78  2..**.** The Nex
29b40 74 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  t opcode is only
29b50 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67   valid following
29b60 20 61 6e 20 53 65 65 6b 47 54 2c 20 53 65 65 6b   an SeekGT, Seek
29b70 47 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 52 65 77  GE, or.** OP_Rew
29b80 69 6e 64 20 6f 70 63 6f 64 65 20 75 73 65 64 20  ind opcode used 
29b90 74 6f 20 70 6f 73 69 74 69 6f 6e 20 74 68 65 20  to position the 
29ba0 63 75 72 73 6f 72 2e 20 20 4e 65 78 74 20 69 73  cursor.  Next is
29bb0 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20   not allowed.** 
29bc0 74 6f 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 4c 54  to follow SeekLT
29bd0 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 20 4f 50 5f  , SeekLE, or OP_
29be0 4c 61 73 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  Last..**.** The 
29bf0 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
29c00 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62  e for a real tab
29c10 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
29c20 2d 74 61 62 6c 65 2e 20 20 50 31 20 6d 75 73 74  -table.  P1 must
29c30 20 68 61 76 65 0a 2a 2a 20 62 65 65 6e 20 6f 70   have.** been op
29c40 65 6e 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68  ened prior to th
29c50 69 73 20 6f 70 63 6f 64 65 20 6f 72 20 74 68 65  is opcode or the
29c60 20 70 72 6f 67 72 61 6d 20 77 69 6c 6c 20 73 65   program will se
29c70 67 66 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  gfault..**.** Th
29c80 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 61 20  e P3 value is a 
29c90 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65  hint to the btre
29ca0 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
29cb0 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74  . If P3==1, that
29cc0 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20  .** means P1 is 
29cd0 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64  an SQL index and
29ce0 20 74 68 61 74 20 74 68 69 73 20 69 6e 73 74 72   that this instr
29cf0 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76  uction could hav
29d00 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65  e been.** omitte
29d10 64 20 69 66 20 74 68 61 74 20 69 6e 64 65 78 20  d if that index 
29d20 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e  had been unique.
29d30 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20    P3 is usually 
29d40 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77  0.  P3 is.** alw
29d50 61 79 73 20 65 69 74 68 65 72 20 30 20 6f 72 20  ays either 0 or 
29d60 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  1..**.** P4 is a
29d70 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50 34  lways of type P4
29d80 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75  _ADVANCE. The fu
29d90 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70  nction pointer p
29da0 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69  oints to.** sqli
29db0 74 65 33 42 74 72 65 65 4e 65 78 74 28 29 2e 0a  te3BtreeNext()..
29dc0 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70  **.** If P5 is p
29dd0 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68 65 20  ositive and the 
29de0 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74  jump is taken, t
29df0 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65  hen event counte
29e00 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31  r.** number P5-1
29e10 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
29e20 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e   statement is in
29e30 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a  cremented..**.**
29e40 20 53 65 65 20 61 6c 73 6f 3a 20 50 72 65 76 2c   See also: Prev,
29e50 20 4e 65 78 74 49 66 4f 70 65 6e 0a 2a 2f 0a 2f   NextIfOpen.*/./
29e60 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 49 66  * Opcode: NextIf
29e70 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20 50 34  Open P1 P2 P3 P4
29e80 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f   P5.**.** This o
29e90 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73 74  pcode works just
29ea0 20 6c 69 6b 65 20 4e 65 78 74 20 65 78 63 65 70   like Next excep
29eb0 74 20 74 68 61 74 20 69 66 20 63 75 72 73 6f 72  t that if cursor
29ec0 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70   P1 is not.** op
29ed0 65 6e 20 69 74 20 62 65 68 61 76 65 73 20 61 20  en it behaves a 
29ee0 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  no-op..*/./* Opc
29ef0 6f 64 65 3a 20 50 72 65 76 20 50 31 20 50 32 20  ode: Prev P1 P2 
29f00 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42  P3 P4 P5.**.** B
29f10 61 63 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31  ack up cursor P1
29f20 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
29f30 74 73 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f  ts to the previo
29f40 75 73 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72  us key/data pair
29f50 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65   in its.** table
29f60 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74   or index.  If t
29f70 68 65 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69  here is no previ
29f80 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61  ous key/value pa
29f90 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  irs then fall th
29fa0 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
29fb0 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
29fc0 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74  ction.  But if t
29fd0 68 65 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70  he cursor backup
29fe0 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c   was successful,
29ff0 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  .** jump immedia
2a000 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  tely to P2..**.*
2a010 2a 0a 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70  *.** The Prev op
2a020 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c  code is only val
2a030 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20  id following an 
2a040 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20  SeekLT, SeekLE, 
2a050 6f 72 0a 2a 2a 20 4f 50 5f 4c 61 73 74 20 6f 70  or.** OP_Last op
2a060 63 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73  code used to pos
2a070 69 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72  ition the cursor
2a080 2e 20 20 50 72 65 76 20 69 73 20 6e 6f 74 20 61  .  Prev is not a
2a090 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c  llowed.** to fol
2a0a0 6c 6f 77 20 53 65 65 6b 47 54 2c 20 53 65 65 6b  low SeekGT, Seek
2a0b0 47 45 2c 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64  GE, or OP_Rewind
2a0c0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63  ..**.** The P1 c
2a0d0 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f  ursor must be fo
2a0e0 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  r a real table, 
2a0f0 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
2a100 6c 65 2e 20 20 49 66 20 50 31 20 69 73 0a 2a 2a  le.  If P1 is.**
2a110 20 6e 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20 74   not open then t
2a120 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 75  he behavior is u
2a130 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20  ndefined..**.** 
2a140 54 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20  The P3 value is 
2a150 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74  a hint to the bt
2a160 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ree implementati
2a170 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68  on. If P3==1, th
2a180 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69  at.** means P1 i
2a190 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61  s an SQL index a
2a1a0 6e 64 20 74 68 61 74 20 74 68 69 73 20 69 6e 73  nd that this ins
2a1b0 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68  truction could h
2a1c0 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74  ave been.** omit
2a1d0 74 65 64 20 69 66 20 74 68 61 74 20 69 6e 64 65  ted if that inde
2a1e0 78 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75  x had been uniqu
2a1f0 65 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c  e.  P3 is usuall
2a200 79 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61  y 0.  P3 is.** a
2a210 6c 77 61 79 73 20 65 69 74 68 65 72 20 30 20 6f  lways either 0 o
2a220 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  r 1..**.** P4 is
2a230 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20   always of type 
2a240 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20  P4_ADVANCE. The 
2a250 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  function pointer
2a260 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71   points to.** sq
2a270 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f  lite3BtreePrevio
2a280 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  us()..**.** If P
2a290 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e  5 is positive an
2a2a0 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  d the jump is ta
2a2b0 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20  ken, then event 
2a2c0 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65  counter.** numbe
2a2d0 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72  r P5-1 in the pr
2a2e0 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
2a2f0 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e   is incremented.
2a300 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .*/./* Opcode: P
2a310 72 65 76 49 66 4f 70 65 6e 20 50 31 20 50 32 20  revIfOpen P1 P2 
2a320 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54  P3 P4 P5.**.** T
2a330 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73  his opcode works
2a340 20 6a 75 73 74 20 6c 69 6b 65 20 50 72 65 76 20   just like Prev 
2a350 65 78 63 65 70 74 20 74 68 61 74 20 69 66 20 63  except that if c
2a360 75 72 73 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a  ursor P1 is not.
2a370 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65 68 61 76  ** open it behav
2a380 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f  es a no-op..*/./
2a390 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72  * Opcode: Sorter
2a3a0 4e 65 78 74 20 50 31 20 50 32 20 2a 20 2a 20 50  Next P1 P2 * * P
2a3b0 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  5.**.** This opc
2a3c0 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  ode works just l
2a3d0 69 6b 65 20 4f 50 5f 4e 65 78 74 20 65 78 63 65  ike OP_Next exce
2a3e0 70 74 20 74 68 61 74 20 50 31 20 6d 75 73 74 20  pt that P1 must 
2a3f0 62 65 20 61 0a 2a 2a 20 73 6f 72 74 65 72 20 6f  be a.** sorter o
2a400 62 6a 65 63 74 20 66 6f 72 20 77 68 69 63 68 20  bject for which 
2a410 74 68 65 20 4f 50 5f 53 6f 72 74 65 72 53 6f 72  the OP_SorterSor
2a420 74 20 6f 70 63 6f 64 65 20 68 61 73 20 62 65 65  t opcode has bee
2a430 6e 0a 2a 2a 20 69 6e 76 6f 6b 65 64 2e 20 20 54  n.** invoked.  T
2a440 68 69 73 20 6f 70 63 6f 64 65 20 61 64 76 61 6e  his opcode advan
2a450 63 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 74  ces the cursor t
2a460 6f 20 74 68 65 20 6e 65 78 74 20 73 6f 72 74 65  o the next sorte
2a470 64 0a 2a 2a 20 72 65 63 6f 72 64 2c 20 6f 72 20  d.** record, or 
2a480 6a 75 6d 70 73 20 74 6f 20 50 32 20 69 66 20 74  jumps to P2 if t
2a490 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65  here are no more
2a4a0 20 73 6f 72 74 65 64 20 72 65 63 6f 72 64 73 2e   sorted records.
2a4b0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74  .*/.case OP_Sort
2a4c0 65 72 4e 65 78 74 3a 20 7b 20 20 2f 2a 20 6a 75  erNext: {  /* ju
2a4d0 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
2a4e0 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 43 20 3d 20  or *pC;..  pC = 
2a4f0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
2a500 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  ];.  assert( isS
2a510 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 72  orter(pC) );.  r
2a520 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
2a530 6f 72 74 65 72 4e 65 78 74 28 64 62 2c 20 70 43  orterNext(db, pC
2a540 29 3b 0a 20 20 67 6f 74 6f 20 6e 65 78 74 5f 74  );.  goto next_t
2a550 61 69 6c 3b 0a 63 61 73 65 20 4f 50 5f 50 72 65  ail;.case OP_Pre
2a560 76 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a 20 6a  vIfOpen:    /* j
2a570 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  ump */.case OP_N
2a580 65 78 74 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a  extIfOpen:    /*
2a590 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70   jump */.  if( p
2a5a0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
2a5b0 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f  ==0 ) break;.  /
2a5c0 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 2a  * Fall through *
2a5d0 2f 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 3a 20  /.case OP_Prev: 
2a5e0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
2a5f0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74   */.case OP_Next
2a600 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
2a610 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
2a620 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
2a630 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
2a640 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
2a650 70 2d 3e 70 35 3c 41 72 72 61 79 53 69 7a 65 28  p->p5<ArraySize(
2a660 70 2d 3e 61 43 6f 75 6e 74 65 72 29 20 29 3b 0a  p->aCounter) );.
2a670 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
2a680 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2a690 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
2a6a0 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
2a6b0 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
2a6c0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
2a6d0 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
2a6e0 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72  BTREE );.  asser
2a6f0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
2a700 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e  OP_Next || pOp->
2a710 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c  p4.xAdvance==sql
2a720 69 74 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b  ite3BtreeNext );
2a730 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2a740 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20  opcode!=OP_Prev 
2a750 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
2a760 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
2a770 65 50 72 65 76 69 6f 75 73 20 29 3b 0a 20 20 61  ePrevious );.  a
2a780 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
2a790 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65  de!=OP_NextIfOpe
2a7a0 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64  n || pOp->p4.xAd
2a7b0 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74  vance==sqlite3Bt
2a7c0 72 65 65 4e 65 78 74 20 29 3b 0a 20 20 61 73 73  reeNext );.  ass
2a7d0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
2a7e0 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 20  !=OP_PrevIfOpen 
2a7f0 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
2a800 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
2a810 65 50 72 65 76 69 6f 75 73 29 3b 0a 0a 20 20 2f  ePrevious);..  /
2a820 2a 20 54 68 65 20 4e 65 78 74 20 6f 70 63 6f 64  * The Next opcod
2a830 65 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 61  e is only used a
2a840 66 74 65 72 20 53 65 65 6b 47 54 2c 20 53 65 65  fter SeekGT, See
2a850 6b 47 45 2c 20 61 6e 64 20 52 65 77 69 6e 64 2e  kGE, and Rewind.
2a860 0a 20 20 2a 2a 20 54 68 65 20 50 72 65 76 20 6f  .  ** The Prev o
2a870 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73  pcode is only us
2a880 65 64 20 61 66 74 65 72 20 53 65 65 6b 4c 54 2c  ed after SeekLT,
2a890 20 53 65 65 6b 4c 45 2c 20 61 6e 64 20 4c 61 73   SeekLE, and Las
2a8a0 74 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  t. */.  assert( 
2a8b0 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
2a8c0 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  Next || pOp->opc
2a8d0 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70  ode!=OP_NextIfOp
2a8e0 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d  en.       || pC-
2a8f0 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b  >seekOp==OP_Seek
2a900 47 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70  GT || pC->seekOp
2a910 3d 3d 4f 50 5f 53 65 65 6b 47 45 0a 20 20 20 20  ==OP_SeekGE.    
2a920 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70     || pC->seekOp
2a930 3d 3d 4f 50 5f 52 65 77 69 6e 64 20 7c 7c 20 70  ==OP_Rewind || p
2a940 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 46 6f  C->seekOp==OP_Fo
2a950 75 6e 64 29 3b 0a 20 20 61 73 73 65 72 74 28 20  und);.  assert( 
2a960 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
2a970 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  Prev || pOp->opc
2a980 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70  ode!=OP_PrevIfOp
2a990 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d  en.       || pC-
2a9a0 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b  >seekOp==OP_Seek
2a9b0 4c 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70  LT || pC->seekOp
2a9c0 3d 3d 4f 50 5f 53 65 65 6b 4c 45 0a 20 20 20 20  ==OP_SeekLE.    
2a9d0 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70     || pC->seekOp
2a9e0 3d 3d 4f 50 5f 4c 61 73 74 20 29 3b 0a 0a 20 20  ==OP_Last );..  
2a9f0 72 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 78 41 64  rc = pOp->p4.xAd
2aa00 76 61 6e 63 65 28 70 43 2d 3e 75 63 2e 70 43 75  vance(pC->uc.pCu
2aa10 72 73 6f 72 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a  rsor, pOp->p3);.
2aa20 6e 65 78 74 5f 74 61 69 6c 3a 0a 20 20 70 43 2d  next_tail:.  pC-
2aa30 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
2aa40 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 56 64  ACHE_STALE;.  Vd
2aa50 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 63  beBranchTaken(rc
2aa60 3d 3d 53 51 4c 49 54 45 5f 4f 4b 2c 32 29 3b 0a  ==SQLITE_OK,2);.
2aa70 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
2aa80 5f 4f 4b 20 29 7b 0a 20 20 20 20 70 43 2d 3e 6e  _OK ){.    pC->n
2aa90 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20  ullRow = 0;.    
2aaa0 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d  p->aCounter[pOp-
2aab0 3e 70 35 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53  >p5]++;.#ifdef S
2aac0 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73  QLITE_TEST.    s
2aad0 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f  qlite3_search_co
2aae0 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20  unt++;.#endif.  
2aaf0 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
2ab00 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f  2_and_check_for_
2ab10 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 0a 20  interrupt;.  }. 
2ab20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
2ab30 44 4f 4e 45 20 29 20 67 6f 74 6f 20 61 62 6f 72  DONE ) goto abor
2ab40 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2ab50 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
2ab60 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
2ab70 3d 20 31 3b 0a 20 20 67 6f 74 6f 20 63 68 65 63  = 1;.  goto chec
2ab80 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b  k_for_interrupt;
2ab90 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
2aba0 64 78 49 6e 73 65 72 74 20 50 31 20 50 32 20 50  dxInsert P1 P2 P
2abb0 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
2abc0 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a 2a  sis: key=r[P2].*
2abd0 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 32  *.** Register P2
2abe0 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20 69 6e   holds an SQL in
2abf0 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75 73 69  dex key made usi
2ac00 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65  ng the.** MakeRe
2ac10 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e  cord instruction
2ac20 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20  s.  This opcode 
2ac30 77 72 69 74 65 73 20 74 68 61 74 20 6b 65 79 0a  writes that key.
2ac40 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e 64 65  ** into the inde
2ac50 78 20 50 31 2e 20 20 44 61 74 61 20 66 6f 72 20  x P1.  Data for 
2ac60 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e 69 6c  the entry is nil
2ac70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73  ..**.** If P4 is
2ac80 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
2ac90 69 74 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72  it is the number
2aca0 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 74 68   of values in th
2acb0 65 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 6b 65  e unpacked.** ke
2acc0 79 20 6f 66 20 72 65 67 28 50 32 29 2e 20 20 49  y of reg(P2).  I
2acd0 6e 20 74 68 61 74 20 63 61 73 65 2c 20 50 33 20  n that case, P3 
2ace0 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
2acf0 74 68 65 20 66 69 72 73 74 20 72 65 67 69 73 74  the first regist
2ad00 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 75 6e  er.** for the un
2ad10 70 61 63 6b 65 64 20 6b 65 79 2e 20 20 54 68 65  packed key.  The
2ad20 20 61 76 61 69 6c 61 62 69 6c 69 74 79 20 6f 66   availability of
2ad30 20 74 68 65 20 75 6e 70 61 63 6b 65 64 20 6b 65   the unpacked ke
2ad40 79 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65 73 0a  y can sometimes.
2ad50 2a 2a 20 62 65 20 61 6e 20 6f 70 74 69 6d 69 7a  ** be an optimiz
2ad60 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ation..**.** If 
2ad70 50 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41  P5 has the OPFLA
2ad80 47 5f 41 50 50 45 4e 44 20 62 69 74 20 73 65 74  G_APPEND bit set
2ad90 2c 20 74 68 61 74 20 69 73 20 61 20 68 69 6e 74  , that is a hint
2ada0 20 74 6f 20 74 68 65 20 62 2d 74 72 65 65 20 6c   to the b-tree l
2adb0 61 79 65 72 0a 2a 2a 20 74 68 61 74 20 74 68 69  ayer.** that thi
2adc0 73 20 69 6e 73 65 72 74 20 69 73 20 6c 69 6b 65  s insert is like
2add0 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65  ly to be an appe
2ade0 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  nd..**.** If P5 
2adf0 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e  has the OPFLAG_N
2ae00 43 48 41 4e 47 45 20 62 69 74 20 73 65 74 2c 20  CHANGE bit set, 
2ae10 74 68 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20  then the change 
2ae20 63 6f 75 6e 74 65 72 20 69 73 0a 2a 2a 20 69 6e  counter is.** in
2ae30 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 69  cremented by thi
2ae40 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  s instruction.  
2ae50 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  If the OPFLAG_NC
2ae60 48 41 4e 47 45 20 62 69 74 20 69 73 20 63 6c 65  HANGE bit is cle
2ae70 61 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20  ar,.** then the 
2ae80 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69  change counter i
2ae90 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2a 0a  s unchanged..**.
2aea0 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
2aeb0 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66  _USESEEKRESULT f
2aec0 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
2aed0 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  , the implementa
2aee0 74 69 6f 6e 20 6d 69 67 68 74 0a 2a 2a 20 72 75  tion might.** ru
2aef0 6e 20 66 61 73 74 65 72 20 62 79 20 61 76 6f 69  n faster by avoi
2af00 64 69 6e 67 20 61 6e 20 75 6e 6e 65 63 65 73 73  ding an unnecess
2af10 61 72 79 20 73 65 65 6b 20 6f 6e 20 63 75 72 73  ary seek on curs
2af20 6f 72 20 50 31 2e 20 20 48 6f 77 65 76 65 72 2c  or P1.  However,
2af30 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f 55  .** the OPFLAG_U
2af40 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61  SESEEKRESULT fla
2af50 67 20 6d 75 73 74 20 6f 6e 6c 79 20 62 65 20 73  g must only be s
2af60 65 74 20 69 66 20 74 68 65 72 65 20 68 61 76 65  et if there have
2af70 20 62 65 65 6e 20 6e 6f 20 70 72 69 6f 72 0a 2a   been no prior.*
2af80 2a 20 73 65 65 6b 73 20 6f 6e 20 74 68 65 20 63  * seeks on the c
2af90 75 72 73 6f 72 20 6f 72 20 69 66 20 74 68 65 20  ursor or if the 
2afa0 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 65 65 6b  most recent seek
2afb0 20 75 73 65 64 20 61 20 6b 65 79 20 65 71 75 69   used a key equi
2afc0 76 61 6c 65 6e 74 0a 2a 2a 20 74 6f 20 50 32 2e  valent.** to P2.
2afd0 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73   .**.** This ins
2afe0 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f  truction only wo
2aff0 72 6b 73 20 66 6f 72 20 69 6e 64 69 63 65 73 2e  rks for indices.
2b000 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74    The equivalent
2b010 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20   instruction.** 
2b020 66 6f 72 20 74 61 62 6c 65 73 20 69 73 20 4f 50  for tables is OP
2b030 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f  _Insert..*/./* O
2b040 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 49 6e 73  pcode: SorterIns
2b050 65 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ert P1 P2 * * *.
2b060 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
2b070 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67  =r[P2].**.** Reg
2b080 69 73 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61  ister P2 holds a
2b090 6e 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20  n SQL index key 
2b0a0 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a  made using the.*
2b0b0 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73  * MakeRecord ins
2b0c0 74 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73  tructions.  This
2b0d0 20 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20 74   opcode writes t
2b0e0 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20  hat key.** into 
2b0f0 74 68 65 20 73 6f 72 74 65 72 20 50 31 2e 20 20  the sorter P1.  
2b100 44 61 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74  Data for the ent
2b110 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2f 0a 63 61  ry is nil..*/.ca
2b120 73 65 20 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65  se OP_SorterInse
2b130 72 74 3a 20 20 20 20 20 20 20 2f 2a 20 69 6e 32  rt:       /* in2
2b140 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 49   */.case OP_IdxI
2b150 6e 73 65 72 74 3a 20 7b 20 20 20 20 20 20 20 20  nsert: {        
2b160 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65  /* in2 */.  Vdbe
2b170 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
2b180 72 65 65 50 61 79 6c 6f 61 64 20 78 3b 0a 0a 20  reePayload x;.. 
2b190 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2b1a0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
2b1b0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
2b1c0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
2b1d0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2b1e0 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
2b1f0 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
2b200 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  ==(pOp->opcode==
2b210 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 29  OP_SorterInsert)
2b220 20 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d   );.  pIn2 = &aM
2b230 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
2b240 73 73 65 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61  ssert( pIn2->fla
2b250 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
2b260 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
2b270 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
2b280 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a  ) p->nChange++;.
2b290 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
2b2a0 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
2b2b0 42 54 52 45 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70  BTREE || pOp->op
2b2c0 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49  code==OP_SorterI
2b2d0 6e 73 65 72 74 20 29 3b 0a 20 20 61 73 73 65 72  nsert );.  asser
2b2e0 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
2b2f0 30 20 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61  0 );.  rc = Expa
2b300 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20  ndBlob(pIn2);.  
2b310 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
2b320 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2b330 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
2b340 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e  ode==OP_SorterIn
2b350 73 65 72 74 20 29 7b 0a 20 20 20 20 72 63 20 3d  sert ){.    rc =
2b360 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
2b370 65 72 57 72 69 74 65 28 70 43 2c 20 70 49 6e 32  erWrite(pC, pIn2
2b380 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
2b390 78 2e 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e  x.nKey = pIn2->n
2b3a0 3b 0a 20 20 20 20 78 2e 70 4b 65 79 20 3d 20 70  ;.    x.pKey = p
2b3b0 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 78 2e 61 4d  In2->z;.    x.aM
2b3c0 65 6d 20 3d 20 61 4d 65 6d 20 2b 20 70 4f 70 2d  em = aMem + pOp-
2b3d0 3e 70 33 3b 0a 20 20 20 20 78 2e 6e 4d 65 6d 20  >p3;.    x.nMem 
2b3e0 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69  = (u16)pOp->p4.i
2b3f0 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
2b400 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43  e3BtreeInsert(pC
2b410 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 78  ->uc.pCursor, &x
2b420 2c 0a 20 20 20 20 20 20 20 20 20 28 70 4f 70 2d  ,.         (pOp-
2b430 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 41 50  >p5 & (OPFLAG_AP
2b440 50 45 4e 44 7c 4f 50 46 4c 41 47 5f 53 41 56 45  PEND|OPFLAG_SAVE
2b450 50 4f 53 49 54 49 4f 4e 29 29 2c 20 0a 20 20 20  POSITION)), .   
2b460 20 20 20 20 20 28 28 70 4f 70 2d 3e 70 35 20 26       ((pOp->p5 &
2b470 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
2b480 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65  ESULT) ? pC->see
2b490 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a 20 20 20  kResult : 0).   
2b4a0 20 20 20 20 20 29 3b 0a 20 20 20 20 61 73 73 65       );.    asse
2b4b0 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
2b4c0 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20  Moveto==0 );.   
2b4d0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
2b4e0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
2b4f0 20 20 7d 0a 20 20 69 66 28 20 72 63 29 20 67 6f    }.  if( rc) go
2b500 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2b510 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
2b520 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  }../* Opcode: Id
2b530 78 44 65 6c 65 74 65 20 50 31 20 50 32 20 50 33  xDelete P1 P2 P3
2b540 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2b550 3a 20 6b 65 79 3d 72 5b 50 32 40 50 33 5d 0a 2a  : key=r[P2@P3].*
2b560 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74  *.** The content
2b570 20 6f 66 20 50 33 20 72 65 67 69 73 74 65 72 73   of P3 registers
2b580 20 73 74 61 72 74 69 6e 67 20 61 74 20 72 65 67   starting at reg
2b590 69 73 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a  ister P2 form.**
2b5a0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
2b5b0 65 78 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63  ex key. This opc
2b5c0 6f 64 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74  ode removes that
2b5d0 20 65 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20   entry from the 
2b5e0 0a 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64  .** index opened
2b5f0 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a   by cursor P1..*
2b600 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c  /.case OP_IdxDel
2b610 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ete: {.  VdbeCur
2b620 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
2b630 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
2b640 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65  t res;.  Unpacke
2b650 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73  dRecord r;..  as
2b660 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
2b670 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
2b680 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
2b690 32 2b 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  2+pOp->p3<=(p->n
2b6a0 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
2b6b0 6f 72 29 2b 31 20 29 3b 0a 20 20 61 73 73 65 72  or)+1 );.  asser
2b6c0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
2b6d0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
2b6e0 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
2b6f0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2b700 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
2b710 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2b720 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
2b730 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70  YPE_BTREE );.  p
2b740 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43  Crsr = pC->uc.pC
2b750 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28  ursor;.  assert(
2b760 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 61   pCrsr!=0 );.  a
2b770 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d  ssert( pOp->p5==
2b780 30 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66  0 );.  r.pKeyInf
2b790 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  o = pC->pKeyInfo
2b7a0 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28  ;.  r.nField = (
2b7b0 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 72  u16)pOp->p3;.  r
2b7c0 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b  .default_rc = 0;
2b7d0 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65  .  r.aMem = &aMe
2b7e0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 72 63  m[pOp->p2];.  rc
2b7f0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
2b800 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
2b810 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26  rsr, &r, 0, 0, &
2b820 72 65 73 29 3b 0a 20 20 69 66 28 20 72 63 20 29  res);.  if( rc )
2b830 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2b840 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20  to_error;.  if( 
2b850 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63  res==0 ){.    rc
2b860 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
2b870 65 6c 65 74 65 28 70 43 72 73 72 2c 20 42 54 52  elete(pCrsr, BTR
2b880 45 45 5f 41 55 58 44 45 4c 45 54 45 29 3b 0a 20  EE_AUXDELETE);. 
2b890 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
2b8a0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2b8b0 72 6f 72 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  ror;.  }.  asser
2b8c0 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
2b8d0 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 70 43  oveto==0 );.  pC
2b8e0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
2b8f0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70  CACHE_STALE;.  p
2b900 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  C->seekResult = 
2b910 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  0;.  break;.}../
2b920 2a 20 4f 70 63 6f 64 65 3a 20 44 65 66 65 72 72  * Opcode: Deferr
2b930 65 64 53 65 65 6b 20 50 31 20 2a 20 50 33 20 50  edSeek P1 * P3 P
2b940 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
2b950 20 4d 6f 76 65 20 50 33 20 74 6f 20 50 31 2e 72   Move P3 to P1.r
2b960 6f 77 69 64 20 69 66 20 6e 65 65 64 65 64 0a 2a  owid if needed.*
2b970 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20 6f 70  *.** P1 is an op
2b980 65 6e 20 69 6e 64 65 78 20 63 75 72 73 6f 72 20  en index cursor 
2b990 61 6e 64 20 50 33 20 69 73 20 61 20 63 75 72 73  and P3 is a curs
2b9a0 6f 72 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73  or on the corres
2b9b0 70 6f 6e 64 69 6e 67 0a 2a 2a 20 74 61 62 6c 65  ponding.** table
2b9c0 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64  .  This opcode d
2b9d0 6f 65 73 20 61 20 64 65 66 65 72 72 65 64 20 73  oes a deferred s
2b9e0 65 65 6b 20 6f 66 20 74 68 65 20 50 33 20 74 61  eek of the P3 ta
2b9f0 62 6c 65 20 63 75 72 73 6f 72 0a 2a 2a 20 74 6f  ble cursor.** to
2ba00 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 63 6f   the row that co
2ba10 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
2ba20 20 63 75 72 72 65 6e 74 20 72 6f 77 20 6f 66 20   current row of 
2ba30 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  P1..**.** This i
2ba40 73 20 61 20 64 65 66 65 72 72 65 64 20 73 65 65  s a deferred see
2ba50 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63 74 75  k.  Nothing actu
2ba60 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 75 6e 74  ally happens unt
2ba70 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72  il.** the cursor
2ba80 20 69 73 20 75 73 65 64 20 74 6f 20 72 65 61 64   is used to read
2ba90 20 61 20 72 65 63 6f 72 64 2e 20 20 54 68 61 74   a record.  That
2baa0 20 77 61 79 2c 20 69 66 20 6e 6f 20 72 65 61 64   way, if no read
2bab0 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75  s.** occur, no u
2bac0 6e 6e 65 63 65 73 73 61 72 79 20 49 2f 4f 20 68  nnecessary I/O h
2bad0 61 70 70 65 6e 73 2e 0a 2a 2a 0a 2a 2a 20 50 34  appens..**.** P4
2bae0 20 6d 61 79 20 62 65 20 61 6e 20 61 72 72 61 79   may be an array
2baf0 20 6f 66 20 69 6e 74 65 67 65 72 73 20 28 74 79   of integers (ty
2bb00 70 65 20 50 34 5f 49 4e 54 41 52 52 41 59 29 20  pe P4_INTARRAY) 
2bb10 63 6f 6e 74 61 69 6e 69 6e 67 0a 2a 2a 20 6f 6e  containing.** on
2bb20 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68  e entry for each
2bb30 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 50   column in the P
2bb40 33 20 74 61 62 6c 65 2e 20 20 49 66 20 61 72 72  3 table.  If arr
2bb50 61 79 20 65 6e 74 72 79 20 61 28 69 29 0a 2a 2a  ay entry a(i).**
2bb60 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
2bb70 65 6e 20 72 65 61 64 69 6e 67 20 63 6f 6c 75 6d  en reading colum
2bb80 6e 20 61 28 69 29 2d 31 20 66 72 6f 6d 20 63 75  n a(i)-1 from cu
2bb90 72 73 6f 72 20 50 33 20 69 73 20 0a 2a 2a 20 65  rsor P3 is .** e
2bba0 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 70 65 72  quivalent to per
2bbb0 66 6f 72 6d 69 6e 67 20 74 68 65 20 64 65 66 65  forming the defe
2bbc0 72 72 65 64 20 73 65 65 6b 20 61 6e 64 20 74 68  rred seek and th
2bbd0 65 6e 20 72 65 61 64 69 6e 67 20 63 6f 6c 75 6d  en reading colum
2bbe0 6e 20 69 20 0a 2a 2a 20 66 72 6f 6d 20 50 31 2e  n i .** from P1.
2bbf0 20 20 54 68 69 73 20 69 6e 66 6f 72 6d 61 74 69    This informati
2bc00 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  on is stored in 
2bc10 50 33 20 61 6e 64 20 75 73 65 64 20 74 6f 20 72  P3 and used to r
2bc20 65 64 69 72 65 63 74 0a 2a 2a 20 72 65 61 64 73  edirect.** reads
2bc30 20 61 67 61 69 6e 73 74 20 50 33 20 6f 76 65 72   against P3 over
2bc40 20 74 6f 20 50 31 2c 20 74 68 75 73 20 70 6f 73   to P1, thus pos
2bc50 73 69 62 6c 79 20 61 76 6f 69 64 69 6e 67 20 74  sibly avoiding t
2bc60 68 65 20 6e 65 65 64 20 74 6f 0a 2a 2a 20 73 65  he need to.** se
2bc70 65 6b 20 61 6e 64 20 72 65 61 64 20 63 75 72 73  ek and read curs
2bc80 6f 72 20 50 33 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  or P3..*/./* Opc
2bc90 6f 64 65 3a 20 49 64 78 52 6f 77 69 64 20 50 31  ode: IdxRowid P1
2bca0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
2bcb0 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77  opsis: r[P2]=row
2bcc0 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69  id.**.** Write i
2bcd0 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20  nto register P2 
2bce0 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68  an integer which
2bcf0 20 69 73 20 74 68 65 20 6c 61 73 74 20 65 6e 74   is the last ent
2bd00 72 79 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ry in the record
2bd10 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f   at.** the end o
2bd20 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 20  f the index key 
2bd30 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20 63 75  pointed to by cu
2bd40 72 73 6f 72 20 50 31 2e 20 20 54 68 69 73 20 69  rsor P1.  This i
2bd50 6e 74 65 67 65 72 20 73 68 6f 75 6c 64 20 62 65  nteger should be
2bd60 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64 20 6f 66  .** the rowid of
2bd70 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79   the table entry
2bd80 20 74 6f 20 77 68 69 63 68 20 74 68 69 73 20 69   to which this i
2bd90 6e 64 65 78 20 65 6e 74 72 79 20 70 6f 69 6e 74  ndex entry point
2bda0 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  s..**.** See als
2bdb0 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65 52 65  o: Rowid, MakeRe
2bdc0 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  cord..*/.case OP
2bdd0 5f 44 65 66 65 72 72 65 64 53 65 65 6b 3a 0a 63  _DeferredSeek:.c
2bde0 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a  ase OP_IdxRowid:
2bdf0 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
2be00 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62 65 43 75  out2 */.  VdbeCu
2be10 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20 20 20  rsor *pC;       
2be20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 31 20        /* The P1 
2be30 69 6e 64 65 78 20 63 75 72 73 6f 72 20 2a 2f 0a  index cursor */.
2be40 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 54    VdbeCursor *pT
2be50 61 62 43 75 72 3b 20 20 20 20 20 20 20 20 2f 2a  abCur;        /*
2be60 20 54 68 65 20 50 32 20 74 61 62 6c 65 20 63 75   The P2 table cu
2be70 72 73 6f 72 20 28 4f 50 5f 44 65 66 65 72 72 65  rsor (OP_Deferre
2be80 64 53 65 65 6b 20 6f 6e 6c 79 29 20 2a 2f 0a 20  dSeek only) */. 
2be90 20 69 36 34 20 72 6f 77 69 64 3b 20 20 20 20 20   i64 rowid;     
2bea0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2beb0 52 6f 77 69 64 20 74 68 61 74 20 50 31 20 63 75  Rowid that P1 cu
2bec0 72 72 65 6e 74 20 70 6f 69 6e 74 73 20 74 6f 20  rrent points to 
2bed0 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  */..  assert( pO
2bee0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
2bef0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
2bf00 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
2bf10 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
2bf20 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
2bf30 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
2bf40 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
2bf50 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74  TREE );.  assert
2bf60 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  ( pC->uc.pCursor
2bf70 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
2bf80 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
2bf90 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
2bfa0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
2bfb0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2bfc0 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 7c 7c 20  !pC->nullRow || 
2bfd0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2bfe0 49 64 78 52 6f 77 69 64 20 29 3b 0a 0a 20 20 2f  IdxRowid );..  /
2bff0 2a 20 54 68 65 20 49 64 78 52 6f 77 69 64 20 61  * The IdxRowid a
2c000 6e 64 20 53 65 65 6b 20 6f 70 63 6f 64 65 73 20  nd Seek opcodes 
2c010 61 72 65 20 63 6f 6d 62 69 6e 65 64 20 62 65 63  are combined bec
2c020 61 75 73 65 20 6f 66 20 74 68 65 20 63 6f 6d 6d  ause of the comm
2c030 6f 6e 61 6c 69 74 79 0a 20 20 2a 2a 20 6f 66 20  onality.  ** of 
2c040 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
2c050 72 52 65 73 74 6f 72 65 28 29 20 61 6e 64 20 73  rRestore() and s
2c060 71 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f 77  qlite3VdbeIdxRow
2c070 69 64 28 29 2e 20 2a 2f 0a 20 20 72 63 20 3d 20  id(). */.  rc = 
2c080 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
2c090 72 52 65 73 74 6f 72 65 28 70 43 29 3b 0a 0a 20  rRestore(pC);.. 
2c0a0 20 2f 2a 20 73 71 6c 69 74 65 33 56 62 65 43 75   /* sqlite3VbeCu
2c0b0 72 73 6f 72 52 65 73 74 6f 72 65 28 29 20 63 61  rsorRestore() ca
2c0c0 6e 20 6f 6e 6c 79 20 66 61 69 6c 20 69 66 20 74  n only fail if t
2c0d0 68 65 20 72 65 63 6f 72 64 20 68 61 73 20 62 65  he record has be
2c0e0 65 6e 20 64 65 6c 65 74 65 64 0a 20 20 2a 2a 20  en deleted.  ** 
2c0f0 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65 72 20 74  out from under t
2c100 68 65 20 63 75 72 73 6f 72 2e 20 20 54 68 61 74  he cursor.  That
2c110 20 77 69 6c 6c 20 6e 65 76 65 72 20 68 61 70 70   will never happ
2c120 65 6e 73 20 66 6f 72 20 61 6e 20 49 64 78 52 6f  ens for an IdxRo
2c130 77 69 64 0a 20 20 2a 2a 20 6f 72 20 53 65 65 6b  wid.  ** or Seek
2c140 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69 66 28   opcode */.  if(
2c150 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54   NEVER(rc!=SQLIT
2c160 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f  E_OK) ) goto abo
2c170 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2c180 0a 0a 20 20 69 66 28 20 21 70 43 2d 3e 6e 75 6c  ..  if( !pC->nul
2c190 6c 52 6f 77 20 29 7b 0a 20 20 20 20 72 6f 77 69  lRow ){.    rowi
2c1a0 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e  d = 0;  /* Not n
2c1b0 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65  eeded.  Only use
2c1c0 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77  d to silence a w
2c1d0 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72  arning. */.    r
2c1e0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  c = sqlite3VdbeI
2c1f0 64 78 52 6f 77 69 64 28 64 62 2c 20 70 43 2d 3e  dxRowid(db, pC->
2c200 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 6f 77  uc.pCursor, &row
2c210 69 64 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21  id);.    if( rc!
2c220 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
2c230 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
2c240 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
2c250 20 7d 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e   }.    if( pOp->
2c260 6f 70 63 6f 64 65 3d 3d 4f 50 5f 44 65 66 65 72  opcode==OP_Defer
2c270 72 65 64 53 65 65 6b 20 29 7b 0a 20 20 20 20 20  redSeek ){.     
2c280 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
2c290 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 70  >=0 && pOp->p3<p
2c2a0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 20  ->nCursor );.   
2c2b0 20 20 20 70 54 61 62 43 75 72 20 3d 20 70 2d 3e     pTabCur = p->
2c2c0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  apCsr[pOp->p3];.
2c2d0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 54        assert( pT
2c2e0 61 62 43 75 72 21 3d 30 20 29 3b 0a 20 20 20 20  abCur!=0 );.    
2c2f0 20 20 61 73 73 65 72 74 28 20 70 54 61 62 43 75    assert( pTabCu
2c300 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  r->eCurType==CUR
2c310 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
2c320 20 20 20 20 61 73 73 65 72 74 28 20 70 54 61 62      assert( pTab
2c330 43 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21  Cur->uc.pCursor!
2c340 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  =0 );.      asse
2c350 72 74 28 20 70 54 61 62 43 75 72 2d 3e 69 73 54  rt( pTabCur->isT
2c360 61 62 6c 65 20 29 3b 0a 20 20 20 20 20 20 70 54  able );.      pT
2c370 61 62 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  abCur->nullRow =
2c380 20 30 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75   0;.      pTabCu
2c390 72 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20  r->movetoTarget 
2c3a0 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 20 20 70  = rowid;.      p
2c3b0 54 61 62 43 75 72 2d 3e 64 65 66 65 72 72 65 64  TabCur->deferred
2c3c0 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20 20 20 20  Moveto = 1;.    
2c3d0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2c3e0 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52  4type==P4_INTARR
2c3f0 41 59 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 61 69  AY || pOp->p4.ai
2c400 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 70 54 61  ==0 );.      pTa
2c410 62 43 75 72 2d 3e 61 41 6c 74 4d 61 70 20 3d 20  bCur->aAltMap = 
2c420 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 20 20  pOp->p4.ai;.    
2c430 20 20 70 54 61 62 43 75 72 2d 3e 70 41 6c 74 43    pTabCur->pAltC
2c440 75 72 73 6f 72 20 3d 20 70 43 3b 0a 20 20 20 20  ursor = pC;.    
2c450 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 4f 75  }else{.      pOu
2c460 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
2c470 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 20 20  se(p, pOp);.    
2c480 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f    pOut->u.i = ro
2c490 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  wid;.    }.  }el
2c4a0 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
2c4b0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2c4c0 49 64 78 52 6f 77 69 64 20 29 3b 0a 20 20 20 20  IdxRowid );.    
2c4d0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2c4e0 74 4e 75 6c 6c 28 26 61 4d 65 6d 5b 70 4f 70 2d  tNull(&aMem[pOp-
2c4f0 3e 70 32 5d 29 3b 0a 20 20 7d 0a 20 20 62 72 65  >p2]);.  }.  bre
2c500 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2c510 3a 20 49 64 78 47 45 20 50 31 20 50 32 20 50 33  : IdxGE P1 P2 P3
2c520 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
2c530 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
2c540 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65  .**.** The P4 re
2c550 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65  gister values be
2c560 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20  ginning with P3 
2c570 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
2c580 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74   index .** key t
2c590 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52  hat omits the PR
2c5a0 49 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70  IMARY KEY.  Comp
2c5b0 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c  are this key val
2c5c0 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20 69  ue against the i
2c5d0 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31  ndex .** that P1
2c5e0 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
2c5f0 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72  inting to, ignor
2c600 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20  ing the PRIMARY 
2c610 4b 45 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a  KEY or ROWID .**
2c620 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20 65   fields at the e
2c630 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  nd..**.** If the
2c640 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20   P1 index entry 
2c650 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
2c660 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
2c670 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65  key value.** the
2c680 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f  n jump to P2.  O
2c690 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68  therwise fall th
2c6a0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
2c6b0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
2c6c0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  /./* Opcode: Idx
2c6d0 47 54 20 50 31 20 50 32 20 50 33 20 50 34 20 50  GT P1 P2 P3 P4 P
2c6e0 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  5.** Synopsis: k
2c6f0 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
2c700 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65  * The P4 registe
2c710 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69  r values beginni
2c720 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20  ng with P3 form 
2c730 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
2c740 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f  x .** key that o
2c750 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59  mits the PRIMARY
2c760 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65 20 74   KEY.  Compare t
2c770 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
2c780 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20  ainst the index 
2c790 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20 63  .** that P1 is c
2c7a0 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
2c7b0 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74  g to, ignoring t
2c7c0 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f  he PRIMARY KEY o
2c7d0 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c  r ROWID .** fiel
2c7e0 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a  ds at the end..*
2c7f0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69  *.** If the P1 i
2c800 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 67 72  ndex entry is gr
2c810 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b  eater than the k
2c820 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e  ey value.** then
2c830 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74   jump to P2.  Ot
2c840 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72  herwise fall thr
2c850 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
2c860 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
2c870 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c  ./* Opcode: IdxL
2c880 54 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  T P1 P2 P3 P4 P5
2c890 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
2c8a0 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
2c8b0 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72   The P4 register
2c8c0 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e   values beginnin
2c8d0 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61  g with P3 form a
2c8e0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
2c8f0 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d   .** key that om
2c900 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20  its the PRIMARY 
2c910 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20 43  KEY or ROWID.  C
2c920 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
2c930 76 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a  value against.**
2c940 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20   the index that 
2c950 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
2c960 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e  pointing to, ign
2c970 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52  oring the PRIMAR
2c980 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49  Y KEY or.** ROWI
2c990 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65  D on the P1 inde
2c9a0 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  x..**.** If the 
2c9b0 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69  P1 index entry i
2c9c0 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20  s less than the 
2c9d0 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a  key value then j
2c9e0 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74  ump to P2..** Ot
2c9f0 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72  herwise fall thr
2ca00 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
2ca10 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
2ca20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c  ./* Opcode: IdxL
2ca30 45 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  E P1 P2 P3 P4 P5
2ca40 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
2ca50 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
2ca60 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72   The P4 register
2ca70 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e   values beginnin
2ca80 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61  g with P3 form a
2ca90 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
2caa0 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d   .** key that om
2cab0 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20  its the PRIMARY 
2cac0 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20 43  KEY or ROWID.  C
2cad0 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
2cae0 76 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a  value against.**
2caf0 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20   the index that 
2cb00 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
2cb10 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e  pointing to, ign
2cb20 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52  oring the PRIMAR
2cb30 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49  Y KEY or.** ROWI
2cb40 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65  D on the P1 inde
2cb50 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  x..**.** If the 
2cb60 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69  P1 index entry i
2cb70 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  s less than or e
2cb80 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
2cb90 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 0a  value then jump.
2cba0 2a 2a 20 74 6f 20 50 32 2e 20 4f 74 68 65 72 77  ** to P2. Otherw
2cbb0 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ise fall through
2cbc0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
2cbd0 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
2cbe0 65 20 4f 50 5f 49 64 78 4c 45 3a 20 20 20 20 20  e OP_IdxLE:     
2cbf0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
2cc00 63 61 73 65 20 4f 50 5f 49 64 78 47 54 3a 20 20  case OP_IdxGT:  
2cc10 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
2cc20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 54  */.case OP_IdxLT
2cc30 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
2cc40 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  mp */.case OP_Id
2cc50 78 47 45 3a 20 20 7b 20 20 20 20 20 20 20 2f 2a  xGE:  {       /*
2cc60 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
2cc70 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74  ursor *pC;.  int
2cc80 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64   res;.  Unpacked
2cc90 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73  Record r;..  ass
2cca0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2ccb0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
2ccc0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
2ccd0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
2cce0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
2ccf0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2cd00 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b  pC->isOrdered );
2cd10 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
2cd20 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
2cd30 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65  _BTREE );.  asse
2cd40 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  rt( pC->uc.pCurs
2cd50 6f 72 21 3d 30 29 3b 0a 20 20 61 73 73 65 72 74  or!=0);.  assert
2cd60 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
2cd70 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73  veto==0 );.  ass
2cd80 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  ert( pOp->p5==0 
2cd90 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b  || pOp->p5==1 );
2cda0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2cdb0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
2cdc0 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f   );.  r.pKeyInfo
2cdd0 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b   = pC->pKeyInfo;
2cde0 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75  .  r.nField = (u
2cdf0 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20  16)pOp->p4.i;.  
2ce00 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3c  if( pOp->opcode<
2ce10 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20 20  OP_IdxLT ){.    
2ce20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
2ce30 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c  ode==OP_IdxLE ||
2ce40 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
2ce50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20 72 2e  _IdxGT );.    r.
2ce60 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b  default_rc = -1;
2ce70 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
2ce80 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
2ce90 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70  e==OP_IdxGE || p
2cea0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
2ceb0 64 78 4c 54 20 29 3b 0a 20 20 20 20 72 2e 64 65  dxLT );.    r.de
2cec0 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20  fault_rc = 0;.  
2ced0 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d  }.  r.aMem = &aM
2cee0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66  em[pOp->p3];.#if
2cef0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
2cf00 0a 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28  .  { int i; for(
2cf10 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b  i=0; i<r.nField;
2cf20 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65   i++) assert( me
2cf30 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
2cf40 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66  [i]) ); }.#endif
2cf50 0a 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20  .  res = 0;  /* 
2cf60 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c  Not needed.  Onl
2cf70 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63  y used to silenc
2cf80 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  e a warning. */.
2cf90 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
2cfa0 62 65 49 64 78 4b 65 79 43 6f 6d 70 61 72 65 28  beIdxKeyCompare(
2cfb0 64 62 2c 20 70 43 2c 20 26 72 2c 20 26 72 65 73  db, pC, &r, &res
2cfc0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 4f 50  );.  assert( (OP
2cfd0 5f 49 64 78 4c 45 26 31 29 3d 3d 28 4f 50 5f 49  _IdxLE&1)==(OP_I
2cfe0 64 78 4c 54 26 31 29 20 26 26 20 28 4f 50 5f 49  dxLT&1) && (OP_I
2cff0 64 78 47 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78  dxGE&1)==(OP_Idx
2d000 47 54 26 31 29 20 29 3b 0a 20 20 69 66 28 20 28  GT&1) );.  if( (
2d010 70 4f 70 2d 3e 6f 70 63 6f 64 65 26 31 29 3d 3d  pOp->opcode&1)==
2d020 28 4f 50 5f 49 64 78 4c 54 26 31 29 20 29 7b 0a  (OP_IdxLT&1) ){.
2d030 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
2d040 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c  >opcode==OP_IdxL
2d050 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  E || pOp->opcode
2d060 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20  ==OP_IdxLT );.  
2d070 20 20 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20    res = -res;.  
2d080 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
2d090 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
2d0a0 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d  OP_IdxGE || pOp-
2d0b0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47  >opcode==OP_IdxG
2d0c0 54 20 29 3b 0a 20 20 20 20 72 65 73 2b 2b 3b 0a  T );.    res++;.
2d0d0 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68    }.  VdbeBranch
2d0e0 54 61 6b 65 6e 28 72 65 73 3e 30 2c 32 29 3b 0a  Taken(res>0,2);.
2d0f0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2d100 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2d110 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 3e 30 20  or;.  if( res>0 
2d120 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
2d130 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  2;.  break;.}../
2d140 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72 6f  * Opcode: Destro
2d150 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  y P1 P2 P3 * *.*
2d160 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20 65  *.** Delete an e
2d170 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 20 74  ntire database t
2d180 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68  able or index wh
2d190 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 6e  ose root page in
2d1a0 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
2d1b0 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62   file is given b
2d1c0 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  y P1..**.** The 
2d1d0 74 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73 74  table being dest
2d1e0 72 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65 20  royed is in the 
2d1f0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
2d200 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49 66  le if P3==0.  If
2d210 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20 74  .** P3==1 then t
2d220 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63  he table to be c
2d230 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61  lear is in the a
2d240 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
2d250 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69  e file.** that i
2d260 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
2d270 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73  tables create us
2d280 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f  ing CREATE TEMPO
2d290 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a  RARY TABLE..**.*
2d2a0 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20  * If AUTOVACUUM 
2d2b0 69 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e 20  is enabled then 
2d2c0 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74  it is possible t
2d2d0 68 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74  hat another root
2d2e0 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62   page.** might b
2d2f0 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65  e moved into the
2d300 20 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20 72   newly deleted r
2d310 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64 65  oot page in orde
2d320 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a  r to keep all.**
2d330 20 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e 74   root pages cont
2d340 69 67 75 6f 75 73 20 61 74 20 74 68 65 20 62 65  iguous at the be
2d350 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64  ginning of the d
2d360 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 66 6f  atabase.  The fo
2d370 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66  rmer.** value of
2d380 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 74   the root page t
2d390 68 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73 20  hat moved - its 
2d3a0 76 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68 65  value before the
2d3b0 20 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20 2d   move occurred -
2d3c0 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e  .** is stored in
2d3d0 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 49 66   register P2. If
2d3e0 20 6e 6f 20 70 61 67 65 20 6d 6f 76 65 6d 65 6e   no page movemen
2d3f0 74 20 77 61 73 20 72 65 71 75 69 72 65 64 20 28  t was required (
2d400 62 65 63 61 75 73 65 20 74 68 65 0a 2a 2a 20 74  because the.** t
2d410 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f 70 70  able being dropp
2d420 65 64 20 77 61 73 20 61 6c 72 65 61 64 79 20 74  ed was already t
2d430 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74  he last one in t
2d440 68 65 20 64 61 74 61 62 61 73 65 29 20 74 68 65  he database) the
2d450 6e 20 61 20 0a 2a 2a 20 7a 65 72 6f 20 69 73 20  n a .** zero is 
2d460 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
2d470 65 72 20 50 32 2e 20 20 49 66 20 41 55 54 4f 56  er P2.  If AUTOV
2d480 41 43 55 55 4d 20 69 73 20 64 69 73 61 62 6c 65  ACUUM is disable
2d490 64 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 0a 2a  d then a zero .*
2d4a0 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  * is stored in r
2d4b0 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
2d4c0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 74 68  * This opcode th
2d4d0 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66  rows an error if
2d4e0 20 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 61   there are any a
2d4f0 63 74 69 76 65 20 72 65 61 64 65 72 20 56 4d 73  ctive reader VMs
2d500 20 77 68 65 6e 0a 2a 2a 20 69 74 20 69 73 20 69   when.** it is i
2d510 6e 76 6f 6b 65 64 2e 20 54 68 69 73 20 69 73 20  nvoked. This is 
2d520 64 6f 6e 65 20 74 6f 20 61 76 6f 69 64 20 74 68  done to avoid th
2d530 65 20 64 69 66 66 69 63 75 6c 74 79 20 61 73 73  e difficulty ass
2d540 6f 63 69 61 74 65 64 20 77 69 74 68 20 0a 2a 2a  ociated with .**
2d550 20 75 70 64 61 74 69 6e 67 20 65 78 69 73 74 69   updating existi
2d560 6e 67 20 63 75 72 73 6f 72 73 20 77 68 65 6e 20  ng cursors when 
2d570 61 20 72 6f 6f 74 20 70 61 67 65 20 69 73 20 6d  a root page is m
2d580 6f 76 65 64 20 69 6e 20 61 6e 20 41 55 54 4f 56  oved in an AUTOV
2d590 41 43 55 55 4d 20 0a 2a 2a 20 64 61 74 61 62 61  ACUUM .** databa
2d5a0 73 65 2e 20 54 68 69 73 20 65 72 72 6f 72 20 69  se. This error i
2d5b0 73 20 74 68 72 6f 77 6e 20 65 76 65 6e 20 69 66  s thrown even if
2d5c0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
2d5d0 20 6e 6f 74 20 61 6e 20 41 55 54 4f 56 41 43 55   not an AUTOVACU
2d5e0 55 4d 20 0a 2a 2a 20 64 62 20 69 6e 20 6f 72 64  UM .** db in ord
2d5f0 65 72 20 74 6f 20 61 76 6f 69 64 20 69 6e 74 72  er to avoid intr
2d600 6f 64 75 63 69 6e 67 20 61 6e 20 69 6e 63 6f 6d  oducing an incom
2d610 70 61 74 69 62 69 6c 69 74 79 20 62 65 74 77 65  patibility betwe
2d620 65 6e 20 61 75 74 6f 76 61 63 75 75 6d 20 0a 2a  en autovacuum .*
2d630 2a 20 61 6e 64 20 6e 6f 6e 2d 61 75 74 6f 76 61  * and non-autova
2d640 63 75 75 6d 20 6d 6f 64 65 73 2e 0a 2a 2a 0a 2a  cuum modes..**.*
2d650 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61  * See also: Clea
2d660 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73  r.*/.case OP_Des
2d670 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f  troy: {     /* o
2d680 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f  ut2 */.  int iMo
2d690 76 65 64 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a  ved;.  int iDb;.
2d6a0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
2d6b0 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61  adOnly==0 );.  a
2d6c0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 31  ssert( pOp->p1>1
2d6d0 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74   );.  pOut = out
2d6e0 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
2d6f0 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  Op);.  pOut->fla
2d700 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
2d710 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 52 65   if( db->nVdbeRe
2d720 61 64 20 3e 20 64 62 2d 3e 6e 56 44 65 73 74 72  ad > db->nVDestr
2d730 6f 79 2b 31 20 29 7b 0a 20 20 20 20 72 63 20 3d  oy+1 ){.    rc =
2d740 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a   SQLITE_LOCKED;.
2d750 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69      p->errorActi
2d760 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a 20  on = OE_Abort;. 
2d770 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
2d780 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 65  e_to_error;.  }e
2d790 6c 73 65 7b 0a 20 20 20 20 69 44 62 20 3d 20 70  lse{.    iDb = p
2d7a0 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73 73 65  Op->p3;.    asse
2d7b0 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
2d7c0 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62  ->btreeMask, iDb
2d7d0 29 20 29 3b 0a 20 20 20 20 69 4d 6f 76 65 64 20  ) );.    iMoved 
2d7e0 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65  = 0;  /* Not nee
2d7f0 64 65 64 2e 20 20 4f 6e 6c 79 20 74 6f 20 73 69  ded.  Only to si
2d800 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e  lence a warning.
2d810 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   */.    rc = sql
2d820 69 74 65 33 42 74 72 65 65 44 72 6f 70 54 61 62  ite3BtreeDropTab
2d830 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  le(db->aDb[iDb].
2d840 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69  pBt, pOp->p1, &i
2d850 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f 75 74  Moved);.    pOut
2d860 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
2d870 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  t;.    pOut->u.i
2d880 20 3d 20 69 4d 6f 76 65 64 3b 0a 20 20 20 20 69   = iMoved;.    i
2d890 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
2d8a0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2d8b0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2d8c0 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a  OMIT_AUTOVACUUM.
2d8d0 20 20 20 20 69 66 28 20 69 4d 6f 76 65 64 21 3d      if( iMoved!=
2d8e0 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
2d8f0 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28  e3RootPageMoved(
2d900 64 62 2c 20 69 44 62 2c 20 69 4d 6f 76 65 64 2c  db, iDb, iMoved,
2d910 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 20   pOp->p1);.     
2d920 20 2f 2a 20 41 6c 6c 20 4f 50 5f 44 65 73 74 72   /* All OP_Destr
2d930 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 63  oy operations oc
2d940 63 75 72 20 6f 6e 20 74 68 65 20 73 61 6d 65 20  cur on the same 
2d950 62 74 72 65 65 20 2a 2f 0a 20 20 20 20 20 20 61  btree */.      a
2d960 73 73 65 72 74 28 20 72 65 73 65 74 53 63 68 65  ssert( resetSche
2d970 6d 61 4f 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c 20  maOnFault==0 || 
2d980 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
2d990 6c 74 3d 3d 69 44 62 2b 31 20 29 3b 0a 20 20 20  lt==iDb+1 );.   
2d9a0 20 20 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e     resetSchemaOn
2d9b0 46 61 75 6c 74 20 3d 20 69 44 62 2b 31 3b 0a 20  Fault = iDb+1;. 
2d9c0 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a     }.#endif.  }.
2d9d0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2d9e0 70 63 6f 64 65 3a 20 43 6c 65 61 72 20 50 31 20  pcode: Clear P1 
2d9f0 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65  P2 P3.**.** Dele
2da00 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20  te all contents 
2da10 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
2da20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77  table or index w
2da30 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a  hose root page.*
2da40 2a 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  * in the databas
2da50 65 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20  e file is given 
2da60 62 79 20 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c  by P1.  But, unl
2da70 69 6b 65 20 44 65 73 74 72 6f 79 2c 20 64 6f 20  ike Destroy, do 
2da80 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68  not.** remove th
2da90 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
2daa0 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
2dab0 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54  se file..**.** T
2dac0 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63  he table being c
2dad0 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 6d  lear is in the m
2dae0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
2daf0 65 20 69 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a  e if P2==0.  If.
2db00 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20 74 68  ** P2==1 then th
2db10 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c  e table to be cl
2db20 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75  ear is in the au
2db30 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
2db40 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73   file.** that is
2db50 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
2db60 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69  ables create usi
2db70 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52  ng CREATE TEMPOR
2db80 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a  ARY TABLE..**.**
2db90 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65   If the P3 value
2dba0 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
2dbb0 65 6e 20 74 68 65 20 74 61 62 6c 65 20 72 65 66  en the table ref
2dbc0 65 72 72 65 64 20 74 6f 20 6d 75 73 74 20 62 65  erred to must be
2dbd0 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61   an.** intkey ta
2dbe0 62 6c 65 20 28 61 6e 20 53 51 4c 20 74 61 62 6c  ble (an SQL tabl
2dbf0 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29  e, not an index)
2dc00 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74  . In this case t
2dc10 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a  he row change .*
2dc20 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72 65  * count is incre
2dc30 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75  mented by the nu
2dc40 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20  mber of rows in 
2dc50 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
2dc60 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20  cleared. .** If 
2dc70 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68  P3 is greater th
2dc80 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  an zero, then th
2dc90 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69  e value stored i
2dca0 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  n register P3 is
2dcb0 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65  .** also increme
2dcc0 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62  nted by the numb
2dcd0 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
2dce0 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c  e table being cl
2dcf0 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  eared..**.** See
2dd00 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a   also: Destroy.*
2dd10 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a  /.case OP_Clear:
2dd20 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65   {.  int nChange
2dd30 3b 0a 20 0a 20 20 6e 43 68 61 6e 67 65 20 3d 20  ;. .  nChange = 
2dd40 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  0;.  assert( p->
2dd50 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
2dd60 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
2dd70 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
2dd80 2c 20 70 4f 70 2d 3e 70 32 29 20 29 3b 0a 20 20  , pOp->p2) );.  
2dd90 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2dda0 65 43 6c 65 61 72 54 61 62 6c 65 28 0a 20 20 20  eClearTable(.   
2ddb0 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e     db->aDb[pOp->
2ddc0 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31  p2].pBt, pOp->p1
2ddd0 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43  , (pOp->p3 ? &nC
2dde0 68 61 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a  hange : 0).  );.
2ddf0 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b    if( pOp->p3 ){
2de00 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20  .    p->nChange 
2de10 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20  += nChange;.    
2de20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b  if( pOp->p3>0 ){
2de30 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
2de40 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
2de50 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20  pOp->p3]) );.   
2de60 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
2de70 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70  nge(p, &aMem[pOp
2de80 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d  ->p3]);.      aM
2de90 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20  em[pOp->p3].u.i 
2dea0 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20  += nChange;.    
2deb0 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29  }.  }.  if( rc )
2dec0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2ded0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
2dee0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2def0 20 52 65 73 65 74 53 6f 72 74 65 72 20 50 31 20   ResetSorter P1 
2df00 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65  * * * *.**.** De
2df10 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74  lete all content
2df20 73 20 66 72 6f 6d 20 74 68 65 20 65 70 68 65 6d  s from the ephem
2df30 65 72 61 6c 20 74 61 62 6c 65 20 6f 72 20 73 6f  eral table or so
2df40 72 74 65 72 0a 2a 2a 20 74 68 61 74 20 69 73 20  rter.** that is 
2df50 6f 70 65 6e 20 6f 6e 20 63 75 72 73 6f 72 20 50  open on cursor P
2df60 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  1..**.** This op
2df70 63 6f 64 65 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  code only works 
2df80 66 6f 72 20 63 75 72 73 6f 72 73 20 75 73 65 64  for cursors used
2df90 20 66 6f 72 20 73 6f 72 74 69 6e 67 20 61 6e 64   for sorting and
2dfa0 0a 2a 2a 20 6f 70 65 6e 65 64 20 77 69 74 68 20  .** opened with 
2dfb0 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
2dfc0 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65   or OP_SorterOpe
2dfd0 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  n..*/.case OP_Re
2dfe0 73 65 74 53 6f 72 74 65 72 3a 20 7b 0a 20 20 56  setSorter: {.  V
2dff0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
2e000 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2e010 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2e020 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
2e030 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
2e040 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2e050 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66  t( pC!=0 );.  if
2e060 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
2e070 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
2e080 65 53 6f 72 74 65 72 52 65 73 65 74 28 64 62 2c  eSorterReset(db,
2e090 20 70 43 2d 3e 75 63 2e 70 53 6f 72 74 65 72 29   pC->uc.pSorter)
2e0a0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
2e0b0 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
2e0c0 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
2e0d0 45 45 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  EE );.    assert
2e0e0 28 20 70 43 2d 3e 69 73 45 70 68 65 6d 65 72 61  ( pC->isEphemera
2e0f0 6c 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  l );.    rc = sq
2e100 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 54  lite3BtreeClearT
2e110 61 62 6c 65 4f 66 43 75 72 73 6f 72 28 70 43 2d  ableOfCursor(pC-
2e120 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20  >uc.pCursor);.  
2e130 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2e140 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2e150 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  or;.  }.  break;
2e160 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
2e170 72 65 61 74 65 42 74 72 65 65 20 50 31 20 50 32  reateBtree P1 P2
2e180 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
2e190 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20  sis: r[P2]=root 
2e1a0 69 44 62 3d 50 31 20 66 6c 61 67 73 3d 50 33 0a  iDb=P1 flags=P3.
2e1b0 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61  **.** Allocate a
2e1c0 20 6e 65 77 20 62 2d 74 72 65 65 20 69 6e 20 74   new b-tree in t
2e1d0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
2e1e0 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f   file if P1==0 o
2e1f0 72 20 69 6e 20 74 68 65 0a 2a 2a 20 54 45 4d 50  r in the.** TEMP
2e200 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
2e210 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e  f P1==1 or in an
2e220 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
2e230 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20  se if.** P1>1.  
2e240 54 68 65 20 50 33 20 61 72 67 75 6d 65 6e 74 20  The P3 argument 
2e250 6d 75 73 74 20 62 65 20 31 20 28 42 54 52 45 45  must be 1 (BTREE
2e260 5f 49 4e 54 4b 45 59 29 20 66 6f 72 20 61 20 72  _INTKEY) for a r
2e270 6f 77 69 64 20 74 61 62 6c 65 0a 2a 2a 20 69 74  owid table.** it
2e280 20 6d 75 73 74 20 62 65 20 32 20 28 42 54 52 45   must be 2 (BTRE
2e290 45 5f 42 4c 4f 42 4b 45 59 29 20 66 6f 72 20 61  E_BLOBKEY) for a
2e2a0 20 69 6e 64 65 78 20 6f 72 20 57 49 54 48 4f 55   index or WITHOU
2e2b0 54 20 52 4f 57 49 44 20 74 61 62 6c 65 2e 0a 2a  T ROWID table..*
2e2c0 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67 65 20  * The root page 
2e2d0 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65  number of the ne
2e2e0 77 20 62 2d 74 72 65 65 20 69 73 20 73 74 6f 72  w b-tree is stor
2e2f0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
2e300 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72  2..*/.case OP_Cr
2e310 65 61 74 65 42 74 72 65 65 3a 20 7b 20 20 20 20  eateBtree: {    
2e320 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
2e330 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 44  .  int pgno;.  D
2e340 62 20 2a 70 44 62 3b 0a 0a 20 20 70 4f 75 74 20  b *pDb;..  pOut 
2e350 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
2e360 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 67 6e 6f  (p, pOp);.  pgno
2e370 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
2e380 70 4f 70 2d 3e 70 33 3d 3d 42 54 52 45 45 5f 49  pOp->p3==BTREE_I
2e390 4e 54 4b 45 59 20 7c 7c 20 70 4f 70 2d 3e 70 33  NTKEY || pOp->p3
2e3a0 3d 3d 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20  ==BTREE_BLOBKEY 
2e3b0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
2e3c0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
2e3d0 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
2e3e0 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
2e3f0 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
2e400 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61   pOp->p1) );.  a
2e410 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
2e420 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d  ly==0 );.  pDb =
2e430 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70   &db->aDb[pOp->p
2e440 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44  1];.  assert( pD
2e450 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 72  b->pBt!=0 );.  r
2e460 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
2e470 43 72 65 61 74 65 54 61 62 6c 65 28 70 44 62 2d  CreateTable(pDb-
2e480 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 70 4f 70  >pBt, &pgno, pOp
2e490 2d 3e 70 33 29 3b 0a 20 20 69 66 28 20 72 63 20  ->p3);.  if( rc 
2e4a0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2e4b0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 4f 75  _to_error;.  pOu
2e4c0 74 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20  t->u.i = pgno;. 
2e4d0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2e4e0 63 6f 64 65 3a 20 53 71 6c 45 78 65 63 20 2a 20  code: SqlExec * 
2e4f0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
2e500 75 6e 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  un the SQL state
2e510 6d 65 6e 74 20 6f 72 20 73 74 61 74 65 6d 65 6e  ment or statemen
2e520 74 73 20 73 70 65 63 69 66 69 65 64 20 69 6e 20  ts specified in 
2e530 74 68 65 20 50 34 20 73 74 72 69 6e 67 2e 0a 2a  the P4 string..*
2e540 2f 0a 63 61 73 65 20 4f 50 5f 53 71 6c 45 78 65  /.case OP_SqlExe
2e550 63 3a 20 7b 0a 20 20 64 62 2d 3e 6e 53 71 6c 45  c: {.  db->nSqlE
2e560 78 65 63 2b 2b 3b 0a 20 20 72 63 20 3d 20 73 71  xec++;.  rc = sq
2e570 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20 70  lite3_exec(db, p
2e580 4f 70 2d 3e 70 34 2e 7a 2c 20 30 2c 20 30 2c 20  Op->p4.z, 0, 0, 
2e590 30 29 3b 0a 20 20 64 62 2d 3e 6e 53 71 6c 45 78  0);.  db->nSqlEx
2e5a0 65 63 2d 2d 3b 0a 20 20 69 66 28 20 72 63 20 29  ec--;.  if( rc )
2e5b0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2e5c0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
2e5d0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2e5e0 20 50 61 72 73 65 53 63 68 65 6d 61 20 50 31 20   ParseSchema P1 
2e5f0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
2e600 65 61 64 20 61 6e 64 20 70 61 72 73 65 20 61 6c  ead and parse al
2e610 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74  l entries from t
2e620 68 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52  he SQLITE_MASTER
2e630 20 74 61 62 6c 65 20 6f 66 20 64 61 74 61 62 61   table of databa
2e640 73 65 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61  se P1.** that ma
2e650 74 63 68 20 74 68 65 20 57 48 45 52 45 20 63 6c  tch the WHERE cl
2e660 61 75 73 65 20 50 34 2e 20 0a 2a 2a 0a 2a 2a 20  ause P4. .**.** 
2e670 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f  This opcode invo
2e680 6b 65 73 20 74 68 65 20 70 61 72 73 65 72 20 74  kes the parser t
2e690 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77 20 76  o create a new v
2e6a0 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2c 0a  irtual machine,.
2e6b0 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20 74 68 65  ** then runs the
2e6c0 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63   new virtual mac
2e6d0 68 69 6e 65 2e 20 20 49 74 20 69 73 20 74 68 75  hine.  It is thu
2e6e0 73 20 61 20 72 65 2d 65 6e 74 72 61 6e 74 20 6f  s a re-entrant o
2e6f0 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  pcode..*/.case O
2e700 50 5f 50 61 72 73 65 53 63 68 65 6d 61 3a 20 7b  P_ParseSchema: {
2e710 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 63 6f  .  int iDb;.  co
2e720 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61 73 74 65  nst char *zMaste
2e730 72 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b  r;.  char *zSql;
2e740 0a 20 20 49 6e 69 74 44 61 74 61 20 69 6e 69 74  .  InitData init
2e750 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20  Data;..  /* Any 
2e760 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
2e770 6e 74 20 74 68 61 74 20 69 6e 76 6f 6b 65 73 20  nt that invokes 
2e780 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c  this opcode will
2e790 20 68 6f 6c 64 20 6d 75 74 65 78 65 73 0a 20 20   hold mutexes.  
2e7a0 2a 2a 20 6f 6e 20 65 76 65 72 79 20 62 74 72 65  ** on every btre
2e7b0 65 2e 20 20 54 68 69 73 20 69 73 20 61 20 70 72  e.  This is a pr
2e7c0 65 72 65 71 75 69 73 69 74 65 20 66 6f 72 20 69  erequisite for i
2e7d0 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20 73 71  nvoking .  ** sq
2e7e0 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
2e7f0 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66  k()..  */.#ifdef
2e800 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
2e810 66 6f 72 28 69 44 62 3d 30 3b 20 69 44 62 3c 64  for(iDb=0; iDb<d
2e820 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b 29 7b 0a  b->nDb; iDb++){.
2e830 20 20 20 20 61 73 73 65 72 74 28 20 69 44 62 3d      assert( iDb=
2e840 3d 31 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72  =1 || sqlite3Btr
2e850 65 65 48 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d  eeHoldsMutex(db-
2e860 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 29 20 29  >aDb[iDb].pBt) )
2e870 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  ;.  }.#endif..  
2e880 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  iDb = pOp->p1;. 
2e890 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
2e8a0 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
2e8b0 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 48 61  ;.  assert( DbHa
2e8c0 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20 69 44  sProperty(db, iD
2e8d0 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  b, DB_SchemaLoad
2e8e0 65 64 29 20 29 3b 0a 20 20 2f 2a 20 55 73 65 64  ed) );.  /* Used
2e8f0 20 74 6f 20 62 65 20 61 20 63 6f 6e 64 69 74 69   to be a conditi
2e900 6f 6e 61 6c 20 2a 2f 20 7b 0a 20 20 20 20 7a 4d  onal */ {.    zM
2e910 61 73 74 65 72 20 3d 20 4d 41 53 54 45 52 5f 4e  aster = MASTER_N
2e920 41 4d 45 3b 0a 20 20 20 20 69 6e 69 74 44 61 74  AME;.    initDat
2e930 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 69  a.db = db;.    i
2e940 6e 69 74 44 61 74 61 2e 69 44 62 20 3d 20 70 4f  nitData.iDb = pO
2e950 70 2d 3e 70 31 3b 0a 20 20 20 20 69 6e 69 74 44  p->p1;.    initD
2e960 61 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d 20 26  ata.pzErrMsg = &
2e970 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20  p->zErrMsg;.    
2e980 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50  zSql = sqlite3MP
2e990 72 69 6e 74 66 28 64 62 2c 0a 20 20 20 20 20 20  rintf(db,.      
2e9a0 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 72   "SELECT name, r
2e9b0 6f 6f 74 70 61 67 65 2c 20 73 71 6c 20 46 52 4f  ootpage, sql FRO
2e9c0 4d 20 27 25 71 27 2e 25 73 20 57 48 45 52 45 20  M '%q'.%s WHERE 
2e9d0 25 73 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69  %s ORDER BY rowi
2e9e0 64 22 2c 0a 20 20 20 20 20 20 20 64 62 2d 3e 61  d",.       db->a
2e9f0 44 62 5b 69 44 62 5d 2e 7a 44 62 53 4e 61 6d 65  Db[iDb].zDbSName
2ea00 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f 70 2d 3e  , zMaster, pOp->
2ea10 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66 28 20 7a  p4.z);.    if( z
2ea20 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Sql==0 ){.      
2ea30 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  rc = SQLITE_NOME
2ea40 4d 5f 42 4b 50 54 3b 0a 20 20 20 20 7d 65 6c 73  M_BKPT;.    }els
2ea50 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  e{.      assert(
2ea60 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d   db->init.busy==
2ea70 30 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69  0 );.      db->i
2ea80 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20  nit.busy = 1;.  
2ea90 20 20 20 20 69 6e 69 74 44 61 74 61 2e 72 63 20      initData.rc 
2eaa0 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20  = SQLITE_OK;.   
2eab0 20 20 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e     assert( !db->
2eac0 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a  mallocFailed );.
2ead0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
2eae0 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c  e3_exec(db, zSql
2eaf0 2c 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  , sqlite3InitCal
2eb00 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61  lback, &initData
2eb10 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20  , 0);.      if( 
2eb20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc==SQLITE_OK ) 
2eb30 72 63 20 3d 20 69 6e 69 74 44 61 74 61 2e 72 63  rc = initData.rc
2eb40 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44  ;.      sqlite3D
2eb50 62 46 72 65 65 4e 4e 28 64 62 2c 20 7a 53 71 6c  bFreeNN(db, zSql
2eb60 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69  );.      db->ini
2eb70 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20 20 20  t.busy = 0;.    
2eb80 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29  }.  }.  if( rc )
2eb90 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 65 73  {.    sqlite3Res
2eba0 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f  etAllSchemasOfCo
2ebb0 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20  nnection(db);.  
2ebc0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
2ebd0 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20  _NOMEM ){.      
2ebe0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
2ebf0 20 7d 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72   }.    goto abor
2ec00 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2ec10 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d    }.  break;  .}
2ec20 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
2ec30 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59  QLITE_OMIT_ANALY
2ec40 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  ZE)./* Opcode: L
2ec50 6f 61 64 41 6e 61 6c 79 73 69 73 20 50 31 20 2a  oadAnalysis P1 *
2ec60 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61   * * *.**.** Rea
2ec70 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  d the sqlite_sta
2ec80 74 31 20 74 61 62 6c 65 20 66 6f 72 20 64 61 74  t1 table for dat
2ec90 61 62 61 73 65 20 50 31 20 61 6e 64 20 6c 6f 61  abase P1 and loa
2eca0 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a  d the content.**
2ecb0 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 20 69   of that table i
2ecc0 6e 74 6f 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  nto the internal
2ecd0 20 69 6e 64 65 78 20 68 61 73 68 20 74 61 62 6c   index hash tabl
2ece0 65 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61  e.  This will ca
2ecf0 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c 79  use.** the analy
2ed00 73 69 73 20 74 6f 20 62 65 20 75 73 65 64 20 77  sis to be used w
2ed10 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20 61 6c  hen preparing al
2ed20 6c 20 73 75 62 73 65 71 75 65 6e 74 20 71 75 65  l subsequent que
2ed30 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ries..*/.case OP
2ed40 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20 7b  _LoadAnalysis: {
2ed50 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2ed60 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2ed70 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63  <db->nDb );.  rc
2ed80 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73   = sqlite3Analys
2ed90 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70 2d 3e  isLoad(db, pOp->
2eda0 70 31 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  p1);.  if( rc ) 
2edb0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2edc0 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
2edd0 3b 20 20 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ;  .}.#endif /* 
2ede0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2edf0 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f  OMIT_ANALYZE) */
2ee00 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f  ../* Opcode: Dro
2ee10 70 54 61 62 6c 65 20 50 31 20 2a 20 2a 20 50 34  pTable P1 * * P4
2ee20 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20   *.**.** Remove 
2ee30 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e  the internal (in
2ee40 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74  -memory) data st
2ee50 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65  ructures that de
2ee60 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 61  scribe.** the ta
2ee70 62 6c 65 20 6e 61 6d 65 64 20 50 34 20 69 6e 20  ble named P4 in 
2ee80 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68  database P1.  Th
2ee90 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74  is is called aft
2eea0 65 72 20 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73  er a table.** is
2eeb0 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69   dropped from di
2eec0 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44 65  sk (using the De
2eed0 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 20 69 6e  stroy opcode) in
2eee0 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 0a   order to keep .
2eef0 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ** the internal 
2ef00 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
2ef10 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20  f the.** schema 
2ef20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20  consistent with 
2ef30 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e  what is on disk.
2ef40 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70  .*/.case OP_Drop
2ef50 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c 69 74  Table: {.  sqlit
2ef60 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
2ef70 65 54 61 62 6c 65 28 64 62 2c 20 70 4f 70 2d 3e  eTable(db, pOp->
2ef80 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
2ef90 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2efa0 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e 64 65 78  pcode: DropIndex
2efb0 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
2efc0 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e  ** Remove the in
2efd0 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72  ternal (in-memor
2efe0 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72  y) data structur
2eff0 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65  es that describe
2f000 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 6e 61  .** the index na
2f010 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61  med P4 in databa
2f020 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20  se P1.  This is 
2f030 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 6e 20  called after an 
2f040 69 6e 64 65 78 0a 2a 2a 20 69 73 20 64 72 6f 70  index.** is drop
2f050 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75  ped from disk (u
2f060 73 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79  sing the Destroy
2f070 20 6f 70 63 6f 64 65 29 0a 2a 2a 20 69 6e 20 6f   opcode).** in o
2f080 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65  rder to keep the
2f090 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73   internal repres
2f0a0 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a  entation of the.
2f0b0 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73  ** schema consis
2f0c0 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69  tent with what i
2f0d0 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61  s on disk..*/.ca
2f0e0 73 65 20 4f 50 5f 44 72 6f 70 49 6e 64 65 78 3a  se OP_DropIndex:
2f0f0 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69   {.  sqlite3Unli
2f100 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78  nkAndDeleteIndex
2f110 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
2f120 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61  p->p4.z);.  brea
2f130 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2f140 20 44 72 6f 70 54 72 69 67 67 65 72 20 50 31 20   DropTrigger P1 
2f150 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
2f160 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e  emove the intern
2f170 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64  al (in-memory) d
2f180 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74  ata structures t
2f190 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20  hat describe.** 
2f1a0 74 68 65 20 74 72 69 67 67 65 72 20 6e 61 6d 65  the trigger name
2f1b0 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65  d P4 in database
2f1c0 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61   P1.  This is ca
2f1d0 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 72 69  lled after a tri
2f1e0 67 67 65 72 0a 2a 2a 20 69 73 20 64 72 6f 70 70  gger.** is dropp
2f1f0 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73  ed from disk (us
2f200 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79 20  ing the Destroy 
2f210 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72 64 65 72  opcode) in order
2f220 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65   to keep .** the
2f230 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73   internal repres
2f240 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a  entation of the.
2f250 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73  ** schema consis
2f260 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69  tent with what i
2f270 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61  s on disk..*/.ca
2f280 73 65 20 4f 50 5f 44 72 6f 70 54 72 69 67 67 65  se OP_DropTrigge
2f290 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e  r: {.  sqlite3Un
2f2a0 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69  linkAndDeleteTri
2f2b0 67 67 65 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31  gger(db, pOp->p1
2f2c0 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
2f2d0 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64  break;.}...#ifnd
2f2e0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49  ef SQLITE_OMIT_I
2f2f0 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f  NTEGRITY_CHECK./
2f300 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 72  * Opcode: Integr
2f310 69 74 79 43 6b 20 50 31 20 50 32 20 50 33 20 50  ityCk P1 P2 P3 P
2f320 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e  4 P5.**.** Do an
2f330 20 61 6e 61 6c 79 73 69 73 20 6f 66 20 74 68 65   analysis of the
2f340 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20   currently open 
2f350 64 61 74 61 62 61 73 65 2e 20 20 53 74 6f 72 65  database.  Store
2f360 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   in.** register 
2f370 50 31 20 74 68 65 20 74 65 78 74 20 6f 66 20 61  P1 the text of a
2f380 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
2f390 64 65 73 63 72 69 62 69 6e 67 20 61 6e 79 20 70  describing any p
2f3a0 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e  roblems..** If n
2f3b0 6f 20 70 72 6f 62 6c 65 6d 73 20 61 72 65 20 66  o problems are f
2f3c0 6f 75 6e 64 2c 20 73 74 6f 72 65 20 61 20 4e 55  ound, store a NU
2f3d0 4c 4c 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  LL in register P
2f3e0 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67  1..**.** The reg
2f3f0 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e  ister P3 contain
2f400 73 20 6f 6e 65 20 6c 65 73 73 20 74 68 61 6e 20  s one less than 
2f410 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62  the maximum numb
2f420 65 72 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72  er of allowed er
2f430 72 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74  rors..** At most
2f440 20 72 65 67 28 50 33 29 20 65 72 72 6f 72 73 20   reg(P3) errors 
2f450 77 69 6c 6c 20 62 65 20 72 65 70 6f 72 74 65 64  will be reported
2f460 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f  ..** In other wo
2f470 72 64 73 2c 20 74 68 65 20 61 6e 61 6c 79 73 69  rds, the analysi
2f480 73 20 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20  s stops as soon 
2f490 61 73 20 72 65 67 28 50 31 29 20 65 72 72 6f 72  as reg(P1) error
2f4a0 73 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20  s are .** seen. 
2f4b0 20 52 65 67 28 50 31 29 20 69 73 20 75 70 64 61   Reg(P1) is upda
2f4c0 74 65 64 20 77 69 74 68 20 74 68 65 20 6e 75 6d  ted with the num
2f4d0 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65  ber of errors re
2f4e0 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54  maining..**.** T
2f4f0 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  he root page num
2f500 62 65 72 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c  bers of all tabl
2f510 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  es in the databa
2f520 73 65 20 61 72 65 20 69 6e 74 65 67 65 72 73 0a  se are integers.
2f530 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 50 34 5f  ** stored in P4_
2f540 49 4e 54 41 52 52 41 59 20 61 72 67 75 6d 65 6e  INTARRAY argumen
2f550 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  t..**.** If P5 i
2f560 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 20  s not zero, the 
2f570 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 6f 6e  check is done on
2f580 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64   the auxiliary d
2f590 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 2c  atabase.** file,
2f5a0 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20 64 61   not the main da
2f5b0 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a  tabase file..**.
2f5c0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
2f5d0 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d  s used to implem
2f5e0 65 6e 74 20 74 68 65 20 69 6e 74 65 67 72 69 74  ent the integrit
2f5f0 79 5f 63 68 65 63 6b 20 70 72 61 67 6d 61 2e 0a  y_check pragma..
2f600 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67  */.case OP_Integ
2f610 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e 74 20  rityCk: {.  int 
2f620 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20 4e  nRoot;      /* N
2f630 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20  umber of tables 
2f640 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75 6d 62  to check.  (Numb
2f650 65 72 20 6f 66 20 72 6f 6f 74 20 70 61 67 65 73  er of root pages
2f660 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52 6f  .) */.  int *aRo
2f670 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79  ot;     /* Array
2f680 20 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e 75 6d   of rootpage num
2f690 62 65 72 73 20 66 6f 72 20 74 61 62 6c 65 73 20  bers for tables 
2f6a0 74 6f 20 62 65 20 63 68 65 63 6b 65 64 20 2a 2f  to be checked */
2f6b0 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20  .  int nErr;    
2f6c0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
2f6d0 65 72 72 6f 72 73 20 72 65 70 6f 72 74 65 64 20  errors reported 
2f6e0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20 20  */.  char *z;   
2f6f0 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
2f700 74 68 65 20 65 72 72 6f 72 20 72 65 70 6f 72 74  the error report
2f710 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72   */.  Mem *pnErr
2f720 3b 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65  ;     /* Registe
2f730 72 20 6b 65 65 70 69 6e 67 20 74 72 61 63 6b 20  r keeping track 
2f740 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e  of errors remain
2f750 69 6e 67 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74  ing */..  assert
2f760 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
2f770 3b 0a 20 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d  ;.  nRoot = pOp-
2f780 3e 70 32 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 70  >p2;.  aRoot = p
2f790 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 61 73 73  Op->p4.ai;.  ass
2f7a0 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a  ert( nRoot>0 );.
2f7b0 20 20 61 73 73 65 72 74 28 20 61 52 6f 6f 74 5b    assert( aRoot[
2f7c0 30 5d 3d 3d 6e 52 6f 6f 74 20 29 3b 0a 20 20 61  0]==nRoot );.  a
2f7d0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
2f7e0 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d   && pOp->p3<=(p-
2f7f0 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
2f800 72 73 6f 72 29 20 29 3b 0a 20 20 70 6e 45 72 72  rsor) );.  pnErr
2f810 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
2f820 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e  ];.  assert( (pn
2f830 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Err->flags & MEM
2f840 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61 73  _Int)!=0 );.  as
2f850 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c  sert( (pnErr->fl
2f860 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
2f870 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a  EM_Blob))==0 );.
2f880 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
2f890 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2f8a0 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e  t( pOp->p5<db->n
2f8b0 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
2f8c0 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
2f8d0 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 35  reeMask, pOp->p5
2f8e0 29 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74  ) );.  z = sqlit
2f8f0 65 33 42 74 72 65 65 49 6e 74 65 67 72 69 74 79  e3BtreeIntegrity
2f900 43 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f  Check(db->aDb[pO
2f910 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 26 61 52 6f  p->p5].pBt, &aRo
2f920 6f 74 5b 31 5d 2c 20 6e 52 6f 6f 74 2c 0a 20 20  ot[1], nRoot,.  
2f930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
2f950 69 6e 74 29 70 6e 45 72 72 2d 3e 75 2e 69 2b 31  int)pnErr->u.i+1
2f960 2c 20 26 6e 45 72 72 29 3b 0a 20 20 73 71 6c 69  , &nErr);.  sqli
2f970 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
2f980 6c 28 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 6e  l(pIn1);.  if( n
2f990 45 72 72 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73  Err==0 ){.    as
2f9a0 73 65 72 74 28 20 7a 3d 3d 30 20 29 3b 0a 20 20  sert( z==0 );.  
2f9b0 7d 65 6c 73 65 20 69 66 28 20 7a 3d 3d 30 20 29  }else if( z==0 )
2f9c0 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
2f9d0 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  m;.  }else{.    
2f9e0 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45  pnErr->u.i -= nE
2f9f0 72 72 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74 65  rr-1;.    sqlite
2fa00 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70  3VdbeMemSetStr(p
2fa10 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49  In1, z, -1, SQLI
2fa20 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74 65 33  TE_UTF8, sqlite3
2fa30 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50  _free);.  }.  UP
2fa40 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
2fa50 45 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74  E(pIn1);.  sqlit
2fa60 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
2fa70 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64  ding(pIn1, encod
2fa80 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ing);.  break;.}
2fa90 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2faa0 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
2fab0 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70  _CHECK */../* Op
2fac0 63 6f 64 65 3a 20 52 6f 77 53 65 74 41 64 64 20  code: RowSetAdd 
2fad0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
2fae0 79 6e 6f 70 73 69 73 3a 20 72 6f 77 73 65 74 28  ynopsis: rowset(
2faf0 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  P1)=r[P2].**.** 
2fb00 49 6e 73 65 72 74 20 74 68 65 20 69 6e 74 65 67  Insert the integ
2fb10 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20 62 79  er value held by
2fb20 20 72 65 67 69 73 74 65 72 20 50 32 20 69 6e 74   register P2 int
2fb30 6f 20 61 20 52 6f 77 53 65 74 20 6f 62 6a 65 63  o a RowSet objec
2fb40 74 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65 67  t.** held in reg
2fb50 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20  ister P1..**.** 
2fb60 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 69  An assertion fai
2fb70 6c 73 20 69 66 20 50 32 20 69 73 20 6e 6f 74 20  ls if P2 is not 
2fb80 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63  an integer..*/.c
2fb90 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 41 64 64  ase OP_RowSetAdd
2fba0 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 31  : {       /* in1
2fbb0 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20  , in2 */.  pIn1 
2fbc0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2fbd0 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
2fbe0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
2fbf0 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67  ert( (pIn2->flag
2fc00 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
2fc10 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
2fc20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
2fc30 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  et)==0 ){.    sq
2fc40 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52  lite3VdbeMemSetR
2fc50 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20  owSet(pIn1);.   
2fc60 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
2fc70 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
2fc80 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
2fc90 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52  ;.  }.  sqlite3R
2fca0 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31  owSetInsert(pIn1
2fcb0 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e  ->u.pRowSet, pIn
2fcc0 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b  2->u.i);.  break
2fcd0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2fce0 52 6f 77 53 65 74 52 65 61 64 20 50 31 20 50 32  RowSetRead P1 P2
2fcf0 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
2fd00 73 69 73 3a 20 72 5b 50 33 5d 3d 72 6f 77 73 65  sis: r[P3]=rowse
2fd10 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20 45 78 74 72  t(P1).**.** Extr
2fd20 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65 73 74  act the smallest
2fd30 20 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65 20   value from the 
2fd40 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 69 6e  RowSet object in
2fd50 20 50 31 0a 2a 2a 20 61 6e 64 20 70 75 74 20 74   P1.** and put t
2fd60 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72  hat value into r
2fd70 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 4f  egister P3..** O
2fd80 72 2c 20 69 66 20 52 6f 77 53 65 74 20 6f 62 6a  r, if RowSet obj
2fd90 65 63 74 20 50 31 20 69 73 20 69 6e 69 74 69 61  ect P1 is initia
2fda0 6c 6c 79 20 65 6d 70 74 79 2c 20 6c 65 61 76 65  lly empty, leave
2fdb0 20 50 33 0a 2a 2a 20 75 6e 63 68 61 6e 67 65 64   P3.** unchanged
2fdc0 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 69 6e 73   and jump to ins
2fdd0 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a  truction P2..*/.
2fde0 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 52 65  case OP_RowSetRe
2fdf0 61 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a  ad: {       /* j
2fe00 75 6d 70 2c 20 69 6e 31 2c 20 6f 75 74 33 20 2a  ump, in1, out3 *
2fe10 2f 0a 20 20 69 36 34 20 76 61 6c 3b 0a 0a 20 20  /.  i64 val;..  
2fe20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
2fe30 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p1];.  if( (pI
2fe40 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
2fe50 52 6f 77 53 65 74 29 3d 3d 30 20 0a 20 20 20 7c  RowSet)==0 .   |
2fe60 7c 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e  | sqlite3RowSetN
2fe70 65 78 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77  ext(pIn1->u.pRow
2fe80 53 65 74 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20  Set, &val)==0.  
2fe90 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 62 6f  ){.    /* The bo
2fea0 6f 6c 65 61 6e 20 69 6e 64 65 78 20 69 73 20 65  olean index is e
2feb0 6d 70 74 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69  mpty */.    sqli
2fec0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
2fed0 6c 28 70 49 6e 31 29 3b 0a 20 20 20 20 56 64 62  l(pIn1);.    Vdb
2fee0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32  eBranchTaken(1,2
2fef0 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  );.    goto jump
2ff00 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b  _to_p2_and_check
2ff10 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a  _for_interrupt;.
2ff20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
2ff30 41 20 76 61 6c 75 65 20 77 61 73 20 70 75 6c 6c  A value was pull
2ff40 65 64 20 66 72 6f 6d 20 74 68 65 20 69 6e 64 65  ed from the inde
2ff50 78 20 2a 2f 0a 20 20 20 20 56 64 62 65 42 72 61  x */.    VdbeBra
2ff60 6e 63 68 54 61 6b 65 6e 28 30 2c 32 29 3b 0a 20  nchTaken(0,2);. 
2ff70 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2ff80 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b  mSetInt64(&aMem[
2ff90 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c 29 3b 0a  pOp->p3], val);.
2ffa0 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b    }.  goto check
2ffb0 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a  _for_interrupt;.
2ffc0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  }../* Opcode: Ro
2ffd0 77 53 65 74 54 65 73 74 20 50 31 20 50 32 20 50  wSetTest P1 P2 P
2ffe0 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  3 P4.** Synopsis
2fff0 3a 20 69 66 20 72 5b 50 33 5d 20 69 6e 20 72 6f  : if r[P3] in ro
30000 77 73 65 74 28 50 31 29 20 67 6f 74 6f 20 50 32  wset(P1) goto P2
30010 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
30020 50 33 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f  P3 is assumed to
30030 20 68 6f 6c 64 20 61 20 36 34 2d 62 69 74 20 69   hold a 64-bit i
30040 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 49 66  nteger value. If
30050 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20   register P1.** 
30060 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77 53 65  contains a RowSe
30070 74 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 61  t object and tha
30080 74 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  t RowSet object 
30090 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68 65 20  contains.** the 
300a0 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 50 33  value held in P3
300b0 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67 69 73 74  , jump to regist
300c0 65 72 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  er P2. Otherwise
300d0 2c 20 69 6e 73 65 72 74 20 74 68 65 0a 2a 2a 20  , insert the.** 
300e0 69 6e 74 65 67 65 72 20 69 6e 20 50 33 20 69 6e  integer in P3 in
300f0 74 6f 20 74 68 65 20 52 6f 77 53 65 74 20 61 6e  to the RowSet an
30100 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20 74 6f  d continue on to
30110 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f 70 63   the.** next opc
30120 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52  ode..**.** The R
30130 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 69 73 20  owSet object is 
30140 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72 20 74 68  optimized for th
30150 65 20 63 61 73 65 20 77 68 65 72 65 20 73 65 74  e case where set
30160 73 20 6f 66 20 69 6e 74 65 67 65 72 73 0a 2a 2a  s of integers.**
30170 20 61 72 65 20 69 6e 73 65 72 74 65 64 20 69 6e   are inserted in
30180 20 64 69 73 74 69 6e 63 74 20 70 68 61 73 65 73   distinct phases
30190 2c 20 77 68 69 63 68 20 65 61 63 68 20 73 65 74  , which each set
301a0 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70   contains no dup
301b0 6c 69 63 61 74 65 73 2e 0a 2a 2a 20 45 61 63 68  licates..** Each
301c0 20 73 65 74 20 69 73 20 69 64 65 6e 74 69 66 69   set is identifi
301d0 65 64 20 62 79 20 61 20 75 6e 69 71 75 65 20 50  ed by a unique P
301e0 34 20 76 61 6c 75 65 2e 20 54 68 65 20 66 69 72  4 value. The fir
301f0 73 74 20 73 65 74 0a 2a 2a 20 6d 75 73 74 20 68  st set.** must h
30200 61 76 65 20 50 34 3d 3d 30 2c 20 74 68 65 20 66  ave P4==0, the f
30210 69 6e 61 6c 20 73 65 74 20 6d 75 73 74 20 68 61  inal set must ha
30220 76 65 20 50 34 3d 3d 2d 31 2c 20 61 6e 64 20 66  ve P4==-1, and f
30230 6f 72 20 61 6c 6c 20 6f 74 68 65 72 20 73 65 74  or all other set
30240 73 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65 20 50  s.** must have P
30250 34 3e 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  4>0..**.** This 
30260 61 6c 6c 6f 77 73 20 6f 70 74 69 6d 69 7a 61 74  allows optimizat
30270 69 6f 6e 73 3a 20 28 61 29 20 77 68 65 6e 20 50  ions: (a) when P
30280 34 3d 3d 30 20 74 68 65 72 65 20 69 73 20 6e 6f  4==0 there is no
30290 20 6e 65 65 64 20 74 6f 20 74 65 73 74 0a 2a 2a   need to test.**
302a0 20 74 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65   the RowSet obje
302b0 63 74 20 66 6f 72 20 50 33 2c 20 61 73 20 69 74  ct for P3, as it
302c0 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 20 6e   is guaranteed n
302d0 6f 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20 69 74  ot to contain it
302e0 2c 0a 2a 2a 20 28 62 29 20 77 68 65 6e 20 50 34  ,.** (b) when P4
302f0 3d 3d 2d 31 20 74 68 65 72 65 20 69 73 20 6e 6f  ==-1 there is no
30300 20 6e 65 65 64 20 74 6f 20 69 6e 73 65 72 74 20   need to insert 
30310 74 68 65 20 76 61 6c 75 65 2c 20 61 73 20 69 74  the value, as it
30320 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20 62   will.** never b
30330 65 20 74 65 73 74 65 64 20 66 6f 72 2c 20 61 6e  e tested for, an
30340 64 20 28 63 29 20 77 68 65 6e 20 61 20 76 61 6c  d (c) when a val
30350 75 65 20 74 68 61 74 20 69 73 20 70 61 72 74 20  ue that is part 
30360 6f 66 20 73 65 74 20 58 20 69 73 0a 2a 2a 20 69  of set X is.** i
30370 6e 73 65 72 74 65 64 2c 20 74 68 65 72 65 20 69  nserted, there i
30380 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 73 65 61  s no need to sea
30390 72 63 68 20 74 6f 20 73 65 65 20 69 66 20 74 68  rch to see if th
303a0 65 20 73 61 6d 65 20 76 61 6c 75 65 20 77 61 73  e same value was
303b0 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 69  .** previously i
303c0 6e 73 65 72 74 65 64 20 61 73 20 70 61 72 74 20  nserted as part 
303d0 6f 66 20 73 65 74 20 58 20 28 6f 6e 6c 79 20 69  of set X (only i
303e0 66 20 69 74 20 77 61 73 20 70 72 65 76 69 6f 75  f it was previou
303f0 73 6c 79 0a 2a 2a 20 69 6e 73 65 72 74 65 64 20  sly.** inserted 
30400 61 73 20 70 61 72 74 20 6f 66 20 73 6f 6d 65 20  as part of some 
30410 6f 74 68 65 72 20 73 65 74 29 2e 0a 2a 2f 0a 63  other set)..*/.c
30420 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 54 65 73  ase OP_RowSetTes
30430 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
30440 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
30450 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20  , in1, in3 */.  
30460 69 6e 74 20 69 53 65 74 3b 0a 20 20 69 6e 74 20  int iSet;.  int 
30470 65 78 69 73 74 73 3b 0a 0a 20 20 70 49 6e 31 20  exists;..  pIn1 
30480 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
30490 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ;.  pIn3 = &aMem
304a0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 53 65  [pOp->p3];.  iSe
304b0 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  t = pOp->p4.i;. 
304c0 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
304d0 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
304e0 0a 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69  .  /* If there i
304f0 73 20 61 6e 79 74 68 69 6e 67 20 6f 74 68 65 72  s anything other
30500 20 74 68 61 6e 20 61 20 72 6f 77 73 65 74 20 6f   than a rowset o
30510 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f 72 79 20  bject in memory 
30520 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20 64 65  cell P1,.  ** de
30530 6c 65 74 65 20 69 74 20 6e 6f 77 20 61 6e 64 20  lete it now and 
30540 69 6e 69 74 69 61 6c 69 7a 65 20 50 31 20 77 69  initialize P1 wi
30550 74 68 20 61 6e 20 65 6d 70 74 79 20 72 6f 77 73  th an empty rows
30560 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28 20 28 70  et.  */.  if( (p
30570 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
30580 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20  _RowSet)==0 ){. 
30590 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
305a0 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29  mSetRowSet(pIn1)
305b0 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d  ;.    if( (pIn1-
305c0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
305d0 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  Set)==0 ) goto n
305e0 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61 73  o_mem;.  }..  as
305f0 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
30600 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
30610 20 61 73 73 65 72 74 28 20 69 53 65 74 3d 3d 2d   assert( iSet==-
30620 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20 29 3b 0a  1 || iSet>=0 );.
30630 20 20 69 66 28 20 69 53 65 74 20 29 7b 0a 20 20    if( iSet ){.  
30640 20 20 65 78 69 73 74 73 20 3d 20 73 71 6c 69 74    exists = sqlit
30650 65 33 52 6f 77 53 65 74 54 65 73 74 28 70 49 6e  e3RowSetTest(pIn
30660 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 69 53  1->u.pRowSet, iS
30670 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a  et, pIn3->u.i);.
30680 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
30690 6b 65 6e 28 65 78 69 73 74 73 21 3d 30 2c 32 29  ken(exists!=0,2)
306a0 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73 74 73  ;.    if( exists
306b0 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
306c0 70 32 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69 53  p2;.  }.  if( iS
306d0 65 74 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  et>=0 ){.    sql
306e0 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74  ite3RowSetInsert
306f0 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIn1->u.pRowSet
30700 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20  , pIn3->u.i);.  
30710 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23  }.  break;.}...#
30720 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
30730 49 54 5f 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f  IT_TRIGGER../* O
30740 70 63 6f 64 65 3a 20 50 72 6f 67 72 61 6d 20 50  pcode: Program P
30750 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
30760 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20  .** Execute the 
30770 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20  trigger program 
30780 70 61 73 73 65 64 20 61 73 20 50 34 20 28 74 79  passed as P4 (ty
30790 70 65 20 50 34 5f 53 55 42 50 52 4f 47 52 41 4d  pe P4_SUBPROGRAM
307a0 29 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e  ). .**.** P1 con
307b0 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73  tains the addres
307c0 73 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20  s of the memory 
307d0 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69  cell that contai
307e0 6e 73 20 74 68 65 20 66 69 72 73 74 20 6d 65 6d  ns the first mem
307f0 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20  ory .** cell in 
30800 61 6e 20 61 72 72 61 79 20 6f 66 20 76 61 6c 75  an array of valu
30810 65 73 20 75 73 65 64 20 61 73 20 61 72 67 75 6d  es used as argum
30820 65 6e 74 73 20 74 6f 20 74 68 65 20 73 75 62 2d  ents to the sub-
30830 70 72 6f 67 72 61 6d 2e 20 50 32 20 0a 2a 2a 20  program. P2 .** 
30840 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64  contains the add
30850 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20  ress to jump to 
30860 69 66 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  if the sub-progr
30870 61 6d 20 74 68 72 6f 77 73 20 61 6e 20 49 47 4e  am throws an IGN
30880 4f 52 45 20 0a 2a 2a 20 65 78 63 65 70 74 69 6f  ORE .** exceptio
30890 6e 20 75 73 69 6e 67 20 74 68 65 20 52 41 49 53  n using the RAIS
308a0 45 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 52 65  E() function. Re
308b0 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69  gister P3 contai
308c0 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20 0a  ns the address .
308d0 2a 2a 20 6f 66 20 61 20 6d 65 6d 6f 72 79 20 63  ** of a memory c
308e0 65 6c 6c 20 69 6e 20 74 68 69 73 20 28 74 68 65  ell in this (the
308f0 20 70 61 72 65 6e 74 29 20 56 4d 20 74 68 61 74   parent) VM that
30900 20 69 73 20 75 73 65 64 20 74 6f 20 61 6c 6c 6f   is used to allo
30910 63 61 74 65 20 74 68 65 20 0a 2a 2a 20 6d 65 6d  cate the .** mem
30920 6f 72 79 20 72 65 71 75 69 72 65 64 20 62 79 20  ory required by 
30930 74 68 65 20 73 75 62 2d 76 64 62 65 20 61 74 20  the sub-vdbe at 
30940 72 75 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50  runtime..**.** P
30950 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
30960 6f 20 74 68 65 20 56 4d 20 63 6f 6e 74 61 69 6e  o the VM contain
30970 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20  ing the trigger 
30980 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49  program..**.** I
30990 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P5 is non-zero
309a0 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69 76 65  , then recursive
309b0 20 70 72 6f 67 72 61 6d 20 69 6e 76 6f 63 61 74   program invocat
309c0 69 6f 6e 20 69 73 20 65 6e 61 62 6c 65 64 2e 0a  ion is enabled..
309d0 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 6f 67 72  */.case OP_Progr
309e0 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  am: {        /* 
309f0 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  jump */.  int nM
30a00 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
30a10 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d    /* Number of m
30a20 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20  emory registers 
30a30 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  for sub-program 
30a40 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 20  */.  int nByte; 
30a50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
30a60 42 79 74 65 73 20 6f 66 20 72 75 6e 74 69 6d 65  Bytes of runtime
30a70 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64 20   space required 
30a80 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  for sub-program 
30a90 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 74 3b 20 20  */.  Mem *pRt;  
30aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
30ab0 52 65 67 69 73 74 65 72 20 74 6f 20 61 6c 6c 6f  Register to allo
30ac0 63 61 74 65 20 72 75 6e 74 69 6d 65 20 73 70 61  cate runtime spa
30ad0 63 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  ce */.  Mem *pMe
30ae0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
30af0 2f 2a 20 55 73 65 64 20 74 6f 20 69 74 65 72 61  /* Used to itera
30b00 74 65 20 74 68 72 6f 75 67 68 20 6d 65 6d 6f 72  te through memor
30b10 79 20 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d  y cells */.  Mem
30b20 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20   *pEnd;         
30b30 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 6d 65 6d       /* Last mem
30b40 6f 72 79 20 63 65 6c 6c 20 69 6e 20 6e 65 77 20  ory cell in new 
30b50 61 72 72 61 79 20 2a 2f 0a 20 20 56 64 62 65 46  array */.  VdbeF
30b60 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20  rame *pFrame;   
30b70 20 20 20 2f 2a 20 4e 65 77 20 76 64 62 65 20 66     /* New vdbe f
30b80 72 61 6d 65 20 74 6f 20 65 78 65 63 75 74 65 20  rame to execute 
30b90 69 6e 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72  in */.  SubProgr
30ba0 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20  am *pProgram;   
30bb0 2f 2a 20 53 75 62 2d 70 72 6f 67 72 61 6d 20 74  /* Sub-program t
30bc0 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a 20 20 76  o execute */.  v
30bd0 6f 69 64 20 2a 74 3b 20 20 20 20 20 20 20 20 20  oid *t;         
30be0 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
30bf0 69 64 65 6e 74 69 66 79 69 6e 67 20 74 72 69 67  identifying trig
30c00 67 65 72 20 2a 2f 0a 0a 20 20 70 50 72 6f 67 72  ger */..  pProgr
30c10 61 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 50 72  am = pOp->p4.pPr
30c20 6f 67 72 61 6d 3b 0a 20 20 70 52 74 20 3d 20 26  ogram;.  pRt = &
30c30 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
30c40 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61   assert( pProgra
30c50 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a 20  m->nOp>0 );.  . 
30c60 20 2f 2a 20 49 66 20 74 68 65 20 70 35 20 66 6c   /* If the p5 fl
30c70 61 67 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65  ag is clear, the
30c80 6e 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f  n recursive invo
30c90 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65  cation of trigge
30ca0 72 73 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61  rs is .  ** disa
30cb0 62 6c 65 64 20 66 6f 72 20 62 61 63 6b 77 61 72  bled for backwar
30cc0 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  ds compatibility
30cd0 20 28 70 35 20 69 73 20 73 65 74 20 69 66 20 74   (p5 is set if t
30ce0 68 69 73 20 73 75 62 2d 70 72 6f 67 72 61 6d 0a  his sub-program.
30cf0 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79 20 61    ** is really a
30d00 20 74 72 69 67 67 65 72 2c 20 6e 6f 74 20 61 20   trigger, not a 
30d10 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69  foreign key acti
30d20 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c 61 67  on, and the flag
30d30 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20 63 6c   set.  ** and cl
30d40 65 61 72 65 64 20 62 79 20 74 68 65 20 22 50 52  eared by the "PR
30d50 41 47 4d 41 20 72 65 63 75 72 73 69 76 65 5f 74  AGMA recursive_t
30d60 72 69 67 67 65 72 73 22 20 63 6f 6d 6d 61 6e 64  riggers" command
30d70 20 69 73 20 63 6c 65 61 72 29 2e 0a 20 20 2a 2a   is clear)..  **
30d80 20 0a 20 20 2a 2a 20 49 74 20 69 73 20 72 65 63   .  ** It is rec
30d90 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f  ursive invocatio
30da0 6e 20 6f 66 20 74 72 69 67 67 65 72 73 2c 20 61  n of triggers, a
30db0 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c  t the SQL level,
30dc0 20 74 68 61 74 20 69 73 20 0a 20 20 2a 2a 20 64   that is .  ** d
30dd0 69 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f 6d 65  isabled. In some
30de0 20 63 61 73 65 73 20 61 20 73 69 6e 67 6c 65 20   cases a single 
30df0 74 72 69 67 67 65 72 20 6d 61 79 20 67 65 6e 65  trigger may gene
30e00 72 61 74 65 20 6d 6f 72 65 20 74 68 61 6e 20 6f  rate more than o
30e10 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50 72 6f 67  ne .  ** SubProg
30e20 72 61 6d 20 28 69 66 20 74 68 65 20 74 72 69 67  ram (if the trig
30e30 67 65 72 20 6d 61 79 20 62 65 20 65 78 65 63 75  ger may be execu
30e40 74 65 64 20 77 69 74 68 20 6d 6f 72 65 20 74 68  ted with more th
30e50 61 6e 20 6f 6e 65 20 64 69 66 66 65 72 65 6e 74  an one different
30e60 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49   .  ** ON CONFLI
30e70 43 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e 20 53  CT algorithm). S
30e80 75 62 50 72 6f 67 72 61 6d 20 73 74 72 75 63 74  ubProgram struct
30e90 75 72 65 73 20 61 73 73 6f 63 69 61 74 65 64 20  ures associated 
30ea0 77 69 74 68 20 61 0a 20 20 2a 2a 20 73 69 6e 67  with a.  ** sing
30eb0 6c 65 20 74 72 69 67 67 65 72 20 61 6c 6c 20 68  le trigger all h
30ec0 61 76 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c  ave the same val
30ed0 75 65 20 66 6f 72 20 74 68 65 20 53 75 62 50 72  ue for the SubPr
30ee0 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a  ogram.token .  *
30ef0 2a 20 76 61 72 69 61 62 6c 65 2e 20 20 2a 2f 0a  * variable.  */.
30f00 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b    if( pOp->p5 ){
30f10 0a 20 20 20 20 74 20 3d 20 70 50 72 6f 67 72 61  .    t = pProgra
30f20 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f  m->token;.    fo
30f30 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61  r(pFrame=p->pFra
30f40 6d 65 3b 20 70 46 72 61 6d 65 20 26 26 20 70 46  me; pFrame && pF
30f50 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20  rame->token!=t; 
30f60 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70  pFrame=pFrame->p
30f70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 69 66 28  Parent);.    if(
30f80 20 70 46 72 61 6d 65 20 29 20 62 72 65 61 6b 3b   pFrame ) break;
30f90 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e  .  }..  if( p->n
30fa0 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69  Frame>=db->aLimi
30fb0 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54  t[SQLITE_LIMIT_T
30fc0 52 49 47 47 45 52 5f 44 45 50 54 48 5d 20 29 7b  RIGGER_DEPTH] ){
30fd0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
30fe0 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69  _ERROR;.    sqli
30ff0 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
31000 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c 73  "too many levels
31010 20 6f 66 20 74 72 69 67 67 65 72 20 72 65 63 75   of trigger recu
31020 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20 67 6f 74  rsion");.    got
31030 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
31040 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  rror;.  }..  /* 
31050 52 65 67 69 73 74 65 72 20 70 52 74 20 69 73 20  Register pRt is 
31060 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
31070 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  e memory require
31080 64 20 74 6f 20 73 61 76 65 20 74 68 65 20 73 74  d to save the st
31090 61 74 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20  ate.  ** of the 
310a0 63 75 72 72 65 6e 74 20 70 72 6f 67 72 61 6d 2c  current program,
310b0 20 61 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20   and the memory 
310c0 72 65 71 75 69 72 65 64 20 61 74 20 72 75 6e 74  required at runt
310d0 69 6d 65 20 74 6f 20 65 78 65 63 75 74 65 0a 20  ime to execute. 
310e0 20 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20   ** the trigger 
310f0 70 72 6f 67 72 61 6d 2e 20 49 66 20 74 68 69 73  program. If this
31100 20 74 72 69 67 67 65 72 20 68 61 73 20 62 65 65   trigger has bee
31110 6e 20 66 69 72 65 64 20 62 65 66 6f 72 65 2c 20  n fired before, 
31120 74 68 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20 69  then pRt .  ** i
31130 73 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61  s already alloca
31140 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ted. Otherwise, 
31150 69 74 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69  it must be initi
31160 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69 66  alized.  */.  if
31170 28 20 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d 45  ( (pRt->flags&ME
31180 4d 5f 46 72 61 6d 65 29 3d 3d 30 20 29 7b 0a 20  M_Frame)==0 ){. 
31190 20 20 20 2f 2a 20 53 75 62 50 72 6f 67 72 61 6d     /* SubProgram
311a0 2e 6e 4d 65 6d 20 69 73 20 73 65 74 20 74 6f 20  .nMem is set to 
311b0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65  the number of me
311c0 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20  mory cells used 
311d0 62 79 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 70  by the .    ** p
311e0 72 6f 67 72 61 6d 20 73 74 6f 72 65 64 20 69 6e  rogram stored in
311f0 20 53 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70 2e   SubProgram.aOp.
31200 20 41 73 20 77 65 6c 6c 20 61 73 20 74 68 65 73   As well as thes
31210 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20 20  e, one memory.  
31220 20 20 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65 71    ** cell is req
31230 75 69 72 65 64 20 66 6f 72 20 65 61 63 68 20 63  uired for each c
31240 75 72 73 6f 72 20 75 73 65 64 20 62 79 20 74 68  ursor used by th
31250 65 20 70 72 6f 67 72 61 6d 2e 20 53 65 74 20 6c  e program. Set l
31260 6f 63 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72 69  ocal.    ** vari
31270 61 62 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20 6c  able nMem (and l
31280 61 74 65 72 2c 20 56 64 62 65 46 72 61 6d 65 2e  ater, VdbeFrame.
31290 6e 43 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74 68  nChildMem) to th
312a0 69 73 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f  is value..    */
312b0 0a 20 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72 6f  .    nMem = pPro
312c0 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72  gram->nMem + pPr
312d0 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20  ogram->nCsr;.   
312e0 20 61 73 73 65 72 74 28 20 6e 4d 65 6d 3e 30 20   assert( nMem>0 
312f0 29 3b 0a 20 20 20 20 69 66 28 20 70 50 72 6f 67  );.    if( pProg
31300 72 61 6d 2d 3e 6e 43 73 72 3d 3d 30 20 29 20 6e  ram->nCsr==0 ) n
31310 4d 65 6d 2b 2b 3b 0a 20 20 20 20 6e 42 79 74 65  Mem++;.    nByte
31320 20 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66   = ROUND8(sizeof
31330 28 56 64 62 65 46 72 61 6d 65 29 29 0a 20 20 20  (VdbeFrame)).   
31340 20 20 20 20 20 20 20 20 20 20 20 2b 20 6e 4d 65             + nMe
31350 6d 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d 29 0a  m * sizeof(Mem).
31360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20                + 
31370 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 20 2a  pProgram->nCsr *
31380 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73   sizeof(VdbeCurs
31390 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20 20 20  or*).           
313a0 20 20 20 2b 20 28 70 50 72 6f 67 72 61 6d 2d 3e     + (pProgram->
313b0 6e 4f 70 20 2b 20 37 29 2f 38 3b 0a 20 20 20 20  nOp + 7)/8;.    
313c0 70 46 72 61 6d 65 20 3d 20 73 71 6c 69 74 65 33  pFrame = sqlite3
313d0 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c  DbMallocZero(db,
313e0 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 69 66 28   nByte);.    if(
313f0 20 21 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20   !pFrame ){.    
31400 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
31410 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
31420 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70  VdbeMemRelease(p
31430 52 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66 6c  Rt);.    pRt->fl
31440 61 67 73 20 3d 20 4d 45 4d 5f 46 72 61 6d 65 3b  ags = MEM_Frame;
31450 0a 20 20 20 20 70 52 74 2d 3e 75 2e 70 46 72 61  .    pRt->u.pFra
31460 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 0a 20 20  me = pFrame;..  
31470 20 20 70 46 72 61 6d 65 2d 3e 76 20 3d 20 70 3b    pFrame->v = p;
31480 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68  .    pFrame->nCh
31490 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20  ildMem = nMem;. 
314a0 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c     pFrame->nChil
314b0 64 43 73 72 20 3d 20 70 50 72 6f 67 72 61 6d 2d  dCsr = pProgram-
314c0 3e 6e 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d  >nCsr;.    pFram
314d0 65 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f  e->pc = (int)(pO
314e0 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 70 46  p - aOp);.    pF
314f0 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70 2d 3e  rame->aMem = p->
31500 61 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65  aMem;.    pFrame
31510 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d 65 6d  ->nMem = p->nMem
31520 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 70  ;.    pFrame->ap
31530 43 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 3b 0a  Csr = p->apCsr;.
31540 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 75 72      pFrame->nCur
31550 73 6f 72 20 3d 20 70 2d 3e 6e 43 75 72 73 6f 72  sor = p->nCursor
31560 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f  ;.    pFrame->aO
31570 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20  p = p->aOp;.    
31580 70 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20 70 2d  pFrame->nOp = p-
31590 3e 6e 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65  >nOp;.    pFrame
315a0 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50 72 6f 67 72  ->token = pProgr
315b0 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 23 69 66 64 65  am->token;.#ifde
315c0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
315d0 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 0a  STMT_SCANSTATUS.
315e0 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 6e 45 78      pFrame->anEx
315f0 65 63 20 3d 20 70 2d 3e 61 6e 45 78 65 63 3b 0a  ec = p->anExec;.
31600 23 65 6e 64 69 66 0a 0a 20 20 20 20 70 45 6e 64  #endif..    pEnd
31610 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65 6d   = &VdbeFrameMem
31620 28 70 46 72 61 6d 65 29 5b 70 46 72 61 6d 65 2d  (pFrame)[pFrame-
31630 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a 20 20 20  >nChildMem];.   
31640 20 66 6f 72 28 70 4d 65 6d 3d 56 64 62 65 46 72   for(pMem=VdbeFr
31650 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 3b 20  ameMem(pFrame); 
31660 70 4d 65 6d 21 3d 70 45 6e 64 3b 20 70 4d 65 6d  pMem!=pEnd; pMem
31670 2b 2b 29 7b 0a 20 20 20 20 20 20 70 4d 65 6d 2d  ++){.      pMem-
31680 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64  >flags = MEM_Und
31690 65 66 69 6e 65 64 3b 0a 20 20 20 20 20 20 70 4d  efined;.      pM
316a0 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20 20  em->db = db;.   
316b0 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
316c0 70 46 72 61 6d 65 20 3d 20 70 52 74 2d 3e 75 2e  pFrame = pRt->u.
316d0 70 46 72 61 6d 65 3b 0a 20 20 20 20 61 73 73 65  pFrame;.    asse
316e0 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d  rt( pProgram->nM
316f0 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73  em+pProgram->nCs
31700 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  r==pFrame->nChil
31710 64 4d 65 6d 20 0a 20 20 20 20 20 20 20 20 7c 7c  dMem .        ||
31720 20 28 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72   (pProgram->nCsr
31730 3d 3d 30 20 26 26 20 70 50 72 6f 67 72 61 6d 2d  ==0 && pProgram-
31740 3e 6e 4d 65 6d 2b 31 3d 3d 70 46 72 61 6d 65 2d  >nMem+1==pFrame-
31750 3e 6e 43 68 69 6c 64 4d 65 6d 29 20 29 3b 0a 20  >nChildMem) );. 
31760 20 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67     assert( pProg
31770 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d  ram->nCsr==pFram
31780 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 29 3b 0a  e->nChildCsr );.
31790 20 20 20 20 61 73 73 65 72 74 28 20 28 69 6e 74      assert( (int
317a0 29 28 70 4f 70 20 2d 20 61 4f 70 29 3d 3d 70 46  )(pOp - aOp)==pF
317b0 72 61 6d 65 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a  rame->pc );.  }.
317c0 0a 20 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a  .  p->nFrame++;.
317d0 20 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e    pFrame->pParen
317e0 74 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20  t = p->pFrame;. 
317f0 20 70 46 72 61 6d 65 2d 3e 6c 61 73 74 52 6f 77   pFrame->lastRow
31800 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77  id = db->lastRow
31810 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 43  id;.  pFrame->nC
31820 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61 6e  hange = p->nChan
31830 67 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 44  ge;.  pFrame->nD
31840 62 43 68 61 6e 67 65 20 3d 20 70 2d 3e 64 62 2d  bChange = p->db-
31850 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 61 73 73 65  >nChange;.  asse
31860 72 74 28 20 70 46 72 61 6d 65 2d 3e 70 41 75 78  rt( pFrame->pAux
31870 44 61 74 61 3d 3d 30 20 29 3b 0a 20 20 70 46 72  Data==0 );.  pFr
31880 61 6d 65 2d 3e 70 41 75 78 44 61 74 61 20 3d 20  ame->pAuxData = 
31890 70 2d 3e 70 41 75 78 44 61 74 61 3b 0a 20 20 70  p->pAuxData;.  p
318a0 2d 3e 70 41 75 78 44 61 74 61 20 3d 20 30 3b 0a  ->pAuxData = 0;.
318b0 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30    p->nChange = 0
318c0 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20  ;.  p->pFrame = 
318d0 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d 65  pFrame;.  p->aMe
318e0 6d 20 3d 20 61 4d 65 6d 20 3d 20 56 64 62 65 46  m = aMem = VdbeF
318f0 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 3b  rameMem(pFrame);
31900 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70 46 72  .  p->nMem = pFr
31910 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 3b 0a  ame->nChildMem;.
31920 20 20 70 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 28    p->nCursor = (
31930 75 31 36 29 70 46 72 61 6d 65 2d 3e 6e 43 68 69  u16)pFrame->nChi
31940 6c 64 43 73 72 3b 0a 20 20 70 2d 3e 61 70 43 73  ldCsr;.  p->apCs
31950 72 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72 20  r = (VdbeCursor 
31960 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d  **)&aMem[p->nMem
31970 5d 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 61 4f 6e  ];.  pFrame->aOn
31980 63 65 20 3d 20 28 75 38 2a 29 26 70 2d 3e 61 70  ce = (u8*)&p->ap
31990 43 73 72 5b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  Csr[pProgram->nC
319a0 73 72 5d 3b 0a 20 20 6d 65 6d 73 65 74 28 70 46  sr];.  memset(pF
319b0 72 61 6d 65 2d 3e 61 4f 6e 63 65 2c 20 30 2c 20  rame->aOnce, 0, 
319c0 28 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 20 2b  (pProgram->nOp +
319d0 20 37 29 2f 38 29 3b 0a 20 20 70 2d 3e 61 4f 70   7)/8);.  p->aOp
319e0 20 3d 20 61 4f 70 20 3d 20 70 50 72 6f 67 72 61   = aOp = pProgra
319f0 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e 6e 4f 70  m->aOp;.  p->nOp
31a00 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70   = pProgram->nOp
31a10 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
31a20 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e  ENABLE_STMT_SCAN
31a30 53 54 41 54 55 53 0a 20 20 70 2d 3e 61 6e 45 78  STATUS.  p->anEx
31a40 65 63 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20  ec = 0;.#endif. 
31a50 20 70 4f 70 20 3d 20 26 61 4f 70 5b 2d 31 5d 3b   pOp = &aOp[-1];
31a60 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ..  break;.}../*
31a70 20 4f 70 63 6f 64 65 3a 20 50 61 72 61 6d 20 50   Opcode: Param P
31a80 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
31a90 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
31aa0 6f 6e 6c 79 20 65 76 65 72 20 70 72 65 73 65 6e  only ever presen
31ab0 74 20 69 6e 20 73 75 62 2d 70 72 6f 67 72 61 6d  t in sub-program
31ac0 73 20 63 61 6c 6c 65 64 20 76 69 61 20 74 68 65  s called via the
31ad0 20 0a 2a 2a 20 4f 50 5f 50 72 6f 67 72 61 6d 20   .** OP_Program 
31ae0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 43 6f 70  instruction. Cop
31af0 79 20 61 20 76 61 6c 75 65 20 63 75 72 72 65 6e  y a value curren
31b00 74 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20  tly stored in a 
31b10 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20  memory .** cell 
31b20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 28  of the calling (
31b30 70 61 72 65 6e 74 29 20 66 72 61 6d 65 20 74 6f  parent) frame to
31b40 20 63 65 6c 6c 20 50 32 20 69 6e 20 74 68 65 20   cell P2 in the 
31b50 63 75 72 72 65 6e 74 20 66 72 61 6d 65 73 20 0a  current frames .
31b60 2a 2a 20 61 64 64 72 65 73 73 20 73 70 61 63 65  ** address space
31b70 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62  . This is used b
31b80 79 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  y trigger progra
31b90 6d 73 20 74 6f 20 61 63 63 65 73 73 20 74 68 65  ms to access the
31ba0 20 6e 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f   new.* .** and o
31bb0 6c 64 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a  ld.* values..**.
31bc0 2a 2a 20 54 68 65 20 61 64 64 72 65 73 73 20 6f  ** The address o
31bd0 66 20 74 68 65 20 63 65 6c 6c 20 69 6e 20 74 68  f the cell in th
31be0 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65 20 69  e parent frame i
31bf0 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
31c00 61 64 64 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61  adding.** the va
31c10 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20 61 72  lue of the P1 ar
31c20 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 76 61  gument to the va
31c30 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20 61 72  lue of the P1 ar
31c40 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 0a 2a 2a  gument to the.**
31c50 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67   calling OP_Prog
31c60 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ram instruction.
31c70 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 61  .*/.case OP_Para
31c80 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  m: {           /
31c90 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62 65  * out2 */.  Vdbe
31ca0 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20  Frame *pFrame;. 
31cb0 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20 70 4f 75   Mem *pIn;.  pOu
31cc0 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
31cd0 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 46  se(p, pOp);.  pF
31ce0 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65  rame = p->pFrame
31cf0 3b 0a 20 20 70 49 6e 20 3d 20 26 70 46 72 61 6d  ;.  pIn = &pFram
31d00 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20  e->aMem[pOp->p1 
31d10 2b 20 70 46 72 61 6d 65 2d 3e 61 4f 70 5b 70 46  + pFrame->aOp[pF
31d20 72 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20  rame->pc].p1];  
31d30 20 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d   .  sqlite3VdbeM
31d40 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
31d50 75 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45 70 68  ut, pIn, MEM_Eph
31d60 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  em);.  break;.}.
31d70 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64  .#endif /* #ifnd
31d80 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
31d90 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69 66 6e 64  RIGGER */..#ifnd
31da0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
31db0 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70  OREIGN_KEY./* Op
31dc0 63 6f 64 65 3a 20 46 6b 43 6f 75 6e 74 65 72 20  code: FkCounter 
31dd0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
31de0 79 6e 6f 70 73 69 73 3a 20 66 6b 63 74 72 5b 50  ynopsis: fkctr[P
31df0 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20 49 6e 63  1]+=P2.**.** Inc
31e00 72 65 6d 65 6e 74 20 61 20 22 63 6f 6e 73 74 72  rement a "constr
31e10 61 69 6e 74 20 63 6f 75 6e 74 65 72 22 20 62 79  aint counter" by
31e20 20 50 32 20 28 50 32 20 6d 61 79 20 62 65 20 6e   P2 (P2 may be n
31e30 65 67 61 74 69 76 65 20 6f 72 20 70 6f 73 69 74  egative or posit
31e40 69 76 65 29 2e 0a 2a 2a 20 49 66 20 50 31 20 69  ive)..** If P1 i
31e50 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20  s non-zero, the 
31e60 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61  database constra
31e70 69 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69  int counter is i
31e80 6e 63 72 65 6d 65 6e 74 65 64 20 0a 2a 2a 20 28  ncremented .** (
31e90 64 65 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e  deferred foreign
31ea0 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
31eb0 29 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66  ). Otherwise, if
31ec0 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65   P1 is zero, the
31ed0 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 63   .** statement c
31ee0 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d  ounter is increm
31ef0 65 6e 74 65 64 20 28 69 6d 6d 65 64 69 61 74 65  ented (immediate
31f00 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
31f10 73 74 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61  straints)..*/.ca
31f20 73 65 20 4f 50 5f 46 6b 43 6f 75 6e 74 65 72 3a  se OP_FkCounter:
31f30 20 7b 0a 20 20 69 66 28 20 64 62 2d 3e 66 6c 61   {.  if( db->fla
31f40 67 73 20 26 20 53 51 4c 49 54 45 5f 44 65 66 65  gs & SQLITE_Defe
31f50 72 46 4b 73 20 29 7b 0a 20 20 20 20 64 62 2d 3e  rFKs ){.    db->
31f60 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
31f70 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d   += pOp->p2;.  }
31f80 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 31  else if( pOp->p1
31f90 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66   ){.    db->nDef
31fa0 65 72 72 65 64 43 6f 6e 73 20 2b 3d 20 70 4f 70  erredCons += pOp
31fb0 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ->p2;.  }else{. 
31fc0 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61     p->nFkConstra
31fd0 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a  int += pOp->p2;.
31fe0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
31ff0 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 49 66 5a  /* Opcode: FkIfZ
32000 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ero P1 P2 * * *.
32010 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
32020 66 6b 63 74 72 5b 50 31 5d 3d 3d 30 20 67 6f 74  fkctr[P1]==0 got
32030 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  o P2.**.** This 
32040 6f 70 63 6f 64 65 20 74 65 73 74 73 20 69 66 20  opcode tests if 
32050 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  a foreign key co
32060 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72  nstraint-counter
32070 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 7a 65   is currently ze
32080 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a 75  ro..** If so, ju
32090 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
320a0 6e 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c  n P2. Otherwise,
320b0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
320c0 20 74 68 65 20 6e 65 78 74 20 0a 2a 2a 20 69 6e   the next .** in
320d0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
320e0 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65   If P1 is non-ze
320f0 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 6a 75 6d  ro, then the jum
32100 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68  p is taken if th
32110 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74  e database const
32120 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a  raint-counter.**
32130 20 69 73 20 7a 65 72 6f 20 28 74 68 65 20 6f 6e   is zero (the on
32140 65 20 74 68 61 74 20 63 6f 75 6e 74 73 20 64 65  e that counts de
32150 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e  ferred constrain
32160 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 20 49  t violations). I
32170 66 20 50 31 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c  f P1 is.** zero,
32180 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
32190 65 6e 20 69 66 20 74 68 65 20 73 74 61 74 65 6d  en if the statem
321a0 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63  ent constraint-c
321b0 6f 75 6e 74 65 72 20 69 73 20 7a 65 72 6f 0a 2a  ounter is zero.*
321c0 2a 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72  * (immediate for
321d0 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
321e0 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e  int violations).
321f0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 49 66  .*/.case OP_FkIf
32200 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 20  Zero: {         
32210 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28  /* jump */.  if(
32220 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20   pOp->p1 ){.    
32230 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
32240 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
32250 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66  s==0 && db->nDef
32260 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c  erredImmCons==0,
32270 20 32 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d   2);.    if( db-
32280 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d  >nDeferredCons==
32290 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72  0 && db->nDeferr
322a0 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 67  edImmCons==0 ) g
322b0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
322c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62    }else{.    Vdb
322d0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 2d 3e  eBranchTaken(p->
322e0 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30  nFkConstraint==0
322f0 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   && db->nDeferre
32300 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b  dImmCons==0, 2);
32310 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e 46 6b 43  .    if( p->nFkC
32320 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26 26 20  onstraint==0 && 
32330 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
32340 43 6f 6e 73 3d 3d 30 20 29 20 67 6f 74 6f 20 6a  Cons==0 ) goto j
32350 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
32360 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
32370 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49   /* #ifndef SQLI
32380 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
32390 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  KEY */..#ifndef 
323a0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
323b0 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63  INCREMENT./* Opc
323c0 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50  ode: MemMax P1 P
323d0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
323e0 73 69 73 3a 20 72 5b 50 31 5d 3d 6d 61 78 28 72  sis: r[P1]=max(r
323f0 5b 50 31 5d 2c 72 5b 50 32 5d 29 0a 2a 2a 0a 2a  [P1],r[P2]).**.*
32400 2a 20 50 31 20 69 73 20 61 20 72 65 67 69 73 74  * P1 is a regist
32410 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66  er in the root f
32420 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56 4d 20  rame of this VM 
32430 28 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20  (the root frame 
32440 69 73 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20  is.** different 
32450 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74  from the current
32460 20 66 72 61 6d 65 20 69 66 20 74 68 69 73 20 69   frame if this i
32470 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 62 65  nstruction is be
32480 69 6e 67 20 65 78 65 63 75 74 65 64 0a 2a 2a 20  ing executed.** 
32490 77 69 74 68 69 6e 20 61 20 73 75 62 2d 70 72 6f  within a sub-pro
324a0 67 72 61 6d 29 2e 20 53 65 74 20 74 68 65 20 76  gram). Set the v
324b0 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
324c0 20 50 31 20 74 6f 20 74 68 65 20 6d 61 78 69 6d   P1 to the maxim
324d0 75 6d 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63 75  um of .** its cu
324e0 72 72 65 6e 74 20 76 61 6c 75 65 20 61 6e 64 20  rrent value and 
324f0 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
32500 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
32510 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
32520 20 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72   throws an error
32530 20 69 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63   if the memory c
32540 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74 69  ell is not initi
32550 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67  ally.** an integ
32560 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  er..*/.case OP_M
32570 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20 20 20  emMax: {        
32580 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65  /* in2 */.  Vdbe
32590 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20  Frame *pFrame;. 
325a0 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29   if( p->pFrame )
325b0 7b 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65  {.    for(pFrame
325c0 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61  =p->pFrame; pFra
325d0 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72  me->pParent; pFr
325e0 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72  ame=pFrame->pPar
325f0 65 6e 74 29 3b 0a 20 20 20 20 70 49 6e 31 20 3d  ent);.    pIn1 =
32600 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70   &pFrame->aMem[p
32610 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73 65  Op->p1];.  }else
32620 7b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 61 4d  {.    pIn1 = &aM
32630 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d  em[pOp->p1];.  }
32640 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  .  assert( memIs
32650 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20  Valid(pIn1) );. 
32660 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
32670 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b  ntegerify(pIn1);
32680 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
32690 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69  pOp->p2];.  sqli
326a0 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
326b0 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 69 66  rify(pIn2);.  if
326c0 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32  ( pIn1->u.i<pIn2
326d0 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31  ->u.i){.    pIn1
326e0 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e  ->u.i = pIn2->u.
326f0 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  i;.  }.  break;.
32700 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
32710 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
32720 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  EMENT */../* Opc
32730 6f 64 65 3a 20 49 66 50 6f 73 20 50 31 20 50 32  ode: IfPos P1 P2
32740 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
32750 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20  sis: if r[P1]>0 
32760 74 68 65 6e 20 72 5b 50 31 5d 2d 3d 50 33 2c 20  then r[P1]-=P3, 
32770 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65  goto P2.**.** Re
32780 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20 63  gister P1 must c
32790 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65  ontain an intege
327a0 72 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  r..** If the val
327b0 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
327c0 31 20 69 73 20 31 20 6f 72 20 67 72 65 61 74 65  1 is 1 or greate
327d0 72 2c 20 73 75 62 74 72 61 63 74 20 50 33 20 66  r, subtract P3 f
327e0 72 6f 6d 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65  rom the.** value
327f0 20 69 6e 20 50 31 20 61 6e 64 20 6a 75 6d 70 20   in P1 and jump 
32800 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  to P2..**.** If 
32810 74 68 65 20 69 6e 69 74 69 61 6c 20 76 61 6c 75  the initial valu
32820 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  e of register P1
32830 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 31 2c   is less than 1,
32840 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c   then the.** val
32850 75 65 20 69 73 20 75 6e 63 68 61 6e 67 65 64 20  ue is unchanged 
32860 61 6e 64 20 63 6f 6e 74 72 6f 6c 20 70 61 73 73  and control pass
32870 65 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  es through to th
32880 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
32890 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  on..*/.case OP_I
328a0 66 50 6f 73 3a 20 7b 20 20 20 20 20 20 20 20 2f  fPos: {        /
328b0 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
328c0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
328d0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
328e0 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45  ( pIn1->flags&ME
328f0 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62 65 42  M_Int );.  VdbeB
32900 72 61 6e 63 68 54 61 6b 65 6e 28 20 70 49 6e 31  ranchTaken( pIn1
32910 2d 3e 75 2e 69 3e 30 2c 20 32 29 3b 0a 20 20 69  ->u.i>0, 2);.  i
32920 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29  f( pIn1->u.i>0 )
32930 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20  {.    pIn1->u.i 
32940 2d 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20  -= pOp->p3;.    
32950 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
32960 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
32970 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 66 66 73  ./* Opcode: Offs
32980 65 74 4c 69 6d 69 74 20 50 31 20 50 32 20 50 33  etLimit P1 P2 P3
32990 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
329a0 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20 74 68 65  : if r[P1]>0 the
329b0 6e 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 2b 6d 61  n r[P2]=r[P1]+ma
329c0 78 28 30 2c 72 5b 50 33 5d 29 20 65 6c 73 65 20  x(0,r[P3]) else 
329d0 72 5b 50 32 5d 3d 28 2d 31 29 0a 2a 2a 0a 2a 2a  r[P2]=(-1).**.**
329e0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 70 65 72   This opcode per
329f0 66 6f 72 6d 73 20 61 20 63 6f 6d 6d 6f 6e 6c 79  forms a commonly
32a00 20 75 73 65 64 20 63 6f 6d 70 75 74 61 74 69 6f   used computatio
32a10 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  n associated wit
32a20 68 0a 2a 2a 20 4c 49 4d 49 54 20 61 6e 64 20 4f  h.** LIMIT and O
32a30 46 46 53 45 54 20 70 72 6f 63 65 73 73 2e 20 20  FFSET process.  
32a40 72 5b 50 31 5d 20 68 6f 6c 64 73 20 74 68 65 20  r[P1] holds the 
32a50 6c 69 6d 69 74 20 63 6f 75 6e 74 65 72 2e 20 20  limit counter.  
32a60 72 5b 50 33 5d 0a 2a 2a 20 68 6f 6c 64 73 20 74  r[P3].** holds t
32a70 68 65 20 6f 66 66 73 65 74 20 63 6f 75 6e 74 65  he offset counte
32a80 72 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 20 63  r.  The opcode c
32a90 6f 6d 70 75 74 65 73 20 74 68 65 20 63 6f 6d 62  omputes the comb
32aa0 69 6e 65 64 20 76 61 6c 75 65 0a 2a 2a 20 6f 66  ined value.** of
32ab0 20 74 68 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f   the LIMIT and O
32ac0 46 46 53 45 54 20 61 6e 64 20 73 74 6f 72 65 73  FFSET and stores
32ad0 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 20 72   that value in r
32ae0 5b 50 32 5d 2e 20 20 54 68 65 20 72 5b 50 32 5d  [P2].  The r[P2]
32af0 0a 2a 2a 20 76 61 6c 75 65 20 63 6f 6d 70 75 74  .** value comput
32b00 65 64 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20  ed is the total 
32b10 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 74  number of rows t
32b20 68 61 74 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f  hat will need to
32b30 20 62 65 0a 2a 2a 20 76 69 73 69 74 65 64 20 69   be.** visited i
32b40 6e 20 6f 72 64 65 72 20 74 6f 20 63 6f 6d 70 6c  n order to compl
32b50 65 74 65 20 74 68 65 20 71 75 65 72 79 2e 0a 2a  ete the query..*
32b60 2a 0a 2a 2a 20 49 66 20 72 5b 50 33 5d 20 69 73  *.** If r[P3] is
32b70 20 7a 65 72 6f 20 6f 72 20 6e 65 67 61 74 69 76   zero or negativ
32b80 65 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68  e, that means th
32b90 65 72 65 20 69 73 20 6e 6f 20 4f 46 46 53 45 54  ere is no OFFSET
32ba0 0a 2a 2a 20 61 6e 64 20 72 5b 50 32 5d 20 69 73  .** and r[P2] is
32bb0 20 73 65 74 20 74 6f 20 62 65 20 74 68 65 20 76   set to be the v
32bc0 61 6c 75 65 20 6f 66 20 74 68 65 20 4c 49 4d 49  alue of the LIMI
32bd0 54 2c 20 72 5b 50 31 5d 2e 0a 2a 2a 0a 2a 2a 20  T, r[P1]..**.** 
32be0 69 66 20 72 5b 50 31 5d 20 69 73 20 7a 65 72 6f  if r[P1] is zero
32bf0 20 6f 72 20 6e 65 67 61 74 69 76 65 2c 20 74 68   or negative, th
32c00 61 74 20 6d 65 61 6e 73 20 74 68 65 72 65 20 69  at means there i
32c10 73 20 6e 6f 20 4c 49 4d 49 54 0a 2a 2a 20 61 6e  s no LIMIT.** an
32c20 64 20 72 5b 50 32 5d 20 69 73 20 73 65 74 20 74  d r[P2] is set t
32c30 6f 20 2d 31 2e 20 0a 2a 2a 0a 2a 2a 20 4f 74 68  o -1. .**.** Oth
32c40 65 72 77 69 73 65 2c 20 72 5b 50 32 5d 20 69 73  erwise, r[P2] is
32c50 20 73 65 74 20 74 6f 20 74 68 65 20 73 75 6d 20   set to the sum 
32c60 6f 66 20 72 5b 50 31 5d 20 61 6e 64 20 72 5b 50  of r[P1] and r[P
32c70 33 5d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  3]..*/.case OP_O
32c80 66 66 73 65 74 4c 69 6d 69 74 3a 20 7b 20 20 20  ffsetLimit: {   
32c90 20 2f 2a 20 69 6e 31 2c 20 6f 75 74 32 2c 20 69   /* in1, out2, i
32ca0 6e 33 20 2a 2f 0a 20 20 69 36 34 20 78 3b 0a 20  n3 */.  i64 x;. 
32cb0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
32cc0 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d  p->p1];.  pIn3 =
32cd0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
32ce0 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
32cf0 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
32d00 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
32d10 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
32d20 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t );.  assert( p
32d30 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
32d40 5f 49 6e 74 20 29 3b 0a 20 20 78 20 3d 20 70 49  _Int );.  x = pI
32d50 6e 31 2d 3e 75 2e 69 3b 0a 20 20 69 66 28 20 78  n1->u.i;.  if( x
32d60 3c 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33 41 64  <=0 || sqlite3Ad
32d70 64 49 6e 74 36 34 28 26 78 2c 20 70 49 6e 33 2d  dInt64(&x, pIn3-
32d80 3e 75 2e 69 3e 30 3f 70 49 6e 33 2d 3e 75 2e 69  >u.i>0?pIn3->u.i
32d90 3a 30 29 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  :0) ){.    /* If
32da0 20 74 68 65 20 4c 49 4d 49 54 20 69 73 20 6c 65   the LIMIT is le
32db0 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
32dc0 20 74 6f 20 7a 65 72 6f 2c 20 6c 6f 6f 70 20 66   to zero, loop f
32dd0 6f 72 65 76 65 72 2e 20 20 54 68 69 73 0a 20 20  orever.  This.  
32de0 20 20 2a 2a 20 69 73 20 64 6f 63 75 6d 65 6e 74    ** is document
32df0 65 64 2e 20 20 42 75 74 20 61 6c 73 6f 2c 20 69  ed.  But also, i
32e00 66 20 74 68 65 20 4c 49 4d 49 54 2b 4f 46 46 53  f the LIMIT+OFFS
32e10 45 54 20 65 78 63 65 65 64 73 20 32 5e 36 33 20  ET exceeds 2^63 
32e20 74 68 65 6e 0a 20 20 20 20 2a 2a 20 61 6c 73 6f  then.    ** also
32e30 20 6c 6f 6f 70 20 66 6f 72 65 76 65 72 2e 20 20   loop forever.  
32e40 54 68 69 73 20 69 73 20 75 6e 64 6f 63 75 6d 65  This is undocume
32e50 6e 74 65 64 2e 20 20 49 6e 20 66 61 63 74 2c 20  nted.  In fact, 
32e60 6f 6e 65 20 63 6f 75 6c 64 20 61 72 67 75 65 0a  one could argue.
32e70 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20      ** that the 
32e80 6c 6f 6f 70 20 73 68 6f 75 6c 64 20 74 65 72 6d  loop should term
32e90 69 6e 61 74 65 2e 20 20 42 75 74 20 61 73 73 75  inate.  But assu
32ea0 6d 69 6e 67 20 31 20 62 69 6c 6c 69 6f 6e 20 69  ming 1 billion i
32eb0 74 65 72 61 74 69 6f 6e 73 0a 20 20 20 20 2a 2a  terations.    **
32ec0 20 70 65 72 20 73 65 63 6f 6e 64 20 28 66 61 72   per second (far
32ed0 20 65 78 63 65 65 64 69 6e 67 20 74 68 65 20 63   exceeding the c
32ee0 61 70 61 62 69 6c 69 74 69 65 73 20 6f 66 20 61  apabilities of a
32ef0 6e 79 20 63 75 72 72 65 6e 74 20 68 61 72 64 77  ny current hardw
32f00 61 72 65 29 0a 20 20 20 20 2a 2a 20 69 74 20 77  are).    ** it w
32f10 6f 75 6c 64 20 74 61 6b 65 20 6e 65 61 72 6c 79  ould take nearly
32f20 20 33 30 30 20 79 65 61 72 73 20 74 6f 20 61 63   300 years to ac
32f30 74 75 61 6c 6c 79 20 72 65 61 63 68 20 74 68 65  tually reach the
32f40 20 6c 69 6d 69 74 2e 20 20 53 6f 0a 20 20 20 20   limit.  So.    
32f50 2a 2a 20 6c 6f 6f 70 69 6e 67 20 66 6f 72 65 76  ** looping forev
32f60 65 72 20 69 73 20 61 20 72 65 61 73 6f 6e 61 62  er is a reasonab
32f70 6c 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e  le approximation
32f80 2e 20 2a 2f 0a 20 20 20 20 70 4f 75 74 2d 3e 75  . */.    pOut->u
32f90 2e 69 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73 65  .i = -1;.  }else
32fa0 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  {.    pOut->u.i 
32fb0 3d 20 78 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  = x;.  }.  break
32fc0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
32fd0 49 66 4e 6f 74 5a 65 72 6f 20 50 31 20 50 32 20  IfNotZero P1 P2 
32fe0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
32ff0 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 30 20 74  s: if r[P1]!=0 t
33000 68 65 6e 20 72 5b 50 31 5d 2d 2d 2c 20 67 6f 74  hen r[P1]--, got
33010 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  o P2.**.** Regis
33020 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74  ter P1 must cont
33030 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  ain an integer. 
33040 20 49 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   If the content 
33050 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  of register P1 i
33060 73 0a 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 67  s.** initially g
33070 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f  reater than zero
33080 2c 20 74 68 65 6e 20 64 65 63 72 65 6d 65 6e 74  , then decrement
33090 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
330a0 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 49 66  gister P1..** If
330b0 20 69 74 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20   it is non-zero 
330c0 28 6e 65 67 61 74 69 76 65 20 6f 72 20 70 6f 73  (negative or pos
330d0 69 74 69 76 65 29 20 61 6e 64 20 74 68 65 6e 20  itive) and then 
330e0 61 6c 73 6f 20 6a 75 6d 70 20 74 6f 20 50 32 2e  also jump to P2.
330f0 20 20 0a 2a 2a 20 49 66 20 72 65 67 69 73 74 65    .** If registe
33100 72 20 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c  r P1 is initiall
33110 79 20 7a 65 72 6f 2c 20 6c 65 61 76 65 20 69 74  y zero, leave it
33120 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 66   unchanged and f
33130 61 6c 6c 20 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a  all through..*/.
33140 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 5a 65 72  case OP_IfNotZer
33150 6f 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  o: {        /* j
33160 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
33170 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
33180 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
33190 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
331a0 6e 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  nt );.  VdbeBran
331b0 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e  chTaken(pIn1->u.
331c0 69 3c 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70  i<0, 2);.  if( p
331d0 49 6e 31 2d 3e 75 2e 69 20 29 7b 0a 20 20 20 20  In1->u.i ){.    
331e0 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30   if( pIn1->u.i>0
331f0 20 29 20 70 49 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a   ) pIn1->u.i--;.
33200 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74       goto jump_t
33210 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  o_p2;.  }.  brea
33220 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
33230 20 44 65 63 72 4a 75 6d 70 5a 65 72 6f 20 50 31   DecrJumpZero P1
33240 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
33250 6f 70 73 69 73 3a 20 69 66 20 28 2d 2d 72 5b 50  opsis: if (--r[P
33260 31 5d 29 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a  1])==0 goto P2.*
33270 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31  *.** Register P1
33280 20 6d 75 73 74 20 68 6f 6c 64 20 61 6e 20 69 6e   must hold an in
33290 74 65 67 65 72 2e 20 20 44 65 63 72 65 6d 65 6e  teger.  Decremen
332a0 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 50  t the value in P
332b0 31 0a 2a 2a 20 61 6e 64 20 6a 75 6d 70 20 74 6f  1.** and jump to
332c0 20 50 32 20 69 66 20 74 68 65 20 6e 65 77 20 76   P2 if the new v
332d0 61 6c 75 65 20 69 73 20 65 78 61 63 74 6c 79 20  alue is exactly 
332e0 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  zero..*/.case OP
332f0 5f 44 65 63 72 4a 75 6d 70 5a 65 72 6f 3a 20 7b  _DecrJumpZero: {
33300 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
33310 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
33320 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
33330 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
33340 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
33350 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e    if( pIn1->u.i>
33360 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29  SMALLEST_INT64 )
33370 20 70 49 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a 20 20   pIn1->u.i--;.  
33380 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
33390 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29  pIn1->u.i==0, 2)
333a0 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e  ;.  if( pIn1->u.
333b0 69 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70  i==0 ) goto jump
333c0 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b  _to_p2;.  break;
333d0 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .}.../* Opcode: 
333e0 41 67 67 53 74 65 70 30 20 2a 20 50 32 20 50 33  AggStep0 * P2 P3
333f0 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
33400 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20  is: accum=r[P3] 
33410 73 74 65 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a  step(r[P2@P5]).*
33420 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65  *.** Execute the
33430 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66   step function f
33440 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e  or an aggregate.
33450 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f    The.** functio
33460 6e 20 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e  n has P5 argumen
33470 74 73 2e 20 20 20 50 34 20 69 73 20 61 20 70 6f  ts.   P4 is a po
33480 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e  inter to the Fun
33490 63 44 65 66 0a 2a 2a 20 73 74 72 75 63 74 75 72  cDef.** structur
334a0 65 20 74 68 61 74 20 73 70 65 63 69 66 69 65 73  e that specifies
334b0 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20   the function.  
334c0 52 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74  Register P3 is t
334d0 68 65 0a 2a 2a 20 61 63 63 75 6d 75 6c 61 74 6f  he.** accumulato
334e0 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20  r..**.** The P5 
334f0 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74 61  arguments are ta
33500 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65  ken from registe
33510 72 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20  r P2 and its.** 
33520 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 2f  successors..*/./
33530 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 53 74 65  * Opcode: AggSte
33540 70 20 2a 20 50 32 20 50 33 20 50 34 20 50 35 0a  p * P2 P3 P4 P5.
33550 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63  ** Synopsis: acc
33560 75 6d 3d 72 5b 50 33 5d 20 73 74 65 70 28 72 5b  um=r[P3] step(r[
33570 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78  P2@P5]).**.** Ex
33580 65 63 75 74 65 20 74 68 65 20 73 74 65 70 20 66  ecute the step f
33590 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61  unction for an a
335a0 67 67 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a  ggregate.  The.*
335b0 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50  * function has P
335c0 35 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50  5 arguments.   P
335d0 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
335e0 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e  o an sqlite3_con
335f0 74 65 78 74 0a 2a 2a 20 6f 62 6a 65 63 74 20 74  text.** object t
33600 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 72  hat is used to r
33610 75 6e 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  un the function.
33620 20 20 52 65 67 69 73 74 65 72 20 50 33 20 69 73    Register P3 is
33630 0a 2a 2a 20 61 73 20 74 68 65 20 61 63 63 75 6d  .** as the accum
33640 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68  ulator..**.** Th
33650 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61  e P5 arguments a
33660 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65  re taken from re
33670 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 69 74  gister P2 and it
33680 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e  s.** successors.
33690 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
336a0 64 65 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20  de is initially 
336b0 63 6f 64 65 64 20 61 73 20 4f 50 5f 41 67 67 53  coded as OP_AggS
336c0 74 65 70 30 2e 20 20 4f 6e 20 66 69 72 73 74 20  tep0.  On first 
336d0 65 76 61 6c 75 61 74 69 6f 6e 2c 0a 2a 2a 20 74  evaluation,.** t
336e0 68 65 20 46 75 6e 63 44 65 66 20 73 74 6f 72 65  he FuncDef store
336f0 64 20 69 6e 20 50 34 20 69 73 20 63 6f 6e 76 65  d in P4 is conve
33700 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 73 71 6c  rted into an sql
33710 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 61 6e 64  ite3_context and
33720 0a 2a 2a 20 74 68 65 20 6f 70 63 6f 64 65 20 69  .** the opcode i
33730 73 20 63 68 61 6e 67 65 64 2e 20 20 49 6e 20 74  s changed.  In t
33740 68 69 73 20 77 61 79 2c 20 74 68 65 20 69 6e 69  his way, the ini
33750 74 69 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 20 74  tialization of t
33760 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f  he.** sqlite3_co
33770 6e 74 65 78 74 20 6f 6e 6c 79 20 68 61 70 70 65  ntext only happe
33780 6e 73 20 6f 6e 63 65 2c 20 69 6e 73 74 65 61 64  ns once, instead
33790 20 6f 66 20 6f 6e 20 65 61 63 68 20 63 61 6c 6c   of on each call
337a0 20 74 6f 20 74 68 65 0a 2a 2a 20 73 74 65 70 20   to the.** step 
337b0 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  function..*/.cas
337c0 65 20 4f 50 5f 41 67 67 53 74 65 70 30 3a 20 7b  e OP_AggStep0: {
337d0 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 73 71 6c 69  .  int n;.  sqli
337e0 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74  te3_context *pCt
337f0 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  x;..  assert( pO
33800 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55  p->p4type==P4_FU
33810 4e 43 44 45 46 20 29 3b 0a 20 20 6e 20 3d 20 70  NCDEF );.  n = p
33820 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72 74  Op->p5;.  assert
33830 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
33840 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
33850 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
33860 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d   );.  assert( n=
33870 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30  =0 || (pOp->p2>0
33880 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 28   && pOp->p2+n<=(
33890 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
338a0 43 75 72 73 6f 72 29 2b 31 29 20 29 3b 0a 20 20  Cursor)+1) );.  
338b0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
338c0 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e  pOp->p2 || pOp->
338d0 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b  p3>=pOp->p2+n );
338e0 0a 20 20 70 43 74 78 20 3d 20 73 71 6c 69 74 65  .  pCtx = sqlite
338f0 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 64  3DbMallocRawNN(d
33900 62 2c 20 6e 2a 73 69 7a 65 6f 66 28 73 71 6c 69  b, n*sizeof(sqli
33910 74 65 33 5f 76 61 6c 75 65 2a 29 20 2b 0a 20 20  te3_value*) +.  
33920 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 69               (si
33930 7a 65 6f 66 28 70 43 74 78 5b 30 5d 29 20 2b 20  zeof(pCtx[0]) + 
33940 73 69 7a 65 6f 66 28 4d 65 6d 29 20 2d 20 73 69  sizeof(Mem) - si
33950 7a 65 6f 66 28 73 71 6c 69 74 65 33 5f 76 61 6c  zeof(sqlite3_val
33960 75 65 2a 29 29 29 3b 0a 20 20 69 66 28 20 70 43  ue*)));.  if( pC
33970 74 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  tx==0 ) goto no_
33980 6d 65 6d 3b 0a 20 20 70 43 74 78 2d 3e 70 4d 65  mem;.  pCtx->pMe
33990 6d 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e 70  m = 0;.  pCtx->p
339a0 4f 75 74 20 3d 20 28 4d 65 6d 2a 29 26 28 70 43  Out = (Mem*)&(pC
339b0 74 78 2d 3e 61 72 67 76 5b 6e 5d 29 3b 0a 20 20  tx->argv[n]);.  
339c0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
339d0 69 74 28 70 43 74 78 2d 3e 70 4f 75 74 2c 20 64  it(pCtx->pOut, d
339e0 62 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20  b, MEM_Null);.  
339f0 70 43 74 78 2d 3e 70 46 75 6e 63 20 3d 20 70 4f  pCtx->pFunc = pO
33a00 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 70  p->p4.pFunc;.  p
33a10 43 74 78 2d 3e 69 4f 70 20 3d 20 28 69 6e 74 29  Ctx->iOp = (int)
33a20 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 70  (pOp - aOp);.  p
33a30 43 74 78 2d 3e 70 56 64 62 65 20 3d 20 70 3b 0a  Ctx->pVdbe = p;.
33a40 20 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67    pCtx->skipFlag
33a50 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e 69 73   = 0;.  pCtx->is
33a60 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20 70 43 74  Error = 0;.  pCt
33a70 78 2d 3e 61 72 67 63 20 3d 20 6e 3b 0a 20 20 70  x->argc = n;.  p
33a80 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f  Op->p4type = P4_
33a90 46 55 4e 43 43 54 58 3b 0a 20 20 70 4f 70 2d 3e  FUNCCTX;.  pOp->
33aa0 70 34 2e 70 43 74 78 20 3d 20 70 43 74 78 3b 0a  p4.pCtx = pCtx;.
33ab0 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20    pOp->opcode = 
33ac0 4f 50 5f 41 67 67 53 74 65 70 3b 0a 20 20 2f 2a  OP_AggStep;.  /*
33ad0 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   Fall through in
33ae0 74 6f 20 4f 50 5f 41 67 67 53 74 65 70 20 2a 2f  to OP_AggStep */
33af0 0a 7d 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74  .}.case OP_AggSt
33b00 65 70 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20  ep: {.  int i;. 
33b10 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
33b20 20 2a 70 43 74 78 3b 0a 20 20 4d 65 6d 20 2a 70   *pCtx;.  Mem *p
33b30 4d 65 6d 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  Mem;..  assert( 
33b40 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
33b50 46 55 4e 43 43 54 58 20 29 3b 0a 20 20 70 43 74  FUNCCTX );.  pCt
33b60 78 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78  x = pOp->p4.pCtx
33b70 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d  ;.  pMem = &aMem
33b80 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 0a 20 20 2f 2a  [pOp->p3];..  /*
33b90 20 49 66 20 74 68 69 73 20 66 75 6e 63 74 69 6f   If this functio
33ba0 6e 20 69 73 20 69 6e 73 69 64 65 20 6f 66 20 61  n is inside of a
33bb0 20 74 72 69 67 67 65 72 2c 20 74 68 65 20 72 65   trigger, the re
33bc0 67 69 73 74 65 72 20 61 72 72 61 79 20 69 6e 20  gister array in 
33bd0 61 4d 65 6d 5b 5d 0a 20 20 2a 2a 20 6d 69 67 68  aMem[].  ** migh
33be0 74 20 63 68 61 6e 67 65 20 66 72 6f 6d 20 6f 6e  t change from on
33bf0 65 20 65 76 61 6c 75 61 74 69 6f 6e 20 74 6f 20  e evaluation to 
33c00 74 68 65 20 6e 65 78 74 2e 20 20 54 68 65 20 6e  the next.  The n
33c10 65 78 74 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64  ext block of cod
33c20 65 0a 20 20 2a 2a 20 63 68 65 63 6b 73 20 74 6f  e.  ** checks to
33c30 20 73 65 65 20 69 66 20 74 68 65 20 72 65 67 69   see if the regi
33c40 73 74 65 72 20 61 72 72 61 79 20 68 61 73 20 63  ster array has c
33c50 68 61 6e 67 65 64 2c 20 61 6e 64 20 69 66 20 73  hanged, and if s
33c60 6f 20 69 74 0a 20 20 2a 2a 20 72 65 69 6e 69 74  o it.  ** reinit
33c70 69 61 6c 69 7a 65 73 20 74 68 65 20 72 65 6c 61  ializes the rela
33c80 76 61 6e 74 20 70 61 72 74 73 20 6f 66 20 74 68  vant parts of th
33c90 65 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  e sqlite3_contex
33ca0 74 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 69 66  t object */.  if
33cb0 28 20 70 43 74 78 2d 3e 70 4d 65 6d 20 21 3d 20  ( pCtx->pMem != 
33cc0 70 4d 65 6d 20 29 7b 0a 20 20 20 20 70 43 74 78  pMem ){.    pCtx
33cd0 2d 3e 70 4d 65 6d 20 3d 20 70 4d 65 6d 3b 0a 20  ->pMem = pMem;. 
33ce0 20 20 20 66 6f 72 28 69 3d 70 43 74 78 2d 3e 61     for(i=pCtx->a
33cf0 72 67 63 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d 2d  rgc-1; i>=0; i--
33d00 29 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 20  ) pCtx->argv[i] 
33d10 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 2b  = &aMem[pOp->p2+
33d20 69 5d 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20  i];.  }..#ifdef 
33d30 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 66  SQLITE_DEBUG.  f
33d40 6f 72 28 69 3d 30 3b 20 69 3c 70 43 74 78 2d 3e  or(i=0; i<pCtx->
33d50 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  argc; i++){.    
33d60 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
33d70 69 64 28 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d  id(pCtx->argv[i]
33d80 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  ) );.    REGISTE
33d90 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b  R_TRACE(pOp->p2+
33da0 69 2c 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d  i, pCtx->argv[i]
33db0 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  );.  }.#endif.. 
33dc0 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 61 73   pMem->n++;.  as
33dd0 73 65 72 74 28 20 70 43 74 78 2d 3e 70 4f 75 74  sert( pCtx->pOut
33de0 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 4e 75 6c  ->flags==MEM_Nul
33df0 6c 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  l );.  assert( p
33e00 43 74 78 2d 3e 69 73 45 72 72 6f 72 3d 3d 30 20  Ctx->isError==0 
33e10 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 74  );.  assert( pCt
33e20 78 2d 3e 73 6b 69 70 46 6c 61 67 3d 3d 30 20 29  x->skipFlag==0 )
33e30 3b 0a 20 20 28 70 43 74 78 2d 3e 70 46 75 6e 63  ;.  (pCtx->pFunc
33e40 2d 3e 78 53 46 75 6e 63 29 28 70 43 74 78 2c 70  ->xSFunc)(pCtx,p
33e50 43 74 78 2d 3e 61 72 67 63 2c 70 43 74 78 2d 3e  Ctx->argc,pCtx->
33e60 61 72 67 76 29 3b 20 2f 2a 20 49 4d 50 3a 20 52  argv); /* IMP: R
33e70 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a  -24505-23230 */.
33e80 20 20 69 66 28 20 70 43 74 78 2d 3e 69 73 45 72    if( pCtx->isEr
33e90 72 6f 72 20 29 7b 0a 20 20 20 20 69 66 28 20 70  ror ){.    if( p
33ea0 43 74 78 2d 3e 69 73 45 72 72 6f 72 3e 30 20 29  Ctx->isError>0 )
33eb0 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
33ec0 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22  dbeError(p, "%s"
33ed0 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
33ee0 74 65 78 74 28 70 43 74 78 2d 3e 70 4f 75 74 29  text(pCtx->pOut)
33ef0 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 70 43  );.      rc = pC
33f00 74 78 2d 3e 69 73 45 72 72 6f 72 3b 0a 20 20 20  tx->isError;.   
33f10 20 7d 0a 20 20 20 20 69 66 28 20 70 43 74 78 2d   }.    if( pCtx-
33f20 3e 73 6b 69 70 46 6c 61 67 20 29 7b 0a 20 20 20  >skipFlag ){.   
33f30 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d     assert( pOp[-
33f40 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f  1].opcode==OP_Co
33f50 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 20 20 69  llSeq );.      i
33f60 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 31 3b 0a 20   = pOp[-1].p1;. 
33f70 20 20 20 20 20 69 66 28 20 69 20 29 20 73 71 6c       if( i ) sql
33f80 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
33f90 74 36 34 28 26 61 4d 65 6d 5b 69 5d 2c 20 31 29  t64(&aMem[i], 1)
33fa0 3b 0a 20 20 20 20 20 20 70 43 74 78 2d 3e 73 6b  ;.      pCtx->sk
33fb0 69 70 46 6c 61 67 20 3d 20 30 3b 0a 20 20 20 20  ipFlag = 0;.    
33fc0 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  }.    sqlite3Vdb
33fd0 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 43 74 78  eMemRelease(pCtx
33fe0 2d 3e 70 4f 75 74 29 3b 0a 20 20 20 20 70 43 74  ->pOut);.    pCt
33ff0 78 2d 3e 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  x->pOut->flags =
34000 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 70   MEM_Null;.    p
34010 43 74 78 2d 3e 69 73 45 72 72 6f 72 20 3d 20 30  Ctx->isError = 0
34020 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67  ;.    if( rc ) g
34030 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
34040 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 61 73  _error;.  }.  as
34050 73 65 72 74 28 20 70 43 74 78 2d 3e 70 4f 75 74  sert( pCtx->pOut
34060 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 4e 75 6c  ->flags==MEM_Nul
34070 6c 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  l );.  assert( p
34080 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 3d 3d 30  Ctx->skipFlag==0
34090 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   );.  break;.}..
340a0 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 46 69  /* Opcode: AggFi
340b0 6e 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20 2a  nal P1 P2 * P4 *
340c0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63  .** Synopsis: ac
340d0 63 75 6d 3d 72 5b 50 31 5d 20 4e 3d 50 32 0a 2a  cum=r[P1] N=P2.*
340e0 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65  *.** Execute the
340f0 20 66 69 6e 61 6c 69 7a 65 72 20 66 75 6e 63 74   finalizer funct
34100 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65  ion for an aggre
34110 67 61 74 65 2e 20 20 50 31 20 69 73 0a 2a 2a 20  gate.  P1 is.** 
34120 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74  the memory locat
34130 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68 65 20  ion that is the 
34140 61 63 63 75 6d 75 6c 61 74 6f 72 20 66 6f 72 20  accumulator for 
34150 74 68 65 20 61 67 67 72 65 67 61 74 65 2e 0a 2a  the aggregate..*
34160 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e  *.** P2 is the n
34170 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
34180 74 73 20 74 68 61 74 20 74 68 65 20 73 74 65 70  ts that the step
34190 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73 20   function takes 
341a0 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  and.** P4 is a p
341b0 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75  ointer to the Fu
341c0 6e 63 44 65 66 20 66 6f 72 20 74 68 69 73 20 66  ncDef for this f
341d0 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20 50 32  unction.  The P2
341e0 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 69 73 20  .** argument is 
341f0 6e 6f 74 20 75 73 65 64 20 62 79 20 74 68 69 73  not used by this
34200 20 6f 70 63 6f 64 65 2e 20 20 49 74 20 69 73 20   opcode.  It is 
34210 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f 20 64 69  only there to di
34220 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a 20 66 75  sambiguate.** fu
34230 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 63 61 6e  nctions that can
34240 20 74 61 6b 65 20 76 61 72 79 69 6e 67 20 6e 75   take varying nu
34250 6d 62 65 72 73 20 6f 66 20 61 72 67 75 6d 65 6e  mbers of argumen
34260 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50 34 20 61  ts.  The.** P4 a
34270 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e 6c 79 20  rgument is only 
34280 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65 20 64  needed for the d
34290 65 67 65 6e 65 72 61 74 65 20 63 61 73 65 20 77  egenerate case w
342a0 68 65 72 65 0a 2a 2a 20 74 68 65 20 73 74 65 70  here.** the step
342b0 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 6e 6f   function was no
342c0 74 20 70 72 65 76 69 6f 75 73 6c 79 20 63 61 6c  t previously cal
342d0 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  led..*/.case OP_
342e0 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65  AggFinal: {.  Me
342f0 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72  m *pMem;.  asser
34300 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20  t( pOp->p1>0 && 
34310 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p1<=(p->nMe
34320 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
34330 29 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61  ) );.  pMem = &a
34340 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
34350 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66  assert( (pMem->f
34360 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c  lags & ~(MEM_Nul
34370 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30 20 29  l|MEM_Agg))==0 )
34380 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
34390 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a 65 28  VdbeMemFinalize(
343a0 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70 46  pMem, pOp->p4.pF
343b0 75 6e 63 29 3b 0a 20 20 69 66 28 20 72 63 20 29  unc);.  if( rc )
343c0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
343d0 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20  eError(p, "%s", 
343e0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
343f0 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20 20 20 67  xt(pMem));.    g
34400 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
34410 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71  _error;.  }.  sq
34420 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
34430 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c 20 65 6e  ncoding(pMem, en
34440 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54  coding);.  UPDAT
34450 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
34460 4d 65 6d 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  Mem);.  if( sqli
34470 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67  te3VdbeMemTooBig
34480 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20 20 67 6f  (pMem) ){.    go
34490 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
344a0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e    break;.}..#ifn
344b0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
344c0 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  WAL./* Opcode: C
344d0 68 65 63 6b 70 6f 69 6e 74 20 50 31 20 50 32 20  heckpoint P1 P2 
344e0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65  P3 * *.**.** Che
344f0 63 6b 70 6f 69 6e 74 20 64 61 74 61 62 61 73 65  ckpoint database
34500 20 50 31 2e 20 54 68 69 73 20 69 73 20 61 20 6e   P1. This is a n
34510 6f 2d 6f 70 20 69 66 20 50 31 20 69 73 20 6e 6f  o-op if P1 is no
34520 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 0a 2a  t currently in.*
34530 2a 20 57 41 4c 20 6d 6f 64 65 2e 20 50 61 72 61  * WAL mode. Para
34540 6d 65 74 65 72 20 50 32 20 69 73 20 6f 6e 65 20  meter P2 is one 
34550 6f 66 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  of SQLITE_CHECKP
34560 4f 49 4e 54 5f 50 41 53 53 49 56 45 2c 20 46 55  OINT_PASSIVE, FU
34570 4c 4c 2c 0a 2a 2a 20 52 45 53 54 41 52 54 2c 20  LL,.** RESTART, 
34580 6f 72 20 54 52 55 4e 43 41 54 45 2e 20 20 57 72  or TRUNCATE.  Wr
34590 69 74 65 20 31 20 6f 72 20 30 20 69 6e 74 6f 20  ite 1 or 0 into 
345a0 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68 65 20 63  mem[P3] if the c
345b0 68 65 63 6b 70 6f 69 6e 74 20 72 65 74 75 72 6e  heckpoint return
345c0 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59  s.** SQLITE_BUSY
345d0 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70 65 63 74   or not, respect
345e0 69 76 65 6c 79 2e 20 20 57 72 69 74 65 20 74 68  ively.  Write th
345f0 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  e number of page
34600 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57 41 4c 20  s in the.** WAL 
34610 61 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70  after the checkp
34620 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b 50 33  oint into mem[P3
34630 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e 75 6d 62  +1] and the numb
34640 65 72 20 6f 66 20 70 61 67 65 73 0a 2a 2a 20 69  er of pages.** i
34650 6e 20 74 68 65 20 57 41 4c 20 74 68 61 74 20 68  n the WAL that h
34660 61 76 65 20 62 65 65 6e 20 63 68 65 63 6b 70 6f  ave been checkpo
34670 69 6e 74 65 64 20 61 66 74 65 72 20 74 68 65 20  inted after the 
34680 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20 63 6f  checkpoint.** co
34690 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20 6d 65 6d  mpletes into mem
346a0 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65 76 65 72  [P3+2].  However
346b0 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c 20 6d 65   on an error, me
346c0 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a 20 6d  m[P3+1] and.** m
346d0 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20 69 6e 69  em[P3+2] are ini
346e0 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d 31 2e 0a  tialized to -1..
346f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65 63 6b  */.case OP_Check
34700 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 69  point: {.  int i
34710 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
34720 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
34730 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20  op counter */.  
34740 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20 20 20 20  int aRes[3];    
34750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34760 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a 20 20  /* Results */.  
34770 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20  Mem *pMem;      
34780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34790 2f 2a 20 57 72 69 74 65 20 72 65 73 75 6c 74 73  /* Write results
347a0 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61 73 73 65   here */..  asse
347b0 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
347c0 3d 30 20 29 3b 0a 20 20 61 52 65 73 5b 30 5d 20  =0 );.  aRes[0] 
347d0 3d 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d 20 3d  = 0;.  aRes[1] =
347e0 20 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b 0a 20   aRes[2] = -1;. 
347f0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
34800 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  ==SQLITE_CHECKPO
34810 49 4e 54 5f 50 41 53 53 49 56 45 0a 20 20 20 20  INT_PASSIVE.    
34820 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53     || pOp->p2==S
34830 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
34840 5f 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c 7c 20  _FULL.       || 
34850 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
34860 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41  CHECKPOINT_RESTA
34870 52 54 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70  RT.       || pOp
34880 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45  ->p2==SQLITE_CHE
34890 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43 41 54 45  CKPOINT_TRUNCATE
348a0 0a 20 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  .  );.  rc = sql
348b0 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 64  ite3Checkpoint(d
348c0 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
348d0 3e 70 32 2c 20 26 61 52 65 73 5b 31 5d 2c 20 26  >p2, &aRes[1], &
348e0 61 52 65 73 5b 32 5d 29 3b 0a 20 20 69 66 28 20  aRes[2]);.  if( 
348f0 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20 72 63  rc ){.    if( rc
34900 21 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 20  !=SQLITE_BUSY ) 
34910 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
34920 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 72 63 20  o_error;.    rc 
34930 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20  = SQLITE_OK;.   
34940 20 61 52 65 73 5b 30 5d 20 3d 20 31 3b 0a 20 20   aRes[0] = 1;.  
34950 7d 0a 20 20 66 6f 72 28 69 3d 30 2c 20 70 4d 65  }.  for(i=0, pMe
34960 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
34970 33 5d 3b 20 69 3c 33 3b 20 69 2b 2b 2c 20 70 4d  3]; i<3; i++, pM
34980 65 6d 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74  em++){.    sqlit
34990 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
349a0 34 28 70 4d 65 6d 2c 20 28 69 36 34 29 61 52 65  4(pMem, (i64)aRe
349b0 73 5b 69 5d 29 3b 0a 20 20 7d 20 20 20 20 0a 20  s[i]);.  }    . 
349c0 20 62 72 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65 6e   break;.};  .#en
349d0 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
349e0 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 0a  ITE_OMIT_PRAGMA.
349f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 6f 75 72 6e  /* Opcode: Journ
34a00 61 6c 4d 6f 64 65 20 50 31 20 50 32 20 50 33 20  alMode P1 P2 P3 
34a10 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65  * *.**.** Change
34a20 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64   the journal mod
34a30 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31  e of database P1
34a40 20 74 6f 20 50 33 2e 20 50 33 20 6d 75 73 74 20   to P3. P3 must 
34a50 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 0a 2a 2a  be one of the.**
34a60 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
34a70 44 45 5f 58 58 58 20 76 61 6c 75 65 73 2e 20 49  DE_XXX values. I
34a80 66 20 63 68 61 6e 67 69 6e 67 20 62 65 74 77 65  f changing betwe
34a90 65 6e 20 74 68 65 20 76 61 72 69 6f 75 73 20 72  en the various r
34aa0 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73  ollback.** modes
34ab0 20 28 64 65 6c 65 74 65 2c 20 74 72 75 6e 63 61   (delete, trunca
34ac0 74 65 2c 20 70 65 72 73 69 73 74 2c 20 6f 66 66  te, persist, off
34ad0 20 61 6e 64 20 6d 65 6d 6f 72 79 29 2c 20 74 68   and memory), th
34ae0 69 73 20 69 73 20 61 20 73 69 6d 70 6c 65 0a 2a  is is a simple.*
34af0 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 4e 6f 20  * operation. No 
34b00 49 4f 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a  IO is required..
34b10 2a 2a 0a 2a 2a 20 49 66 20 63 68 61 6e 67 69 6e  **.** If changin
34b20 67 20 69 6e 74 6f 20 6f 72 20 6f 75 74 20 6f 66  g into or out of
34b30 20 57 41 4c 20 6d 6f 64 65 20 74 68 65 20 70 72   WAL mode the pr
34b40 6f 63 65 64 75 72 65 20 69 73 20 6d 6f 72 65 20  ocedure is more 
34b50 63 6f 6d 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a  complicated..**.
34b60 2a 2a 20 57 72 69 74 65 20 61 20 73 74 72 69 6e  ** Write a strin
34b70 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  g containing the
34b80 20 66 69 6e 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d   final journal-m
34b90 6f 64 65 20 74 6f 20 72 65 67 69 73 74 65 72 20  ode to register 
34ba0 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a  P2..*/.case OP_J
34bb0 6f 75 72 6e 61 6c 4d 6f 64 65 3a 20 7b 20 20 20  ournalMode: {   
34bc0 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 42 74   /* out2 */.  Bt
34bd0 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20  ree *pBt;       
34be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
34bf0 20 42 74 72 65 65 20 74 6f 20 63 68 61 6e 67 65   Btree to change
34c00 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66   journal mode of
34c10 20 2a 2f 0a 20 20 50 61 67 65 72 20 2a 70 50 61   */.  Pager *pPa
34c20 67 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ger;            
34c30 20 20 20 20 20 20 2f 2a 20 50 61 67 65 72 20 61        /* Pager a
34c40 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 70  ssociated with p
34c50 42 74 20 2a 2f 0a 20 20 69 6e 74 20 65 4e 65 77  Bt */.  int eNew
34c60 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
34c70 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 6a          /* New j
34c80 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20  ournal mode */. 
34c90 20 69 6e 74 20 65 4f 6c 64 3b 20 20 20 20 20 20   int eOld;      
34ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34cb0 20 2f 2a 20 54 68 65 20 6f 6c 64 20 6a 6f 75 72   /* The old jour
34cc0 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 23 69 66 6e  nal mode */.#ifn
34cd0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
34ce0 57 41 4c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  WAL.  const char
34cf0 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 20 20 20 20   *zFilename;    
34d00 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
34d10 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 66   database file f
34d20 6f 72 20 70 50 61 67 65 72 20 2a 2f 0a 23 65 6e  or pPager */.#en
34d30 64 69 66 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75  dif..  pOut = ou
34d40 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
34d50 70 4f 70 29 3b 0a 20 20 65 4e 65 77 20 3d 20 70  pOp);.  eNew = p
34d60 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74  Op->p3;.  assert
34d70 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  ( eNew==PAGER_JO
34d80 55 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45  URNALMODE_DELETE
34d90 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77   .       || eNew
34da0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
34db0 4f 44 45 5f 54 52 55 4e 43 41 54 45 20 0a 20 20  ODE_TRUNCATE .  
34dc0 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
34dd0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
34de0 50 45 52 53 49 53 54 20 0a 20 20 20 20 20 20 20  PERSIST .       
34df0 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
34e00 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20  OURNALMODE_OFF. 
34e10 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
34e20 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
34e30 5f 4d 45 4d 4f 52 59 0a 20 20 20 20 20 20 20 7c  _MEMORY.       |
34e40 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
34e50 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20  URNALMODE_WAL.  
34e60 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
34e70 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
34e80 51 55 45 52 59 0a 20 20 29 3b 0a 20 20 61 73 73  QUERY.  );.  ass
34e90 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
34ea0 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
34eb0 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
34ec0 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
34ed0 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  ;..  pBt = db->a
34ee0 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
34ef0 0a 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69  .  pPager = sqli
34f00 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70 42  te3BtreePager(pB
34f10 74 29 3b 0a 20 20 65 4f 6c 64 20 3d 20 73 71 6c  t);.  eOld = sql
34f20 69 74 65 33 50 61 67 65 72 47 65 74 4a 6f 75 72  ite3PagerGetJour
34f30 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 3b  nalMode(pPager);
34f40 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47  .  if( eNew==PAG
34f50 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51  ER_JOURNALMODE_Q
34f60 55 45 52 59 20 29 20 65 4e 65 77 20 3d 20 65 4f  UERY ) eNew = eO
34f70 6c 64 3b 0a 20 20 69 66 28 20 21 73 71 6c 69 74  ld;.  if( !sqlit
34f80 65 33 50 61 67 65 72 4f 6b 54 6f 43 68 61 6e 67  e3PagerOkToChang
34f90 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  eJournalMode(pPa
34fa0 67 65 72 29 20 29 20 65 4e 65 77 20 3d 20 65 4f  ger) ) eNew = eO
34fb0 6c 64 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ld;..#ifndef SQL
34fc0 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a  ITE_OMIT_WAL.  z
34fd0 46 69 6c 65 6e 61 6d 65 20 3d 20 73 71 6c 69 74  Filename = sqlit
34fe0 65 33 50 61 67 65 72 46 69 6c 65 6e 61 6d 65 28  e3PagerFilename(
34ff0 70 50 61 67 65 72 2c 20 31 29 3b 0a 0a 20 20 2f  pPager, 1);..  /
35000 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 61  * Do not allow a
35010 20 74 72 61 6e 73 69 74 69 6f 6e 20 74 6f 20 6a   transition to j
35020 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20  ournal_mode=WAL 
35030 66 6f 72 20 61 20 64 61 74 61 62 61 73 65 0a 20  for a database. 
35040 20 2a 2a 20 69 6e 20 74 65 6d 70 6f 72 61 72 79   ** in temporary
35050 20 73 74 6f 72 61 67 65 20 6f 72 20 69 66 20 74   storage or if t
35060 68 65 20 56 46 53 20 64 6f 65 73 20 6e 6f 74 20  he VFS does not 
35070 73 75 70 70 6f 72 74 20 73 68 61 72 65 64 20 6d  support shared m
35080 65 6d 6f 72 79 20 0a 20 20 2a 2f 0a 20 20 69 66  emory .  */.  if
35090 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  ( eNew==PAGER_JO
350a0 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20  URNALMODE_WAL.  
350b0 20 26 26 20 28 73 71 6c 69 74 65 33 53 74 72 6c   && (sqlite3Strl
350c0 65 6e 33 30 28 7a 46 69 6c 65 6e 61 6d 65 29 3d  en30(zFilename)=
350d0 3d 30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  =0           /* 
350e0 54 65 6d 70 20 66 69 6c 65 20 2a 2f 0a 20 20 20  Temp file */.   
350f0 20 20 20 20 7c 7c 20 21 73 71 6c 69 74 65 33 50      || !sqlite3P
35100 61 67 65 72 57 61 6c 53 75 70 70 6f 72 74 65 64  agerWalSupported
35110 28 70 50 61 67 65 72 29 29 20 20 20 2f 2a 20 4e  (pPager))   /* N
35120 6f 20 73 68 61 72 65 64 2d 6d 65 6d 6f 72 79 20  o shared-memory 
35130 73 75 70 70 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a  support */.  ){.
35140 20 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b      eNew = eOld;
35150 0a 20 20 7d 0a 0a 20 20 69 66 28 20 28 65 4e 65  .  }..  if( (eNe
35160 77 21 3d 65 4f 6c 64 29 0a 20 20 20 26 26 20 28  w!=eOld).   && (
35170 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eOld==PAGER_JOUR
35180 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20 65  NALMODE_WAL || e
35190 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
351a0 41 4c 4d 4f 44 45 5f 57 41 4c 29 0a 20 20 29 7b  ALMODE_WAL).  ){
351b0 0a 20 20 20 20 69 66 28 20 21 64 62 2d 3e 61 75  .    if( !db->au
351c0 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e  toCommit || db->
351d0 6e 56 64 62 65 52 65 61 64 3e 31 20 29 7b 0a 20  nVdbeRead>1 ){. 
351e0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
351f0 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 73 71  _ERROR;.      sq
35200 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
35210 2c 0a 20 20 20 20 20 20 20 20 20 20 22 63 61 6e  ,.          "can
35220 6e 6f 74 20 63 68 61 6e 67 65 20 25 73 20 77 61  not change %s wa
35230 6c 20 6d 6f 64 65 20 66 72 6f 6d 20 77 69 74 68  l mode from with
35240 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
35250 22 2c 0a 20 20 20 20 20 20 20 20 20 20 28 65 4e  ",.          (eN
35260 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
35270 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 22 69 6e 74  LMODE_WAL ? "int
35280 6f 22 20 3a 20 22 6f 75 74 20 6f 66 22 29 0a 20  o" : "out of"). 
35290 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 67 6f       );.      go
352a0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
352b0 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65  error;.    }else
352c0 7b 0a 20 0a 20 20 20 20 20 20 69 66 28 20 65 4f  {. .      if( eO
352d0 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ld==PAGER_JOURNA
352e0 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a 20 20 20  LMODE_WAL ){.   
352f0 20 20 20 20 20 2f 2a 20 49 66 20 6c 65 61 76 69       /* If leavi
35300 6e 67 20 57 41 4c 20 6d 6f 64 65 2c 20 63 6c 6f  ng WAL mode, clo
35310 73 65 20 74 68 65 20 6c 6f 67 20 66 69 6c 65 2e  se the log file.
35320 20 49 66 20 73 75 63 63 65 73 73 66 75 6c 2c 20   If successful, 
35330 74 68 65 20 63 61 6c 6c 0a 20 20 20 20 20 20 20  the call.       
35340 20 2a 2a 20 74 6f 20 50 61 67 65 72 43 6c 6f 73   ** to PagerClos
35350 65 57 61 6c 28 29 20 63 68 65 63 6b 70 6f 69 6e  eWal() checkpoin
35360 74 73 20 61 6e 64 20 64 65 6c 65 74 65 73 20 74  ts and deletes t
35370 68 65 20 77 72 69 74 65 2d 61 68 65 61 64 2d 6c  he write-ahead-l
35380 6f 67 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 66  og .        ** f
35390 69 6c 65 2e 20 41 6e 20 45 58 43 4c 55 53 49 56  ile. An EXCLUSIV
353a0 45 20 6c 6f 63 6b 20 6d 61 79 20 73 74 69 6c 6c  E lock may still
353b0 20 62 65 20 68 65 6c 64 20 6f 6e 20 74 68 65 20   be held on the 
353c0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 0a 20  database file . 
353d0 20 20 20 20 20 20 20 2a 2a 20 61 66 74 65 72 20         ** after 
353e0 61 20 73 75 63 63 65 73 73 66 75 6c 20 72 65 74  a successful ret
353f0 75 72 6e 2e 20 0a 20 20 20 20 20 20 20 20 2a 2f  urn. .        */
35400 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
35410 6c 69 74 65 33 50 61 67 65 72 43 6c 6f 73 65 57  lite3PagerCloseW
35420 61 6c 28 70 50 61 67 65 72 2c 20 64 62 29 3b 0a  al(pPager, db);.
35430 20 20 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d          if( rc==
35440 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
35450 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61         sqlite3Pa
35460 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64  gerSetJournalMod
35470 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b  e(pPager, eNew);
35480 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
35490 20 7d 65 6c 73 65 20 69 66 28 20 65 4f 6c 64 3d   }else if( eOld=
354a0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
354b0 44 45 5f 4d 45 4d 4f 52 59 20 29 7b 0a 20 20 20  DE_MEMORY ){.   
354c0 20 20 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 74       /* Cannot t
354d0 72 61 6e 73 69 74 69 6f 6e 20 64 69 72 65 63 74  ransition direct
354e0 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f 52 59 20 74  ly from MEMORY t
354f0 6f 20 57 41 4c 2e 20 20 55 73 65 20 6d 6f 64 65  o WAL.  Use mode
35500 20 4f 46 46 0a 20 20 20 20 20 20 20 20 2a 2a 20   OFF.        ** 
35510 61 73 20 61 6e 20 69 6e 74 65 72 6d 65 64 69 61  as an intermedia
35520 74 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 71  te */.        sq
35530 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75  lite3PagerSetJou
35540 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c  rnalMode(pPager,
35550 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
35560 44 45 5f 4f 46 46 29 3b 0a 20 20 20 20 20 20 7d  DE_OFF);.      }
35570 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 4f 70 65  .  .      /* Ope
35580 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  n a transaction 
35590 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
355a0 66 69 6c 65 2e 20 52 65 67 61 72 64 6c 65 73 73  file. Regardless
355b0 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 0a   of the journal.
355c0 20 20 20 20 20 20 2a 2a 20 6d 6f 64 65 2c 20 74        ** mode, t
355d0 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  his transaction 
355e0 61 6c 77 61 79 73 20 75 73 65 73 20 61 20 72 6f  always uses a ro
355f0 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a  llback journal..
35600 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61        */.      a
35610 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
35620 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74  reeIsInTrans(pBt
35630 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66  )==0 );.      if
35640 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
35650 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
35660 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 56  sqlite3BtreeSetV
35670 65 72 73 69 6f 6e 28 70 42 74 2c 20 28 65 4e 65  ersion(pBt, (eNe
35680 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
35690 4d 4f 44 45 5f 57 41 4c 20 3f 20 32 20 3a 20 31  MODE_WAL ? 2 : 1
356a0 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ));.      }.    
356b0 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  }.  }.#endif /* 
356c0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
356d0 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20 20 69 66 28  IT_WAL */..  if(
356e0 20 72 63 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c   rc ) eNew = eOl
356f0 64 3b 0a 20 20 65 4e 65 77 20 3d 20 73 71 6c 69  d;.  eNew = sqli
35700 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e  te3PagerSetJourn
35710 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65  alMode(pPager, e
35720 4e 65 77 29 3b 0a 0a 20 20 70 4f 75 74 2d 3e 66  New);..  pOut->f
35730 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d  lags = MEM_Str|M
35740 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65  EM_Static|MEM_Te
35750 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20  rm;.  pOut->z = 
35760 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 4a  (char *)sqlite3J
35770 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65  ournalModename(e
35780 4e 65 77 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20  New);.  pOut->n 
35790 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
357a0 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f  0(pOut->z);.  pO
357b0 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45  ut->enc = SQLITE
357c0 5f 55 54 46 38 3b 0a 20 20 73 71 6c 69 74 65 33  _UTF8;.  sqlite3
357d0 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
357e0 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e  ng(pOut, encodin
357f0 67 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  g);.  if( rc ) g
35800 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
35810 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
35820 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  .};.#endif /* SQ
35830 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41  LITE_OMIT_PRAGMA
35840 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e 65   */..#if !define
35850 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41  d(SQLITE_OMIT_VA
35860 43 55 55 4d 29 20 26 26 20 21 64 65 66 69 6e 65  CUUM) && !define
35870 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54  d(SQLITE_OMIT_AT
35880 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TACH)./* Opcode:
35890 20 56 61 63 75 75 6d 20 50 31 20 2a 20 2a 20 2a   Vacuum P1 * * *
358a0 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d 20   *.**.** Vacuum 
358b0 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61 62  the entire datab
358c0 61 73 65 20 50 31 2e 20 20 50 31 20 69 73 20 30  ase P1.  P1 is 0
358d0 20 66 6f 72 20 22 6d 61 69 6e 22 2c 20 61 6e 64   for "main", and
358e0 20 32 20 6f 72 20 6d 6f 72 65 0a 2a 2a 20 66 6f   2 or more.** fo
358f0 72 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  r an attached da
35900 74 61 62 61 73 65 2e 20 20 54 68 65 20 22 74 65  tabase.  The "te
35910 6d 70 22 20 64 61 74 61 62 61 73 65 20 6d 61 79  mp" database may
35920 20 6e 6f 74 20 62 65 20 76 61 63 75 75 6d 65 64   not be vacuumed
35930 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 63  ..*/.case OP_Vac
35940 75 75 6d 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  uum: {.  assert(
35950 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
35960 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
35970 33 52 75 6e 56 61 63 75 75 6d 28 26 70 2d 3e 7a  3RunVacuum(&p->z
35980 45 72 72 4d 73 67 2c 20 64 62 2c 20 70 4f 70 2d  ErrMsg, db, pOp-
35990 3e 70 31 29 3b 0a 20 20 69 66 28 20 72 63 20 29  >p1);.  if( rc )
359a0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
359b0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
359c0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  k;.}.#endif..#if
359d0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
359e0 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
359f0 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63  )./* Opcode: Inc
35a00 72 56 61 63 75 75 6d 20 50 31 20 50 32 20 2a 20  rVacuum P1 P2 * 
35a10 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72  * *.**.** Perfor
35a20 6d 20 61 20 73 69 6e 67 6c 65 20 73 74 65 70 20  m a single step 
35a30 6f 66 20 74 68 65 20 69 6e 63 72 65 6d 65 6e 74  of the increment
35a40 61 6c 20 76 61 63 75 75 6d 20 70 72 6f 63 65 64  al vacuum proced
35a50 75 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31  ure on.** the P1
35a60 20 64 61 74 61 62 61 73 65 2e 20 49 66 20 74 68   database. If th
35a70 65 20 76 61 63 75 75 6d 20 68 61 73 20 66 69 6e  e vacuum has fin
35a80 69 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69  ished, jump to i
35a90 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32  nstruction.** P2
35aa0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c  . Otherwise, fal
35ab0 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
35ac0 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
35ad0 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  n..*/.case OP_In
35ae0 63 72 56 61 63 75 75 6d 3a 20 7b 20 20 20 20 20  crVacuum: {     
35af0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
35b00 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61  Btree *pBt;..  a
35b10 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
35b20 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
35b30 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
35b40 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
35b50 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e  btreeMask, pOp->
35b60 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  p1) );.  assert(
35b70 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
35b80 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  );.  pBt = db->a
35b90 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
35ba0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
35bb0 74 72 65 65 49 6e 63 72 56 61 63 75 75 6d 28 70  treeIncrVacuum(p
35bc0 42 74 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  Bt);.  VdbeBranc
35bd0 68 54 61 6b 65 6e 28 72 63 3d 3d 53 51 4c 49 54  hTaken(rc==SQLIT
35be0 45 5f 44 4f 4e 45 2c 32 29 3b 0a 20 20 69 66 28  E_DONE,2);.  if(
35bf0 20 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20 72   rc ){.    if( r
35c00 63 21 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29  c!=SQLITE_DONE )
35c10 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
35c20 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 72 63  to_error;.    rc
35c30 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
35c40 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
35c50 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
35c60 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63  }.#endif../* Opc
35c70 6f 64 65 3a 20 45 78 70 69 72 65 20 50 31 20 2a  ode: Expire P1 *
35c80 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75   * * *.**.** Cau
35c90 73 65 20 70 72 65 63 6f 6d 70 69 6c 65 64 20 73  se precompiled s
35ca0 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 65 78 70  tatements to exp
35cb0 69 72 65 2e 20 20 57 68 65 6e 20 61 6e 20 65 78  ire.  When an ex
35cc0 70 69 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a  pired statement.
35cd0 2a 2a 20 69 73 20 65 78 65 63 75 74 65 64 20 75  ** is executed u
35ce0 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 73 74 65  sing sqlite3_ste
35cf0 70 28 29 20 69 74 20 77 69 6c 6c 20 65 69 74 68  p() it will eith
35d00 65 72 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  er automatically
35d10 0a 2a 2a 20 72 65 70 72 65 70 61 72 65 20 69 74  .** reprepare it
35d20 73 65 6c 66 20 28 69 66 20 69 74 20 77 61 73 20  self (if it was 
35d30 6f 72 69 67 69 6e 61 6c 6c 79 20 63 72 65 61 74  originally creat
35d40 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33  ed using sqlite3
35d50 5f 70 72 65 70 61 72 65 5f 76 32 28 29 29 0a 2a  _prepare_v2()).*
35d60 2a 20 6f 72 20 69 74 20 77 69 6c 6c 20 66 61 69  * or it will fai
35d70 6c 20 77 69 74 68 20 53 51 4c 49 54 45 5f 53 43  l with SQLITE_SC
35d80 48 45 4d 41 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20  HEMA..** .** If 
35d90 50 31 20 69 73 20 30 2c 20 74 68 65 6e 20 61 6c  P1 is 0, then al
35da0 6c 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  l SQL statements
35db0 20 62 65 63 6f 6d 65 20 65 78 70 69 72 65 64 2e   become expired.
35dc0 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65   If P1 is non-ze
35dd0 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79  ro,.** then only
35de0 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 65   the currently e
35df0 78 65 63 75 74 69 6e 67 20 73 74 61 74 65 6d 65  xecuting stateme
35e00 6e 74 20 69 73 20 65 78 70 69 72 65 64 2e 0a 2a  nt is expired..*
35e10 2f 0a 63 61 73 65 20 4f 50 5f 45 78 70 69 72 65  /.case OP_Expire
35e20 3a 20 7b 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e  : {.  if( !pOp->
35e30 70 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  p1 ){.    sqlite
35e40 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
35e50 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20  tatements(db);. 
35e60 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 65   }else{.    p->e
35e70 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 7d 0a  xpired = 1;.  }.
35e80 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e    break;.}..#ifn
35e90 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
35ea0 53 48 41 52 45 44 5f 43 41 43 48 45 0a 2f 2a 20  SHARED_CACHE./* 
35eb0 4f 70 63 6f 64 65 3a 20 54 61 62 6c 65 4c 6f 63  Opcode: TableLoc
35ec0 6b 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  k P1 P2 P3 P4 *.
35ed0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 44 62  ** Synopsis: iDb
35ee0 3d 50 31 20 72 6f 6f 74 3d 50 32 20 77 72 69 74  =P1 root=P2 writ
35ef0 65 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 62 74 61 69  e=P3.**.** Obtai
35f00 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20 61 20 70 61  n a lock on a pa
35f10 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65 2e 20  rticular table. 
35f20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
35f30 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77 68   is only used wh
35f40 65 6e 0a 2a 2a 20 74 68 65 20 73 68 61 72 65 64  en.** the shared
35f50 2d 63 61 63 68 65 20 66 65 61 74 75 72 65 20 69  -cache feature i
35f60 73 20 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a 2a  s enabled. .**.*
35f70 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65  * P1 is the inde
35f80 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  x of the databas
35f90 65 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62  e in sqlite3.aDb
35fa0 5b 5d 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  [] of the databa
35fb0 73 65 0a 2a 2a 20 6f 6e 20 77 68 69 63 68 20 74  se.** on which t
35fc0 68 65 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69  he lock is acqui
35fd0 72 65 64 2e 20 20 41 20 72 65 61 64 6c 6f 63 6b  red.  A readlock
35fe0 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69 66 20   is obtained if 
35ff0 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20 77 72  P3==0 or.** a wr
36000 69 74 65 20 6c 6f 63 6b 20 69 66 20 50 33 3d 3d  ite lock if P3==
36010 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74  1..**.** P2 cont
36020 61 69 6e 73 20 74 68 65 20 72 6f 6f 74 2d 70 61  ains the root-pa
36030 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ge of the table 
36040 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50  to lock..**.** P
36050 34 20 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69  4 contains a poi
36060 6e 74 65 72 20 74 6f 20 74 68 65 20 6e 61 6d 65  nter to the name
36070 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62 65   of the table be
36080 69 6e 67 20 6c 6f 63 6b 65 64 2e 20 54 68 69 73  ing locked. This
36090 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64   is only.** used
360a0 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 6e 20   to generate an 
360b0 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69 66  error message if
360c0 20 74 68 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74   the lock cannot
360d0 20 62 65 20 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f   be obtained..*/
360e0 0a 63 61 73 65 20 4f 50 5f 54 61 62 6c 65 4c 6f  .case OP_TableLo
360f0 63 6b 3a 20 7b 0a 20 20 75 38 20 69 73 57 72 69  ck: {.  u8 isWri
36100 74 65 4c 6f 63 6b 20 3d 20 28 75 38 29 70 4f 70  teLock = (u8)pOp
36110 2d 3e 70 33 3b 0a 20 20 69 66 28 20 69 73 57 72  ->p3;.  if( isWr
36120 69 74 65 4c 6f 63 6b 20 7c 7c 20 30 3d 3d 28 64  iteLock || 0==(d
36130 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
36140 52 65 61 64 55 6e 63 6f 6d 6d 69 74 29 20 29 7b  ReadUncommit) ){
36150 0a 20 20 20 20 69 6e 74 20 70 31 20 3d 20 70 4f  .    int p1 = pO
36160 70 2d 3e 70 31 3b 20 0a 20 20 20 20 61 73 73 65  p->p1; .    asse
36170 72 74 28 20 70 31 3e 3d 30 20 26 26 20 70 31 3c  rt( p1>=0 && p1<
36180 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 20 20 61  db->nDb );.    a
36190 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
361a0 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
361b0 70 31 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72  p1) );.    asser
361c0 74 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d  t( isWriteLock==
361d0 30 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f 63 6b  0 || isWriteLock
361e0 3d 3d 31 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  ==1 );.    rc = 
361f0 73 71 6c 69 74 65 33 42 74 72 65 65 4c 6f 63 6b  sqlite3BtreeLock
36200 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70 31  Table(db->aDb[p1
36210 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20  ].pBt, pOp->p2, 
36220 69 73 57 72 69 74 65 4c 6f 63 6b 29 3b 0a 20 20  isWriteLock);.  
36230 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
36240 20 20 69 66 28 20 28 72 63 26 30 78 46 46 29 3d    if( (rc&0xFF)=
36250 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 29  =SQLITE_LOCKED )
36260 7b 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20  {.        const 
36270 63 68 61 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70  char *z = pOp->p
36280 34 2e 7a 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  4.z;.        sql
36290 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
362a0 20 22 64 61 74 61 62 61 73 65 20 74 61 62 6c 65   "database table
362b0 20 69 73 20 6c 6f 63 6b 65 64 3a 20 25 73 22 2c   is locked: %s",
362c0 20 7a 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20   z);.      }.   
362d0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
362e0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
362f0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
36300 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
36310 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
36320 43 48 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  CHE */..#ifndef 
36330 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
36340 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
36350 64 65 3a 20 56 42 65 67 69 6e 20 2a 20 2a 20 2a  de: VBegin * * *
36360 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 6d   P4 *.**.** P4 m
36370 61 79 20 62 65 20 61 20 70 6f 69 6e 74 65 72 20  ay be a pointer 
36380 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74  to an sqlite3_vt
36390 61 62 20 73 74 72 75 63 74 75 72 65 2e 20 49 66  ab structure. If
363a0 20 73 6f 2c 20 63 61 6c 6c 20 74 68 65 20 0a 2a   so, call the .*
363b0 2a 20 78 42 65 67 69 6e 20 6d 65 74 68 6f 64 20  * xBegin method 
363c0 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a  for that table..
363d0 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68 65 74  **.** Also, whet
363e0 68 65 72 20 6f 72 20 6e 6f 74 20 50 34 20 69 73  her or not P4 is
363f0 20 73 65 74 2c 20 63 68 65 63 6b 20 74 68 61 74   set, check that
36400 20 74 68 69 73 20 69 73 20 6e 6f 74 20 62 65 69   this is not bei
36410 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d 0a 2a  ng called from.*
36420 2a 20 77 69 74 68 69 6e 20 61 20 63 61 6c 6c 62  * within a callb
36430 61 63 6b 20 74 6f 20 61 20 76 69 72 74 75 61 6c  ack to a virtual
36440 20 74 61 62 6c 65 20 78 53 79 6e 63 28 29 20 6d   table xSync() m
36450 65 74 68 6f 64 2e 20 49 66 20 69 74 20 69 73 2c  ethod. If it is,
36460 20 74 68 65 20 65 72 72 6f 72 0a 2a 2a 20 63 6f   the error.** co
36470 64 65 20 77 69 6c 6c 20 62 65 20 73 65 74 20 74  de will be set t
36480 6f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 2e  o SQLITE_LOCKED.
36490 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 42 65 67  .*/.case OP_VBeg
364a0 69 6e 3a 20 7b 0a 20 20 56 54 61 62 6c 65 20 2a  in: {.  VTable *
364b0 70 56 54 61 62 3b 0a 20 20 70 56 54 61 62 20 3d  pVTab;.  pVTab =
364c0 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a   pOp->p4.pVtab;.
364d0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
364e0 61 62 42 65 67 69 6e 28 64 62 2c 20 70 56 54 61  abBegin(db, pVTa
364f0 62 29 3b 0a 20 20 69 66 28 20 70 56 54 61 62 20  b);.  if( pVTab 
36500 29 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70  ) sqlite3VtabImp
36510 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 54  ortErrmsg(p, pVT
36520 61 62 2d 3e 70 56 74 61 62 29 3b 0a 20 20 69 66  ab->pVtab);.  if
36530 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
36540 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
36550 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
36560 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
36570 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
36580 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
36590 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
365a0 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43  LE./* Opcode: VC
365b0 72 65 61 74 65 20 50 31 20 50 32 20 2a 20 2a 20  reate P1 P2 * * 
365c0 2a 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 61 20  *.**.** P2 is a 
365d0 72 65 67 69 73 74 65 72 20 74 68 61 74 20 68 6f  register that ho
365e0 6c 64 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  lds the name of 
365f0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
36600 69 6e 20 64 61 74 61 62 61 73 65 20 0a 2a 2a 20  in database .** 
36610 50 31 2e 20 43 61 6c 6c 20 74 68 65 20 78 43 72  P1. Call the xCr
36620 65 61 74 65 20 6d 65 74 68 6f 64 20 66 6f 72 20  eate method for 
36630 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63  that table..*/.c
36640 61 73 65 20 4f 50 5f 56 43 72 65 61 74 65 3a 20  ase OP_VCreate: 
36650 7b 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20  {.  Mem sMem;   
36660 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 73 74         /* For st
36670 6f 72 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64  oring the record
36680 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a   being decoded *
36690 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
366a0 7a 54 61 62 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f  zTab;  /* Name o
366b0 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  f the virtual ta
366c0 62 6c 65 20 2a 2f 0a 0a 20 20 6d 65 6d 73 65 74  ble */..  memset
366d0 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65 6f  (&sMem, 0, sizeo
366e0 66 28 73 4d 65 6d 29 29 3b 0a 20 20 73 4d 65 6d  f(sMem));.  sMem
366f0 2e 64 62 20 3d 20 64 62 3b 0a 20 20 2f 2a 20 42  .db = db;.  /* B
36700 65 63 61 75 73 65 20 50 32 20 69 73 20 61 6c 77  ecause P2 is alw
36710 61 79 73 20 61 20 73 74 61 74 69 63 20 73 74 72  ays a static str
36720 69 6e 67 2c 20 69 74 20 69 73 20 69 6d 70 6f 73  ing, it is impos
36730 73 69 62 6c 65 20 66 6f 72 20 74 68 65 0a 20 20  sible for the.  
36740 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  ** sqlite3VdbeMe
36750 6d 43 6f 70 79 28 29 20 74 6f 20 66 61 69 6c 20  mCopy() to fail 
36760 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 61 4d  */.  assert( (aM
36770 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2e 66 6c 61 67  em[pOp->p2].flag
36780 73 20 26 20 4d 45 4d 5f 53 74 72 29 21 3d 30 20  s & MEM_Str)!=0 
36790 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 61 4d  );.  assert( (aM
367a0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2e 66 6c 61 67  em[pOp->p2].flag
367b0 73 20 26 20 4d 45 4d 5f 53 74 61 74 69 63 29 21  s & MEM_Static)!
367c0 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  =0 );.  rc = sql
367d0 69 74 65 33 56 64 62 65 4d 65 6d 43 6f 70 79 28  ite3VdbeMemCopy(
367e0 26 73 4d 65 6d 2c 20 26 61 4d 65 6d 5b 70 4f 70  &sMem, &aMem[pOp
367f0 2d 3e 70 32 5d 29 3b 0a 20 20 61 73 73 65 72 74  ->p2]);.  assert
36800 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
36810 29 3b 0a 20 20 7a 54 61 62 20 3d 20 28 63 6f 6e  );.  zTab = (con
36820 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33  st char*)sqlite3
36830 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 73 4d 65  _value_text(&sMe
36840 6d 29 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 54  m);.  assert( zT
36850 61 62 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63  ab || db->malloc
36860 46 61 69 6c 65 64 20 29 3b 0a 20 20 69 66 28 20  Failed );.  if( 
36870 7a 54 61 62 20 29 7b 0a 20 20 20 20 72 63 20 3d  zTab ){.    rc =
36880 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
36890 43 72 65 61 74 65 28 64 62 2c 20 70 4f 70 2d 3e  Create(db, pOp->
368a0 70 31 2c 20 7a 54 61 62 2c 20 26 70 2d 3e 7a 45  p1, zTab, &p->zE
368b0 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 73 71  rrMsg);.  }.  sq
368c0 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
368d0 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 69 66  ase(&sMem);.  if
368e0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
368f0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
36900 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
36910 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
36920 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
36930 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
36940 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
36950 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 44  LE./* Opcode: VD
36960 65 73 74 72 6f 79 20 50 31 20 2a 20 2a 20 50 34  estroy P1 * * P4
36970 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74   *.**.** P4 is t
36980 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72  he name of a vir
36990 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61  tual table in da
369a0 74 61 62 61 73 65 20 50 31 2e 20 20 43 61 6c 6c  tabase P1.  Call
369b0 20 74 68 65 20 78 44 65 73 74 72 6f 79 20 6d 65   the xDestroy me
369c0 74 68 6f 64 0a 2a 2a 20 6f 66 20 74 68 61 74 20  thod.** of that 
369d0 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  table..*/.case O
369e0 50 5f 56 44 65 73 74 72 6f 79 3a 20 7b 0a 20 20  P_VDestroy: {.  
369f0 64 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2b 2b 3b  db->nVDestroy++;
36a00 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
36a10 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 64  tabCallDestroy(d
36a20 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
36a30 3e 70 34 2e 7a 29 3b 0a 20 20 64 62 2d 3e 6e 56  >p4.z);.  db->nV
36a40 44 65 73 74 72 6f 79 2d 2d 3b 0a 20 20 69 66 28  Destroy--;.  if(
36a50 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
36a60 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
36a70 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
36a80 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
36a90 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
36aa0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
36ab0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
36ac0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70  E./* Opcode: VOp
36ad0 65 6e 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  en P1 * * P4 *.*
36ae0 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
36af0 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61  nter to a virtua
36b00 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  l table object, 
36b10 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
36b20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31  structure..** P1
36b30 20 69 73 20 61 20 63 75 72 73 6f 72 20 6e 75 6d   is a cursor num
36b40 62 65 72 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ber.  This opcod
36b50 65 20 6f 70 65 6e 73 20 61 20 63 75 72 73 6f 72  e opens a cursor
36b60 20 74 6f 20 74 68 65 20 76 69 72 74 75 61 6c 0a   to the virtual.
36b70 2a 2a 20 74 61 62 6c 65 20 61 6e 64 20 73 74 6f  ** table and sto
36b80 72 65 73 20 74 68 61 74 20 63 75 72 73 6f 72 20  res that cursor 
36b90 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  in P1..*/.case O
36ba0 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62  P_VOpen: {.  Vdb
36bb0 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20  eCursor *pCur;. 
36bc0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
36bd0 72 73 6f 72 20 2a 70 56 43 75 72 3b 0a 20 20 73  rsor *pVCur;.  s
36be0 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
36bf0 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ab;.  const sqli
36c00 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
36c10 75 6c 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  ule;..  assert( 
36c20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
36c30 20 20 70 43 75 72 20 3d 20 30 3b 0a 20 20 70 56    pCur = 0;.  pV
36c40 43 75 72 20 3d 20 30 3b 0a 20 20 70 56 74 61 62  Cur = 0;.  pVtab
36c50 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62   = pOp->p4.pVtab
36c60 2d 3e 70 56 74 61 62 3b 0a 20 20 69 66 28 20 70  ->pVtab;.  if( p
36c70 56 74 61 62 3d 3d 30 20 7c 7c 20 4e 45 56 45 52  Vtab==0 || NEVER
36c80 28 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3d  (pVtab->pModule=
36c90 3d 30 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  =0) ){.    rc = 
36ca0 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20  SQLITE_LOCKED;. 
36cb0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
36cc0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
36cd0 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
36ce0 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 72 63  b->pModule;.  rc
36cf0 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65   = pModule->xOpe
36d00 6e 28 70 56 74 61 62 2c 20 26 70 56 43 75 72 29  n(pVtab, &pVCur)
36d10 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 49  ;.  sqlite3VtabI
36d20 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
36d30 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72 63 20  Vtab);.  if( rc 
36d40 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
36d50 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 2f 2a  _to_error;..  /*
36d60 20 49 6e 69 74 69 61 6c 69 7a 65 20 73 71 6c 69   Initialize sqli
36d70 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20  te3_vtab_cursor 
36d80 62 61 73 65 20 63 6c 61 73 73 20 2a 2f 0a 20 20  base class */.  
36d90 70 56 43 75 72 2d 3e 70 56 74 61 62 20 3d 20 70  pVCur->pVtab = p
36da0 56 74 61 62 3b 0a 0a 20 20 2f 2a 20 49 6e 69 74  Vtab;..  /* Init
36db0 69 61 6c 69 7a 65 20 76 64 62 65 20 63 75 72 73  ialize vdbe curs
36dc0 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 70  or object */.  p
36dd0 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  Cur = allocateCu
36de0 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
36df0 20 30 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f   0, -1, CURTYPE_
36e00 56 54 41 42 29 3b 0a 20 20 69 66 28 20 70 43 75  VTAB);.  if( pCu
36e10 72 20 29 7b 0a 20 20 20 20 70 43 75 72 2d 3e 75  r ){.    pCur->u
36e20 63 2e 70 56 43 75 72 20 3d 20 70 56 43 75 72 3b  c.pVCur = pVCur;
36e30 0a 20 20 20 20 70 56 74 61 62 2d 3e 6e 52 65 66  .    pVtab->nRef
36e40 2b 2b 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ++;.  }else{.   
36e50 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6d 61 6c   assert( db->mal
36e60 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20  locFailed );.   
36e70 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73 65   pModule->xClose
36e80 28 70 56 43 75 72 29 3b 0a 20 20 20 20 67 6f 74  (pVCur);.    got
36e90 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
36ea0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
36eb0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
36ec0 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
36ed0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
36ee0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
36ef0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46 69 6c  ./* Opcode: VFil
36f00 74 65 72 20 50 31 20 50 32 20 50 33 20 50 34 20  ter P1 P2 P3 P4 
36f10 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
36f20 70 6c 61 6e 3d 72 5b 50 33 5d 20 7a 70 6c 61 6e  plan=r[P3] zplan
36f30 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 31 20 69  ='P4'.**.** P1 i
36f40 73 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 65  s a cursor opene
36f50 64 20 75 73 69 6e 67 20 56 4f 70 65 6e 2e 20 20  d using VOpen.  
36f60 50 32 20 69 73 20 61 6e 20 61 64 64 72 65 73 73  P2 is an address
36f70 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 0a 2a   to jump to if.*
36f80 2a 20 74 68 65 20 66 69 6c 74 65 72 65 64 20 72  * the filtered r
36f90 65 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70  esult set is emp
36fa0 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  ty..**.** P4 is 
36fb0 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61  either NULL or a
36fc0 20 73 74 72 69 6e 67 20 74 68 61 74 20 77 61 73   string that was
36fd0 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 74 68   generated by th
36fe0 65 20 78 42 65 73 74 49 6e 64 65 78 0a 2a 2a 20  e xBestIndex.** 
36ff0 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f  method of the mo
37000 64 75 6c 65 2e 20 20 54 68 65 20 69 6e 74 65 72  dule.  The inter
37010 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  pretation of the
37020 20 50 34 20 73 74 72 69 6e 67 20 69 73 20 6c 65   P4 string is le
37030 66 74 0a 2a 2a 20 74 6f 20 74 68 65 20 6d 6f 64  ft.** to the mod
37040 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ule implementati
37050 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  on..**.** This o
37060 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68  pcode invokes th
37070 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64  e xFilter method
37080 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20   on the virtual 
37090 74 61 62 6c 65 20 73 70 65 63 69 66 69 65 64 0a  table specified.
370a0 2a 2a 20 62 79 20 50 31 2e 20 20 54 68 65 20 69  ** by P1.  The i
370b0 6e 74 65 67 65 72 20 71 75 65 72 79 20 70 6c 61  nteger query pla
370c0 6e 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 78  n parameter to x
370d0 46 69 6c 74 65 72 20 69 73 20 73 74 6f 72 65 64  Filter is stored
370e0 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20   in register.** 
370f0 50 33 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b  P3. Register P3+
37100 31 20 73 74 6f 72 65 73 20 74 68 65 20 61 72 67  1 stores the arg
37110 63 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 62  c parameter to b
37120 65 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 0a  e passed to the.
37130 2a 2a 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f  ** xFilter metho
37140 64 2e 20 52 65 67 69 73 74 65 72 73 20 50 33 2b  d. Registers P3+
37150 32 2e 2e 50 33 2b 31 2b 61 72 67 63 20 61 72 65  2..P3+1+argc are
37160 20 74 68 65 20 61 72 67 63 0a 2a 2a 20 61 64 64   the argc.** add
37170 69 74 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65  itional paramete
37180 72 73 20 77 68 69 63 68 20 61 72 65 20 70 61 73  rs which are pas
37190 73 65 64 20 74 6f 0a 2a 2a 20 78 46 69 6c 74 65  sed to.** xFilte
371a0 72 20 61 73 20 61 72 67 76 2e 20 52 65 67 69 73  r as argv. Regis
371b0 74 65 72 20 50 33 2b 32 20 62 65 63 6f 6d 65 73  ter P3+2 becomes
371c0 20 61 72 67 76 5b 30 5d 20 77 68 65 6e 20 70 61   argv[0] when pa
371d0 73 73 65 64 20 74 6f 20 78 46 69 6c 74 65 72 2e  ssed to xFilter.
371e0 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20 69 73  .**.** A jump is
371f0 20 6d 61 64 65 20 74 6f 20 50 32 20 69 66 20 74   made to P2 if t
37200 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 61 66  he result set af
37210 74 65 72 20 66 69 6c 74 65 72 69 6e 67 20 77 6f  ter filtering wo
37220 75 6c 64 20 62 65 20 65 6d 70 74 79 2e 0a 2a 2f  uld be empty..*/
37230 0a 63 61 73 65 20 4f 50 5f 56 46 69 6c 74 65 72  .case OP_VFilter
37240 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  : {   /* jump */
37250 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69  .  int nArg;.  i
37260 6e 74 20 69 51 75 65 72 79 3b 0a 20 20 63 6f 6e  nt iQuery;.  con
37270 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
37280 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65  e *pModule;.  Me
37290 6d 20 2a 70 51 75 65 72 79 3b 0a 20 20 4d 65 6d  m *pQuery;.  Mem
372a0 20 2a 70 41 72 67 63 3b 0a 20 20 73 71 6c 69 74   *pArgc;.  sqlit
372b0 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a  e3_vtab_cursor *
372c0 70 56 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33  pVCur;.  sqlite3
372d0 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
372e0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72  VdbeCursor *pCur
372f0 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69  ;.  int res;.  i
37300 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70  nt i;.  Mem **ap
37310 41 72 67 3b 0a 0a 20 20 70 51 75 65 72 79 20 3d  Arg;..  pQuery =
37320 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
37330 0a 20 20 70 41 72 67 63 20 3d 20 26 70 51 75 65  .  pArgc = &pQue
37340 72 79 5b 31 5d 3b 0a 20 20 70 43 75 72 20 3d 20  ry[1];.  pCur = 
37350 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
37360 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d  ];.  assert( mem
37370 49 73 56 61 6c 69 64 28 70 51 75 65 72 79 29 20  IsValid(pQuery) 
37380 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
37390 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 51 75  ACE(pOp->p3, pQu
373a0 65 72 79 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ery);.  assert( 
373b0 70 43 75 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d  pCur->eCurType==
373c0 43 55 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a  CURTYPE_VTAB );.
373d0 20 20 70 56 43 75 72 20 3d 20 70 43 75 72 2d 3e    pVCur = pCur->
373e0 75 63 2e 70 56 43 75 72 3b 0a 20 20 70 56 74 61  uc.pVCur;.  pVta
373f0 62 20 3d 20 70 56 43 75 72 2d 3e 70 56 74 61 62  b = pVCur->pVtab
37400 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56  ;.  pModule = pV
37410 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20  tab->pModule;.. 
37420 20 2f 2a 20 47 72 61 62 20 74 68 65 20 69 6e 64   /* Grab the ind
37430 65 78 20 6e 75 6d 62 65 72 20 61 6e 64 20 61 72  ex number and ar
37440 67 63 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f  gc parameters */
37450 0a 20 20 61 73 73 65 72 74 28 20 28 70 51 75 65  .  assert( (pQue
37460 72 79 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  ry->flags&MEM_In
37470 74 29 21 3d 30 20 26 26 20 70 41 72 67 63 2d 3e  t)!=0 && pArgc->
37480 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29  flags==MEM_Int )
37490 3b 0a 20 20 6e 41 72 67 20 3d 20 28 69 6e 74 29  ;.  nArg = (int)
374a0 70 41 72 67 63 2d 3e 75 2e 69 3b 0a 20 20 69 51  pArgc->u.i;.  iQ
374b0 75 65 72 79 20 3d 20 28 69 6e 74 29 70 51 75 65  uery = (int)pQue
374c0 72 79 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49  ry->u.i;..  /* I
374d0 6e 76 6f 6b 65 20 74 68 65 20 78 46 69 6c 74 65  nvoke the xFilte
374e0 72 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 72 65  r method */.  re
374f0 73 20 3d 20 30 3b 0a 20 20 61 70 41 72 67 20 3d  s = 0;.  apArg =
37500 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 66 6f 72   p->apArg;.  for
37510 28 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67 3b 20  (i = 0; i<nArg; 
37520 69 2b 2b 29 7b 0a 20 20 20 20 61 70 41 72 67 5b  i++){.    apArg[
37530 69 5d 20 3d 20 26 70 41 72 67 63 5b 69 2b 31 5d  i] = &pArgc[i+1]
37540 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 70 4d 6f  ;.  }.  rc = pMo
37550 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28 70 56  dule->xFilter(pV
37560 43 75 72 2c 20 69 51 75 65 72 79 2c 20 70 4f 70  Cur, iQuery, pOp
37570 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61 70  ->p4.z, nArg, ap
37580 41 72 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  Arg);.  sqlite3V
37590 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
375a0 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28  p, pVtab);.  if(
375b0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
375c0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
375d0 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e   res = pModule->
375e0 78 45 6f 66 28 70 56 43 75 72 29 3b 0a 20 20 70  xEof(pVCur);.  p
375f0 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30  Cur->nullRow = 0
37600 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
37610 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20  ken(res!=0,2);. 
37620 20 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20   if( res ) goto 
37630 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72  jump_to_p2;.  br
37640 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
37650 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
37660 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
37670 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
37680 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
37690 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d  * Opcode: VColum
376a0 6e 20 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a  n P1 P2 P3 * P5.
376b0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
376c0 33 5d 3d 76 63 6f 6c 75 6d 6e 28 50 32 29 0a 2a  3]=vcolumn(P2).*
376d0 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72 65  *.** Store in re
376e0 67 69 73 74 65 72 20 50 33 20 74 68 65 20 76 61  gister P3 the va
376f0 6c 75 65 20 6f 66 20 74 68 65 20 50 32 2d 74 68  lue of the P2-th
37700 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68   column of.** th
37710 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 6f 66  e current row of
37720 20 74 68 65 20 76 69 72 74 75 61 6c 2d 74 61 62   the virtual-tab
37730 6c 65 20 6f 66 20 63 75 72 73 6f 72 20 50 31 2e  le of cursor P1.
37740 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 56 43  .**.** If the VC
37750 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 69 73 20  olumn opcode is 
37760 62 65 69 6e 67 20 75 73 65 64 20 74 6f 20 66 65  being used to fe
37770 74 63 68 20 74 68 65 20 76 61 6c 75 65 20 6f 66  tch the value of
37780 0a 2a 2a 20 61 6e 20 75 6e 63 68 61 6e 67 69 6e  .** an unchangin
37790 67 20 63 6f 6c 75 6d 6e 20 64 75 72 69 6e 67 20  g column during 
377a0 61 6e 20 55 50 44 41 54 45 20 6f 70 65 72 61 74  an UPDATE operat
377b0 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 50 35  ion, then the P5
377c0 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 31 2e 20  .** value is 1. 
377d0 20 4f 74 68 65 72 77 69 73 65 2c 20 50 35 20 69   Otherwise, P5 i
377e0 73 20 30 2e 20 20 54 68 65 20 50 35 20 76 61 6c  s 0.  The P5 val
377f0 75 65 20 69 73 20 72 65 74 75 72 6e 65 64 0a 2a  ue is returned.*
37800 2a 20 62 79 20 73 71 6c 69 74 65 33 5f 76 74 61  * by sqlite3_vta
37810 62 5f 6e 6f 63 68 61 6e 67 65 28 29 20 72 6f 75  b_nochange() rou
37820 74 69 6e 65 20 63 61 6e 20 63 61 6e 20 62 65 20  tine can can be 
37830 75 73 65 64 0a 2a 2a 20 62 79 20 76 69 72 74 75  used.** by virtu
37840 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65  al table impleme
37850 6e 74 61 74 69 6f 6e 73 20 74 6f 20 72 65 74 75  ntations to retu
37860 72 6e 20 73 70 65 63 69 61 6c 20 22 6e 6f 2d 63  rn special "no-c
37870 68 61 6e 67 65 22 0a 2a 2a 20 6d 61 72 6b 73 20  hange".** marks 
37880 77 68 69 63 68 20 63 61 6e 20 62 65 20 6d 6f 72  which can be mor
37890 65 20 65 66 66 69 63 69 65 6e 74 2c 20 64 65 70  e efficient, dep
378a0 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 76 69  ending on the vi
378b0 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2f 0a  rtual table..*/.
378c0 63 61 73 65 20 4f 50 5f 56 43 6f 6c 75 6d 6e 3a  case OP_VColumn:
378d0 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61   {.  sqlite3_vta
378e0 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73  b *pVtab;.  cons
378f0 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
37900 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d   *pModule;.  Mem
37910 20 2a 70 44 65 73 74 3b 0a 20 20 73 71 6c 69 74   *pDest;.  sqlit
37920 65 33 5f 63 6f 6e 74 65 78 74 20 73 43 6f 6e 74  e3_context sCont
37930 65 78 74 3b 0a 0a 20 20 56 64 62 65 43 75 72 73  ext;..  VdbeCurs
37940 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61 70  or *pCur = p->ap
37950 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
37960 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 65 43  assert( pCur->eC
37970 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
37980 56 54 41 42 20 29 3b 0a 20 20 61 73 73 65 72 74  VTAB );.  assert
37990 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
379a0 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
379b0 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
379c0 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61   );.  pDest = &a
379d0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
379e0 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
379f0 28 70 2c 20 70 44 65 73 74 29 3b 0a 20 20 69 66  (p, pDest);.  if
37a00 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20  ( pCur->nullRow 
37a10 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
37a20 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65  beMemSetNull(pDe
37a30 73 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  st);.    break;.
37a40 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43    }.  pVtab = pC
37a50 75 72 2d 3e 75 63 2e 70 56 43 75 72 2d 3e 70 56  ur->uc.pVCur->pV
37a60 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
37a70 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b   pVtab->pModule;
37a80 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75  .  assert( pModu
37a90 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20  le->xColumn );. 
37aa0 20 6d 65 6d 73 65 74 28 26 73 43 6f 6e 74 65 78   memset(&sContex
37ab0 74 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 43 6f  t, 0, sizeof(sCo
37ac0 6e 74 65 78 74 29 29 3b 0a 20 20 73 43 6f 6e 74  ntext));.  sCont
37ad0 65 78 74 2e 70 4f 75 74 20 3d 20 70 44 65 73 74  ext.pOut = pDest
37ae0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ;.  if( pOp->p5 
37af0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
37b00 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65  beMemSetNull(pDe
37b10 73 74 29 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e  st);.    pDest->
37b20 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
37b30 7c 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 20 20 70  |MEM_Zero;.    p
37b40 44 65 73 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20  Dest->u.nZero = 
37b50 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  0;.  }else{.    
37b60 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
37b70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  Dest, MEM_Null);
37b80 0a 20 20 7d 0a 20 20 72 63 20 3d 20 70 4d 6f 64  .  }.  rc = pMod
37b90 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43 75  ule->xColumn(pCu
37ba0 72 2d 3e 75 63 2e 70 56 43 75 72 2c 20 26 73 43  r->uc.pVCur, &sC
37bb0 6f 6e 74 65 78 74 2c 20 70 4f 70 2d 3e 70 32 29  ontext, pOp->p2)
37bc0 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 49  ;.  sqlite3VtabI
37bd0 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
37be0 56 74 61 62 29 3b 0a 20 20 69 66 28 20 73 43 6f  Vtab);.  if( sCo
37bf0 6e 74 65 78 74 2e 69 73 45 72 72 6f 72 3e 30 20  ntext.isError>0 
37c00 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
37c10 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c  beError(p, "%s",
37c20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
37c30 65 78 74 28 70 44 65 73 74 29 29 3b 0a 20 20 20  ext(pDest));.   
37c40 20 72 63 20 3d 20 73 43 6f 6e 74 65 78 74 2e 69   rc = sContext.i
37c50 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71  sError;.  }.  sq
37c60 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
37c70 6e 63 6f 64 69 6e 67 28 70 44 65 73 74 2c 20 65  ncoding(pDest, e
37c80 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 52 45 47 49  ncoding);.  REGI
37c90 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
37ca0 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 55 50  p3, pDest);.  UP
37cb0 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
37cc0 45 28 70 44 65 73 74 29 3b 0a 0a 20 20 69 66 28  E(pDest);..  if(
37cd0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
37ce0 6f 6f 42 69 67 28 70 44 65 73 74 29 20 29 7b 0a  ooBig(pDest) ){.
37cf0 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
37d00 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29  ;.  }.  if( rc )
37d10 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
37d20 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
37d30 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
37d40 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
37d50 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
37d60 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
37d70 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
37d80 4f 70 63 6f 64 65 3a 20 56 4e 65 78 74 20 50 31  Opcode: VNext P1
37d90 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
37da0 41 64 76 61 6e 63 65 20 76 69 72 74 75 61 6c 20  Advance virtual 
37db0 74 61 62 6c 65 20 50 31 20 74 6f 20 74 68 65 20  table P1 to the 
37dc0 6e 65 78 74 20 72 6f 77 20 69 6e 20 69 74 73 20  next row in its 
37dd0 72 65 73 75 6c 74 20 73 65 74 20 61 6e 64 0a 2a  result set and.*
37de0 2a 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75  * jump to instru
37df0 63 74 69 6f 6e 20 50 32 2e 20 20 4f 72 2c 20 69  ction P2.  Or, i
37e00 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  f the virtual ta
37e10 62 6c 65 20 68 61 73 20 72 65 61 63 68 65 64 0a  ble has reached.
37e20 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 69 74  ** the end of it
37e30 73 20 72 65 73 75 6c 74 20 73 65 74 2c 20 74 68  s result set, th
37e40 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  en fall through 
37e50 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
37e60 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
37e70 20 4f 50 5f 56 4e 65 78 74 3a 20 7b 20 20 20 2f   OP_VNext: {   /
37e80 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 73 71 6c 69  * jump */.  sqli
37e90 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
37ea0 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
37eb0 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
37ec0 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 56  ;.  int res;.  V
37ed0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b  dbeCursor *pCur;
37ee0 0a 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 70  ..  res = 0;.  p
37ef0 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
37f00 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
37f10 74 28 20 70 43 75 72 2d 3e 65 43 75 72 54 79 70  t( pCur->eCurTyp
37f20 65 3d 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20  e==CURTYPE_VTAB 
37f30 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e  );.  if( pCur->n
37f40 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62 72  ullRow ){.    br
37f50 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62  eak;.  }.  pVtab
37f60 20 3d 20 70 43 75 72 2d 3e 75 63 2e 70 56 43 75   = pCur->uc.pVCu
37f70 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64  r->pVtab;.  pMod
37f80 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f  ule = pVtab->pMo
37f90 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20  dule;.  assert( 
37fa0 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 20 29  pModule->xNext )
37fb0 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  ;..  /* Invoke t
37fc0 68 65 20 78 4e 65 78 74 28 29 20 6d 65 74 68 6f  he xNext() metho
37fd0 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e  d of the module.
37fe0 20 54 68 65 72 65 20 69 73 20 6e 6f 20 77 61 79   There is no way
37ff0 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 75 6e   for the.  ** un
38000 64 65 72 6c 79 69 6e 67 20 69 6d 70 6c 65 6d 65  derlying impleme
38010 6e 74 61 74 69 6f 6e 20 74 6f 20 72 65 74 75 72  ntation to retur
38020 6e 20 61 6e 20 65 72 72 6f 72 20 69 66 20 6f 6e  n an error if on
38030 65 20 6f 63 63 75 72 73 20 64 75 72 69 6e 67 0a  e occurs during.
38040 20 20 2a 2a 20 78 4e 65 78 74 28 29 2e 20 49 6e    ** xNext(). In
38050 73 74 65 61 64 2c 20 69 66 20 61 6e 20 65 72 72  stead, if an err
38060 6f 72 20 6f 63 63 75 72 73 2c 20 74 72 75 65 20  or occurs, true 
38070 69 73 20 72 65 74 75 72 6e 65 64 20 28 69 6e 64  is returned (ind
38080 69 63 61 74 69 6e 67 20 74 68 61 74 20 0a 20 20  icating that .  
38090 2a 2a 20 64 61 74 61 20 69 73 20 61 76 61 69 6c  ** data is avail
380a0 61 62 6c 65 29 20 61 6e 64 20 74 68 65 20 65 72  able) and the er
380b0 72 6f 72 20 63 6f 64 65 20 72 65 74 75 72 6e 65  ror code returne
380c0 64 20 77 68 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f  d when xColumn o
380d0 72 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f 74 68 65  r.  ** some othe
380e0 72 20 6d 65 74 68 6f 64 20 69 73 20 6e 65 78 74  r method is next
380f0 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 74 68 65 20   invoked on the 
38100 73 61 76 65 20 76 69 72 74 75 61 6c 20 74 61 62  save virtual tab
38110 6c 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a  le cursor..  */.
38120 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
38130 78 4e 65 78 74 28 70 43 75 72 2d 3e 75 63 2e 70  xNext(pCur->uc.p
38140 56 43 75 72 29 3b 0a 20 20 73 71 6c 69 74 65 33  VCur);.  sqlite3
38150 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
38160 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66  (p, pVtab);.  if
38170 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
38180 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
38190 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d    res = pModule-
381a0 3e 78 45 6f 66 28 70 43 75 72 2d 3e 75 63 2e 70  >xEof(pCur->uc.p
381b0 56 43 75 72 29 3b 0a 20 20 56 64 62 65 42 72 61  VCur);.  VdbeBra
381c0 6e 63 68 54 61 6b 65 6e 28 21 72 65 73 2c 32 29  nchTaken(!res,2)
381d0 3b 0a 20 20 69 66 28 20 21 72 65 73 20 29 7b 0a  ;.  if( !res ){.
381e0 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
381f0 69 73 20 64 61 74 61 2c 20 6a 75 6d 70 20 74 6f  is data, jump to
38200 20 50 32 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20   P2 */.    goto 
38210 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63  jump_to_p2_and_c
38220 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
38230 70 74 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63  pt;.  }.  goto c
38240 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
38250 70 74 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  pt;.}.#endif /* 
38260 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
38270 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
38280 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
38290 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
382a0 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61 6d 65   Opcode: VRename
382b0 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
382c0 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
382d0 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  er to a virtual 
382e0 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e  table object, an
382f0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
38300 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73  ructure..** This
38310 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes