/ Hex Artifact Content
Login

Artifact 02d6df64c03e6c69b94d8e53699b0ab4e4d6bc74ef88484b48970864dbf0cce7:


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 74 68 65 20 74 79 70 65 20 6f 66 20 62  is the type of b
10d0: 72 61 6e 63 68 2e 20 20 49 20 69 73 20 74 68 65  ranch.  I is the
10e0: 20 64 69 72 65 63 74 69 6f 6e 20 74 61 6b 65 6e   direction taken
10f0: 20 66 6f 72 20 74 68 69 73 20 69 6e 73 74 61 6e   for this instan
1100: 63 65 20 6f 66 0a 2a 2a 20 74 68 65 20 62 72 61  ce of.** the bra
1110: 6e 63 68 2e 0a 2a 2a 0a 2a 2a 20 20 20 4d 3a 20  nch..**.**   M: 
1120: 32 20 2d 20 74 77 6f 2d 77 61 79 20 62 72 61 6e  2 - two-way bran
1130: 63 68 20 28 49 3d 30 3a 20 66 61 6c 6c 2d 74 68  ch (I=0: fall-th
1140: 72 75 20 20 20 31 3a 20 6a 75 6d 70 20 20 20 20  ru   1: jump    
1150: 20 20 20 20 20 20 20 20 20 20 20 20 29 0a 2a 2a              ).**
1160: 20 20 20 20 20 20 33 20 2d 20 74 77 6f 2d 77 61        3 - two-wa
1170: 79 20 2b 20 4e 55 4c 4c 20 28 49 3d 30 3a 20 66  y + NULL (I=0: f
1180: 61 6c 6c 2d 74 68 72 75 20 20 20 31 3a 20 6a 75  all-thru   1: ju
1190: 6d 70 20 20 20 20 20 20 32 3a 20 4e 55 4c 4c 20  mp      2: NULL 
11a0: 20 20 29 0a 2a 2a 20 20 20 20 20 20 34 20 2d 20    ).**      4 - 
11b0: 4f 50 5f 4a 75 6d 70 20 20 20 20 20 20 20 20 28  OP_Jump        (
11c0: 49 3d 30 3a 20 6a 75 6d 70 20 70 31 20 20 20 20  I=0: jump p1    
11d0: 20 31 3a 20 6a 75 6d 70 20 70 32 20 20 20 32 3a   1: jump p2   2:
11e0: 20 6a 75 6d 70 20 70 33 29 0a 2a 2a 0a 2a 2a 20   jump p3).**.** 
11f0: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
1200: 69 66 20 4d 20 69 73 20 32 2c 20 74 68 65 6e 20  if M is 2, then 
1210: 49 20 69 73 20 65 69 74 68 65 72 20 30 20 28 66  I is either 0 (f
1220: 6f 72 20 66 61 6c 6c 2d 74 68 72 6f 75 67 68 29  or fall-through)
1230: 20 6f 72 0a 2a 2a 20 31 20 28 66 6f 72 20 77 68   or.** 1 (for wh
1240: 65 6e 20 74 68 65 20 62 72 61 6e 63 68 20 69 73  en the branch is
1250: 20 74 61 6b 65 6e 29 2e 20 20 49 66 20 4d 20 69   taken).  If M i
1260: 73 20 33 2c 20 74 68 65 20 49 20 69 73 20 30 20  s 3, the I is 0 
1270: 66 6f 72 20 61 6e 0a 2a 2a 20 6f 72 64 69 6e 61  for an.** ordina
1280: 72 79 20 66 61 6c 6c 2d 74 68 72 6f 75 67 68 2c  ry fall-through,
1290: 20 49 20 69 73 20 31 20 69 66 20 74 68 65 20 62   I is 1 if the b
12a0: 72 61 6e 63 68 20 77 61 73 20 74 61 6b 65 6e 2c  ranch was taken,
12b0: 20 61 6e 64 20 49 20 69 73 20 32 20 0a 2a 2a 20   and I is 2 .** 
12c0: 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  if the result of
12d0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 4e   comparison is N
12e0: 55 4c 4c 2e 20 20 46 6f 72 20 4d 3d 33 2c 20 49  ULL.  For M=3, I
12f0: 3d 32 20 74 68 65 20 6a 75 6d 70 20 6d 61 79 20  =2 the jump may 
1300: 6f 72 0a 2a 2a 20 6d 61 79 20 6e 6f 74 20 62 65  or.** may not be
1310: 20 74 61 6b 65 6e 2c 20 64 65 70 65 6e 64 69 6e   taken, dependin
1320: 67 20 6f 6e 20 74 68 65 20 53 51 4c 49 54 45 5f  g on the SQLITE_
1330: 4a 55 4d 50 49 46 4e 55 4c 4c 20 66 6c 61 67 73  JUMPIFNULL flags
1340: 20 69 6e 20 70 35 2e 0a 2a 2a 20 57 68 65 6e 20   in p5..** When 
1350: 4d 20 69 73 20 34 2c 20 74 68 61 74 20 6d 65 61  M is 4, that mea
1360: 6e 73 20 74 68 61 74 20 61 6e 20 4f 50 5f 4a 75  ns that an OP_Ju
1370: 6d 70 20 69 73 20 62 65 69 6e 67 20 72 75 6e 2e  mp is being run.
1380: 20 20 49 20 69 73 20 30 2c 20 31 2c 20 6f 72 20    I is 0, 1, or 
1390: 32 0a 2a 2a 20 64 65 70 65 6e 64 69 6e 67 20 6f  2.** depending o
13a0: 6e 20 69 66 20 74 68 65 20 6f 70 65 72 61 6e 64  n if the operand
13b0: 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 2c  s are less than,
13c0: 20 65 71 75 61 6c 2c 20 6f 72 20 67 72 65 61 74   equal, or great
13d0: 65 72 20 74 68 61 6e 2e 0a 2a 2a 0a 2a 2a 20 69  er than..**.** i
13e0: 53 72 63 4c 69 6e 65 20 69 73 20 74 68 65 20 73  SrcLine is the s
13f0: 6f 75 72 63 65 20 63 6f 64 65 20 6c 69 6e 65 20  ource code line 
1400: 28 66 72 6f 6d 20 74 68 65 20 5f 5f 4c 49 4e 45  (from the __LINE
1410: 5f 5f 20 6d 61 63 72 6f 29 20 74 68 61 74 0a 2a  __ macro) that.*
1420: 2a 20 67 65 6e 65 72 61 74 65 64 20 74 68 65 20  * generated the 
1430: 56 44 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e  VDBE instruction
1440: 20 63 6f 6d 62 69 6e 65 64 20 77 69 74 68 20 66   combined with f
1450: 6c 61 67 20 62 69 74 73 2e 20 20 54 68 65 20 73  lag bits.  The s
1460: 6f 75 72 63 65 0a 2a 2a 20 63 6f 64 65 20 6c 69  ource.** code li
1470: 6e 65 20 6e 75 6d 62 65 72 20 69 73 20 69 6e 20  ne number is in 
1480: 74 68 65 20 6c 6f 77 65 72 20 32 34 20 62 69 74  the lower 24 bit
1490: 73 20 6f 66 20 69 53 72 63 4c 69 6e 65 20 61 6e  s of iSrcLine an
14a0: 64 20 74 68 65 20 75 70 70 65 72 0a 2a 2a 20 38  d the upper.** 8
14b0: 20 62 79 74 65 73 20 61 72 65 20 66 6c 61 67 73   bytes are flags
14c0: 2e 20 20 54 68 65 20 6c 6f 77 65 72 20 74 68 72  .  The lower thr
14d0: 65 65 20 62 69 74 73 20 6f 66 20 74 68 65 20 66  ee bits of the f
14e0: 6c 61 67 73 20 69 6e 64 69 63 61 74 65 0a 2a 2a  lags indicate.**
14f0: 20 76 61 6c 75 65 73 20 66 6f 72 20 49 20 74 68   values for I th
1500: 61 74 20 73 68 6f 75 6c 64 20 6e 65 76 65 72 20  at should never 
1510: 6f 63 63 75 72 2e 20 20 46 6f 72 20 65 78 61 6d  occur.  For exam
1520: 70 6c 65 2c 20 69 66 20 74 68 65 20 62 72 61 6e  ple, if the bran
1530: 63 68 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20  ch is.** always 
1540: 74 61 6b 65 6e 2c 20 74 68 65 20 66 6c 61 67 73  taken, the flags
1550: 20 73 68 6f 75 6c 64 20 62 65 20 30 78 30 35 20   should be 0x05 
1560: 73 69 6e 63 65 20 74 68 65 20 66 61 6c 6c 2d 74  since the fall-t
1570: 68 72 6f 75 67 68 20 61 6e 64 0a 2a 2a 20 61 6c  hrough and.** al
1580: 74 65 72 6e 61 74 65 20 62 72 61 6e 63 68 20 61  ternate branch a
1590: 72 65 20 6e 65 76 65 72 20 74 61 6b 65 6e 2e 20  re never taken. 
15a0: 20 49 66 20 61 20 62 72 61 6e 63 68 20 69 73 20   If a branch is 
15b0: 6e 65 76 65 72 20 74 61 6b 65 6e 20 74 68 65 6e  never taken then
15c0: 0a 2a 2a 20 66 6c 61 67 73 20 73 68 6f 75 6c 64  .** flags should
15d0: 20 62 65 20 30 78 30 36 20 73 69 6e 63 65 20 6f   be 0x06 since o
15e0: 6e 6c 79 20 74 68 65 20 66 61 6c 6c 2d 74 68 72  nly the fall-thr
15f0: 6f 75 67 68 20 61 70 70 72 6f 61 63 68 20 69 73  ough approach is
1600: 20 61 6c 6c 6f 77 65 64 2e 0a 2a 2a 0a 2a 2a 20   allowed..**.** 
1610: 42 69 74 20 30 78 30 38 20 6f 66 20 74 68 65 20  Bit 0x08 of the 
1620: 66 6c 61 67 73 20 69 6e 64 69 63 61 74 65 73 20  flags indicates 
1630: 61 6e 20 4f 50 5f 4a 75 6d 70 20 6f 70 63 6f 64  an OP_Jump opcod
1640: 65 20 74 68 61 74 20 69 73 20 6f 6e 6c 79 0a 2a  e that is only.*
1650: 2a 20 69 6e 74 65 72 65 73 74 65 64 20 69 6e 20  * interested in 
1660: 65 71 75 61 6c 20 6f 72 20 6e 6f 74 2d 65 71 75  equal or not-equ
1670: 61 6c 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  al.  In other wo
1680: 72 64 73 2c 20 49 3d 3d 30 20 61 6e 64 20 49 3d  rds, I==0 and I=
1690: 3d 32 0a 2a 2a 20 73 68 6f 75 6c 64 20 62 65 20  =2.** should be 
16a0: 74 72 65 61 74 65 64 20 61 73 20 65 71 75 69 76  treated as equiv
16b0: 61 6c 65 6e 74 0a 2a 2a 0a 2a 2a 20 53 69 6e 63  alent.**.** Sinc
16c0: 65 20 6f 6e 6c 79 20 61 20 6c 69 6e 65 20 6e 75  e only a line nu
16d0: 6d 62 65 72 20 69 73 20 72 65 74 61 69 6e 65 64  mber is retained
16e0: 2c 20 6e 6f 74 20 74 68 65 20 66 69 6c 65 6e 61  , not the filena
16f0: 6d 65 2c 20 74 68 69 73 20 6d 61 63 72 6f 0a 2a  me, this macro.*
1700: 2a 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72  * only works for
1710: 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 20 62 75   amalgamation bu
1720: 69 6c 64 73 2e 20 20 42 75 74 20 74 68 61 74 20  ilds.  But that 
1730: 69 73 20 6f 6b 2c 20 73 69 6e 63 65 20 74 68 65  is ok, since the
1740: 73 65 20 6d 61 63 72 6f 73 0a 2a 2a 20 73 68 6f  se macros.** sho
1750: 75 6c 64 20 62 65 20 6e 6f 2d 6f 70 73 20 65 78  uld be no-ops ex
1760: 63 65 70 74 20 66 6f 72 20 73 70 65 63 69 61 6c  cept for special
1770: 20 62 75 69 6c 64 73 20 75 73 65 64 20 74 6f 20   builds used to 
1780: 6d 65 61 73 75 72 65 20 74 65 73 74 20 63 6f 76  measure test cov
1790: 65 72 61 67 65 2e 0a 2a 2f 0a 23 69 66 20 21 64  erage..*/.#if !d
17a0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 56 44  efined(SQLITE_VD
17b0: 42 45 5f 43 4f 56 45 52 41 47 45 29 0a 23 20 64  BE_COVERAGE).# d
17c0: 65 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68  efine VdbeBranch
17d0: 54 61 6b 65 6e 28 49 2c 4d 29 0a 23 65 6c 73 65  Taken(I,M).#else
17e0: 0a 23 20 64 65 66 69 6e 65 20 56 64 62 65 42 72  .# define VdbeBr
17f0: 61 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29 20 76  anchTaken(I,M) v
1800: 64 62 65 54 61 6b 65 42 72 61 6e 63 68 28 70 4f  dbeTakeBranch(pO
1810: 70 2d 3e 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29  p->iSrcLine,I,M)
1820: 0a 20 20 73 74 61 74 69 63 20 76 6f 69 64 20 76  .  static void v
1830: 64 62 65 54 61 6b 65 42 72 61 6e 63 68 28 75 33  dbeTakeBranch(u3
1840: 32 20 69 53 72 63 4c 69 6e 65 2c 20 75 38 20 49  2 iSrcLine, u8 I
1850: 2c 20 75 38 20 4d 29 7b 0a 20 20 20 20 75 38 20  , u8 M){.    u8 
1860: 6d 4e 65 76 65 72 3b 0a 20 20 20 20 61 73 73 65  mNever;.    asse
1870: 72 74 28 20 49 3c 3d 32 20 29 3b 20 20 2f 2a 20  rt( I<=2 );  /* 
1880: 30 3a 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2c  0: fall through,
1890: 20 20 31 3a 20 74 61 6b 65 6e 2c 20 20 32 3a 20    1: taken,  2: 
18a0: 61 6c 74 65 72 6e 61 74 65 20 74 61 6b 65 6e 20  alternate taken 
18b0: 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 4d  */.    assert( M
18c0: 3c 3d 34 20 29 3b 20 20 2f 2a 20 32 3a 20 74 77  <=4 );  /* 2: tw
18d0: 6f 2d 77 61 79 20 62 72 61 6e 63 68 2c 20 33 3a  o-way branch, 3:
18e0: 20 74 68 72 65 65 2d 77 61 79 20 62 72 61 6e 63   three-way branc
18f0: 68 2c 20 34 3a 20 4f 50 5f 4a 75 6d 70 20 2a 2f  h, 4: OP_Jump */
1900: 0a 20 20 20 20 61 73 73 65 72 74 28 20 49 3c 4d  .    assert( I<M
1910: 20 29 3b 20 20 20 2f 2a 20 49 20 63 61 6e 20 6f   );   /* I can o
1920: 6e 6c 79 20 62 65 20 32 20 69 66 20 4d 20 69 73  nly be 2 if M is
1930: 20 33 20 6f 72 20 34 20 2a 2f 0a 20 20 20 20 2f   3 or 4 */.    /
1940: 2a 20 54 72 61 6e 73 66 6f 72 6d 20 49 20 66 72  * Transform I fr
1950: 6f 6d 20 61 20 69 6e 74 65 67 65 72 20 5b 30 2c  om a integer [0,
1960: 31 2c 32 5d 20 69 6e 74 6f 20 61 20 62 69 74 6d  1,2] into a bitm
1970: 61 73 6b 20 6f 66 20 5b 31 2c 32 2c 34 5d 20 2a  ask of [1,2,4] *
1980: 2f 0a 20 20 20 20 49 20 3d 20 31 3c 3c 49 3b 0a  /.    I = 1<<I;.
1990: 20 20 20 20 2f 2a 20 54 68 65 20 75 70 70 65 72      /* The upper
19a0: 20 38 20 62 69 74 73 20 6f 66 20 69 53 72 63 4c   8 bits of iSrcL
19b0: 69 6e 65 20 61 72 65 20 66 6c 61 67 73 2e 20 20  ine are flags.  
19c0: 54 68 65 20 6c 6f 77 65 72 20 74 68 72 65 65 20  The lower three 
19d0: 62 69 74 73 20 6f 66 0a 20 20 20 20 2a 2a 20 74  bits of.    ** t
19e0: 68 65 20 66 6c 61 67 73 20 69 6e 64 69 63 61 74  he flags indicat
19f0: 65 20 64 69 72 65 63 74 69 6f 6e 73 20 74 68 61  e directions tha
1a00: 74 20 74 68 65 20 62 72 61 6e 63 68 20 63 61 6e  t the branch can
1a10: 20 6e 65 76 65 72 20 67 6f 2e 20 20 49 66 0a 20   never go.  If. 
1a20: 20 20 20 2a 2a 20 61 20 62 72 61 6e 63 68 20 72     ** a branch r
1a30: 65 61 6c 6c 79 20 64 6f 65 73 20 67 6f 20 69 6e  eally does go in
1a40: 20 6f 6e 65 20 6f 66 20 74 68 6f 73 65 20 64 69   one of those di
1a50: 72 65 63 74 69 6f 6e 73 2c 20 61 73 73 65 72 74  rections, assert
1a60: 20 72 69 67 68 74 0a 20 20 20 20 2a 2a 20 61 77   right.    ** aw
1a70: 61 79 2e 20 2a 2f 0a 20 20 20 20 6d 4e 65 76 65  ay. */.    mNeve
1a80: 72 20 3d 20 69 53 72 63 4c 69 6e 65 20 3e 3e 20  r = iSrcLine >> 
1a90: 32 34 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  24;.    assert( 
1aa0: 28 49 20 26 20 6d 4e 65 76 65 72 29 3d 3d 30 20  (I & mNever)==0 
1ab0: 29 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  );.    if( sqlit
1ac0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
1ad0: 56 64 62 65 42 72 61 6e 63 68 3d 3d 30 20 29 20  VdbeBranch==0 ) 
1ae0: 72 65 74 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54 45  return;  /*NO_TE
1af0: 53 54 2a 2f 0a 20 20 20 20 2f 2a 20 49 6e 76 6f  ST*/.    /* Invo
1b00: 6b 65 20 74 68 65 20 62 72 61 6e 63 68 20 63 6f  ke the branch co
1b10: 76 65 72 61 67 65 20 63 61 6c 6c 62 61 63 6b 20  verage callback 
1b20: 77 69 74 68 20 74 68 72 65 65 20 61 72 67 75 6d  with three argum
1b30: 65 6e 74 73 3a 0a 20 20 20 20 2a 2a 20 20 20 20  ents:.    **    
1b40: 69 53 72 63 4c 69 6e 65 20 2d 20 74 68 65 20 6c  iSrcLine - the l
1b50: 69 6e 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  ine number of th
1b60: 65 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 29  e VdbeCoverage()
1b70: 20 6d 61 63 72 6f 2c 20 77 69 74 68 0a 20 20 20   macro, with.   
1b80: 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20   **             
1b90: 20 20 66 6c 61 67 73 20 72 65 6d 6f 76 65 64 2e    flags removed.
1ba0: 0a 20 20 20 20 2a 2a 20 20 20 20 49 20 20 20 20  .    **    I    
1bb0: 20 20 20 20 2d 20 4d 61 73 6b 20 6f 66 20 62 69      - Mask of bi
1bc0: 74 73 20 30 78 30 37 20 69 6e 64 69 63 61 74 69  ts 0x07 indicati
1bd0: 6e 67 20 77 68 69 63 68 20 63 61 73 65 73 20 61  ng which cases a
1be0: 72 65 20 61 72 65 0a 20 20 20 20 2a 2a 20 20 20  re are.    **   
1bf0: 20 20 20 20 20 20 20 20 20 20 20 20 66 75 6c 66              fulf
1c00: 69 6c 6c 65 64 20 62 79 20 74 68 69 73 20 69 6e  illed by this in
1c10: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 6a 75  stance of the ju
1c20: 6d 70 2e 20 20 30 78 30 31 20 6d 65 61 6e 73 0a  mp.  0x01 means.
1c30: 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20      **          
1c40: 20 20 20 20 20 66 61 6c 6c 2d 74 68 72 75 2c 20       fall-thru, 
1c50: 30 78 30 32 20 6d 65 61 6e 73 20 74 61 6b 65 6e  0x02 means taken
1c60: 2c 20 30 78 30 34 20 6d 65 61 6e 73 20 4e 55 4c  , 0x04 means NUL
1c70: 4c 2e 20 20 41 6e 79 0a 20 20 20 20 2a 2a 20 20  L.  Any.    **  
1c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
1c90: 6f 73 73 69 62 6c 65 20 63 61 73 65 73 20 28 65  ossible cases (e
1ca0: 78 3a 20 69 66 20 74 68 65 20 63 6f 6d 70 61 72  x: if the compar
1cb0: 69 73 6f 6e 20 69 73 20 6e 65 76 65 72 20 4e 55  ison is never NU
1cc0: 4c 4c 29 0a 20 20 20 20 2a 2a 20 20 20 20 20 20  LL).    **      
1cd0: 20 20 20 20 20 20 20 20 20 61 72 65 20 66 69 6c           are fil
1ce0: 6c 65 64 20 69 6e 20 61 75 74 6f 6d 61 74 69 63  led in automatic
1cf0: 61 6c 6c 79 20 73 6f 20 74 68 61 74 20 74 68 65  ally so that the
1d00: 20 63 6f 76 65 72 61 67 65 0a 20 20 20 20 2a 2a   coverage.    **
1d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
1d20: 65 61 73 75 72 65 6d 65 6e 74 20 6c 6f 67 69 63  easurement logic
1d30: 20 64 6f 65 73 20 6e 6f 74 20 66 6c 61 67 20 74   does not flag t
1d40: 68 6f 73 65 20 69 6d 70 6f 73 73 69 62 6c 65 20  hose impossible 
1d50: 63 61 73 65 73 0a 20 20 20 20 2a 2a 20 20 20 20  cases.    **    
1d60: 20 20 20 20 20 20 20 20 20 20 20 61 73 20 6d 69             as mi
1d70: 73 73 65 64 20 63 6f 76 65 72 61 67 65 2e 0a 20  ssed coverage.. 
1d80: 20 20 20 2a 2a 20 20 20 20 4d 20 20 20 20 20 20     **    M      
1d90: 20 20 2d 20 54 79 70 65 20 6f 66 20 6a 75 6d 70    - Type of jump
1da0: 2e 20 20 53 61 6d 65 20 61 73 20 4d 20 61 72 67  .  Same as M arg
1db0: 75 6d 65 6e 74 20 61 62 6f 76 65 0a 20 20 20 20  ument above.    
1dc0: 2a 2f 0a 20 20 20 20 49 20 7c 3d 20 6d 4e 65 76  */.    I |= mNev
1dd0: 65 72 3b 0a 20 20 20 20 69 66 28 20 4d 3d 3d 32  er;.    if( M==2
1de0: 20 29 20 49 20 7c 3d 20 30 78 30 34 3b 0a 20 20   ) I |= 0x04;.  
1df0: 20 20 69 66 28 20 4d 3d 3d 34 20 29 7b 0a 20 20    if( M==4 ){.  
1e00: 20 20 20 20 49 20 7c 3d 20 30 78 30 38 3b 0a 20      I |= 0x08;. 
1e10: 20 20 20 20 20 69 66 28 20 28 6d 4e 65 76 65 72       if( (mNever
1e20: 26 30 78 30 38 29 21 3d 30 20 26 26 20 28 49 26  &0x08)!=0 && (I&
1e30: 30 78 30 35 29 21 3d 30 29 20 49 20 7c 3d 20 30  0x05)!=0) I |= 0
1e40: 78 30 35 3b 20 2f 2a 4e 4f 5f 54 45 53 54 2a 2f  x05; /*NO_TEST*/
1e50: 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
1e60: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
1e70: 56 64 62 65 42 72 61 6e 63 68 28 73 71 6c 69 74  VdbeBranch(sqlit
1e80: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70  e3GlobalConfig.p
1e90: 56 64 62 65 42 72 61 6e 63 68 41 72 67 2c 0a 20  VdbeBranchArg,. 
1ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec0: 20 20 20 69 53 72 63 4c 69 6e 65 26 30 78 66 66     iSrcLine&0xff
1ed0: 66 66 66 66 2c 20 49 2c 20 4d 29 3b 0a 20 20 7d  ffff, I, M);.  }
1ee0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
1ef0: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
1f00: 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e 69 66  ng value (signif
1f10: 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d 5f 45  ied by the MEM_E
1f20: 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74 61  phem flag) conta
1f30: 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72  ins.** a pointer
1f40: 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c   to a dynamicall
1f50: 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74 72 69  y allocated stri
1f60: 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20 6f 74  ng where some ot
1f70: 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69 73  her entity.** is
1f80: 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72   responsible for
1f90: 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68   deallocating th
1fa0: 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65 63 61  at string.  Beca
1fb0: 75 73 65 20 74 68 65 20 72 65 67 69 73 74 65 72  use the register
1fc0: 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e  .** does not con
1fd0: 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e 67 2c  trol the string,
1fe0: 20 69 74 20 6d 69 67 68 74 20 62 65 20 64 65 6c   it might be del
1ff0: 65 74 65 64 20 77 69 74 68 6f 75 74 20 74 68 65  eted without the
2000: 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e 6f   register.** kno
2010: 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54  wing it..**.** T
2020: 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e 76  his routine conv
2030: 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65 72 61  erts an ephemera
2040: 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20  l string into a 
2050: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
2060: 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67 20  cated.** string 
2070: 74 68 61 74 20 74 68 65 20 72 65 67 69 73 74 65  that the registe
2080: 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f 6c  r itself control
2090: 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  s.  In other wor
20a0: 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65 72  ds, it.** conver
20b0: 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d 20  ts an MEM_Ephem 
20c0: 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 73 74  string into a st
20d0: 72 69 6e 67 20 77 69 74 68 20 50 2e 7a 3d 3d 50  ring with P.z==P
20e0: 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a 23 64 65  .zMalloc..*/.#de
20f0: 66 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61 6c  fine Deephemeral
2100: 69 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28 20  ize(P) \.   if( 
2110: 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  ((P)->flags&MEM_
2120: 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20  Ephem)!=0 \.    
2130: 20 20 20 26 26 20 73 71 6c 69 74 65 33 56 64 62     && sqlite3Vdb
2140: 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c  eMemMakeWriteabl
2150: 65 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f  e(P) ){ goto no_
2160: 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e  mem;}../* Return
2170: 20 74 72 75 65 20 69 66 20 74 68 65 20 63 75 72   true if the cur
2180: 73 6f 72 20 77 61 73 20 6f 70 65 6e 65 64 20 75  sor was opened u
2190: 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70 65 6e  sing the OP_Open
21a0: 53 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e 20 2a  Sorter opcode. *
21b0: 2f 0a 23 64 65 66 69 6e 65 20 69 73 53 6f 72 74  /.#define isSort
21c0: 65 72 28 78 29 20 28 28 78 29 2d 3e 65 43 75 72  er(x) ((x)->eCur
21d0: 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 53 4f  Type==CURTYPE_SO
21e0: 52 54 45 52 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  RTER)../*.** All
21f0: 6f 63 61 74 65 20 56 64 62 65 43 75 72 73 6f 72  ocate VdbeCursor
2200: 20 6e 75 6d 62 65 72 20 69 43 75 72 2e 20 20 52   number iCur.  R
2210: 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72 20  eturn a pointer 
2220: 74 6f 20 69 74 2e 20 20 52 65 74 75 72 6e 20 4e  to it.  Return N
2230: 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20 72 75 6e  ULL.** if we run
2240: 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a   out of memory..
2250: 2a 2f 0a 73 74 61 74 69 63 20 56 64 62 65 43 75  */.static VdbeCu
2260: 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43 75  rsor *allocateCu
2270: 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70 2c  rsor(.  Vdbe *p,
2280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2290: 20 54 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   The virtual mac
22a0: 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 69 43  hine */.  int iC
22b0: 75 72 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ur,             
22c0: 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65 20  /* Index of the 
22d0: 6e 65 77 20 56 64 62 65 43 75 72 73 6f 72 20 2a  new VdbeCursor *
22e0: 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 2c 20  /.  int nField, 
22f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
2300: 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e  ber of fields in
2310: 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
2320: 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62  dex */.  int iDb
2330: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
2340: 2a 20 44 61 74 61 62 61 73 65 20 74 68 65 20 63  * Database the c
2350: 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73 20 74 6f  ursor belongs to
2360: 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20 75 38 20  , or -1 */.  u8 
2370: 65 43 75 72 54 79 70 65 20 20 20 20 20 20 20 20  eCurType        
2380: 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68     /* Type of th
2390: 65 20 6e 65 77 20 63 75 72 73 6f 72 20 2a 2f 0a  e new cursor */.
23a0: 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65  ){.  /* Find the
23b0: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
23c0: 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74  t will be used t
23d0: 6f 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62  o store the blob
23e0: 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20   of memory.  ** 
23f0: 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69  required for thi
2400: 73 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72  s VdbeCursor str
2410: 75 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f  ucture. It is co
2420: 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20  nvenient to use 
2430: 61 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d  a .  ** vdbe mem
2440: 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61  ory cell to mana
2450: 67 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c  ge the memory al
2460: 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65  location require
2470: 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62  d for a.  ** Vdb
2480: 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72  eCursor structur
2490: 65 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77  e for the follow
24a0: 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a  ing reasons:.  *
24b0: 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74  *.  **   * Somet
24c0: 69 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62  imes cursor numb
24d0: 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72  ers are used for
24e0: 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66   a couple of dif
24f0: 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20  ferent.  **     
2500: 70 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64  purposes in a vd
2510: 62 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20  be program. The 
2520: 64 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d  different uses m
2530: 69 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a  ight require.  *
2540: 2a 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20  *     different 
2550: 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e  sized allocation
2560: 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  s. Memory cells 
2570: 70 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65  provide growable
2580: 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61  .  **     alloca
2590: 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tions..  **.  **
25a0: 20 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20     * When using 
25b0: 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41  ENABLE_MEMORY_MA
25c0: 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79  NAGEMENT, memory
25d0: 20 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61   cell buffers ca
25e0: 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72  n.  **     be fr
25f0: 65 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74  eed lazily via t
2600: 68 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61  he sqlite3_relea
2610: 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e  se_memory() API.
2620: 20 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d   This.  **     m
2630: 69 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d  inimizes the num
2640: 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61  ber of malloc ca
2650: 6c 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20  lls made by the 
2660: 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a  system..  **.  *
2670: 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  * The memory cel
2680: 6c 20 66 6f 72 20 63 75 72 73 6f 72 20 30 20 69  l for cursor 0 i
2690: 73 20 61 4d 65 6d 5b 30 5d 2e 20 54 68 65 20 72  s aMem[0]. The r
26a0: 65 73 74 20 61 72 65 20 61 6c 6c 6f 63 61 74 65  est are allocate
26b0: 64 20 66 72 6f 6d 0a 20 20 2a 2a 20 74 68 65 20  d from.  ** the 
26c0: 74 6f 70 20 6f 66 20 74 68 65 20 72 65 67 69 73  top of the regis
26d0: 74 65 72 20 73 70 61 63 65 2e 20 20 43 75 72 73  ter space.  Curs
26e0: 6f 72 20 31 20 69 73 20 61 74 20 4d 65 6d 5b 70  or 1 is at Mem[p
26f0: 2d 3e 6e 4d 65 6d 2d 31 5d 2e 0a 20 20 2a 2a 20  ->nMem-1]..  ** 
2700: 43 75 72 73 6f 72 20 32 20 69 73 20 61 74 20 4d  Cursor 2 is at M
2710: 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 32 5d 2e 20 41  em[p->nMem-2]. A
2720: 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a  nd so forth..  *
2730: 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20  /.  Mem *pMem = 
2740: 69 43 75 72 3e 30 20 3f 20 26 70 2d 3e 61 4d 65  iCur>0 ? &p->aMe
2750: 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 20  m[p->nMem-iCur] 
2760: 3a 20 70 2d 3e 61 4d 65 6d 3b 0a 0a 20 20 69 6e  : p->aMem;..  in
2770: 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65 43  t nByte;.  VdbeC
2780: 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b 0a  ursor *pCx = 0;.
2790: 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20 20    nByte = .     
27a0: 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56   ROUND8(sizeof(V
27b0: 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32 2a  dbeCursor)) + 2*
27c0: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
27d0: 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 65 43 75  ld + .      (eCu
27e0: 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
27f0: 54 52 45 45 3f 73 71 6c 69 74 65 33 42 74 72 65  TREE?sqlite3Btre
2800: 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a 30 29  eCursorSize():0)
2810: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43 75  ;..  assert( iCu
2820: 72 3e 3d 30 20 26 26 20 69 43 75 72 3c 70 2d 3e  r>=0 && iCur<p->
2830: 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28  nCursor );.  if(
2840: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20   p->apCsr[iCur] 
2850: 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f  ){ /*OPTIMIZATIO
2860: 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20  N-IF-FALSE*/.   
2870: 20 2f 2a 20 42 65 66 6f 72 65 20 63 61 6c 6c 69   /* Before calli
2880: 6e 67 20 73 71 6c 69 74 65 33 56 64 62 65 46 72  ng sqlite3VdbeFr
2890: 65 65 43 75 72 73 6f 72 28 29 2c 20 65 6e 73 75  eeCursor(), ensu
28a0: 72 65 20 74 68 65 20 69 73 45 70 68 65 6d 65 72  re the isEphemer
28b0: 61 6c 20 66 6c 61 67 0a 20 20 20 20 2a 2a 20 69  al flag.    ** i
28c0: 73 20 63 6c 65 61 72 2e 20 4f 74 68 65 72 77 69  s clear. Otherwi
28d0: 73 65 2c 20 69 66 20 74 68 69 73 20 69 73 20 61  se, if this is a
28e0: 6e 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73  n ephemeral curs
28f0: 6f 72 20 63 72 65 61 74 65 64 20 62 79 20 0a 20  or created by . 
2900: 20 20 20 2a 2a 20 4f 50 5f 4f 70 65 6e 44 75 70     ** OP_OpenDup
2910: 2c 20 74 68 65 20 63 75 72 73 6f 72 20 77 69 6c  , the cursor wil
2920: 6c 20 6e 6f 74 20 62 65 20 63 6c 6f 73 65 64 20  l not be closed 
2930: 61 6e 64 20 77 69 6c 6c 20 73 74 69 6c 6c 20 62  and will still b
2940: 65 20 70 61 72 74 0a 20 20 20 20 2a 2a 20 6f 66  e part.    ** of
2950: 20 61 20 42 74 53 68 61 72 65 64 2e 70 43 75 72   a BtShared.pCur
2960: 73 6f 72 20 6c 69 73 74 2e 20 20 2a 2f 0a 20 20  sor list.  */.  
2970: 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 69    if( p->apCsr[i
2980: 43 75 72 5d 2d 3e 70 42 74 78 3d 3d 30 20 29 20  Cur]->pBtx==0 ) 
2990: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 2d 3e  p->apCsr[iCur]->
29a0: 69 73 45 70 68 65 6d 65 72 61 6c 20 3d 20 30 3b  isEphemeral = 0;
29b0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
29c0: 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d  FreeCursor(p, p-
29d0: 3e 61 70 43 73 72 5b 69 43 75 72 5d 29 3b 0a 20  >apCsr[iCur]);. 
29e0: 20 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72     p->apCsr[iCur
29f0: 5d 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28  ] = 0;.  }.  if(
2a00: 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69   SQLITE_OK==sqli
2a10: 74 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41  te3VdbeMemClearA
2a20: 6e 64 52 65 73 69 7a 65 28 70 4d 65 6d 2c 20 6e  ndResize(pMem, n
2a30: 42 79 74 65 29 20 29 7b 0a 20 20 20 20 70 2d 3e  Byte) ){.    p->
2a40: 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20 70 43  apCsr[iCur] = pC
2a50: 78 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72 2a  x = (VdbeCursor*
2a60: 29 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65  )pMem->z;.    me
2a70: 6d 73 65 74 28 70 43 78 2c 20 30 2c 20 6f 66 66  mset(pCx, 0, off
2a80: 73 65 74 6f 66 28 56 64 62 65 43 75 72 73 6f 72  setof(VdbeCursor
2a90: 2c 70 41 6c 74 43 75 72 73 6f 72 29 29 3b 0a 20  ,pAltCursor));. 
2aa0: 20 20 20 70 43 78 2d 3e 65 43 75 72 54 79 70 65     pCx->eCurType
2ab0: 20 3d 20 65 43 75 72 54 79 70 65 3b 0a 20 20 20   = eCurType;.   
2ac0: 20 70 43 78 2d 3e 69 44 62 20 3d 20 69 44 62 3b   pCx->iDb = iDb;
2ad0: 0a 20 20 20 20 70 43 78 2d 3e 6e 46 69 65 6c 64  .    pCx->nField
2ae0: 20 3d 20 6e 46 69 65 6c 64 3b 0a 20 20 20 20 70   = nField;.    p
2af0: 43 78 2d 3e 61 4f 66 66 73 65 74 20 3d 20 26 70  Cx->aOffset = &p
2b00: 43 78 2d 3e 61 54 79 70 65 5b 6e 46 69 65 6c 64  Cx->aType[nField
2b10: 5d 3b 0a 20 20 20 20 69 66 28 20 65 43 75 72 54  ];.    if( eCurT
2b20: 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
2b30: 45 45 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d  EE ){.      pCx-
2b40: 3e 75 63 2e 70 43 75 72 73 6f 72 20 3d 20 28 42  >uc.pCursor = (B
2b50: 74 43 75 72 73 6f 72 2a 29 0a 20 20 20 20 20 20  tCursor*).      
2b60: 20 20 20 20 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55      &pMem->z[ROU
2b70: 4e 44 38 28 73 69 7a 65 6f 66 28 56 64 62 65 43  ND8(sizeof(VdbeC
2b80: 75 72 73 6f 72 29 29 2b 32 2a 73 69 7a 65 6f 66  ursor))+2*sizeof
2b90: 28 75 33 32 29 2a 6e 46 69 65 6c 64 5d 3b 0a 20  (u32)*nField];. 
2ba0: 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65       sqlite3Btre
2bb0: 65 43 75 72 73 6f 72 5a 65 72 6f 28 70 43 78 2d  eCursorZero(pCx-
2bc0: 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20  >uc.pCursor);.  
2bd0: 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e    }.  }.  return
2be0: 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54   pCx;.}../*.** T
2bf0: 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 61 20  ry to convert a 
2c00: 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 6e 75 6d  value into a num
2c10: 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74  eric representat
2c20: 69 6f 6e 20 69 66 20 77 65 20 63 61 6e 0a 2a 2a  ion if we can.**
2c30: 20 64 6f 20 73 6f 20 77 69 74 68 6f 75 74 20 6c   do so without l
2c40: 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69  oss of informati
2c50: 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  on.  In other wo
2c60: 72 64 73 2c 20 69 66 20 74 68 65 20 73 74 72 69  rds, if the stri
2c70: 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c 69 6b 65  ng.** looks like
2c80: 20 61 20 6e 75 6d 62 65 72 2c 20 63 6f 6e 76 65   a number, conve
2c90: 72 74 20 69 74 20 69 6e 74 6f 20 61 20 6e 75 6d  rt it into a num
2ca0: 62 65 72 2e 20 20 49 66 20 69 74 20 64 6f 65 73  ber.  If it does
2cb0: 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b   not.** look lik
2cc0: 65 20 61 20 6e 75 6d 62 65 72 2c 20 6c 65 61 76  e a number, leav
2cd0: 65 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a 2a 0a 2a  e it alone..**.*
2ce0: 2a 20 49 66 20 74 68 65 20 62 54 72 79 46 6f 72  * If the bTryFor
2cf0: 49 6e 74 20 66 6c 61 67 20 69 73 20 74 72 75 65  Int flag is true
2d00: 2c 20 74 68 65 6e 20 65 78 74 72 61 20 65 66 66  , then extra eff
2d10: 6f 72 74 20 69 73 20 6d 61 64 65 20 74 6f 20 67  ort is made to g
2d20: 69 76 65 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65  ive.** an intege
2d30: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
2d40: 2e 20 20 53 74 72 69 6e 67 73 20 74 68 61 74 20  .  Strings that 
2d50: 6c 6f 6f 6b 20 6c 69 6b 65 20 66 6c 6f 61 74 69  look like floati
2d60: 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 76 61 6c 75  ng point.** valu
2d70: 65 73 20 62 75 74 20 77 68 69 63 68 20 68 61 76  es but which hav
2d80: 65 20 6e 6f 20 66 72 61 63 74 69 6f 6e 61 6c 20  e no fractional 
2d90: 63 6f 6d 70 6f 6e 65 6e 74 20 28 65 78 61 6d 70  component (examp
2da0: 6c 65 3a 20 27 34 38 2e 30 30 27 29 0a 2a 2a 20  le: '48.00').** 
2db0: 77 69 6c 6c 20 68 61 76 65 20 61 20 4d 45 4d 5f  will have a MEM_
2dc0: 49 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74 69  Int representati
2dd0: 6f 6e 20 77 68 65 6e 20 62 54 72 79 46 6f 72 49  on when bTryForI
2de0: 6e 74 20 69 73 20 74 72 75 65 2e 0a 2a 2a 0a 2a  nt is true..**.*
2df0: 2a 20 49 66 20 62 54 72 79 46 6f 72 49 6e 74 20  * If bTryForInt 
2e00: 69 73 20 66 61 6c 73 65 2c 20 74 68 65 6e 20 69  is false, then i
2e10: 66 20 74 68 65 20 69 6e 70 75 74 20 73 74 72 69  f the input stri
2e20: 6e 67 20 63 6f 6e 74 61 69 6e 73 20 61 20 64 65  ng contains a de
2e30: 63 69 6d 61 6c 0a 2a 2a 20 70 6f 69 6e 74 20 6f  cimal.** point o
2e40: 72 20 65 78 70 6f 6e 65 6e 74 69 61 6c 20 6e 6f  r exponential no
2e50: 74 61 74 69 6f 6e 2c 20 74 68 65 20 72 65 73 75  tation, the resu
2e60: 6c 74 20 69 73 20 6f 6e 6c 79 20 4d 45 4d 5f 52  lt is only MEM_R
2e70: 65 61 6c 2c 20 65 76 65 6e 0a 2a 2a 20 69 66 20  eal, even.** if 
2e80: 74 68 65 72 65 20 69 73 20 61 6e 20 65 78 61 63  there is an exac
2e90: 74 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73  t integer repres
2ea0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
2eb0: 71 75 61 6e 74 69 74 79 2e 0a 2a 2f 0a 73 74 61  quantity..*/.sta
2ec0: 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79 4e 75  tic void applyNu
2ed0: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 4d 65  mericAffinity(Me
2ee0: 6d 20 2a 70 52 65 63 2c 20 69 6e 74 20 62 54 72  m *pRec, int bTr
2ef0: 79 46 6f 72 49 6e 74 29 7b 0a 20 20 64 6f 75 62  yForInt){.  doub
2f00: 6c 65 20 72 56 61 6c 75 65 3b 0a 20 20 69 36 34  le rValue;.  i64
2f10: 20 69 56 61 6c 75 65 3b 0a 20 20 75 38 20 65 6e   iValue;.  u8 en
2f20: 63 20 3d 20 70 52 65 63 2d 3e 65 6e 63 3b 0a 20  c = pRec->enc;. 
2f30: 20 61 73 73 65 72 74 28 20 28 70 52 65 63 2d 3e   assert( (pRec->
2f40: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72  flags & (MEM_Str
2f50: 7c 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  |MEM_Int|MEM_Rea
2f60: 6c 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c 29 29 3d  l|MEM_IntReal))=
2f70: 3d 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 69 66  =MEM_Str );.  if
2f80: 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 52  ( sqlite3AtoF(pR
2f90: 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c 20  ec->z, &rValue, 
2fa0: 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d 30  pRec->n, enc)==0
2fb0: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28   ) return;.  if(
2fc0: 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f 69 36   0==sqlite3Atoi6
2fd0: 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69 56 61 6c  4(pRec->z, &iVal
2fe0: 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63  ue, pRec->n, enc
2ff0: 29 20 29 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75  ) ){.    pRec->u
3000: 2e 69 20 3d 20 69 56 61 6c 75 65 3b 0a 20 20 20  .i = iValue;.   
3010: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20   pRec->flags |= 
3020: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 65 6c 73 65  MEM_Int;.  }else
3030: 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75 2e 72 20  {.    pRec->u.r 
3040: 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20 20 70 52  = rValue;.    pR
3050: 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ec->flags |= MEM
3060: 5f 52 65 61 6c 3b 0a 20 20 20 20 69 66 28 20 62  _Real;.    if( b
3070: 54 72 79 46 6f 72 49 6e 74 20 29 20 73 71 6c 69  TryForInt ) sqli
3080: 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66  te3VdbeIntegerAf
3090: 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20  finity(pRec);.  
30a0: 7d 0a 20 20 2f 2a 20 54 45 58 54 2d 3e 4e 55 4d  }.  /* TEXT->NUM
30b0: 45 52 49 43 20 69 73 20 6d 61 6e 79 2d 3e 6f 6e  ERIC is many->on
30c0: 65 2e 20 20 48 65 6e 63 65 2c 20 69 74 20 69 73  e.  Hence, it is
30d0: 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 69 6e   important to in
30e0: 76 61 6c 69 64 61 74 65 20 74 68 65 0a 20 20 2a  validate the.  *
30f0: 2a 20 73 74 72 69 6e 67 20 72 65 70 72 65 73 65  * string represe
3100: 6e 74 61 74 69 6f 6e 20 61 66 74 65 72 20 63 6f  ntation after co
3110: 6d 70 75 74 69 6e 67 20 61 20 6e 75 6d 65 72 69  mputing a numeri
3120: 63 20 65 71 75 69 76 61 6c 65 6e 74 2c 20 62 65  c equivalent, be
3130: 63 61 75 73 65 20 74 68 65 0a 20 20 2a 2a 20 73  cause the.  ** s
3140: 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61  tring representa
3150: 74 69 6f 6e 20 6d 69 67 68 74 20 6e 6f 74 20 62  tion might not b
3160: 65 20 74 68 65 20 63 61 6e 6f 6e 69 63 61 6c 20  e the canonical 
3170: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 66  representation f
3180: 6f 72 20 74 68 65 0a 20 20 2a 2a 20 6e 75 6d 65  or the.  ** nume
3190: 72 69 63 20 76 61 6c 75 65 2e 20 20 54 69 63 6b  ric value.  Tick
31a0: 65 74 20 5b 33 34 33 36 33 34 39 34 32 64 64 35  et [343634942dd5
31b0: 34 61 62 35 37 62 37 30 32 34 5d 20 32 30 31 38  4ab57b7024] 2018
31c0: 2d 30 31 2d 33 31 2e 20 2a 2f 0a 20 20 70 52 65  -01-31. */.  pRe
31d0: 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d  c->flags &= ~MEM
31e0: 5f 53 74 72 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50  _Str;.}../*.** P
31f0: 72 6f 63 65 73 73 69 6e 67 20 69 73 20 64 65 74  rocessing is det
3200: 65 72 6d 69 6e 65 20 62 79 20 74 68 65 20 61 66  ermine by the af
3210: 66 69 6e 69 74 79 20 70 61 72 61 6d 65 74 65 72  finity parameter
3220: 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  :.**.** SQLITE_A
3230: 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20 53  FF_INTEGER:.** S
3240: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a 0a  QLITE_AFF_REAL:.
3250: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  ** SQLITE_AFF_NU
3260: 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72 79  MERIC:.**    Try
3270: 20 74 6f 20 63 6f 6e 76 65 72 74 20 70 52 65 63   to convert pRec
3280: 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72   to an integer r
3290: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 72  epresentation or
32a0: 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74 69   a .**    floati
32b0: 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72 65 73 65  ng-point represe
32c0: 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e 20 69 6e  ntation if an in
32d0: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
32e0: 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e 6f  tion.**    is no
32f0: 74 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f 74  t possible.  Not
3300: 65 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 67  e that the integ
3310: 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
3320: 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61 79  n is.**    alway
3330: 73 20 70 72 65 66 65 72 72 65 64 2c 20 65 76 65  s preferred, eve
3340: 6e 20 69 66 20 74 68 65 20 61 66 66 69 6e 69 74  n if the affinit
3350: 79 20 69 73 20 52 45 41 4c 2c 20 62 65 63 61 75  y is REAL, becau
3360: 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74 65  se.**    an inte
3370: 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69  ger representati
3380: 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70 61 63 65  on is more space
3390: 20 65 66 66 69 63 69 65 6e 74 20 6f 6e 20 64 69   efficient on di
33a0: 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45  sk..**.** SQLITE
33b0: 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20 20  _AFF_TEXT:.**   
33c0: 20 43 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f   Convert pRec to
33d0: 20 61 20 74 65 78 74 20 72 65 70 72 65 73 65 6e   a text represen
33e0: 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51  tation..**.** SQ
33f0: 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 3a 0a 2a  LITE_AFF_BLOB:.*
3400: 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70 52 65  *    No-op.  pRe
3410: 63 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a  c is unchanged..
3420: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61  */.static void a
3430: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20  pplyAffinity(.  
3440: 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20 20 20 20  Mem *pRec,      
3450: 20 20 20 20 2f 2a 20 54 68 65 20 76 61 6c 75 65      /* The value
3460: 20 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e 69   to apply affini
3470: 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61 72 20  ty to */.  char 
3480: 61 66 66 69 6e 69 74 79 2c 20 20 20 20 20 20 2f  affinity,      /
3490: 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74  * The affinity t
34a0: 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a  o be applied */.
34b0: 20 20 75 38 20 65 6e 63 20 20 20 20 20 20 20 20    u8 enc        
34c0: 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 69        /* Use thi
34d0: 73 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  s text encoding 
34e0: 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66 66 69  */.){.  if( affi
34f0: 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46 46  nity>=SQLITE_AFF
3500: 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20 20 20  _NUMERIC ){.    
3510: 61 73 73 65 72 74 28 20 61 66 66 69 6e 69 74 79  assert( affinity
3520: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  ==SQLITE_AFF_INT
3530: 45 47 45 52 20 7c 7c 20 61 66 66 69 6e 69 74 79  EGER || affinity
3540: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  ==SQLITE_AFF_REA
3550: 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7c  L.             |
3560: 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49  | affinity==SQLI
3570: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29  TE_AFF_NUMERIC )
3580: 3b 0a 20 20 20 20 69 66 28 20 28 70 52 65 63 2d  ;.    if( (pRec-
3590: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
35a0: 29 3d 3d 30 20 29 7b 20 2f 2a 4f 50 54 49 4d 49  )==0 ){ /*OPTIMI
35b0: 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a  ZATION-IF-FALSE*
35c0: 2f 0a 20 20 20 20 20 20 69 66 28 20 28 70 52 65  /.      if( (pRe
35d0: 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  c->flags & MEM_R
35e0: 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  eal)==0 ){.     
35f0: 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61     if( pRec->fla
3600: 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 20 61  gs & MEM_Str ) a
3610: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
3620: 69 74 79 28 70 52 65 63 2c 31 29 3b 0a 20 20 20  ity(pRec,1);.   
3630: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
3640: 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74    sqlite3VdbeInt
3650: 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 52 65  egerAffinity(pRe
3660: 63 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  c);.      }.    
3670: 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 61 66  }.  }else if( af
3680: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
3690: 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 2f  FF_TEXT ){.    /
36a0: 2a 20 4f 6e 6c 79 20 61 74 74 65 6d 70 74 20 74  * Only attempt t
36b0: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 6f  he conversion to
36c0: 20 54 45 58 54 20 69 66 20 74 68 65 72 65 20 69   TEXT if there i
36d0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20  s an integer or 
36e0: 72 65 61 6c 0a 20 20 20 20 2a 2a 20 72 65 70 72  real.    ** repr
36f0: 65 73 65 6e 74 61 74 69 6f 6e 20 28 62 6c 6f 62  esentation (blob
3700: 20 61 6e 64 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74   and NULL do not
3710: 20 67 65 74 20 63 6f 6e 76 65 72 74 65 64 29 20   get converted) 
3720: 62 75 74 20 6e 6f 20 73 74 72 69 6e 67 0a 20 20  but no string.  
3730: 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74    ** representat
3740: 69 6f 6e 2e 20 20 49 74 20 77 6f 75 6c 64 20 62  ion.  It would b
3750: 65 20 68 61 72 6d 6c 65 73 73 20 74 6f 20 72 65  e harmless to re
3760: 70 65 61 74 20 74 68 65 20 63 6f 6e 76 65 72 73  peat the convers
3770: 69 6f 6e 20 69 66 20 0a 20 20 20 20 2a 2a 20 74  ion if .    ** t
3780: 68 65 72 65 20 69 73 20 61 6c 72 65 61 64 79 20  here is already 
3790: 61 20 73 74 72 69 6e 67 20 72 65 70 2c 20 62 75  a string rep, bu
37a0: 74 20 69 74 20 69 73 20 70 6f 69 6e 74 6c 65 73  t it is pointles
37b0: 73 20 74 6f 20 77 61 73 74 65 20 74 68 6f 73 65  s to waste those
37c0: 0a 20 20 20 20 2a 2a 20 43 50 55 20 63 79 63 6c  .    ** CPU cycl
37d0: 65 73 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 30  es. */.    if( 0
37e0: 3d 3d 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d  ==(pRec->flags&M
37f0: 45 4d 5f 53 74 72 29 20 29 7b 20 2f 2a 4f 50 54  EM_Str) ){ /*OPT
3800: 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c  IMIZATION-IF-FAL
3810: 53 45 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28  SE*/.      if( (
3820: 70 52 65 63 2d 3e 66 6c 61 67 73 26 28 4d 45 4d  pRec->flags&(MEM
3830: 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 7c 4d 45  _Real|MEM_Int|ME
3840: 4d 5f 49 6e 74 52 65 61 6c 29 29 20 29 7b 0a 20  M_IntReal)) ){. 
3850: 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
3860: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d   pRec->flags & M
3870: 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20 20  EM_Int );.      
3880: 20 20 74 65 73 74 63 61 73 65 28 20 70 52 65 63    testcase( pRec
3890: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
38a0: 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 74 65  al );.        te
38b0: 73 74 63 61 73 65 28 20 70 52 65 63 2d 3e 66 6c  stcase( pRec->fl
38c0: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 52 65 61  ags & MEM_IntRea
38d0: 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  l );.        sql
38e0: 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e  ite3VdbeMemStrin
38f0: 67 69 66 79 28 70 52 65 63 2c 20 65 6e 63 2c 20  gify(pRec, enc, 
3900: 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  1);.      }.    
3910: 7d 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67  }.    pRec->flag
3920: 73 20 26 3d 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c  s &= ~(MEM_Real|
3930: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 49 6e 74 52  MEM_Int|MEM_IntR
3940: 65 61 6c 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a  eal);.  }.}../*.
3950: 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72  ** Try to conver
3960: 74 20 74 68 65 20 74 79 70 65 20 6f 66 20 61 20  t the type of a 
3970: 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e  function argumen
3980: 74 20 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f  t or a result co
3990: 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e  lumn.** into a n
39a0: 75 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e 74  umeric represent
39b0: 61 74 69 6f 6e 2e 20 20 55 73 65 20 65 69 74 68  ation.  Use eith
39c0: 65 72 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45  er INTEGER or RE
39d0: 41 4c 20 77 68 69 63 68 65 76 65 72 0a 2a 2a 20  AL whichever.** 
39e0: 69 73 20 61 70 70 72 6f 70 72 69 61 74 65 2e 20  is appropriate. 
39f0: 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65   But only do the
3a00: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 69   conversion if i
3a10: 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 77 69  t is possible wi
3a20: 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66  thout.** loss of
3a30: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64   information and
3a40: 20 72 65 74 75 72 6e 20 74 68 65 20 72 65 76 69   return the revi
3a50: 73 65 64 20 74 79 70 65 20 6f 66 20 74 68 65 20  sed type of the 
3a60: 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69 6e 74  argument..*/.int
3a70: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e   sqlite3_value_n
3a80: 75 6d 65 72 69 63 5f 74 79 70 65 28 73 71 6c 69  umeric_type(sqli
3a90: 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29  te3_value *pVal)
3aa0: 7b 0a 20 20 69 6e 74 20 65 54 79 70 65 20 3d 20  {.  int eType = 
3ab0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79  sqlite3_value_ty
3ac0: 70 65 28 70 56 61 6c 29 3b 0a 20 20 69 66 28 20  pe(pVal);.  if( 
3ad0: 65 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45  eType==SQLITE_TE
3ae0: 58 54 20 29 7b 0a 20 20 20 20 4d 65 6d 20 2a 70  XT ){.    Mem *p
3af0: 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c  Mem = (Mem*)pVal
3b00: 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72  ;.    applyNumer
3b10: 69 63 41 66 66 69 6e 69 74 79 28 70 4d 65 6d 2c  icAffinity(pMem,
3b20: 20 30 29 3b 0a 20 20 20 20 65 54 79 70 65 20 3d   0);.    eType =
3b30: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
3b40: 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 20  ype(pVal);.  }. 
3b50: 20 72 65 74 75 72 6e 20 65 54 79 70 65 3b 0a 7d   return eType;.}
3b60: 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64  ../*.** Exported
3b70: 20 76 65 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c   version of appl
3b80: 79 41 66 66 69 6e 69 74 79 28 29 2e 20 54 68 69  yAffinity(). Thi
3b90: 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73  s one works on s
3ba0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a  qlite3_value*, .
3bb0: 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e 74 65 72  ** not the inter
3bc0: 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a  nal Mem* type..*
3bd0: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  /.void sqlite3Va
3be0: 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79  lueApplyAffinity
3bf0: 28 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  (.  sqlite3_valu
3c00: 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20 61  e *pVal, .  u8 a
3c10: 66 66 69 6e 69 74 79 2c 20 0a 20 20 75 38 20 65  ffinity, .  u8 e
3c20: 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66 66  nc.){.  applyAff
3c30: 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29 70 56 61  inity((Mem *)pVa
3c40: 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63  l, affinity, enc
3c50: 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70 4d 65 6d  );.}../*.** pMem
3c60: 20 63 75 72 72 65 6e 74 6c 79 20 6f 6e 6c 79 20   currently only 
3c70: 68 6f 6c 64 73 20 61 20 73 74 72 69 6e 67 20 74  holds a string t
3c80: 79 70 65 20 28 6f 72 20 6d 61 79 62 65 20 61 20  ype (or maybe a 
3c90: 42 4c 4f 42 20 74 68 61 74 20 77 65 20 63 61 6e  BLOB that we can
3ca0: 0a 2a 2a 20 69 6e 74 65 72 70 72 65 74 20 61 73  .** interpret as
3cb0: 20 61 20 73 74 72 69 6e 67 20 69 66 20 77 65 20   a string if we 
3cc0: 77 61 6e 74 20 74 6f 29 2e 20 20 43 6f 6d 70 75  want to).  Compu
3cd0: 74 65 20 69 74 73 20 63 6f 72 72 65 73 70 6f 6e  te its correspon
3ce0: 64 69 6e 67 0a 2a 2a 20 6e 75 6d 65 72 69 63 20  ding.** numeric 
3cf0: 74 79 70 65 2c 20 69 66 20 68 61 73 20 6f 6e 65  type, if has one
3d00: 2e 20 20 53 65 74 20 74 68 65 20 70 4d 65 6d 2d  .  Set the pMem-
3d10: 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e 75  >u.r and pMem->u
3d20: 2e 69 20 66 69 65 6c 64 73 0a 2a 2a 20 61 63 63  .i fields.** acc
3d30: 6f 72 64 69 6e 67 6c 79 2e 0a 2a 2f 0a 73 74 61  ordingly..*/.sta
3d40: 74 69 63 20 75 31 36 20 53 51 4c 49 54 45 5f 4e  tic u16 SQLITE_N
3d50: 4f 49 4e 4c 49 4e 45 20 63 6f 6d 70 75 74 65 4e  OINLINE computeN
3d60: 75 6d 65 72 69 63 54 79 70 65 28 4d 65 6d 20 2a  umericType(Mem *
3d70: 70 4d 65 6d 29 7b 0a 20 20 61 73 73 65 72 74 28  pMem){.  assert(
3d80: 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20   (pMem->flags & 
3d90: 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  (MEM_Int|MEM_Rea
3da0: 6c 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c 29 29 3d  l|MEM_IntReal))=
3db0: 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
3dc0: 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28  (pMem->flags & (
3dd0: 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62  MEM_Str|MEM_Blob
3de0: 29 29 21 3d 30 20 29 3b 0a 20 20 45 78 70 61 6e  ))!=0 );.  Expan
3df0: 64 42 6c 6f 62 28 70 4d 65 6d 29 3b 0a 20 20 69  dBlob(pMem);.  i
3e00: 66 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70  f( sqlite3AtoF(p
3e10: 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75  Mem->z, &pMem->u
3e20: 2e 72 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65  .r, pMem->n, pMe
3e30: 6d 2d 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a 20 20  m->enc)==0 ){.  
3e40: 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a    return 0;.  }.
3e50: 20 20 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f    if( sqlite3Ato
3e60: 69 36 34 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d  i64(pMem->z, &pM
3e70: 65 6d 2d 3e 75 2e 69 2c 20 70 4d 65 6d 2d 3e 6e  em->u.i, pMem->n
3e80: 2c 20 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 30 20  , pMem->enc)==0 
3e90: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 4d 45  ){.    return ME
3ea0: 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20 72 65 74  M_Int;.  }.  ret
3eb0: 75 72 6e 20 4d 45 4d 5f 52 65 61 6c 3b 0a 7d 0a  urn MEM_Real;.}.
3ec0: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  ./*.** Return th
3ed0: 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 66  e numeric type f
3ee0: 6f 72 20 70 4d 65 6d 2c 20 65 69 74 68 65 72 20  or pMem, either 
3ef0: 4d 45 4d 5f 49 6e 74 20 6f 72 20 4d 45 4d 5f 52  MEM_Int or MEM_R
3f00: 65 61 6c 20 6f 72 20 62 6f 74 68 20 6f 72 0a 2a  eal or both or.*
3f10: 2a 20 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a 2a 20  * none.  .**.** 
3f20: 55 6e 6c 69 6b 65 20 61 70 70 6c 79 4e 75 6d 65  Unlike applyNume
3f30: 72 69 63 41 66 66 69 6e 69 74 79 28 29 2c 20 74  ricAffinity(), t
3f40: 68 69 73 20 72 6f 75 74 69 6e 65 20 64 6f 65 73  his routine does
3f50: 20 6e 6f 74 20 6d 6f 64 69 66 79 20 70 4d 65 6d   not modify pMem
3f60: 2d 3e 66 6c 61 67 73 2e 0a 2a 2a 20 42 75 74 20  ->flags..** But 
3f70: 69 74 20 64 6f 65 73 20 73 65 74 20 70 4d 65 6d  it does set pMem
3f80: 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e  ->u.r and pMem->
3f90: 75 2e 69 20 61 70 70 72 6f 70 72 69 61 74 65 6c  u.i appropriatel
3fa0: 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31 36  y..*/.static u16
3fb0: 20 6e 75 6d 65 72 69 63 54 79 70 65 28 4d 65 6d   numericType(Mem
3fc0: 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 66 28 20 70   *pMem){.  if( p
3fd0: 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  Mem->flags & (ME
3fe0: 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d  M_Int|MEM_Real|M
3ff0: 45 4d 5f 49 6e 74 52 65 61 6c 29 20 29 7b 0a 20  EM_IntReal) ){. 
4000: 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4d 65     testcase( pMe
4010: 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  m->flags & MEM_I
4020: 6e 74 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61  nt );.    testca
4030: 73 65 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  se( pMem->flags 
4040: 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20  & MEM_Real );.  
4050: 20 20 74 65 73 74 63 61 73 65 28 20 70 4d 65 6d    testcase( pMem
4060: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
4070: 74 52 65 61 6c 20 29 3b 0a 20 20 20 20 72 65 74  tReal );.    ret
4080: 75 72 6e 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  urn pMem->flags 
4090: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
40a0: 65 61 6c 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c 29  eal|MEM_IntReal)
40b0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4d 65 6d  ;.  }.  if( pMem
40c0: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
40d0: 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a  tr|MEM_Blob) ){.
40e0: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4d      testcase( pM
40f0: 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  em->flags & MEM_
4100: 53 74 72 20 29 3b 0a 20 20 20 20 74 65 73 74 63  Str );.    testc
4110: 61 73 65 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73  ase( pMem->flags
4120: 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20   & MEM_Blob );. 
4130: 20 20 20 72 65 74 75 72 6e 20 63 6f 6d 70 75 74     return comput
4140: 65 4e 75 6d 65 72 69 63 54 79 70 65 28 70 4d 65  eNumericType(pMe
4150: 6d 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  m);.  }.  return
4160: 20 30 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51   0;.}..#ifdef SQ
4170: 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a  LITE_DEBUG./*.**
4180: 20 57 72 69 74 65 20 61 20 6e 69 63 65 20 73 74   Write a nice st
4190: 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74  ring representat
41a0: 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74 65  ion of the conte
41b0: 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65 6d  nts of cell pMem
41c0: 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72 20  .** into buffer 
41d0: 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42 75  zBuf, length nBu
41e0: 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  f..*/.void sqlit
41f0: 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50  e3VdbeMemPrettyP
4200: 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20  rint(Mem *pMem, 
4210: 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20 63  char *zBuf){.  c
4220: 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75 66  har *zCsr = zBuf
4230: 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65 6d  ;.  int f = pMem
4240: 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61 74  ->flags;..  stat
4250: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 63  ic const char *c
4260: 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d 20  onst encnames[] 
4270: 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22 2c  = {"(X)", "(8)",
4280: 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36 42   "(16LE)", "(16B
4290: 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26 4d  E)"};..  if( f&M
42a0: 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20 69  EM_Blob ){.    i
42b0: 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20 63  nt i;.    char c
42c0: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
42d0: 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 63  M_Dyn ){.      c
42e0: 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73   = 'z';.      as
42f0: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
4300: 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d  Static|MEM_Ephem
4310: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
4320: 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53  se if( f & MEM_S
4330: 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20 63  tatic ){.      c
4340: 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61 73   = 't';.      as
4350: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
4360: 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  Dyn|MEM_Ephem))=
4370: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
4380: 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68 65  if( f & MEM_Ephe
4390: 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27  m ){.      c = '
43a0: 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  e';.      assert
43b0: 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74  ( (f & (MEM_Stat
43c0: 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20  ic|MEM_Dyn))==0 
43d0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
43e0: 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20 20      c = 's';.   
43f0: 20 7d 0a 20 20 20 20 2a 28 7a 43 73 72 2b 2b 29   }.    *(zCsr++)
4400: 20 3d 20 63 3b 0a 20 20 20 20 73 71 6c 69 74 65   = c;.    sqlite
4410: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
4420: 7a 43 73 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65  zCsr, "%d[", pMe
4430: 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20  m->n);.    zCsr 
4440: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
4450: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 66 6f  30(zCsr);.    fo
4460: 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69  r(i=0; i<16 && i
4470: 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a  <pMem->n; i++){.
4480: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e        sqlite3_sn
4490: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
44a0: 2c 20 22 25 30 32 58 22 2c 20 28 28 69 6e 74 29  , "%02X", ((int)
44b0: 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78 46  pMem->z[i] & 0xF
44c0: 46 29 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20  F));.      zCsr 
44d0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
44e0: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a  30(zCsr);.    }.
44f0: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31      for(i=0; i<1
4500: 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20  6 && i<pMem->n; 
4510: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68 61 72  i++){.      char
4520: 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b   z = pMem->z[i];
4530: 0a 20 20 20 20 20 20 69 66 28 20 7a 3c 33 32 20  .      if( z<32 
4540: 7c 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72  || z>126 ) *zCsr
4550: 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20  ++ = '.';.      
4560: 65 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a  else *zCsr++ = z
4570: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 28 7a 43  ;.    }.    *(zC
4580: 73 72 2b 2b 29 20 3d 20 27 5d 27 3b 0a 20 20 20  sr++) = ']';.   
4590: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 5a 65 72   if( f & MEM_Zer
45a0: 6f 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  o ){.      sqlit
45b0: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
45c0: 20 7a 43 73 72 2c 22 2b 25 64 7a 22 2c 70 4d 65   zCsr,"+%dz",pMe
45d0: 6d 2d 3e 75 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20  m->u.nZero);.   
45e0: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
45f0: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
4600: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 7a 43 73  ;.    }.    *zCs
4610: 72 20 3d 20 27 5c 30 27 3b 0a 20 20 7d 65 6c 73  r = '\0';.  }els
4620: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74  e if( f & MEM_St
4630: 72 20 29 7b 0a 20 20 20 20 69 6e 74 20 6a 2c 20  r ){.    int j, 
4640: 6b 3b 0a 20 20 20 20 7a 42 75 66 5b 30 5d 20 3d  k;.    zBuf[0] =
4650: 20 27 20 27 3b 0a 20 20 20 20 69 66 28 20 66 20   ' ';.    if( f 
4660: 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20  & MEM_Dyn ){.   
4670: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 7a 27     zBuf[1] = 'z'
4680: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
4690: 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63  (f & (MEM_Static
46a0: 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20  |MEM_Ephem))==0 
46b0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
46c0: 20 66 20 26 20 4d 45 4d 5f 53 74 61 74 69 63 20   f & MEM_Static 
46d0: 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d  ){.      zBuf[1]
46e0: 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61 73   = 't';.      as
46f0: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
4700: 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  Dyn|MEM_Ephem))=
4710: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
4720: 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68 65  if( f & MEM_Ephe
4730: 6d 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b  m ){.      zBuf[
4740: 31 5d 20 3d 20 27 65 27 3b 0a 20 20 20 20 20 20  1] = 'e';.      
4750: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
4760: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e  M_Static|MEM_Dyn
4770: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
4780: 73 65 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31  se{.      zBuf[1
4790: 5d 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a 20  ] = 's';.    }. 
47a0: 20 20 20 6b 20 3d 20 32 3b 0a 20 20 20 20 73 71     k = 2;.    sq
47b0: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
47c0: 30 30 2c 20 26 7a 42 75 66 5b 6b 5d 2c 20 22 25  00, &zBuf[k], "%
47d0: 64 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20  d", pMem->n);.  
47e0: 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33 53 74    k += sqlite3St
47f0: 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29  rlen30(&zBuf[k])
4800: 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20  ;.    zBuf[k++] 
4810: 3d 20 27 5b 27 3b 0a 20 20 20 20 66 6f 72 28 6a  = '[';.    for(j
4820: 3d 30 3b 20 6a 3c 31 35 20 26 26 20 6a 3c 70 4d  =0; j<15 && j<pM
4830: 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20  em->n; j++){.   
4840: 20 20 20 75 38 20 63 20 3d 20 70 4d 65 6d 2d 3e     u8 c = pMem->
4850: 7a 5b 6a 5d 3b 0a 20 20 20 20 20 20 69 66 28 20  z[j];.      if( 
4860: 63 3e 3d 30 78 32 30 20 26 26 20 63 3c 30 78 37  c>=0x20 && c<0x7
4870: 66 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 42 75  f ){.        zBu
4880: 66 5b 6b 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20 20  f[k++] = c;.    
4890: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
48a0: 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27   zBuf[k++] = '.'
48b0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
48c0: 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20      zBuf[k++] = 
48d0: 27 5d 27 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ']';.    sqlite3
48e0: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 26 7a  _snprintf(100,&z
48f0: 42 75 66 5b 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73  Buf[k], encnames
4900: 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20  [pMem->enc]);.  
4910: 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33 53 74    k += sqlite3St
4920: 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29  rlen30(&zBuf[k])
4930: 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20  ;.    zBuf[k++] 
4940: 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69  = 0;.  }.}.#endi
4950: 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
4960: 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69  _DEBUG./*.** Pri
4970: 6e 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  nt the value of 
4980: 61 20 72 65 67 69 73 74 65 72 20 66 6f 72 20 74  a register for t
4990: 72 61 63 69 6e 67 20 70 75 72 70 6f 73 65 73 3a  racing purposes:
49a0: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
49b0: 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28 4d 65  memTracePrint(Me
49c0: 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e  m *p){.  if( p->
49d0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 55 6e 64 65  flags & MEM_Unde
49e0: 66 69 6e 65 64 20 29 7b 0a 20 20 20 20 70 72 69  fined ){.    pri
49f0: 6e 74 66 28 22 20 75 6e 64 65 66 69 6e 65 64 22  ntf(" undefined"
4a00: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  );.  }else if( p
4a10: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
4a20: 6c 6c 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66  ll ){.    printf
4a30: 28 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  (p->flags & MEM_
4a40: 5a 65 72 6f 20 3f 20 22 20 4e 55 4c 4c 2d 6e 6f  Zero ? " NULL-no
4a50: 63 68 6e 67 22 20 3a 20 22 20 4e 55 4c 4c 22 29  chng" : " NULL")
4a60: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28 70  ;.  }else if( (p
4a70: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
4a80: 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28 4d  nt|MEM_Str))==(M
4a90: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 20  EM_Int|MEM_Str) 
4aa0: 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20  ){.    printf(" 
4ab0: 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69  si:%lld", p->u.i
4ac0: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28  );.  }else if( (
4ad0: 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  p->flags & (MEM_
4ae0: 49 6e 74 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a  IntReal))!=0 ){.
4af0: 20 20 20 20 70 72 69 6e 74 66 28 22 20 69 72 3a      printf(" ir:
4b00: 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a  %lld", p->u.i);.
4b10: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66    }else if( p->f
4b20: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
4b30: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 69  {.    printf(" i
4b40: 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b  :%lld", p->u.i);
4b50: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
4b60: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
4b70: 49 4e 54 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  INT.  }else if( 
4b80: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  p->flags & MEM_R
4b90: 65 61 6c 20 29 7b 0a 20 20 20 20 70 72 69 6e 74  eal ){.    print
4ba0: 66 28 22 20 72 3a 25 67 22 2c 20 70 2d 3e 75 2e  f(" r:%g", p->u.
4bb0: 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c  r);.#endif.  }el
4bc0: 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  se if( sqlite3Vd
4bd0: 62 65 4d 65 6d 49 73 52 6f 77 53 65 74 28 70 29  beMemIsRowSet(p)
4be0: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
4bf0: 20 28 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d   (rowset)");.  }
4c00: 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a  else{.    char z
4c10: 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71  Buf[200];.    sq
4c20: 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74  lite3VdbeMemPret
4c30: 74 79 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29  tyPrint(p, zBuf)
4c40: 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 25  ;.    printf(" %
4c50: 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 20  s", zBuf);.  }. 
4c60: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
4c70: 4d 45 4d 5f 53 75 62 74 79 70 65 20 29 20 70 72  MEM_Subtype ) pr
4c80: 69 6e 74 66 28 22 20 73 75 62 74 79 70 65 3d 30  intf(" subtype=0
4c90: 78 25 30 32 78 22 2c 20 70 2d 3e 65 53 75 62 74  x%02x", p->eSubt
4ca0: 79 70 65 29 3b 0a 7d 0a 73 74 61 74 69 63 20 76  ype);.}.static v
4cb0: 6f 69 64 20 72 65 67 69 73 74 65 72 54 72 61 63  oid registerTrac
4cc0: 65 28 69 6e 74 20 69 52 65 67 2c 20 4d 65 6d 20  e(int iReg, Mem 
4cd0: 2a 70 29 7b 0a 20 20 70 72 69 6e 74 66 28 22 52  *p){.  printf("R
4ce0: 45 47 5b 25 64 5d 20 3d 20 22 2c 20 69 52 65 67  EG[%d] = ", iReg
4cf0: 29 3b 0a 20 20 6d 65 6d 54 72 61 63 65 50 72 69  );.  memTracePri
4d00: 6e 74 28 70 29 3b 0a 20 20 70 72 69 6e 74 66 28  nt(p);.  printf(
4d10: 22 5c 6e 22 29 3b 0a 20 20 73 71 6c 69 74 65 33  "\n");.  sqlite3
4d20: 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61  VdbeCheckMemInva
4d30: 72 69 61 6e 74 73 28 70 29 3b 0a 7d 0a 23 65 6e  riants(p);.}.#en
4d40: 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
4d50: 54 45 5f 44 45 42 55 47 0a 23 20 20 64 65 66 69  TE_DEBUG.#  defi
4d60: 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  ne REGISTER_TRAC
4d70: 45 28 52 2c 4d 29 20 69 66 28 64 62 2d 3e 66 6c  E(R,M) if(db->fl
4d80: 61 67 73 26 53 51 4c 49 54 45 5f 56 64 62 65 54  ags&SQLITE_VdbeT
4d90: 72 61 63 65 29 72 65 67 69 73 74 65 72 54 72 61  race)registerTra
4da0: 63 65 28 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20  ce(R,M).#else.# 
4db0: 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52   define REGISTER
4dc0: 5f 54 52 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64  _TRACE(R,M).#end
4dd0: 69 66 0a 0a 0a 23 69 66 64 65 66 20 56 44 42 45  if...#ifdef VDBE
4de0: 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a  _PROFILE../* .**
4df0: 20 68 77 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69   hwtime.h contai
4e00: 6e 73 20 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62  ns inline assemb
4e10: 6c 65 72 20 63 6f 64 65 20 66 6f 72 20 69 6d 70  ler code for imp
4e20: 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69  lementing .** hi
4e30: 67 68 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20 74  gh-performance t
4e40: 69 6d 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a  iming routines..
4e50: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 68 77 74  */.#include "hwt
4e60: 69 6d 65 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a  ime.h"..#endif..
4e70: 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f  #ifndef NDEBUG./
4e80: 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69  *.** This functi
4e90: 6f 6e 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65  on is only calle
4ea0: 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e  d from within an
4eb0: 20 61 73 73 65 72 74 28 29 20 65 78 70 72 65 73   assert() expres
4ec0: 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63  sion. It.** chec
4ed0: 6b 73 20 74 68 61 74 20 74 68 65 20 73 71 6c 69  ks that the sqli
4ee0: 74 65 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e  te3.nTransaction
4ef0: 20 76 61 72 69 61 62 6c 65 20 69 73 20 63 6f 72   variable is cor
4f00: 72 65 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a  rectly set to.**
4f10: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e   the number of n
4f20: 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  on-transaction s
4f30: 61 76 65 70 6f 69 6e 74 73 20 63 75 72 72 65 6e  avepoints curren
4f40: 74 6c 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c  tly in the .** l
4f50: 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74  inked list start
4f60: 69 6e 67 20 61 74 20 73 71 6c 69 74 65 33 2e 70  ing at sqlite3.p
4f70: 53 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a  Savepoint..** .*
4f80: 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20  * Usage:.**.**  
4f90: 20 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b     assert( check
4fa0: 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64  SavepointCount(d
4fb0: 62 29 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20  b) );.*/.static 
4fc0: 69 6e 74 20 63 68 65 63 6b 53 61 76 65 70 6f 69  int checkSavepoi
4fd0: 6e 74 43 6f 75 6e 74 28 73 71 6c 69 74 65 33 20  ntCount(sqlite3 
4fe0: 2a 64 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20  *db){.  int n = 
4ff0: 30 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  0;.  Savepoint *
5000: 70 3b 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70  p;.  for(p=db->p
5010: 53 61 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d  Savepoint; p; p=
5020: 70 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20  p->pNext) n++;. 
5030: 20 61 73 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d   assert( n==(db-
5040: 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62  >nSavepoint + db
5050: 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
5060: 61 76 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72  avepoint) );.  r
5070: 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69  eturn 1;.}.#endi
5080: 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  f../*.** Return 
5090: 74 68 65 20 72 65 67 69 73 74 65 72 20 6f 66 20  the register of 
50a0: 70 4f 70 2d 3e 70 32 20 61 66 74 65 72 20 66 69  pOp->p2 after fi
50b0: 72 73 74 20 70 72 65 70 61 72 69 6e 67 20 69 74  rst preparing it
50c0: 20 74 6f 20 62 65 0a 2a 2a 20 6f 76 65 72 77 72   to be.** overwr
50d0: 69 74 74 65 6e 20 77 69 74 68 20 61 6e 20 69 6e  itten with an in
50e0: 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a  teger value..*/.
50f0: 73 74 61 74 69 63 20 53 51 4c 49 54 45 5f 4e 4f  static SQLITE_NO
5100: 49 4e 4c 49 4e 45 20 4d 65 6d 20 2a 6f 75 74 32  INLINE Mem *out2
5110: 50 72 65 72 65 6c 65 61 73 65 57 69 74 68 43 6c  PrereleaseWithCl
5120: 65 61 72 28 4d 65 6d 20 2a 70 4f 75 74 29 7b 0a  ear(Mem *pOut){.
5130: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
5140: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
5150: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
5160: 45 4d 5f 49 6e 74 3b 0a 20 20 72 65 74 75 72 6e  EM_Int;.  return
5170: 20 70 4f 75 74 3b 0a 7d 0a 73 74 61 74 69 63 20   pOut;.}.static 
5180: 4d 65 6d 20 2a 6f 75 74 32 50 72 65 72 65 6c 65  Mem *out2Prerele
5190: 61 73 65 28 56 64 62 65 20 2a 70 2c 20 56 64 62  ase(Vdbe *p, Vdb
51a0: 65 4f 70 20 2a 70 4f 70 29 7b 0a 20 20 4d 65 6d  eOp *pOp){.  Mem
51b0: 20 2a 70 4f 75 74 3b 0a 20 20 61 73 73 65 72 74   *pOut;.  assert
51c0: 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
51d0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
51e0: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
51f0: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
5200: 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pOut = &p->aMem[
5210: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41  pOp->p2];.  memA
5220: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
5230: 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 56 64 62  pOut);.  if( Vdb
5240: 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74  eMemDynamic(pOut
5250: 29 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54  ) ){ /*OPTIMIZAT
5260: 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20  ION-IF-FALSE*/. 
5270: 20 20 20 72 65 74 75 72 6e 20 6f 75 74 32 50 72     return out2Pr
5280: 65 72 65 6c 65 61 73 65 57 69 74 68 43 6c 65 61  ereleaseWithClea
5290: 72 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65  r(pOut);.  }else
52a0: 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  {.    pOut->flag
52b0: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  s = MEM_Int;.   
52c0: 20 72 65 74 75 72 6e 20 70 4f 75 74 3b 0a 20 20   return pOut;.  
52d0: 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63  }.}.../*.** Exec
52e0: 75 74 65 20 61 73 20 6d 75 63 68 20 6f 66 20 61  ute as much of a
52f0: 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 61 73   VDBE program as
5300: 20 77 65 20 63 61 6e 2e 0a 2a 2a 20 54 68 69 73   we can..** This
5310: 20 69 73 20 74 68 65 20 63 6f 72 65 20 6f 66 20   is the core of 
5320: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 2e 20  sqlite3_step(). 
5330: 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33   .*/.int sqlite3
5340: 56 64 62 65 45 78 65 63 28 0a 20 20 56 64 62 65  VdbeExec(.  Vdbe
5350: 20 2a 70 20 20 20 20 20 20 20 20 20 20 20 20 20   *p             
5360: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44         /* The VD
5370: 42 45 20 2a 2f 0a 29 7b 0a 20 20 4f 70 20 2a 61  BE */.){.  Op *a
5380: 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 20 20 20 20  Op = p->aOp;    
5390: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
53a0: 20 70 2d 3e 61 4f 70 20 2a 2f 0a 20 20 4f 70 20   p->aOp */.  Op 
53b0: 2a 70 4f 70 20 3d 20 61 4f 70 3b 20 20 20 20 20  *pOp = aOp;     
53c0: 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65          /* Curre
53d0: 6e 74 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a  nt operation */.
53e0: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
53f0: 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66  TE_DEBUG) || def
5400: 69 6e 65 64 28 56 44 42 45 5f 50 52 4f 46 49 4c  ined(VDBE_PROFIL
5410: 45 29 0a 20 20 4f 70 20 2a 70 4f 72 69 67 4f 70  E).  Op *pOrigOp
5420: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
5430: 2f 2a 20 56 61 6c 75 65 20 6f 66 20 70 4f 70 20  /* Value of pOp 
5440: 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  at the top of th
5450: 65 20 6c 6f 6f 70 20 2a 2f 0a 23 65 6e 64 69 66  e loop */.#endif
5460: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
5470: 45 42 55 47 0a 20 20 69 6e 74 20 6e 45 78 74 72  EBUG.  int nExtr
5480: 61 44 65 6c 65 74 65 20 3d 20 30 3b 20 20 20 20  aDelete = 0;    
5490: 20 20 2f 2a 20 56 65 72 69 66 69 65 73 20 46 4f    /* Verifies FO
54a0: 52 44 45 4c 45 54 45 20 61 6e 64 20 41 55 58 44  RDELETE and AUXD
54b0: 45 4c 45 54 45 20 66 6c 61 67 73 20 2a 2f 0a 23  ELETE flags */.#
54c0: 65 6e 64 69 66 0a 20 20 69 6e 74 20 72 63 20 3d  endif.  int rc =
54d0: 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20   SQLITE_OK;     
54e0: 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
54f0: 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c 69 74  eturn */.  sqlit
5500: 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 20  e3 *db = p->db; 
5510: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
5520: 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20 72 65  abase */.  u8 re
5530: 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
5540: 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65 74 20 73   = 0; /* Reset s
5550: 63 68 65 6d 61 20 61 66 74 65 72 20 61 6e 20 65  chema after an e
5560: 72 72 6f 72 20 69 66 20 70 6f 73 69 74 69 76 65  rror if positive
5570: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64 69 6e   */.  u8 encodin
5580: 67 20 3d 20 45 4e 43 28 64 62 29 3b 20 20 20 20  g = ENC(db);    
5590: 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
55a0: 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69   encoding */.  i
55b0: 6e 74 20 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b  nt iCompare = 0;
55c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
55d0: 75 6c 74 20 6f 66 20 6c 61 73 74 20 63 6f 6d 70  ult of last comp
55e0: 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69  arison */.  unsi
55f0: 67 6e 65 64 20 6e 56 6d 53 74 65 70 20 3d 20 30  gned nVmStep = 0
5600: 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
5610: 20 6f 66 20 76 69 72 74 75 61 6c 20 6d 61 63 68   of virtual mach
5620: 69 6e 65 20 73 74 65 70 73 20 2a 2f 0a 23 69 66  ine steps */.#if
5630: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
5640: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
5650: 43 4b 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50  CK.  unsigned nP
5660: 72 6f 67 72 65 73 73 4c 69 6d 69 74 3b 20 20 20  rogressLimit;   
5670: 2f 2a 20 49 6e 76 6f 6b 65 20 78 50 72 6f 67 72  /* Invoke xProgr
5680: 65 73 73 28 29 20 77 68 65 6e 20 6e 56 6d 53 74  ess() when nVmSt
5690: 65 70 20 72 65 61 63 68 65 73 20 74 68 69 73 20  ep reaches this 
56a0: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20  */.#endif.  Mem 
56b0: 2a 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b  *aMem = p->aMem;
56c0: 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f         /* Copy o
56d0: 66 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d  f p->aMem */.  M
56e0: 65 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20  em *pIn1 = 0;   
56f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74            /* 1st
5700: 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a   input operand *
5710: 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20  /.  Mem *pIn2 = 
5720: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
5730: 2a 20 32 6e 64 20 69 6e 70 75 74 20 6f 70 65 72  * 2nd input oper
5740: 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49  and */.  Mem *pI
5750: 6e 33 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  n3 = 0;         
5760: 20 20 20 20 2f 2a 20 33 72 64 20 69 6e 70 75 74      /* 3rd input
5770: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65   operand */.  Me
5780: 6d 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20 20  m *pOut = 0;    
5790: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74 70           /* Outp
57a0: 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 23 69  ut operand */.#i
57b0: 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c  fdef VDBE_PROFIL
57c0: 45 0a 20 20 75 36 34 20 73 74 61 72 74 3b 20 20  E.  u64 start;  
57d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
57e0: 2a 20 43 50 55 20 63 6c 6f 63 6b 20 63 6f 75 6e  * CPU clock coun
57f0: 74 20 61 74 20 73 74 61 72 74 20 6f 66 20 6f 70  t at start of op
5800: 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  code */.#endif. 
5810: 20 2f 2a 2a 2a 20 49 4e 53 45 52 54 20 53 54 41   /*** INSERT STA
5820: 43 4b 20 55 4e 49 4f 4e 20 48 45 52 45 20 2a 2a  CK UNION HERE **
5830: 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  */..  assert( p-
5840: 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47  >magic==VDBE_MAG
5850: 49 43 5f 52 55 4e 20 29 3b 20 20 2f 2a 20 73 71  IC_RUN );  /* sq
5860: 6c 69 74 65 33 5f 73 74 65 70 28 29 20 76 65 72  lite3_step() ver
5870: 69 66 69 65 73 20 74 68 69 73 20 2a 2f 0a 20 20  ifies this */.  
5880: 73 71 6c 69 74 65 33 56 64 62 65 45 6e 74 65 72  sqlite3VdbeEnter
5890: 28 70 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  (p);.#ifndef SQL
58a0: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
58b0: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 66 28  S_CALLBACK.  if(
58c0: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 29   db->xProgress )
58d0: 7b 0a 20 20 20 20 75 33 32 20 69 50 72 69 6f 72  {.    u32 iPrior
58e0: 20 3d 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53   = p->aCounter[S
58f0: 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53  QLITE_STMTSTATUS
5900: 5f 56 4d 5f 53 54 45 50 5d 3b 0a 20 20 20 20 61  _VM_STEP];.    a
5910: 73 73 65 72 74 28 20 30 20 3c 20 64 62 2d 3e 6e  ssert( 0 < db->n
5920: 50 72 6f 67 72 65 73 73 4f 70 73 20 29 3b 0a 20  ProgressOps );. 
5930: 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69     nProgressLimi
5940: 74 20 3d 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73  t = db->nProgres
5950: 73 4f 70 73 20 2d 20 28 69 50 72 69 6f 72 20 25  sOps - (iPrior %
5960: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
5970: 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  s);.  }else{.   
5980: 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20   nProgressLimit 
5990: 3d 20 30 78 66 66 66 66 66 66 66 66 3b 0a 20 20  = 0xffffffff;.  
59a0: 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70  }.#endif.  if( p
59b0: 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d  ->rc==SQLITE_NOM
59c0: 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69  EM ){.    /* Thi
59d0: 73 20 68 61 70 70 65 6e 73 20 69 66 20 61 20 6d  s happens if a m
59e0: 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20 61  alloc() inside a
59f0: 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33   call to sqlite3
5a00: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20 6f  _column_text() o
5a10: 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33  r.    ** sqlite3
5a20: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29  _column_text16()
5a30: 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20 20   failed.  */.   
5a40: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
5a50: 7d 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  }.  assert( p->r
5a60: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
5a70: 28 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53 51  (p->rc&0xff)==SQ
5a80: 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a 20 20 61  LITE_BUSY );.  a
5a90: 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
5aa0: 64 65 72 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e  der || p->readOn
5ab0: 6c 79 21 3d 30 20 29 3b 0a 20 20 70 2d 3e 69 43  ly!=0 );.  p->iC
5ac0: 75 72 72 65 6e 74 54 69 6d 65 20 3d 20 30 3b 0a  urrentTime = 0;.
5ad0: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 65 78 70    assert( p->exp
5ae0: 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e  lain==0 );.  p->
5af0: 70 52 65 73 75 6c 74 53 65 74 20 3d 20 30 3b 0a  pResultSet = 0;.
5b00: 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65    db->busyHandle
5b10: 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 69  r.nBusy = 0;.  i
5b20: 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65  f( db->u1.isInte
5b30: 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20 61  rrupted ) goto a
5b40: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65  bort_due_to_inte
5b50: 72 72 75 70 74 3b 0a 20 20 73 71 6c 69 74 65 33  rrupt;.  sqlite3
5b60: 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 70  VdbeIOTraceSql(p
5b70: 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
5b80: 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74 65 33  _DEBUG.  sqlite3
5b90: 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
5ba0: 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63  c();.  if( p->pc
5bb0: 3d 3d 30 0a 20 20 20 26 26 20 28 70 2d 3e 64 62  ==0.   && (p->db
5bc0: 2d 3e 66 6c 61 67 73 20 26 20 28 53 51 4c 49 54  ->flags & (SQLIT
5bd0: 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 7c 53 51  E_VdbeListing|SQ
5be0: 4c 49 54 45 5f 56 64 62 65 45 51 50 7c 53 51 4c  LITE_VdbeEQP|SQL
5bf0: 49 54 45 5f 56 64 62 65 54 72 61 63 65 29 29 21  ITE_VdbeTrace))!
5c00: 3d 30 0a 20 20 29 7b 0a 20 20 20 20 69 6e 74 20  =0.  ){.    int 
5c10: 69 3b 0a 20 20 20 20 69 6e 74 20 6f 6e 63 65 20  i;.    int once 
5c20: 3d 20 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 1;.    sqlite3
5c30: 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29 3b  VdbePrintSql(p);
5c40: 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e  .    if( p->db->
5c50: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
5c60: 64 62 65 4c 69 73 74 69 6e 67 20 29 7b 0a 20 20  dbeListing ){.  
5c70: 20 20 20 20 70 72 69 6e 74 66 28 22 56 44 42 45      printf("VDBE
5c80: 20 50 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67   Program Listing
5c90: 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 66 6f 72  :\n");.      for
5ca0: 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20  (i=0; i<p->nOp; 
5cb0: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 73 71  i++){.        sq
5cc0: 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70  lite3VdbePrintOp
5cd0: 28 73 74 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70  (stdout, i, &aOp
5ce0: 5b 69 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  [i]);.      }.  
5cf0: 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 64    }.    if( p->d
5d00: 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
5d10: 45 5f 56 64 62 65 45 51 50 20 29 7b 0a 20 20 20  E_VdbeEQP ){.   
5d20: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d     for(i=0; i<p-
5d30: 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  >nOp; i++){.    
5d40: 20 20 20 20 69 66 28 20 61 4f 70 5b 69 5d 2e 6f      if( aOp[i].o
5d50: 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69  pcode==OP_Explai
5d60: 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  n ){.          i
5d70: 66 28 20 6f 6e 63 65 20 29 20 70 72 69 6e 74 66  f( once ) printf
5d80: 28 22 56 44 42 45 20 51 75 65 72 79 20 50 6c 61  ("VDBE Query Pla
5d90: 6e 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20  n:\n");.        
5da0: 20 20 70 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c    printf("%s\n",
5db0: 20 61 4f 70 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20   aOp[i].p4.z);. 
5dc0: 20 20 20 20 20 20 20 20 20 6f 6e 63 65 20 3d 20           once = 
5dd0: 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  0;.        }.   
5de0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69     }.    }.    i
5df0: 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20  f( p->db->flags 
5e00: 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  & SQLITE_VdbeTra
5e10: 63 65 20 29 20 20 70 72 69 6e 74 66 28 22 56 44  ce )  printf("VD
5e20: 42 45 20 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20  BE Trace:\n");. 
5e30: 20 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e 64 42   }.  sqlite3EndB
5e40: 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23  enignMalloc();.#
5e50: 65 6e 64 69 66 0a 20 20 66 6f 72 28 70 4f 70 3d  endif.  for(pOp=
5e60: 26 61 4f 70 5b 70 2d 3e 70 63 5d 3b 20 31 3b 20  &aOp[p->pc]; 1; 
5e70: 70 4f 70 2b 2b 29 7b 0a 20 20 20 20 2f 2a 20 45  pOp++){.    /* E
5e80: 72 72 6f 72 73 20 61 72 65 20 64 65 74 65 63 74  rrors are detect
5e90: 65 64 20 62 79 20 69 6e 64 69 76 69 64 75 61 6c  ed by individual
5ea0: 20 6f 70 63 6f 64 65 73 2c 20 77 69 74 68 20 61   opcodes, with a
5eb0: 6e 20 69 6d 6d 65 64 69 61 74 65 0a 20 20 20 20  n immediate.    
5ec0: 2a 2a 20 6a 75 6d 70 73 20 74 6f 20 61 62 6f 72  ** jumps to abor
5ed0: 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 2e 20  t_due_to_error. 
5ee0: 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  */.    assert( r
5ef0: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c==SQLITE_OK );.
5f00: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
5f10: 3e 3d 61 4f 70 20 26 26 20 70 4f 70 3c 26 61 4f  >=aOp && pOp<&aO
5f20: 70 5b 70 2d 3e 6e 4f 70 5d 29 3b 0a 23 69 66 64  p[p->nOp]);.#ifd
5f30: 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a  ef VDBE_PROFILE.
5f40: 20 20 20 20 73 74 61 72 74 20 3d 20 73 71 6c 69      start = sqli
5f50: 74 65 33 4e 50 72 6f 66 69 6c 65 43 6e 74 20 3f  te3NProfileCnt ?
5f60: 20 73 71 6c 69 74 65 33 4e 50 72 6f 66 69 6c 65   sqlite3NProfile
5f70: 43 6e 74 20 3a 20 73 71 6c 69 74 65 33 48 77 74  Cnt : sqlite3Hwt
5f80: 69 6d 65 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20  ime();.#endif.  
5f90: 20 20 6e 56 6d 53 74 65 70 2b 2b 3b 0a 23 69 66    nVmStep++;.#if
5fa0: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
5fb0: 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55  E_STMT_SCANSTATU
5fc0: 53 0a 20 20 20 20 69 66 28 20 70 2d 3e 61 6e 45  S.    if( p->anE
5fd0: 78 65 63 20 29 20 70 2d 3e 61 6e 45 78 65 63 5b  xec ) p->anExec[
5fe0: 28 69 6e 74 29 28 70 4f 70 2d 61 4f 70 29 5d 2b  (int)(pOp-aOp)]+
5ff0: 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f  +;.#endif..    /
6000: 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74 72 61  * Only allow tra
6010: 63 69 6e 67 20 69 66 20 53 51 4c 49 54 45 5f 44  cing if SQLITE_D
6020: 45 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e  EBUG is defined.
6030: 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53  .    */.#ifdef S
6040: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
6050: 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26 20  if( db->flags & 
6060: 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65  SQLITE_VdbeTrace
6070: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
6080: 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64  3VdbePrintOp(std
6090: 6f 75 74 2c 20 28 69 6e 74 29 28 70 4f 70 20 2d  out, (int)(pOp -
60a0: 20 61 4f 70 29 2c 20 70 4f 70 29 3b 0a 20 20 20   aOp), pOp);.   
60b0: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20   }.#endif.      
60c0: 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 74  ..    /* Check t
60d0: 6f 20 73 65 65 20 69 66 20 77 65 20 6e 65 65 64  o see if we need
60e0: 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20   to simulate an 
60f0: 69 6e 74 65 72 72 75 70 74 2e 20 20 54 68 69 73  interrupt.  This
6100: 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a 20 20   only happens.  
6110: 20 20 2a 2a 20 69 66 20 77 65 20 68 61 76 65 20    ** if we have 
6120: 61 20 73 70 65 63 69 61 6c 20 74 65 73 74 20 62  a special test b
6130: 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66  uild..    */.#if
6140: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
6150: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f      if( sqlite3_
6160: 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3e  interrupt_count>
6170: 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
6180: 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75  e3_interrupt_cou
6190: 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66 28 20  nt--;.      if( 
61a0: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
61b0: 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a 20 20  t_count==0 ){.  
61c0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e        sqlite3_in
61d0: 74 65 72 72 75 70 74 28 64 62 29 3b 0a 20 20 20  terrupt(db);.   
61e0: 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69     }.    }.#endi
61f0: 66 0a 0a 20 20 20 20 2f 2a 20 53 61 6e 69 74 79  f..    /* Sanity
6200: 20 63 68 65 63 6b 69 6e 67 20 6f 6e 20 6f 74 68   checking on oth
6210: 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 23  er operands */.#
6220: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
6230: 55 47 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 75  UG.    {.      u
6240: 38 20 6f 70 50 72 6f 70 65 72 74 79 20 3d 20 73  8 opProperty = s
6250: 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70  qlite3OpcodeProp
6260: 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65  erty[pOp->opcode
6270: 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70  ];.      if( (op
6280: 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47  Property & OPFLG
6290: 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20 20  _IN1)!=0 ){.    
62a0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
62b0: 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20 20 20 20  >p1>0 );.       
62c0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
62d0: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
62e0: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
62f0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
6300: 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
6310: 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20  Op->p1]) );.    
6320: 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
6330: 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49  te3VdbeCheckMemI
6340: 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b  nvariants(&aMem[
6350: 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20  pOp->p1]) );.   
6360: 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52       REGISTER_TR
6370: 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 26 61 4d  ACE(pOp->p1, &aM
6380: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20  em[pOp->p1]);.  
6390: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
63a0: 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50  (opProperty & OP
63b0: 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b 0a 20  FLG_IN2)!=0 ){. 
63c0: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
63d0: 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20  Op->p2>0 );.    
63e0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
63f0: 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p2<=(p->nMem+1 
6400: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
6410: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
6420: 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
6430: 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20  m[pOp->p2]) );. 
6440: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73         assert( s
6450: 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d  qlite3VdbeCheckM
6460: 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d  emInvariants(&aM
6470: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a  em[pOp->p2]) );.
6480: 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52          REGISTER
6490: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
64a0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b  &aMem[pOp->p2]);
64b0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
64c0: 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26  f( (opProperty &
64d0: 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d 30 20 29   OPFLG_IN3)!=0 )
64e0: 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
64f0: 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20  ( pOp->p3>0 );. 
6500: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
6510: 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
6520: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
6530: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
6540: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
6550: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29  aMem[pOp->p3]) )
6560: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
6570: 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  ( sqlite3VdbeChe
6580: 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28  ckMemInvariants(
6590: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20  &aMem[pOp->p3]) 
65a0: 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53  );.        REGIS
65b0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
65c0: 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  3, &aMem[pOp->p3
65d0: 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ]);.      }.    
65e0: 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74    if( (opPropert
65f0: 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 29 21  y & OPFLG_OUT2)!
6600: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  =0 ){.        as
6610: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
6620: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
6630: 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e  t( pOp->p2<=(p->
6640: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
6650: 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20  sor) );.        
6660: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
6670: 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  (p, &aMem[pOp->p
6680: 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  2]);.      }.   
6690: 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72     if( (opProper
66a0: 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 29  ty & OPFLG_OUT3)
66b0: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  !=0 ){.        a
66c0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
66d0: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
66e0: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  rt( pOp->p3<=(p-
66f0: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
6700: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20  rsor) );.       
6710: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
6720: 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  e(p, &aMem[pOp->
6730: 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  p3]);.      }.  
6740: 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 20 64    }.#endif.#if d
6750: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
6760: 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  BUG) || defined(
6770: 56 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a 20 20  VDBE_PROFILE).  
6780: 20 20 70 4f 72 69 67 4f 70 20 3d 20 70 4f 70 3b    pOrigOp = pOp;
6790: 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 20 20 73  .#endif.  .    s
67a0: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
67b0: 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a  de ){../********
67c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
67d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
67e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
67f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6800: 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61 74 20 66 6f  *****.** What fo
6810: 6c 6c 6f 77 73 20 69 73 20 61 20 6d 61 73 73 69  llows is a massi
6820: 76 65 20 73 77 69 74 63 68 20 73 74 61 74 65 6d  ve switch statem
6830: 65 6e 74 20 77 68 65 72 65 20 65 61 63 68 20 63  ent where each c
6840: 61 73 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61  ase implements a
6850: 0a 2a 2a 20 73 65 70 61 72 61 74 65 20 69 6e 73  .** separate ins
6860: 74 72 75 63 74 69 6f 6e 20 69 6e 20 74 68 65 20  truction in the 
6870: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e  virtual machine.
6880: 20 20 49 66 20 77 65 20 66 6f 6c 6c 6f 77 20 74    If we follow t
6890: 68 65 20 75 73 75 61 6c 0a 2a 2a 20 69 6e 64 65  he usual.** inde
68a0: 6e 74 61 74 69 6f 6e 20 63 6f 6e 76 65 6e 74 69  ntation conventi
68b0: 6f 6e 73 2c 20 65 61 63 68 20 63 61 73 65 20 73  ons, each case s
68c0: 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e 74 65  hould be indente
68d0: 64 20 62 79 20 36 20 73 70 61 63 65 73 2e 20 20  d by 6 spaces.  
68e0: 42 75 74 0a 2a 2a 20 74 68 61 74 20 69 73 20 61  But.** that is a
68f0: 20 6c 6f 74 20 6f 66 20 77 61 73 74 65 64 20 73   lot of wasted s
6900: 70 61 63 65 20 6f 6e 20 74 68 65 20 6c 65 66 74  pace on the left
6910: 20 6d 61 72 67 69 6e 2e 20 20 53 6f 20 74 68 65   margin.  So the
6920: 20 63 6f 64 65 20 77 69 74 68 69 6e 0a 2a 2a 20   code within.** 
6930: 74 68 65 20 73 77 69 74 63 68 20 73 74 61 74 65  the switch state
6940: 6d 65 6e 74 20 77 69 6c 6c 20 62 72 65 61 6b 20  ment will break 
6950: 77 69 74 68 20 63 6f 6e 76 65 6e 74 69 6f 6e 20  with convention 
6960: 61 6e 64 20 62 65 20 66 6c 75 73 68 2d 6c 65 66  and be flush-lef
6970: 74 2e 20 41 6e 6f 74 68 65 72 0a 2a 2a 20 62 69  t. Another.** bi
6980: 67 20 63 6f 6d 6d 65 6e 74 20 28 73 69 6d 69 6c  g comment (simil
6990: 61 72 20 74 6f 20 74 68 69 73 20 6f 6e 65 29 20  ar to this one) 
69a0: 77 69 6c 6c 20 6d 61 72 6b 20 74 68 65 20 70 6f  will mark the po
69b0: 69 6e 74 20 69 6e 20 74 68 65 20 63 6f 64 65 20  int in the code 
69c0: 77 68 65 72 65 0a 2a 2a 20 77 65 20 74 72 61 6e  where.** we tran
69d0: 73 69 74 69 6f 6e 20 62 61 63 6b 20 74 6f 20 6e  sition back to n
69e0: 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f  ormal indentatio
69f0: 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 72  n..**.** The for
6a00: 6d 61 74 74 69 6e 67 20 6f 66 20 65 61 63 68 20  matting of each 
6a10: 63 61 73 65 20 69 73 20 69 6d 70 6f 72 74 61 6e  case is importan
6a20: 74 2e 20 20 54 68 65 20 6d 61 6b 65 66 69 6c 65  t.  The makefile
6a30: 20 66 6f 72 20 53 51 4c 69 74 65 0a 2a 2a 20 67   for SQLite.** g
6a40: 65 6e 65 72 61 74 65 73 20 74 77 6f 20 43 20 66  enerates two C f
6a50: 69 6c 65 73 20 22 6f 70 63 6f 64 65 73 2e 68 22  iles "opcodes.h"
6a60: 20 61 6e 64 20 22 6f 70 63 6f 64 65 73 2e 63 22   and "opcodes.c"
6a70: 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68 69   by scanning thi
6a80: 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f 6f 6b 69 6e  s.** file lookin
6a90: 67 20 66 6f 72 20 6c 69 6e 65 73 20 74 68 61 74  g for lines that
6aa0: 20 62 65 67 69 6e 20 77 69 74 68 20 22 63 61 73   begin with "cas
6ab0: 65 20 4f 50 5f 22 2e 20 20 54 68 65 20 6f 70 63  e OP_".  The opc
6ac0: 6f 64 65 73 2e 68 20 66 69 6c 65 73 0a 2a 2a 20  odes.h files.** 
6ad0: 77 69 6c 6c 20 62 65 20 66 69 6c 6c 65 64 20 77  will be filled w
6ae0: 69 74 68 20 23 64 65 66 69 6e 65 73 20 74 68 61  ith #defines tha
6af0: 74 20 67 69 76 65 20 75 6e 69 71 75 65 20 69 6e  t give unique in
6b00: 74 65 67 65 72 20 76 61 6c 75 65 73 20 74 6f 20  teger values to 
6b10: 65 61 63 68 0a 2a 2a 20 6f 70 63 6f 64 65 20 61  each.** opcode a
6b20: 6e 64 20 74 68 65 20 6f 70 63 6f 64 65 73 2e 63  nd the opcodes.c
6b30: 20 66 69 6c 65 20 69 73 20 66 69 6c 6c 65 64 20   file is filled 
6b40: 77 69 74 68 20 61 6e 20 61 72 72 61 79 20 6f 66  with an array of
6b50: 20 73 74 72 69 6e 67 73 20 77 68 65 72 65 0a 2a   strings where.*
6b60: 2a 20 65 61 63 68 20 73 74 72 69 6e 67 20 69 73  * each string is
6b70: 20 74 68 65 20 73 79 6d 62 6f 6c 69 63 20 6e 61   the symbolic na
6b80: 6d 65 20 66 6f 72 20 74 68 65 20 63 6f 72 72 65  me for the corre
6b90: 73 70 6f 6e 64 69 6e 67 20 6f 70 63 6f 64 65 2e  sponding opcode.
6ba0: 20 20 49 66 20 74 68 65 0a 2a 2a 20 63 61 73 65    If the.** case
6bb0: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 66 6f   statement is fo
6bc0: 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6d 6d  llowed by a comm
6bd0: 65 6e 74 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ent of the form 
6be0: 22 2f 23 20 73 61 6d 65 20 61 73 20 2e 2e 2e 20  "/# same as ... 
6bf0: 23 2f 22 0a 2a 2a 20 74 68 61 74 20 63 6f 6d 6d  #/".** that comm
6c00: 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20 64  ent is used to d
6c10: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 70 61 72  etermine the par
6c20: 74 69 63 75 6c 61 72 20 76 61 6c 75 65 20 6f 66  ticular value of
6c30: 20 74 68 65 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a   the opcode..**.
6c40: 2a 2a 20 4f 74 68 65 72 20 6b 65 79 77 6f 72 64  ** Other keyword
6c50: 73 20 69 6e 20 74 68 65 20 63 6f 6d 6d 65 6e 74  s in the comment
6c60: 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 65 61   that follows ea
6c70: 63 68 20 63 61 73 65 20 61 72 65 20 75 73 65 64  ch case are used
6c80: 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74 72 75 63 74   to.** construct
6c90: 20 74 68 65 20 4f 50 46 4c 47 5f 49 4e 49 54 49   the OPFLG_INITI
6ca0: 41 4c 49 5a 45 52 20 76 61 6c 75 65 20 74 68 61  ALIZER value tha
6cb0: 74 20 69 6e 69 74 69 61 6c 69 7a 65 73 20 6f 70  t initializes op
6cc0: 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 2e 0a  codeProperty[]..
6cd0: 2a 2a 20 4b 65 79 77 6f 72 64 73 20 69 6e 63 6c  ** Keywords incl
6ce0: 75 64 65 3a 20 69 6e 31 2c 20 69 6e 32 2c 20 69  ude: in1, in2, i
6cf0: 6e 33 2c 20 6f 75 74 32 2c 20 6f 75 74 33 2e 20  n3, out2, out3. 
6d00: 20 53 65 65 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70   See.** the mkop
6d10: 63 6f 64 65 68 2e 61 77 6b 20 73 63 72 69 70 74  codeh.awk script
6d20: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
6d30: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a  information..**.
6d40: 2a 2a 20 44 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  ** Documentation
6d50: 20 61 62 6f 75 74 20 56 44 42 45 20 6f 70 63 6f   about VDBE opco
6d60: 64 65 73 20 69 73 20 67 65 6e 65 72 61 74 65 64  des is generated
6d70: 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68 69   by scanning thi
6d80: 73 20 66 69 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69  s file.** for li
6d90: 6e 65 73 20 6f 66 20 74 68 61 74 20 63 6f 6e 74  nes of that cont
6da0: 61 69 6e 20 22 4f 70 63 6f 64 65 3a 22 2e 20 20  ain "Opcode:".  
6db0: 54 68 61 74 20 6c 69 6e 65 20 61 6e 64 20 61 6c  That line and al
6dc0: 6c 20 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20  l subsequent.** 
6dd0: 63 6f 6d 6d 65 6e 74 20 6c 69 6e 65 73 20 61 72  comment lines ar
6de0: 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65  e used in the ge
6df0: 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  neration of the 
6e00: 6f 70 63 6f 64 65 2e 68 74 6d 6c 20 64 6f 63 75  opcode.html docu
6e10: 6d 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c  mentation.** fil
6e20: 65 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59  e..**.** SUMMARY
6e30: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 46 6f 72 6d  :.**.**     Form
6e40: 61 74 74 69 6e 67 20 69 73 20 69 6d 70 6f 72 74  atting is import
6e50: 61 6e 74 20 74 6f 20 73 63 72 69 70 74 73 20 74  ant to scripts t
6e60: 68 61 74 20 73 63 61 6e 20 74 68 69 73 20 66 69  hat scan this fi
6e70: 6c 65 2e 0a 2a 2a 20 20 20 20 20 44 6f 20 6e 6f  le..**     Do no
6e80: 74 20 64 65 76 69 61 74 65 20 66 72 6f 6d 20 74  t deviate from t
6e90: 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 73 74  he formatting st
6ea0: 79 6c 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  yle currently in
6eb0: 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a   use..**.*******
6ec0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6ed0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6ee0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6ef0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6f00: 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  ******/../* Opco
6f10: 64 65 3a 20 20 47 6f 74 6f 20 2a 20 50 32 20 2a  de:  Goto * P2 *
6f20: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e   * *.**.** An un
6f30: 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 6a 75 6d 70  conditional jump
6f40: 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 0a   to address P2..
6f50: 2a 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 73 74  ** The next inst
6f60: 72 75 63 74 69 6f 6e 20 65 78 65 63 75 74 65 64  ruction executed
6f70: 20 77 69 6c 6c 20 62 65 20 0a 2a 2a 20 74 68 65   will be .** the
6f80: 20 6f 6e 65 20 61 74 20 69 6e 64 65 78 20 50 32   one at index P2
6f90: 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
6fa0: 69 6e 67 20 6f 66 0a 2a 2a 20 74 68 65 20 70 72  ing of.** the pr
6fb0: 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ogram..**.** The
6fc0: 20 50 31 20 70 61 72 61 6d 65 74 65 72 20 69 73   P1 parameter is
6fd0: 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 75 73   not actually us
6fe0: 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  ed by this opcod
6ff0: 65 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 74 0a  e.  However, it.
7000: 2a 2a 20 69 73 20 73 6f 6d 65 74 69 6d 65 73 20  ** is sometimes 
7010: 73 65 74 20 74 6f 20 31 20 69 6e 73 74 65 61 64  set to 1 instead
7020: 20 6f 66 20 30 20 61 73 20 61 20 68 69 6e 74 20   of 0 as a hint 
7030: 74 6f 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  to the command-l
7040: 69 6e 65 20 73 68 65 6c 6c 0a 2a 2a 20 74 68 61  ine shell.** tha
7050: 74 20 74 68 69 73 20 47 6f 74 6f 20 69 73 20 74  t this Goto is t
7060: 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c  he bottom of a l
7070: 6f 6f 70 20 61 6e 64 20 74 68 61 74 20 74 68 65  oop and that the
7080: 20 6c 69 6e 65 73 20 66 72 6f 6d 20 50 32 20 64   lines from P2 d
7090: 6f 77 6e 0a 2a 2a 20 74 6f 20 74 68 65 20 63 75  own.** to the cu
70a0: 72 72 65 6e 74 20 6c 69 6e 65 20 73 68 6f 75 6c  rrent line shoul
70b0: 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20 66 6f  d be indented fo
70c0: 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74  r EXPLAIN output
70d0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 74  ..*/.case OP_Got
70e0: 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  o: {            
70f0: 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 6a 75 6d 70   /* jump */.jump
7100: 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b  _to_p2_and_check
7110: 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a  _for_interrupt:.
7120: 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70    pOp = &aOp[pOp
7130: 2d 3e 70 32 20 2d 20 31 5d 3b 0a 0a 20 20 2f 2a  ->p2 - 1];..  /*
7140: 20 4f 70 63 6f 64 65 73 20 74 68 61 74 20 61 72   Opcodes that ar
7150: 65 20 75 73 65 64 20 61 73 20 74 68 65 20 62 6f  e used as the bo
7160: 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 28  ttom of a loop (
7170: 4f 50 5f 4e 65 78 74 2c 20 4f 50 5f 50 72 65 76  OP_Next, OP_Prev
7180: 2c 0a 20 20 2a 2a 20 4f 50 5f 56 4e 65 78 74 2c  ,.  ** OP_VNext,
7190: 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78   or OP_SorterNex
71a0: 74 29 20 61 6c 6c 20 6a 75 6d 70 20 68 65 72 65  t) all jump here
71b0: 20 75 70 6f 6e 0a 20 20 2a 2a 20 63 6f 6d 70 6c   upon.  ** compl
71c0: 65 74 69 6f 6e 2e 20 20 43 68 65 63 6b 20 74 6f  etion.  Check to
71d0: 20 73 65 65 20 69 66 20 73 71 6c 69 74 65 33 5f   see if sqlite3_
71e0: 69 6e 74 65 72 72 75 70 74 28 29 20 68 61 73 20  interrupt() has 
71f0: 62 65 65 6e 20 63 61 6c 6c 65 64 0a 20 20 2a 2a  been called.  **
7200: 20 6f 72 20 69 66 20 74 68 65 20 70 72 6f 67 72   or if the progr
7210: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 6e 65 65  ess callback nee
7220: 64 73 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64  ds to be invoked
7230: 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 69  . .  **.  ** Thi
7240: 73 20 63 6f 64 65 20 75 73 65 73 20 75 6e 73 74  s code uses unst
7250: 72 75 63 74 75 72 65 64 20 22 67 6f 74 6f 22 20  ructured "goto" 
7260: 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 20 64  statements and d
7270: 6f 65 73 20 6e 6f 74 20 6c 6f 6f 6b 20 63 6c 65  oes not look cle
7280: 61 6e 2e 0a 20 20 2a 2a 20 42 75 74 20 74 68 61  an..  ** But tha
7290: 74 20 69 73 20 6e 6f 74 20 64 75 65 20 74 6f 20  t is not due to 
72a0: 73 6c 6f 70 70 79 20 63 6f 64 69 6e 67 20 68 61  sloppy coding ha
72b0: 62 69 74 73 2e 20 54 68 65 20 63 6f 64 65 20 69  bits. The code i
72c0: 73 20 77 72 69 74 74 65 6e 20 74 68 69 73 0a 20  s written this. 
72d0: 20 2a 2a 20 77 61 79 20 66 6f 72 20 70 65 72 66   ** way for perf
72e0: 6f 72 6d 61 6e 63 65 2c 20 74 6f 20 61 76 6f 69  ormance, to avoi
72f0: 64 20 68 61 76 69 6e 67 20 74 6f 20 72 75 6e 20  d having to run 
7300: 74 68 65 20 69 6e 74 65 72 72 75 70 74 20 61 6e  the interrupt an
7310: 64 20 70 72 6f 67 72 65 73 73 0a 20 20 2a 2a 20  d progress.  ** 
7320: 63 68 65 63 6b 73 20 6f 6e 20 65 76 65 72 79 20  checks on every 
7330: 6f 70 63 6f 64 65 2e 20 20 54 68 69 73 20 68 65  opcode.  This he
7340: 6c 70 73 20 73 71 6c 69 74 65 33 5f 73 74 65 70  lps sqlite3_step
7350: 28 29 20 74 6f 20 72 75 6e 20 61 62 6f 75 74 20  () to run about 
7360: 31 2e 35 25 0a 20 20 2a 2a 20 66 61 73 74 65 72  1.5%.  ** faster
7370: 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 22 76   according to "v
7380: 61 6c 67 72 69 6e 64 20 2d 2d 74 6f 6f 6c 3d 63  algrind --tool=c
7390: 61 63 68 65 67 72 69 6e 64 22 20 2a 2f 0a 63 68  achegrind" */.ch
73a0: 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70  eck_for_interrup
73b0: 74 3a 0a 20 20 69 66 28 20 64 62 2d 3e 75 31 2e  t:.  if( db->u1.
73c0: 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 20  isInterrupted ) 
73d0: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
73e0: 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 23 69 66  o_interrupt;.#if
73f0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
7400: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
7410: 43 4b 0a 20 20 2f 2a 20 43 61 6c 6c 20 74 68 65  CK.  /* Call the
7420: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
7430: 63 6b 20 69 66 20 69 74 20 69 73 20 63 6f 6e 66  ck if it is conf
7440: 69 67 75 72 65 64 20 61 6e 64 20 74 68 65 20 72  igured and the r
7450: 65 71 75 69 72 65 64 20 6e 75 6d 62 65 72 0a 20  equired number. 
7460: 20 2a 2a 20 6f 66 20 56 44 42 45 20 6f 70 73 20   ** of VDBE ops 
7470: 68 61 76 65 20 62 65 65 6e 20 65 78 65 63 75 74  have been execut
7480: 65 64 20 28 65 69 74 68 65 72 20 73 69 6e 63 65  ed (either since
7490: 20 74 68 69 73 20 69 6e 76 6f 63 61 74 69 6f 6e   this invocation
74a0: 20 6f 66 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33   of.  ** sqlite3
74b0: 56 64 62 65 45 78 65 63 28 29 20 6f 72 20 73 69  VdbeExec() or si
74c0: 6e 63 65 20 6c 61 73 74 20 74 69 6d 65 20 74 68  nce last time th
74d0: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
74e0: 61 63 6b 20 77 61 73 20 63 61 6c 6c 65 64 29 2e  ack was called).
74f0: 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 70 72 6f  .  ** If the pro
7500: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 72  gress callback r
7510: 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  eturns non-zero,
7520: 20 65 78 69 74 20 74 68 65 20 76 69 72 74 75 61   exit the virtua
7530: 6c 20 6d 61 63 68 69 6e 65 20 77 69 74 68 0a 20  l machine with. 
7540: 20 2a 2a 20 61 20 72 65 74 75 72 6e 20 63 6f 64   ** a return cod
7550: 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 2e 0a  e SQLITE_ABORT..
7560: 20 20 2a 2f 0a 20 20 77 68 69 6c 65 28 20 6e 56    */.  while( nV
7570: 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73  mStep>=nProgress
7580: 4c 69 6d 69 74 20 26 26 20 64 62 2d 3e 78 50 72  Limit && db->xPr
7590: 6f 67 72 65 73 73 21 3d 30 20 29 7b 0a 20 20 20  ogress!=0 ){.   
75a0: 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 50 72   assert( db->nPr
75b0: 6f 67 72 65 73 73 4f 70 73 21 3d 30 20 29 3b 0a  ogressOps!=0 );.
75c0: 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d      nProgressLim
75d0: 69 74 20 2b 3d 20 64 62 2d 3e 6e 50 72 6f 67 72  it += db->nProgr
75e0: 65 73 73 4f 70 73 3b 0a 20 20 20 20 69 66 28 20  essOps;.    if( 
75f0: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62  db->xProgress(db
7600: 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29 20  ->pProgressArg) 
7610: 29 7b 0a 20 20 20 20 20 20 6e 50 72 6f 67 72 65  ){.      nProgre
7620: 73 73 4c 69 6d 69 74 20 3d 20 30 78 66 66 66 66  ssLimit = 0xffff
7630: 66 66 66 66 3b 0a 20 20 20 20 20 20 72 63 20 3d  ffff;.      rc =
7640: 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50   SQLITE_INTERRUP
7650: 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  T;.      goto ab
7660: 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
7670: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64  ;.    }.  }.#end
7680: 69 66 0a 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d  if.  .  break;.}
7690: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f  ../* Opcode:  Go
76a0: 73 75 62 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  sub P1 P2 * * *.
76b0: 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  **.** Write the 
76c0: 63 75 72 72 65 6e 74 20 61 64 64 72 65 73 73 20  current address 
76d0: 6f 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 31  onto register P1
76e0: 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20 6a 75 6d  .** and then jum
76f0: 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e  p to address P2.
7700: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 73 75  .*/.case OP_Gosu
7710: 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  b: {            
7720: 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73  /* jump */.  ass
7730: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26  ert( pOp->p1>0 &
7740: 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e  & pOp->p1<=(p->n
7750: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
7760: 6f 72 29 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20  or) );.  pIn1 = 
7770: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
7780: 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65    assert( VdbeMe
7790: 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d  mDynamic(pIn1)==
77a0: 30 20 29 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  0 );.  memAboutT
77b0: 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29  oChange(p, pIn1)
77c0: 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  ;.  pIn1->flags 
77d0: 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e  = MEM_Int;.  pIn
77e0: 31 2d 3e 75 2e 69 20 3d 20 28 69 6e 74 29 28 70  1->u.i = (int)(p
77f0: 4f 70 2d 61 4f 70 29 3b 0a 20 20 52 45 47 49 53  Op-aOp);.  REGIS
7800: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
7810: 31 2c 20 70 49 6e 31 29 3b 0a 0a 20 20 2f 2a 20  1, pIn1);..  /* 
7820: 4d 6f 73 74 20 6a 75 6d 70 20 6f 70 65 72 61 74  Most jump operat
7830: 69 6f 6e 73 20 64 6f 20 61 20 67 6f 74 6f 20 74  ions do a goto t
7840: 6f 20 74 68 69 73 20 73 70 6f 74 20 69 6e 20 6f  o this spot in o
7850: 72 64 65 72 20 74 6f 20 75 70 64 61 74 65 0a 20  rder to update. 
7860: 20 2a 2a 20 74 68 65 20 70 4f 70 20 70 6f 69 6e   ** the pOp poin
7870: 74 65 72 2e 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f  ter. */.jump_to_
7880: 70 32 3a 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70  p2:.  pOp = &aOp
7890: 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20  [pOp->p2 - 1];. 
78a0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
78b0: 63 6f 64 65 3a 20 20 52 65 74 75 72 6e 20 50 31  code:  Return P1
78c0: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a   * * * *.**.** J
78d0: 75 6d 70 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ump to the next 
78e0: 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 66 74 65  instruction afte
78f0: 72 20 74 68 65 20 61 64 64 72 65 73 73 20 69 6e  r the address in
7900: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 41   register P1.  A
7910: 66 74 65 72 0a 2a 2a 20 74 68 65 20 6a 75 6d 70  fter.** the jump
7920: 2c 20 72 65 67 69 73 74 65 72 20 50 31 20 62 65  , register P1 be
7930: 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65 64 2e  comes undefined.
7940: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 74 75  .*/.case OP_Retu
7950: 72 6e 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  rn: {           
7960: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  /* in1 */.  pIn1
7970: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
7980: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
7990: 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e  1->flags==MEM_In
79a0: 74 20 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61 4f  t );.  pOp = &aO
79b0: 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20  p[pIn1->u.i];.  
79c0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pIn1->flags = ME
79d0: 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62  M_Undefined;.  b
79e0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
79f0: 64 65 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e  de: InitCoroutin
7a00: 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
7a10: 2a 0a 2a 2a 20 53 65 74 20 75 70 20 72 65 67 69  *.** Set up regi
7a20: 73 74 65 72 20 50 31 20 73 6f 20 74 68 61 74 20  ster P1 so that 
7a30: 69 74 20 77 69 6c 6c 20 59 69 65 6c 64 20 74 6f  it will Yield to
7a40: 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 0a 2a   the coroutine.*
7a50: 2a 20 6c 6f 63 61 74 65 64 20 61 74 20 61 64 64  * located at add
7a60: 72 65 73 73 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49  ress P3..**.** I
7a70: 66 20 50 32 21 3d 30 20 74 68 65 6e 20 74 68 65  f P2!=0 then the
7a80: 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65   coroutine imple
7a90: 6d 65 6e 74 61 74 69 6f 6e 20 69 6d 6d 65 64 69  mentation immedi
7aa0: 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 0a 2a 2a  ately follows.**
7ab0: 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 53   this opcode.  S
7ac0: 6f 20 6a 75 6d 70 20 6f 76 65 72 20 74 68 65 20  o jump over the 
7ad0: 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d  coroutine implem
7ae0: 65 6e 74 61 74 69 6f 6e 20 74 6f 0a 2a 2a 20 61  entation to.** a
7af0: 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 0a 2a 2a  ddress P2..**.**
7b00: 20 53 65 65 20 61 6c 73 6f 3a 20 45 6e 64 43 6f   See also: EndCo
7b10: 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20  routine.*/.case 
7b20: 4f 50 5f 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65  OP_InitCoroutine
7b30: 3a 20 7b 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20  : {     /* jump 
7b40: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
7b50: 2d 3e 70 31 3e 30 20 26 26 20 20 70 4f 70 2d 3e  ->p1>0 &&  pOp->
7b60: 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p1<=(p->nMem+1 -
7b70: 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
7b80: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
7b90: 32 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c  2>=0 && pOp->p2<
7ba0: 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 61 73 73 65  p->nOp );.  asse
7bb0: 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 26  rt( pOp->p3>=0 &
7bc0: 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e 4f 70  & pOp->p3<p->nOp
7bd0: 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d   );.  pOut = &aM
7be0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
7bf0: 73 73 65 72 74 28 20 21 56 64 62 65 4d 65 6d 44  ssert( !VdbeMemD
7c00: 79 6e 61 6d 69 63 28 70 4f 75 74 29 20 29 3b 0a  ynamic(pOut) );.
7c10: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f    pOut->u.i = pO
7c20: 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 70 4f 75  p->p3 - 1;.  pOu
7c30: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
7c40: 6e 74 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  nt;.  if( pOp->p
7c50: 32 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  2 ) goto jump_to
7c60: 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  _p2;.  break;.}.
7c70: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 45 6e 64  ./* Opcode:  End
7c80: 43 6f 72 6f 75 74 69 6e 65 20 50 31 20 2a 20 2a  Coroutine P1 * *
7c90: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69   * *.**.** The i
7ca0: 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 74 68  nstruction at th
7cb0: 65 20 61 64 64 72 65 73 73 20 69 6e 20 72 65 67  e address in reg
7cc0: 69 73 74 65 72 20 50 31 20 69 73 20 61 20 59 69  ister P1 is a Yi
7cd0: 65 6c 64 2e 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  eld..** Jump to 
7ce0: 74 68 65 20 50 32 20 70 61 72 61 6d 65 74 65 72  the P2 parameter
7cf0: 20 6f 66 20 74 68 61 74 20 59 69 65 6c 64 2e 0a   of that Yield..
7d00: 2a 2a 20 41 66 74 65 72 20 74 68 65 20 6a 75 6d  ** After the jum
7d10: 70 2c 20 72 65 67 69 73 74 65 72 20 50 31 20 62  p, register P1 b
7d20: 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65 64  ecomes undefined
7d30: 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
7d40: 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 0a  : InitCoroutine.
7d50: 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6e 64 43 6f  */.case OP_EndCo
7d60: 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20 20 20  routine: {      
7d70: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
7d80: 20 56 64 62 65 4f 70 20 2a 70 43 61 6c 6c 65 72   VdbeOp *pCaller
7d90: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
7da0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
7db0: 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
7dc0: 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61  ==MEM_Int );.  a
7dd0: 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 75 2e 69  ssert( pIn1->u.i
7de0: 3e 3d 30 20 26 26 20 70 49 6e 31 2d 3e 75 2e 69  >=0 && pIn1->u.i
7df0: 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 43 61  <p->nOp );.  pCa
7e00: 6c 6c 65 72 20 3d 20 26 61 4f 70 5b 70 49 6e 31  ller = &aOp[pIn1
7e10: 2d 3e 75 2e 69 5d 3b 0a 20 20 61 73 73 65 72 74  ->u.i];.  assert
7e20: 28 20 70 43 61 6c 6c 65 72 2d 3e 6f 70 63 6f 64  ( pCaller->opcod
7e30: 65 3d 3d 4f 50 5f 59 69 65 6c 64 20 29 3b 0a 20  e==OP_Yield );. 
7e40: 20 61 73 73 65 72 74 28 20 70 43 61 6c 6c 65 72   assert( pCaller
7e50: 2d 3e 70 32 3e 3d 30 20 26 26 20 70 43 61 6c 6c  ->p2>=0 && pCall
7e60: 65 72 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b  er->p2<p->nOp );
7e70: 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 43  .  pOp = &aOp[pC
7e80: 61 6c 6c 65 72 2d 3e 70 32 20 2d 20 31 5d 3b 0a  aller->p2 - 1];.
7e90: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20    pIn1->flags = 
7ea0: 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20  MEM_Undefined;. 
7eb0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
7ec0: 63 6f 64 65 3a 20 20 59 69 65 6c 64 20 50 31 20  code:  Yield P1 
7ed0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53  P2 * * *.**.** S
7ee0: 77 61 70 20 74 68 65 20 70 72 6f 67 72 61 6d 20  wap the program 
7ef0: 63 6f 75 6e 74 65 72 20 77 69 74 68 20 74 68 65  counter with the
7f00: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
7f10: 65 72 20 50 31 2e 20 20 54 68 69 73 0a 2a 2a 20  er P1.  This.** 
7f20: 68 61 73 20 74 68 65 20 65 66 66 65 63 74 20 6f  has the effect o
7f30: 66 20 79 69 65 6c 64 69 6e 67 20 74 6f 20 61 20  f yielding to a 
7f40: 63 6f 72 6f 75 74 69 6e 65 2e 0a 2a 2a 0a 2a 2a  coroutine..**.**
7f50: 20 49 66 20 74 68 65 20 63 6f 72 6f 75 74 69 6e   If the coroutin
7f60: 65 20 74 68 61 74 20 69 73 20 6c 61 75 6e 63 68  e that is launch
7f70: 65 64 20 62 79 20 74 68 69 73 20 69 6e 73 74 72  ed by this instr
7f80: 75 63 74 69 6f 6e 20 65 6e 64 73 20 77 69 74 68  uction ends with
7f90: 0a 2a 2a 20 59 69 65 6c 64 20 6f 72 20 52 65 74  .** Yield or Ret
7fa0: 75 72 6e 20 74 68 65 6e 20 63 6f 6e 74 69 6e 75  urn then continu
7fb0: 65 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  e to the next in
7fc0: 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20  struction.  But 
7fd0: 69 66 0a 2a 2a 20 74 68 65 20 63 6f 72 6f 75 74  if.** the corout
7fe0: 69 6e 65 20 6c 61 75 6e 63 68 65 64 20 62 79 20  ine launched by 
7ff0: 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
8000: 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20 45 6e   ends with.** En
8010: 64 43 6f 72 6f 75 74 69 6e 65 2c 20 74 68 65 6e  dCoroutine, then
8020: 20 6a 75 6d 70 20 74 6f 20 50 32 20 72 61 74 68   jump to P2 rath
8030: 65 72 20 74 68 61 6e 20 63 6f 6e 74 69 6e 75 69  er than continui
8040: 6e 67 20 77 69 74 68 20 74 68 65 0a 2a 2a 20 6e  ng with the.** n
8050: 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
8060: 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
8070: 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 0a 2a   InitCoroutine.*
8080: 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c 64 3a  /.case OP_Yield:
8090: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
80a0: 20 69 6e 31 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20   in1, jump */.  
80b0: 69 6e 74 20 70 63 44 65 73 74 3b 0a 20 20 70 49  int pcDest;.  pI
80c0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
80d0: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 56  p1];.  assert( V
80e0: 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49  dbeMemDynamic(pI
80f0: 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31  n1)==0 );.  pIn1
8100: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
8110: 74 3b 0a 20 20 70 63 44 65 73 74 20 3d 20 28 69  t;.  pcDest = (i
8120: 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20  nt)pIn1->u.i;.  
8130: 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 28 69 6e 74  pIn1->u.i = (int
8140: 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20  )(pOp - aOp);.  
8150: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
8160: 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20  Op->p1, pIn1);. 
8170: 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63 44 65   pOp = &aOp[pcDe
8180: 73 74 5d 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  st];.  break;.}.
8190: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c  ./* Opcode:  Hal
81a0: 74 49 66 4e 75 6c 6c 20 20 50 31 20 50 32 20 50  tIfNull  P1 P2 P
81b0: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
81c0: 73 69 73 3a 20 69 66 20 72 5b 50 33 5d 3d 6e 75  sis: if r[P3]=nu
81d0: 6c 6c 20 68 61 6c 74 0a 2a 2a 0a 2a 2a 20 43 68  ll halt.**.** Ch
81e0: 65 63 6b 20 74 68 65 20 76 61 6c 75 65 20 69 6e  eck the value in
81f0: 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 20 49   register P3.  I
8200: 66 20 69 74 20 69 73 20 4e 55 4c 4c 20 74 68 65  f it is NULL the
8210: 6e 20 48 61 6c 74 20 75 73 69 6e 67 0a 2a 2a 20  n Halt using.** 
8220: 70 61 72 61 6d 65 74 65 72 20 50 31 2c 20 50 32  parameter P1, P2
8230: 2c 20 61 6e 64 20 50 34 20 61 73 20 69 66 20 74  , and P4 as if t
8240: 68 69 73 20 77 65 72 65 20 61 20 48 61 6c 74 20  his were a Halt 
8250: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66  instruction.  If
8260: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e   the.** value in
8270: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
8280: 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74  not NULL, then t
8290: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61  his routine is a
82a0: 20 6e 6f 2d 6f 70 2e 0a 2a 2a 20 54 68 65 20 50   no-op..** The P
82b0: 35 20 70 61 72 61 6d 65 74 65 72 20 73 68 6f 75  5 parameter shou
82c0: 6c 64 20 62 65 20 31 2e 0a 2a 2f 0a 63 61 73 65  ld be 1..*/.case
82d0: 20 4f 50 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a 20   OP_HaltIfNull: 
82e0: 7b 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f  {      /* in3 */
82f0: 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
8300: 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66  pOp->p3];.#ifdef
8310: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
8320: 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f  if( pOp->p2==OE_
8330: 41 62 6f 72 74 20 29 7b 20 73 71 6c 69 74 65 33  Abort ){ sqlite3
8340: 56 64 62 65 41 73 73 65 72 74 41 62 6f 72 74 61  VdbeAssertAborta
8350: 62 6c 65 28 70 29 3b 20 7d 0a 23 65 6e 64 69 66  ble(p); }.#endif
8360: 0a 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c  .  if( (pIn3->fl
8370: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
8380: 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a  =0 ) break;.  /*
8390: 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   Fall through in
83a0: 74 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a 7d 0a  to OP_Halt */.}.
83b0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c  ./* Opcode:  Hal
83c0: 74 20 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a  t P1 P2 * P4 P5.
83d0: 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65 64  **.** Exit immed
83e0: 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70 65  iately.  All ope
83f0: 6e 20 63 75 72 73 6f 72 73 2c 20 65 74 63 20 61  n cursors, etc a
8400: 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20 61 75 74  re closed.** aut
8410: 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a  omatically..**.*
8420: 2a 20 50 31 20 69 73 20 74 68 65 20 72 65 73 75  * P1 is the resu
8430: 6c 74 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64  lt code returned
8440: 20 62 79 20 73 71 6c 69 74 65 33 5f 65 78 65 63   by sqlite3_exec
8450: 28 29 2c 20 73 71 6c 69 74 65 33 5f 72 65 73 65  (), sqlite3_rese
8460: 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69 74  t(),.** or sqlit
8470: 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 2e 20 20  e3_finalize().  
8480: 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20 68 61 6c  For a normal hal
8490: 74 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20 62  t, this should b
84a0: 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28 30 29 2e  e SQLITE_OK (0).
84b0: 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72 73 2c 20  .** For errors, 
84c0: 69 74 20 63 61 6e 20 62 65 20 73 6f 6d 65 20 6f  it can be some o
84d0: 74 68 65 72 20 76 61 6c 75 65 2e 20 20 49 66 20  ther value.  If 
84e0: 50 31 21 3d 30 20 74 68 65 6e 20 50 32 20 77 69  P1!=0 then P2 wi
84f0: 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20  ll determine.** 
8500: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
8510: 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 63  o rollback the c
8520: 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69  urrent transacti
8530: 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72 6f 6c 6c  on.  Do not roll
8540: 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d 4f  back.** if P2==O
8550: 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68 65 20 72  E_Fail. Do the r
8560: 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32 3d 3d 4f  ollback if P2==O
8570: 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20 49 66 20  E_Rollback.  If 
8580: 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a 2a  P2==OE_Abort,.**
8590: 20 74 68 65 6e 20 62 61 63 6b 20 6f 75 74 20 61   then back out a
85a0: 6c 6c 20 63 68 61 6e 67 65 73 20 74 68 61 74 20  ll changes that 
85b0: 68 61 76 65 20 6f 63 63 75 72 72 65 64 20 64 75  have occurred du
85c0: 72 69 6e 67 20 74 68 69 73 20 65 78 65 63 75 74  ring this execut
85d0: 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 56 44  ion of the.** VD
85e0: 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 72  BE, but do not r
85f0: 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e  ollback the tran
8600: 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20  saction. .**.** 
8610: 49 66 20 50 34 20 69 73 20 6e 6f 74 20 6e 75 6c  If P4 is not nul
8620: 6c 20 74 68 65 6e 20 69 74 20 69 73 20 61 6e 20  l then it is an 
8630: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74  error message st
8640: 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69  ring..**.** P5 i
8650: 73 20 61 20 76 61 6c 75 65 20 62 65 74 77 65 65  s a value betwee
8660: 6e 20 30 20 61 6e 64 20 34 2c 20 69 6e 63 6c 75  n 0 and 4, inclu
8670: 73 69 76 65 2c 20 74 68 61 74 20 6d 6f 64 69 66  sive, that modif
8680: 69 65 73 20 74 68 65 20 50 34 20 73 74 72 69 6e  ies the P4 strin
8690: 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 30 3a 20 20  g..**.**    0:  
86a0: 28 6e 6f 20 63 68 61 6e 67 65 29 0a 2a 2a 20 20  (no change).**  
86b0: 20 20 31 3a 20 20 4e 4f 54 20 4e 55 4c 4c 20 63    1:  NOT NULL c
86c0: 6f 6e 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a  ontraint failed:
86d0: 20 50 34 0a 2a 2a 20 20 20 20 32 3a 20 20 55 4e   P4.**    2:  UN
86e0: 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
86f0: 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20  failed: P4.**   
8700: 20 33 3a 20 20 43 48 45 43 4b 20 63 6f 6e 73 74   3:  CHECK const
8710: 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34  raint failed: P4
8720: 0a 2a 2a 20 20 20 20 34 3a 20 20 46 4f 52 45 49  .**    4:  FOREI
8730: 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e  GN KEY constrain
8740: 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 0a  t failed: P4.**.
8750: 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20  ** If P5 is not 
8760: 7a 65 72 6f 20 61 6e 64 20 50 34 20 69 73 20 4e  zero and P4 is N
8770: 55 4c 4c 2c 20 74 68 65 6e 20 65 76 65 72 79 74  ULL, then everyt
8780: 68 69 6e 67 20 61 66 74 65 72 20 74 68 65 20 22  hing after the "
8790: 3a 22 20 69 73 0a 2a 2a 20 6f 6d 69 74 74 65 64  :" is.** omitted
87a0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 69 73  ..**.** There is
87b0: 20 61 6e 20 69 6d 70 6c 69 65 64 20 22 48 61 6c   an implied "Hal
87c0: 74 20 30 20 30 20 30 22 20 69 6e 73 74 72 75 63  t 0 0 0" instruc
87d0: 74 69 6f 6e 20 69 6e 73 65 72 74 65 64 20 61 74  tion inserted at
87e0: 20 74 68 65 20 76 65 72 79 20 65 6e 64 20 6f 66   the very end of
87f0: 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f 67 72 61  .** every progra
8800: 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20 70 61  m.  So a jump pa
8810: 73 74 20 74 68 65 20 6c 61 73 74 20 69 6e 73 74  st the last inst
8820: 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 70  ruction of the p
8830: 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74 68 65  rogram.** is the
8840: 20 73 61 6d 65 20 61 73 20 65 78 65 63 75 74 69   same as executi
8850: 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65  ng Halt..*/.case
8860: 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20 20 56 64   OP_Halt: {.  Vd
8870: 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
8880: 0a 20 20 69 6e 74 20 70 63 78 3b 0a 0a 20 20 70  .  int pcx;..  p
8890: 63 78 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d  cx = (int)(pOp -
88a0: 20 61 4f 70 29 3b 0a 23 69 66 64 65 66 20 53 51   aOp);.#ifdef SQ
88b0: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28  LITE_DEBUG.  if(
88c0: 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 41 62 6f   pOp->p2==OE_Abo
88d0: 72 74 20 29 7b 20 73 71 6c 69 74 65 33 56 64 62  rt ){ sqlite3Vdb
88e0: 65 41 73 73 65 72 74 41 62 6f 72 74 61 62 6c 65  eAssertAbortable
88f0: 28 70 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20  (p); }.#endif.  
8900: 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c  if( pOp->p1==SQL
8910: 49 54 45 5f 4f 4b 20 26 26 20 70 2d 3e 70 46 72  ITE_OK && p->pFr
8920: 61 6d 65 20 29 7b 0a 20 20 20 20 2f 2a 20 48 61  ame ){.    /* Ha
8930: 6c 74 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  lt the sub-progr
8940: 61 6d 2e 20 52 65 74 75 72 6e 20 63 6f 6e 74 72  am. Return contr
8950: 6f 6c 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74  ol to the parent
8960: 20 66 72 61 6d 65 2e 20 2a 2f 0a 20 20 20 20 70   frame. */.    p
8970: 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d  Frame = p->pFram
8980: 65 3b 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d 65  e;.    p->pFrame
8990: 20 3d 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65   = pFrame->pPare
89a0: 6e 74 3b 0a 20 20 20 20 70 2d 3e 6e 46 72 61 6d  nt;.    p->nFram
89b0: 65 2d 2d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  e--;.    sqlite3
89c0: 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 64  VdbeSetChanges(d
89d0: 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a  b, p->nChange);.
89e0: 20 20 20 20 70 63 78 20 3d 20 73 71 6c 69 74 65      pcx = sqlite
89f0: 33 56 64 62 65 46 72 61 6d 65 52 65 73 74 6f 72  3VdbeFrameRestor
8a00: 65 28 70 46 72 61 6d 65 29 3b 0a 20 20 20 20 69  e(pFrame);.    i
8a10: 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 49  f( pOp->p2==OE_I
8a20: 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20 20 2f  gnore ){.      /
8a30: 2a 20 49 6e 73 74 72 75 63 74 69 6f 6e 20 70 63  * Instruction pc
8a40: 78 20 69 73 20 74 68 65 20 4f 50 5f 50 72 6f 67  x is the OP_Prog
8a50: 72 61 6d 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ram that invoked
8a60: 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
8a70: 20 0a 20 20 20 20 20 20 2a 2a 20 63 75 72 72 65   .      ** curre
8a80: 6e 74 6c 79 20 62 65 69 6e 67 20 68 61 6c 74 65  ntly being halte
8a90: 64 2e 20 49 66 20 74 68 65 20 70 32 20 69 6e 73  d. If the p2 ins
8aa0: 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 69 73  truction of this
8ab0: 20 4f 50 5f 48 61 6c 74 0a 20 20 20 20 20 20 2a   OP_Halt.      *
8ac0: 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  * instruction is
8ad0: 20 73 65 74 20 74 6f 20 4f 45 5f 49 67 6e 6f 72   set to OE_Ignor
8ae0: 65 2c 20 74 68 65 6e 20 74 68 65 20 73 75 62 2d  e, then the sub-
8af0: 70 72 6f 67 72 61 6d 20 69 73 20 74 68 72 6f 77  program is throw
8b00: 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 61 6e 20  ing.      ** an 
8b10: 49 47 4e 4f 52 45 20 65 78 63 65 70 74 69 6f 6e  IGNORE exception
8b20: 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 6a  . In this case j
8b30: 75 6d 70 20 74 6f 20 74 68 65 20 61 64 64 72 65  ump to the addre
8b40: 73 73 20 73 70 65 63 69 66 69 65 64 0a 20 20 20  ss specified.   
8b50: 20 20 20 2a 2a 20 61 73 20 74 68 65 20 70 32 20     ** as the p2 
8b60: 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 4f  of the calling O
8b70: 50 5f 50 72 6f 67 72 61 6d 2e 20 20 2a 2f 0a 20  P_Program.  */. 
8b80: 20 20 20 20 20 70 63 78 20 3d 20 70 2d 3e 61 4f       pcx = p->aO
8b90: 70 5b 70 63 78 5d 2e 70 32 2d 31 3b 0a 20 20 20  p[pcx].p2-1;.   
8ba0: 20 7d 0a 20 20 20 20 61 4f 70 20 3d 20 70 2d 3e   }.    aOp = p->
8bb0: 61 4f 70 3b 0a 20 20 20 20 61 4d 65 6d 20 3d 20  aOp;.    aMem = 
8bc0: 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 4f 70  p->aMem;.    pOp
8bd0: 20 3d 20 26 61 4f 70 5b 70 63 78 5d 3b 0a 20 20   = &aOp[pcx];.  
8be0: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70    break;.  }.  p
8bf0: 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  ->rc = pOp->p1;.
8c00: 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e    p->errorAction
8c10: 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 32 3b 0a   = (u8)pOp->p2;.
8c20: 20 20 70 2d 3e 70 63 20 3d 20 70 63 78 3b 0a 20    p->pc = pcx;. 
8c30: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
8c40: 3c 3d 34 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e  <=4 );.  if( p->
8c50: 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20 70 4f  rc ){.    if( pO
8c60: 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20 20 73  p->p5 ){.      s
8c70: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
8c80: 20 2a 20 63 6f 6e 73 74 20 61 7a 54 79 70 65 5b   * const azType[
8c90: 5d 20 3d 20 7b 20 22 4e 4f 54 20 4e 55 4c 4c 22  ] = { "NOT NULL"
8ca0: 2c 20 22 55 4e 49 51 55 45 22 2c 20 22 43 48 45  , "UNIQUE", "CHE
8cb0: 43 4b 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  CK",.           
8cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ce0: 20 20 22 46 4f 52 45 49 47 4e 20 4b 45 59 22 20    "FOREIGN KEY" 
8cf0: 7d 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73  };.      testcas
8d00: 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b  e( pOp->p5==1 );
8d10: 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
8d20: 20 70 4f 70 2d 3e 70 35 3d 3d 32 20 29 3b 0a 20   pOp->p5==2 );. 
8d30: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
8d40: 4f 70 2d 3e 70 35 3d 3d 33 20 29 3b 0a 20 20 20  Op->p5==3 );.   
8d50: 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70     testcase( pOp
8d60: 2d 3e 70 35 3d 3d 34 20 29 3b 0a 20 20 20 20 20  ->p5==4 );.     
8d70: 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
8d80: 72 28 70 2c 20 22 25 73 20 63 6f 6e 73 74 72 61  r(p, "%s constra
8d90: 69 6e 74 20 66 61 69 6c 65 64 22 2c 20 61 7a 54  int failed", azT
8da0: 79 70 65 5b 70 4f 70 2d 3e 70 35 2d 31 5d 29 3b  ype[pOp->p5-1]);
8db0: 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
8dc0: 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20 20 20  p4.z ){.        
8dd0: 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c  p->zErrMsg = sql
8de0: 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 20  ite3MPrintf(db, 
8df0: 22 25 7a 3a 20 25 73 22 2c 20 70 2d 3e 7a 45 72  "%z: %s", p->zEr
8e00: 72 4d 73 67 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  rMsg, pOp->p4.z)
8e10: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
8e20: 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  lse{.      sqlit
8e30: 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
8e40: 25 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  %s", pOp->p4.z);
8e50: 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
8e60: 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c 20  e3_log(pOp->p1, 
8e70: 22 61 62 6f 72 74 20 61 74 20 25 64 20 69 6e 20  "abort at %d in 
8e80: 5b 25 73 5d 3a 20 25 73 22 2c 20 70 63 78 2c 20  [%s]: %s", pcx, 
8e90: 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72  p->zSql, p->zErr
8ea0: 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  Msg);.  }.  rc =
8eb0: 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
8ec0: 28 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72  (p);.  assert( r
8ed0: 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 7c  c==SQLITE_BUSY |
8ee0: 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  | rc==SQLITE_OK 
8ef0: 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52  || rc==SQLITE_ER
8f00: 52 4f 52 20 29 3b 0a 20 20 69 66 28 20 72 63 3d  ROR );.  if( rc=
8f10: 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
8f20: 20 20 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49      p->rc = SQLI
8f30: 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65  TE_BUSY;.  }else
8f40: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  {.    assert( rc
8f50: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28  ==SQLITE_OK || (
8f60: 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53 51 4c  p->rc&0xff)==SQL
8f70: 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 29  ITE_CONSTRAINT )
8f80: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  ;.    assert( rc
8f90: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 64  ==SQLITE_OK || d
8fa0: 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
8fb0: 3e 30 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72  >0 || db->nDefer
8fc0: 72 65 64 49 6d 6d 43 6f 6e 73 3e 30 20 29 3b 0a  redImmCons>0 );.
8fd0: 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 20 3f      rc = p->rc ?
8fe0: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a 20   SQLITE_ERROR : 
8ff0: 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d  SQLITE_DONE;.  }
9000: 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74  .  goto vdbe_ret
9010: 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  urn;.}../* Opcod
9020: 65 3a 20 49 6e 74 65 67 65 72 20 50 31 20 50 32  e: Integer P1 P2
9030: 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
9040: 69 73 3a 20 72 5b 50 32 5d 3d 50 31 0a 2a 2a 0a  is: r[P2]=P1.**.
9050: 2a 2a 20 54 68 65 20 33 32 2d 62 69 74 20 69 6e  ** The 32-bit in
9060: 74 65 67 65 72 20 76 61 6c 75 65 20 50 31 20 69  teger value P1 i
9070: 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 72  s written into r
9080: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
9090: 61 73 65 20 4f 50 5f 49 6e 74 65 67 65 72 3a 20  ase OP_Integer: 
90a0: 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74  {         /* out
90b0: 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75  2 */.  pOut = ou
90c0: 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
90d0: 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  pOp);.  pOut->u.
90e0: 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62  i = pOp->p1;.  b
90f0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
9100: 64 65 3a 20 49 6e 74 36 34 20 2a 20 50 32 20 2a  de: Int64 * P2 *
9110: 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
9120: 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a  s: r[P2]=P4.**.*
9130: 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
9140: 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20 69 6e  r to a 64-bit in
9150: 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20  teger value..** 
9160: 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65  Write that value
9170: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
9180: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  2..*/.case OP_In
9190: 74 36 34 3a 20 7b 20 20 20 20 20 20 20 20 20 20  t64: {          
91a0: 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f   /* out2 */.  pO
91b0: 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
91c0: 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61  ase(p, pOp);.  a
91d0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70  ssert( pOp->p4.p
91e0: 49 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74  I64!=0 );.  pOut
91f0: 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70 34  ->u.i = *pOp->p4
9200: 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a  .pI64;.  break;.
9210: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
9220: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
9230: 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  POINT./* Opcode:
9240: 20 52 65 61 6c 20 2a 20 50 32 20 2a 20 50 34 20   Real * P2 * P4 
9250: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
9260: 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34  [P2]=P4.**.** P4
9270: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
9280: 20 61 20 36 34 2d 62 69 74 20 66 6c 6f 61 74 69   a 64-bit floati
9290: 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a  ng point value..
92a0: 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20 76 61  ** Write that va
92b0: 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  lue into registe
92c0: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
92d0: 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20  _Real: {        
92e0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
92f0: 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 20 2a 2f  K_FLOAT, out2 */
9300: 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
9310: 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
9320: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
9330: 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 61 73  = MEM_Real;.  as
9340: 73 65 72 74 28 20 21 73 71 6c 69 74 65 33 49 73  sert( !sqlite3Is
9350: 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70 52 65  NaN(*pOp->p4.pRe
9360: 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  al) );.  pOut->u
9370: 2e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 52  .r = *pOp->p4.pR
9380: 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  eal;.  break;.}.
9390: 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64  #endif../* Opcod
93a0: 65 3a 20 53 74 72 69 6e 67 38 20 2a 20 50 32 20  e: String8 * P2 
93b0: 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
93c0: 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27 0a 2a  is: r[P2]='P4'.*
93d0: 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20 74  *.** P4 points t
93e0: 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74  o a nul terminat
93f0: 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 2e  ed UTF-8 string.
9400: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
9410: 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a 20  transformed .** 
9420: 69 6e 74 6f 20 61 20 53 74 72 69 6e 67 20 6f 70  into a String op
9430: 63 6f 64 65 20 62 65 66 6f 72 65 20 69 74 20 69  code before it i
9440: 73 20 65 78 65 63 75 74 65 64 20 66 6f 72 20 74  s executed for t
9450: 68 65 20 66 69 72 73 74 20 74 69 6d 65 2e 20 20  he first time.  
9460: 44 75 72 69 6e 67 0a 2a 2a 20 74 68 69 73 20 74  During.** this t
9470: 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 2c 20 74  ransformation, t
9480: 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 73 74 72  he length of str
9490: 69 6e 67 20 50 34 20 69 73 20 63 6f 6d 70 75 74  ing P4 is comput
94a0: 65 64 20 61 6e 64 20 73 74 6f 72 65 64 0a 2a 2a  ed and stored.**
94b0: 20 61 73 20 74 68 65 20 50 31 20 70 61 72 61 6d   as the P1 param
94c0: 65 74 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  eter..*/.case OP
94d0: 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20 20 20  _String8: {     
94e0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
94f0: 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32 20 2a  K_STRING, out2 *
9500: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
9510: 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f  >p4.z!=0 );.  pO
9520: 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
9530: 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
9540: 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f  Op->opcode = OP_
9550: 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70  String;.  pOp->p
9560: 31 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65  1 = sqlite3Strle
9570: 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  n30(pOp->p4.z);.
9580: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
9590: 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 69 66 28  OMIT_UTF16.  if(
95a0: 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54   encoding!=SQLIT
95b0: 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20 72 63  E_UTF8 ){.    rc
95c0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
95d0: 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f  mSetStr(pOut, pO
95e0: 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c  p->p4.z, -1, SQL
95f0: 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45  ITE_UTF8, SQLITE
9600: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 61 73  _STATIC);.    as
9610: 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
9620: 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54  _OK || rc==SQLIT
9630: 45 5f 54 4f 4f 42 49 47 20 29 3b 0a 20 20 20 20  E_TOOBIG );.    
9640: 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 74 6f  if( rc ) goto to
9650: 6f 5f 62 69 67 3b 0a 20 20 20 20 69 66 28 20 53  o_big;.    if( S
9660: 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65  QLITE_OK!=sqlite
9670: 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
9680: 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69  ing(pOut, encodi
9690: 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ng) ) goto no_me
96a0: 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  m;.    assert( p
96b0: 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 3e 30 20  Out->szMalloc>0 
96c0: 26 26 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63  && pOut->zMalloc
96d0: 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20 20  ==pOut->z );.   
96e0: 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d   assert( VdbeMem
96f0: 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 3d 3d 30  Dynamic(pOut)==0
9700: 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 73 7a   );.    pOut->sz
9710: 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20  Malloc = 0;.    
9720: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pOut->flags |= M
9730: 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20 20 69  EM_Static;.    i
9740: 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
9750: 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20  P4_DYNAMIC ){.  
9760: 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
9770: 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  e(db, pOp->p4.z)
9780: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d  ;.    }.    pOp-
9790: 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59 4e  >p4type = P4_DYN
97a0: 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  AMIC;.    pOp->p
97b0: 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20  4.z = pOut->z;. 
97c0: 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75     pOp->p1 = pOu
97d0: 74 2d 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  t->n;.  }.#endif
97e0: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64  .  if( pOp->p1>d
97f0: 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
9800: 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
9810: 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
9820: 69 67 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  ig;.  }.  assert
9830: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
9840: 29 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72  );.  /* Fall thr
9850: 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
9860: 20 63 61 73 65 2c 20 4f 50 5f 53 74 72 69 6e 67   case, OP_String
9870: 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f   */.}.  ./* Opco
9880: 64 65 3a 20 53 74 72 69 6e 67 20 50 31 20 50 32  de: String P1 P2
9890: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
98a0: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34  opsis: r[P2]='P4
98b0: 27 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a  ' (len=P1).**.**
98c0: 20 54 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75   The string valu
98d0: 65 20 50 34 20 6f 66 20 6c 65 6e 67 74 68 20 50  e P4 of length P
98e0: 31 20 28 62 79 74 65 73 29 20 69 73 20 73 74 6f  1 (bytes) is sto
98f0: 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
9900: 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 20  P2..**.** If P3 
9910: 69 73 20 6e 6f 74 20 7a 65 72 6f 20 61 6e 64 20  is not zero and 
9920: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
9930: 65 67 69 73 74 65 72 20 50 33 20 69 73 20 65 71  egister P3 is eq
9940: 75 61 6c 20 74 6f 20 50 35 2c 20 74 68 65 6e 0a  ual to P5, then.
9950: 2a 2a 20 74 68 65 20 64 61 74 61 74 79 70 65 20  ** the datatype 
9960: 6f 66 20 74 68 65 20 72 65 67 69 73 74 65 72 20  of the register 
9970: 50 32 20 69 73 20 63 6f 6e 76 65 72 74 65 64 20  P2 is converted 
9980: 74 6f 20 42 4c 4f 42 2e 20 20 54 68 65 20 63 6f  to BLOB.  The co
9990: 6e 74 65 6e 74 20 69 73 0a 2a 2a 20 74 68 65 20  ntent is.** the 
99a0: 73 61 6d 65 20 73 65 71 75 65 6e 63 65 20 6f 66  same sequence of
99b0: 20 62 79 74 65 73 2c 20 69 74 20 69 73 20 6d 65   bytes, it is me
99c0: 72 65 6c 79 20 69 6e 74 65 72 70 72 65 74 65 64  rely interpreted
99d0: 20 61 73 20 61 20 42 4c 4f 42 20 69 6e 73 74 65   as a BLOB inste
99e0: 61 64 0a 2a 2a 20 6f 66 20 61 20 73 74 72 69 6e  ad.** of a strin
99f0: 67 2c 20 61 73 20 69 66 20 69 74 20 68 61 64 20  g, as if it had 
9a00: 62 65 65 6e 20 43 41 53 54 2e 20 20 49 6e 20 6f  been CAST.  In o
9a10: 74 68 65 72 20 77 6f 72 64 73 3a 0a 2a 2a 0a 2a  ther words:.**.*
9a20: 2a 20 69 66 28 20 50 33 21 3d 30 20 61 6e 64 20  * if( P3!=0 and 
9a30: 72 65 67 5b 50 33 5d 3d 3d 50 35 20 29 20 72 65  reg[P3]==P5 ) re
9a40: 67 5b 50 32 5d 20 3a 3d 20 43 41 53 54 28 72 65  g[P2] := CAST(re
9a50: 67 5b 50 32 5d 20 61 73 20 42 4c 4f 42 29 0a 2a  g[P2] as BLOB).*
9a60: 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67  /.case OP_String
9a70: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  : {          /* 
9a80: 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72 74  out2 */.  assert
9a90: 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29  ( pOp->p4.z!=0 )
9aa0: 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
9ab0: 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
9ac0: 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  );.  pOut->flags
9ad0: 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53   = MEM_Str|MEM_S
9ae0: 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a  tatic|MEM_Term;.
9af0: 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d    pOut->z = pOp-
9b00: 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e  >p4.z;.  pOut->n
9b10: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f   = pOp->p1;.  pO
9b20: 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69  ut->enc = encodi
9b30: 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  ng;.  UPDATE_MAX
9b40: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
9b50: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
9b60: 4c 49 4b 45 5f 44 4f 45 53 4e 54 5f 4d 41 54 43  LIKE_DOESNT_MATC
9b70: 48 5f 42 4c 4f 42 53 0a 20 20 69 66 28 20 70 4f  H_BLOBS.  if( pO
9b80: 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20 61  p->p3>0 ){.    a
9b90: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
9ba0: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
9bb0: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
9bc0: 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
9bd0: 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73 65 72  ->p3];.    asser
9be0: 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  t( pIn3->flags &
9bf0: 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20   MEM_Int );.    
9c00: 69 66 28 20 70 49 6e 33 2d 3e 75 2e 69 3d 3d 70  if( pIn3->u.i==p
9c10: 4f 70 2d 3e 70 35 20 29 20 70 4f 75 74 2d 3e 66  Op->p5 ) pOut->f
9c20: 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 7c  lags = MEM_Blob|
9c30: 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54  MEM_Static|MEM_T
9c40: 65 72 6d 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  erm;.  }.#endif.
9c50: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
9c60: 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 50 31 20 50  pcode: Null P1 P
9c70: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
9c80: 70 73 69 73 3a 20 72 5b 50 32 2e 2e 50 33 5d 3d  psis: r[P2..P3]=
9c90: 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  NULL.**.** Write
9ca0: 20 61 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67   a NULL into reg
9cb0: 69 73 74 65 72 73 20 50 32 2e 20 20 49 66 20 50  isters P2.  If P
9cc0: 33 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 50  3 greater than P
9cd0: 32 2c 20 74 68 65 6e 20 61 6c 73 6f 20 77 72 69  2, then also wri
9ce0: 74 65 0a 2a 2a 20 4e 55 4c 4c 20 69 6e 74 6f 20  te.** NULL into 
9cf0: 72 65 67 69 73 74 65 72 20 50 33 20 61 6e 64 20  register P3 and 
9d00: 65 76 65 72 79 20 72 65 67 69 73 74 65 72 20 69  every register i
9d10: 6e 20 62 65 74 77 65 65 6e 20 50 32 20 61 6e 64  n between P2 and
9d20: 20 50 33 2e 20 20 49 66 20 50 33 0a 2a 2a 20 69   P3.  If P3.** i
9d30: 73 20 6c 65 73 73 20 74 68 61 6e 20 50 32 20 28  s less than P2 (
9d40: 74 79 70 69 63 61 6c 6c 79 20 50 33 20 69 73 20  typically P3 is 
9d50: 7a 65 72 6f 29 20 74 68 65 6e 20 6f 6e 6c 79 20  zero) then only 
9d60: 72 65 67 69 73 74 65 72 20 50 32 20 69 73 0a 2a  register P2 is.*
9d70: 2a 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a 2a  * set to NULL..*
9d80: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 76  *.** If the P1 v
9d90: 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  alue is non-zero
9da0: 2c 20 74 68 65 6e 20 61 6c 73 6f 20 73 65 74 20  , then also set 
9db0: 74 68 65 20 4d 45 4d 5f 43 6c 65 61 72 65 64 20  the MEM_Cleared 
9dc0: 66 6c 61 67 20 73 6f 20 74 68 61 74 0a 2a 2a 20  flag so that.** 
9dd0: 4e 55 4c 4c 20 76 61 6c 75 65 73 20 77 69 6c 6c  NULL values will
9de0: 20 6e 6f 74 20 63 6f 6d 70 61 72 65 20 65 71 75   not compare equ
9df0: 61 6c 20 65 76 65 6e 20 69 66 20 53 51 4c 49 54  al even if SQLIT
9e00: 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20  E_NULLEQ is set 
9e10: 6f 6e 0a 2a 2a 20 4f 50 5f 4e 65 20 6f 72 20 4f  on.** OP_Ne or O
9e20: 50 5f 45 71 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  P_Eq..*/.case OP
9e30: 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20  _Null: {        
9e40: 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
9e50: 69 6e 74 20 63 6e 74 3b 0a 20 20 75 31 36 20 6e  int cnt;.  u16 n
9e60: 75 6c 6c 46 6c 61 67 3b 0a 20 20 70 4f 75 74 20  ullFlag;.  pOut 
9e70: 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
9e80: 28 70 2c 20 70 4f 70 29 3b 0a 20 20 63 6e 74 20  (p, pOp);.  cnt 
9e90: 3d 20 70 4f 70 2d 3e 70 33 2d 70 4f 70 2d 3e 70  = pOp->p3-pOp->p
9ea0: 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  2;.  assert( pOp
9eb0: 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p3<=(p->nMem+1
9ec0: 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
9ed0: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
9ee0: 3d 20 6e 75 6c 6c 46 6c 61 67 20 3d 20 70 4f 70  = nullFlag = pOp
9ef0: 2d 3e 70 31 20 3f 20 28 4d 45 4d 5f 4e 75 6c 6c  ->p1 ? (MEM_Null
9f00: 7c 4d 45 4d 5f 43 6c 65 61 72 65 64 29 20 3a 20  |MEM_Cleared) : 
9f10: 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 70 4f 75 74  MEM_Null;.  pOut
9f20: 2d 3e 6e 20 3d 20 30 3b 0a 23 69 66 64 65 66 20  ->n = 0;.#ifdef 
9f30: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70  SQLITE_DEBUG.  p
9f40: 4f 75 74 2d 3e 75 54 65 6d 70 20 3d 20 30 3b 0a  Out->uTemp = 0;.
9f50: 23 65 6e 64 69 66 0a 20 20 77 68 69 6c 65 28 20  #endif.  while( 
9f60: 63 6e 74 3e 30 20 29 7b 0a 20 20 20 20 70 4f 75  cnt>0 ){.    pOu
9f70: 74 2b 2b 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75  t++;.    memAbou
9f80: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
9f90: 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  t);.    sqlite3V
9fa0: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
9fb0: 75 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  ut);.    pOut->f
9fc0: 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 3b  lags = nullFlag;
9fd0: 0a 20 20 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 30  .    pOut->n = 0
9fe0: 3b 0a 20 20 20 20 63 6e 74 2d 2d 3b 0a 20 20 7d  ;.    cnt--;.  }
9ff0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
a000: 4f 70 63 6f 64 65 3a 20 53 6f 66 74 4e 75 6c 6c  Opcode: SoftNull
a010: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 20 53   P1 * * * *.** S
a020: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 4e  ynopsis: r[P1]=N
a030: 55 4c 4c 0a 2a 2a 0a 2a 2a 20 53 65 74 20 72 65  ULL.**.** Set re
a040: 67 69 73 74 65 72 20 50 31 20 74 6f 20 68 61 76  gister P1 to hav
a050: 65 20 74 68 65 20 76 61 6c 75 65 20 4e 55 4c 4c  e the value NULL
a060: 20 61 73 20 73 65 65 6e 20 62 79 20 74 68 65 20   as seen by the 
a070: 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 0a 2a 2a  OP_MakeRecord.**
a080: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20 62 75   instruction, bu
a090: 74 20 64 6f 20 6e 6f 74 20 66 72 65 65 20 61 6e  t do not free an
a0a0: 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62  y string or blob
a0b0: 20 6d 65 6d 6f 72 79 20 61 73 73 6f 63 69 61 74   memory associat
a0c0: 65 64 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 72  ed with.** the r
a0d0: 65 67 69 73 74 65 72 2c 20 73 6f 20 74 68 61 74  egister, so that
a0e0: 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 77 61   if the value wa
a0f0: 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c  s a string or bl
a100: 6f 62 20 74 68 61 74 20 77 61 73 0a 2a 2a 20 70  ob that was.** p
a110: 72 65 76 69 6f 75 73 6c 79 20 63 6f 70 69 65 64  reviously copied
a120: 20 75 73 69 6e 67 20 4f 50 5f 53 43 6f 70 79 2c   using OP_SCopy,
a130: 20 74 68 65 20 63 6f 70 69 65 73 20 77 69 6c 6c   the copies will
a140: 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65 20   continue to be 
a150: 76 61 6c 69 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  valid..*/.case O
a160: 50 5f 53 6f 66 74 4e 75 6c 6c 3a 20 7b 0a 20 20  P_SoftNull: {.  
a170: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
a180: 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70  0 && pOp->p1<=(p
a190: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
a1a0: 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74  ursor) );.  pOut
a1b0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
a1c0: 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  ];.  pOut->flags
a1d0: 20 3d 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73 26   = (pOut->flags&
a1e0: 7e 28 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 7c  ~(MEM_Undefined|
a1f0: 4d 45 4d 5f 41 66 66 4d 61 73 6b 29 29 7c 4d 45  MEM_AffMask))|ME
a200: 4d 5f 4e 75 6c 6c 3b 0a 20 20 62 72 65 61 6b 3b  M_Null;.  break;
a210: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42  .}../* Opcode: B
a220: 6c 6f 62 20 50 31 20 50 32 20 2a 20 50 34 20 2a  lob P1 P2 * P4 *
a230: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
a240: 50 32 5d 3d 50 34 20 28 6c 65 6e 3d 50 31 29 0a  P2]=P4 (len=P1).
a250: 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20  **.** P4 points 
a260: 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20 64 61 74  to a blob of dat
a270: 61 20 50 31 20 62 79 74 65 73 20 6c 6f 6e 67 2e  a P1 bytes long.
a280: 20 20 53 74 6f 72 65 20 74 68 69 73 0a 2a 2a 20    Store this.** 
a290: 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72  blob in register
a2a0: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
a2b0: 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20  Blob: {         
a2c0: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
a2d0: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
a2e0: 3e 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41  >p1 <= SQLITE_MA
a2f0: 58 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20 70 4f  X_LENGTH );.  pO
a300: 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
a310: 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 73  ase(p, pOp);.  s
a320: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
a330: 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70  Str(pOut, pOp->p
a340: 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c  4.z, pOp->p1, 0,
a350: 20 30 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63   0);.  pOut->enc
a360: 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55   = encoding;.  U
a370: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
a380: 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
a390: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
a3a0: 20 56 61 72 69 61 62 6c 65 20 50 31 20 50 32 20   Variable P1 P2 
a3b0: 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
a3c0: 69 73 3a 20 72 5b 50 32 5d 3d 70 61 72 61 6d 65  is: r[P2]=parame
a3d0: 74 65 72 28 50 31 2c 50 34 29 0a 2a 2a 0a 2a 2a  ter(P1,P4).**.**
a3e0: 20 54 72 61 6e 73 66 65 72 20 74 68 65 20 76 61   Transfer the va
a3f0: 6c 75 65 73 20 6f 66 20 62 6f 75 6e 64 20 70 61  lues of bound pa
a400: 72 61 6d 65 74 65 72 20 50 31 20 69 6e 74 6f 20  rameter P1 into 
a410: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a  register P2.**.*
a420: 2a 20 49 66 20 74 68 65 20 70 61 72 61 6d 65 74  * If the paramet
a430: 65 72 20 69 73 20 6e 61 6d 65 64 2c 20 74 68 65  er is named, the
a440: 6e 20 69 74 73 20 6e 61 6d 65 20 61 70 70 65 61  n its name appea
a450: 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 20 54 68 65  rs in P4..** The
a460: 20 50 34 20 76 61 6c 75 65 20 69 73 20 75 73 65   P4 value is use
a470: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 62 69 6e  d by sqlite3_bin
a480: 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
a490: 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ()..*/.case OP_V
a4a0: 61 72 69 61 62 6c 65 3a 20 7b 20 20 20 20 20 20  ariable: {      
a4b0: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
a4c0: 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b 20 20 20  .  Mem *pVar;   
a4d0: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 62 65 69      /* Value bei
a4e0: 6e 67 20 74 72 61 6e 73 66 65 72 72 65 64 20 2a  ng transferred *
a4f0: 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  /..  assert( pOp
a500: 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p1>0 && pOp->p
a510: 31 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20  1<=p->nVar );.  
a520: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
a530: 7a 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  z==0 || pOp->p4.
a540: 7a 3d 3d 73 71 6c 69 74 65 33 56 4c 69 73 74 4e  z==sqlite3VListN
a550: 75 6d 54 6f 4e 61 6d 65 28 70 2d 3e 70 56 4c 69  umToName(p->pVLi
a560: 73 74 2c 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20  st,pOp->p1) );. 
a570: 20 70 56 61 72 20 3d 20 26 70 2d 3e 61 56 61 72   pVar = &p->aVar
a580: 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20  [pOp->p1 - 1];. 
a590: 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
a5a0: 4d 65 6d 54 6f 6f 42 69 67 28 70 56 61 72 29 20  MemTooBig(pVar) 
a5b0: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
a5c0: 62 69 67 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20  big;.  }.  pOut 
a5d0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
a5e0: 3b 0a 20 20 69 66 28 20 56 64 62 65 4d 65 6d 44  ;.  if( VdbeMemD
a5f0: 79 6e 61 6d 69 63 28 70 4f 75 74 29 20 29 20 73  ynamic(pOut) ) s
a600: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
a610: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 6d 65  Null(pOut);.  me
a620: 6d 63 70 79 28 70 4f 75 74 2c 20 70 56 61 72 2c  mcpy(pOut, pVar,
a630: 20 4d 45 4d 43 45 4c 4c 53 49 5a 45 29 3b 0a 20   MEMCELLSIZE);. 
a640: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 3d 20   pOut->flags &= 
a650: 7e 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70  ~(MEM_Dyn|MEM_Ep
a660: 68 65 6d 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  hem);.  pOut->fl
a670: 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69  ags |= MEM_Stati
a680: 63 7c 4d 45 4d 5f 46 72 6f 6d 42 69 6e 64 3b 0a  c|MEM_FromBind;.
a690: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
a6a0: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
a6b0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
a6c0: 64 65 3a 20 4d 6f 76 65 20 50 31 20 50 32 20 50  de: Move P1 P2 P
a6d0: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
a6e0: 73 3a 20 72 5b 50 32 40 50 33 5d 3d 72 5b 50 31  s: r[P2@P3]=r[P1
a6f0: 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20  @P3].**.** Move 
a700: 74 68 65 20 50 33 20 76 61 6c 75 65 73 20 69 6e  the P3 values in
a710: 20 72 65 67 69 73 74 65 72 20 50 31 2e 2e 50 31   register P1..P1
a720: 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e 74 6f 0a  +P3-1 over into.
a730: 2a 2a 20 72 65 67 69 73 74 65 72 73 20 50 32 2e  ** registers P2.
a740: 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65 67 69 73  .P2+P3-1.  Regis
a750: 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 2d 31  ters P1..P1+P3-1
a760: 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c   are.** left hol
a770: 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20 20 49 74  ding a NULL.  It
a780: 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72   is an error for
a790: 20 72 65 67 69 73 74 65 72 20 72 61 6e 67 65 73   register ranges
a7a0: 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20  .** P1..P1+P3-1 
a7b0: 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33 2d 31 20  and P2..P2+P3-1 
a7c0: 74 6f 20 6f 76 65 72 6c 61 70 2e 20 20 49 74 20  to overlap.  It 
a7d0: 69 73 20 61 6e 20 65 72 72 6f 72 0a 2a 2a 20 66  is an error.** f
a7e0: 6f 72 20 50 33 20 74 6f 20 62 65 20 6c 65 73 73  or P3 to be less
a7f0: 20 74 68 61 6e 20 31 2e 0a 2a 2f 0a 63 61 73 65   than 1..*/.case
a800: 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20 69 6e   OP_Move: {.  in
a810: 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  t n;           /
a820: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69  * Number of regi
a830: 73 74 65 72 73 20 6c 65 66 74 20 74 6f 20 63 6f  sters left to co
a840: 70 79 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20  py */.  int p1; 
a850: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
a860: 73 74 65 72 20 74 6f 20 63 6f 70 79 20 66 72 6f  ster to copy fro
a870: 6d 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20  m */.  int p2;  
a880: 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
a890: 74 65 72 20 74 6f 20 63 6f 70 79 20 74 6f 20 2a  ter to copy to *
a8a0: 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33  /..  n = pOp->p3
a8b0: 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  ;.  p1 = pOp->p1
a8c0: 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32  ;.  p2 = pOp->p2
a8d0: 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20  ;.  assert( n>0 
a8e0: 26 26 20 70 31 3e 30 20 26 26 20 70 32 3e 30 20  && p1>0 && p2>0 
a8f0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 2b  );.  assert( p1+
a900: 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70  n<=p2 || p2+n<=p
a910: 31 20 29 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26  1 );..  pIn1 = &
a920: 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f 75 74  aMem[p1];.  pOut
a930: 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20   = &aMem[p2];.  
a940: 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  do{.    assert( 
a950: 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e  pOut<=&aMem[(p->
a960: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
a970: 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73  sor)] );.    ass
a980: 65 72 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65 6d  ert( pIn1<=&aMem
a990: 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  [(p->nMem+1 - p-
a9a0: 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20  >nCursor)] );.  
a9b0: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
a9c0: 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20  alid(pIn1) );.  
a9d0: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
a9e0: 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20  ge(p, pOut);.   
a9f0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d   sqlite3VdbeMemM
aa00: 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e 31 29 3b  ove(pOut, pIn1);
aa10: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
aa20: 45 42 55 47 0a 20 20 20 20 69 66 28 20 70 4f 75  EBUG.    if( pOu
aa30: 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3e 3d 26  t->pScopyFrom>=&
aa40: 61 4d 65 6d 5b 70 31 5d 20 26 26 20 70 4f 75 74  aMem[p1] && pOut
aa50: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3c 70 4f 75  ->pScopyFrom<pOu
aa60: 74 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74 2d  t ){.      pOut-
aa70: 3e 70 53 63 6f 70 79 46 72 6f 6d 20 2b 3d 20 70  >pScopyFrom += p
aa80: 4f 70 2d 3e 70 32 20 2d 20 70 31 3b 0a 20 20 20  Op->p2 - p1;.   
aa90: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 44 65   }.#endif.    De
aaa0: 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75  ephemeralize(pOu
aab0: 74 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52  t);.    REGISTER
aac0: 5f 54 52 41 43 45 28 70 32 2b 2b 2c 20 70 4f 75  _TRACE(p2++, pOu
aad0: 74 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a  t);.    pIn1++;.
aae0: 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d 77      pOut++;.  }w
aaf0: 68 69 6c 65 28 20 2d 2d 6e 20 29 3b 0a 20 20 62  hile( --n );.  b
ab00: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
ab10: 64 65 3a 20 43 6f 70 79 20 50 31 20 50 32 20 50  de: Copy P1 P2 P
ab20: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
ab30: 73 3a 20 72 5b 50 32 40 50 33 2b 31 5d 3d 72 5b  s: r[P2@P3+1]=r[
ab40: 50 31 40 50 33 2b 31 5d 0a 2a 2a 0a 2a 2a 20 4d  P1@P3+1].**.** M
ab50: 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 72 65  ake a copy of re
ab60: 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50  gisters P1..P1+P
ab70: 33 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 73  3 into registers
ab80: 20 50 32 2e 2e 50 32 2b 50 33 2e 0a 2a 2a 0a 2a   P2..P2+P3..**.*
ab90: 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
aba0: 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65 65 70 20  on makes a deep 
abb0: 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75  copy of the valu
abc0: 65 2e 20 20 41 20 64 75 70 6c 69 63 61 74 65 0a  e.  A duplicate.
abd0: 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66 20 61 6e  ** is made of an
abe0: 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62  y string or blob
abf0: 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65 20   constant.  See 
ac00: 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a  also OP_SCopy..*
ac10: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a 20  /.case OP_Copy: 
ac20: 7b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20  {.  int n;..  n 
ac30: 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 49 6e  = pOp->p3;.  pIn
ac40: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
ac50: 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  1];.  pOut = &aM
ac60: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
ac70: 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e  ssert( pOut!=pIn
ac80: 31 20 29 3b 0a 20 20 77 68 69 6c 65 28 20 31 20  1 );.  while( 1 
ac90: 29 7b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  ){.    memAboutT
aca0: 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
acb0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
acc0: 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
acd0: 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f  pOut, pIn1, MEM_
ace0: 45 70 68 65 6d 29 3b 0a 20 20 20 20 44 65 65 70  Ephem);.    Deep
acf0: 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29  hemeralize(pOut)
ad00: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
ad10: 44 45 42 55 47 0a 20 20 20 20 70 4f 75 74 2d 3e  DEBUG.    pOut->
ad20: 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 30 3b 0a  pScopyFrom = 0;.
ad30: 23 65 6e 64 69 66 0a 20 20 20 20 52 45 47 49 53  #endif.    REGIS
ad40: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
ad50: 32 2b 70 4f 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75  2+pOp->p3-n, pOu
ad60: 74 29 3b 0a 20 20 20 20 69 66 28 20 28 6e 2d 2d  t);.    if( (n--
ad70: 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  )==0 ) break;.  
ad80: 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 70 49    pOut++;.    pI
ad90: 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61  n1++;.  }.  brea
ada0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
adb0: 20 53 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a   SCopy P1 P2 * *
adc0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
add0: 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a  r[P2]=r[P1].**.*
ade0: 2a 20 4d 61 6b 65 20 61 20 73 68 61 6c 6c 6f 77  * Make a shallow
adf0: 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65   copy of registe
ae00: 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74  r P1 into regist
ae10: 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  er P2..**.** Thi
ae20: 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61  s instruction ma
ae30: 6b 65 73 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f  kes a shallow co
ae40: 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e  py of the value.
ae50: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
ae60: 2a 20 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72  * is a string or
ae70: 20 62 6c 6f 62 2c 20 74 68 65 6e 20 74 68 65 20   blob, then the 
ae80: 63 6f 70 79 20 69 73 20 6f 6e 6c 79 20 61 20 70  copy is only a p
ae90: 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 0a 2a 2a  ointer to the.**
aea0: 20 6f 72 69 67 69 6e 61 6c 20 61 6e 64 20 68 65   original and he
aeb0: 6e 63 65 20 69 66 20 74 68 65 20 6f 72 69 67 69  nce if the origi
aec0: 6e 61 6c 20 63 68 61 6e 67 65 73 20 73 6f 20 77  nal changes so w
aed0: 69 6c 6c 20 74 68 65 20 63 6f 70 79 2e 0a 2a 2a  ill the copy..**
aee0: 20 57 6f 72 73 65 2c 20 69 66 20 74 68 65 20 6f   Worse, if the o
aef0: 72 69 67 69 6e 61 6c 20 69 73 20 64 65 61 6c 6c  riginal is deall
af00: 6f 63 61 74 65 64 2c 20 74 68 65 20 63 6f 70 79  ocated, the copy
af10: 20 62 65 63 6f 6d 65 73 20 69 6e 76 61 6c 69 64   becomes invalid
af20: 2e 0a 2a 2a 20 54 68 75 73 20 74 68 65 20 70 72  ..** Thus the pr
af30: 6f 67 72 61 6d 20 6d 75 73 74 20 67 75 61 72 61  ogram must guara
af40: 6e 74 65 65 20 74 68 61 74 20 74 68 65 20 6f 72  ntee that the or
af50: 69 67 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74 20  iginal will not 
af60: 63 68 61 6e 67 65 0a 2a 2a 20 64 75 72 69 6e 67  change.** during
af70: 20 74 68 65 20 6c 69 66 65 74 69 6d 65 20 6f 66   the lifetime of
af80: 20 74 68 65 20 63 6f 70 79 2e 20 20 55 73 65 20   the copy.  Use 
af90: 4f 50 5f 43 6f 70 79 20 74 6f 20 6d 61 6b 65 20  OP_Copy to make 
afa0: 61 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f  a complete.** co
afb0: 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  py..*/.case OP_S
afc0: 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20  Copy: {         
afd0: 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
afe0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
aff0: 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p1];.  pOut = 
b000: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
b010: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d    assert( pOut!=
b020: 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74 65  pIn1 );.  sqlite
b030: 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
b040: 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20  opy(pOut, pIn1, 
b050: 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 23 69 66 64  MEM_Ephem);.#ifd
b060: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
b070: 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72    pOut->pScopyFr
b080: 6f 6d 20 3d 20 70 49 6e 31 3b 0a 20 20 70 4f 75  om = pIn1;.  pOu
b090: 74 2d 3e 6d 53 63 6f 70 79 46 6c 61 67 73 20 3d  t->mScopyFlags =
b0a0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 23 65   pIn1->flags;.#e
b0b0: 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ndif.  break;.}.
b0c0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 43  ./* Opcode: IntC
b0d0: 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  opy P1 P2 * * *.
b0e0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
b0f0: 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54  2]=r[P1].**.** T
b100: 72 61 6e 73 66 65 72 20 74 68 65 20 69 6e 74 65  ransfer the inte
b110: 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20 69  ger value held i
b120: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 6e  n register P1 in
b130: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
b140: 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 6e  **.** This is an
b150: 20 6f 70 74 69 6d 69 7a 65 64 20 76 65 72 73 69   optimized versi
b160: 6f 6e 20 6f 66 20 53 43 6f 70 79 20 74 68 61 74  on of SCopy that
b170: 20 77 6f 72 6b 73 20 6f 6e 6c 79 20 66 6f 72 20   works only for 
b180: 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61 6c 75 65  integer.** value
b190: 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  s..*/.case OP_In
b1a0: 74 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20 20  tCopy: {        
b1b0: 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
b1c0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
b1d0: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
b1e0: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
b1f0: 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a   MEM_Int)!=0 );.
b200: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
b210: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74  Op->p2];.  sqlit
b220: 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
b230: 34 28 70 4f 75 74 2c 20 70 49 6e 31 2d 3e 75 2e  4(pOut, pIn1->u.
b240: 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  i);.  break;.}..
b250: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c  /* Opcode: Resul
b260: 74 52 6f 77 20 50 31 20 50 32 20 2a 20 2a 20 2a  tRow P1 P2 * * *
b270: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6f 75  .** Synopsis: ou
b280: 74 70 75 74 3d 72 5b 50 31 40 50 32 5d 0a 2a 2a  tput=r[P1@P2].**
b290: 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72  .** The register
b2a0: 73 20 50 31 20 74 68 72 6f 75 67 68 20 50 31 2b  s P1 through P1+
b2b0: 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61 20 73  P2-1 contain a s
b2c0: 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a 20  ingle row of.** 
b2d0: 72 65 73 75 6c 74 73 2e 20 54 68 69 73 20 6f 70  results. This op
b2e0: 63 6f 64 65 20 63 61 75 73 65 73 20 74 68 65 20  code causes the 
b2f0: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 63  sqlite3_step() c
b300: 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61 74 65  all to terminate
b310: 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53 51 4c 49  .** with an SQLI
b320: 54 45 5f 52 4f 57 20 72 65 74 75 72 6e 20 63 6f  TE_ROW return co
b330: 64 65 20 61 6e 64 20 69 74 20 73 65 74 73 20 75  de and it sets u
b340: 70 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74  p the sqlite3_st
b350: 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  mt.** structure 
b360: 74 6f 20 70 72 6f 76 69 64 65 20 61 63 63 65 73  to provide acces
b370: 73 20 74 6f 20 74 68 65 20 72 28 50 31 29 2e 2e  s to the r(P1)..
b380: 72 28 50 31 2b 50 32 2d 31 29 20 76 61 6c 75 65  r(P1+P2-1) value
b390: 73 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75  s as.** the resu
b3a0: 6c 74 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20  lt row..*/.case 
b3b0: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 3a 20 7b 0a  OP_ResultRow: {.
b3c0: 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69    Mem *pMem;.  i
b3d0: 6e 74 20 69 3b 0a 20 20 61 73 73 65 72 74 28 20  nt i;.  assert( 
b3e0: 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70  p->nResColumn==p
b3f0: 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 61 73 73 65  Op->p2 );.  asse
b400: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b  rt( pOp->p1>0 );
b410: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
b420: 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e  p1+pOp->p2<=(p->
b430: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
b440: 73 6f 72 29 2b 31 20 29 3b 0a 0a 20 20 2f 2a 20  sor)+1 );..  /* 
b450: 49 66 20 74 68 69 73 20 73 74 61 74 65 6d 65 6e  If this statemen
b460: 74 20 68 61 73 20 76 69 6f 6c 61 74 65 64 20 69  t has violated i
b470: 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e  mmediate foreign
b480: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
b490: 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74 20 72 65  , do.  ** not re
b4a0: 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  turn the number 
b4b0: 6f 66 20 72 6f 77 73 20 6d 6f 64 69 66 69 65 64  of rows modified
b4c0: 2e 20 41 6e 64 20 64 6f 20 6e 6f 74 20 52 45 4c  . And do not REL
b4d0: 45 41 53 45 20 74 68 65 20 73 74 61 74 65 6d 65  EASE the stateme
b4e0: 6e 74 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74  nt.  ** transact
b4f0: 69 6f 6e 2e 20 49 74 20 6e 65 65 64 73 20 74 6f  ion. It needs to
b500: 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e   be rolled back.
b510: 20 20 2a 2f 0a 20 20 69 66 28 20 53 51 4c 49 54    */.  if( SQLIT
b520: 45 5f 4f 4b 21 3d 28 72 63 20 3d 20 73 71 6c 69  E_OK!=(rc = sqli
b530: 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70  te3VdbeCheckFk(p
b540: 2c 20 30 29 29 20 29 7b 0a 20 20 20 20 61 73 73  , 0)) ){.    ass
b550: 65 72 74 28 20 64 62 2d 3e 66 6c 61 67 73 26 53  ert( db->flags&S
b560: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
b570: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
b580: 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61  ->usesStmtJourna
b590: 6c 20 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62  l );.    goto ab
b5a0: 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
b5b0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74  ;.  }..  /* If t
b5c0: 68 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52  he SQLITE_CountR
b5d0: 6f 77 73 20 66 6c 61 67 20 69 73 20 73 65 74 20  ows flag is set 
b5e0: 69 6e 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73  in sqlite3.flags
b5f0: 20 6d 61 73 6b 2c 20 74 68 65 6e 20 0a 20 20 2a   mask, then .  *
b600: 2a 20 44 4d 4c 20 73 74 61 74 65 6d 65 6e 74 73  * DML statements
b610: 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63   invoke this opc
b620: 6f 64 65 20 74 6f 20 72 65 74 75 72 6e 20 74 68  ode to return th
b630: 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
b640: 20 0a 20 20 2a 2a 20 6d 6f 64 69 66 69 65 64 20   .  ** modified 
b650: 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68 69  to the user. Thi
b660: 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61  s is the only wa
b670: 79 20 74 68 61 74 20 61 20 56 4d 20 74 68 61 74  y that a VM that
b680: 0a 20 20 2a 2a 20 6f 70 65 6e 73 20 61 20 73 74  .  ** opens a st
b690: 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
b6a0: 69 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b 65 20 74  ion may invoke t
b6b0: 68 69 73 20 6f 70 63 6f 64 65 2e 0a 20 20 2a 2a  his opcode..  **
b6c0: 0a 20 20 2a 2a 20 49 6e 20 63 61 73 65 20 74 68  .  ** In case th
b6d0: 69 73 20 69 73 20 73 75 63 68 20 61 20 73 74 61  is is such a sta
b6e0: 74 65 6d 65 6e 74 2c 20 63 6c 6f 73 65 20 61 6e  tement, close an
b6f0: 79 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  y statement tran
b700: 73 61 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f 70 65  saction.  ** ope
b710: 6e 65 64 20 62 79 20 74 68 69 73 20 56 4d 20 62  ned by this VM b
b720: 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20  efore returning 
b730: 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 75  control to the u
b740: 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 6f 0a  ser. This is to.
b750: 20 20 2a 2a 20 65 6e 73 75 72 65 20 74 68 61 74    ** ensure that
b760: 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73   statement-trans
b770: 61 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 77 61  actions are alwa
b780: 79 73 20 6e 65 73 74 65 64 2c 20 6e 6f 74 20 6f  ys nested, not o
b790: 76 65 72 6c 61 70 70 69 6e 67 2e 0a 20 20 2a 2a  verlapping..  **
b7a0: 20 49 66 20 74 68 65 20 6f 70 65 6e 20 73 74 61   If the open sta
b7b0: 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69  tement-transacti
b7c0: 6f 6e 20 69 73 20 6e 6f 74 20 63 6c 6f 73 65 64  on is not closed
b7d0: 20 68 65 72 65 2c 20 74 68 65 6e 20 74 68 65 20   here, then the 
b7e0: 75 73 65 72 0a 20 20 2a 2a 20 6d 61 79 20 73 74  user.  ** may st
b7f0: 65 70 20 61 6e 6f 74 68 65 72 20 56 4d 20 74 68  ep another VM th
b800: 61 74 20 6f 70 65 6e 73 20 69 74 73 20 6f 77 6e  at opens its own
b810: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
b820: 61 63 74 69 6f 6e 2e 20 54 68 69 73 0a 20 20 2a  action. This.  *
b830: 2a 20 6d 61 79 20 6c 65 61 64 20 74 6f 20 6f 76  * may lead to ov
b840: 65 72 6c 61 70 70 69 6e 67 20 73 74 61 74 65 6d  erlapping statem
b850: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ent transactions
b860: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  ..  **.  ** The 
b870: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
b880: 63 74 69 6f 6e 20 69 73 20 6e 65 76 65 72 20 61  ction is never a
b890: 20 74 6f 70 2d 6c 65 76 65 6c 20 74 72 61 6e 73   top-level trans
b8a0: 61 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 0a 20  action.  Hence. 
b8b0: 20 2a 2a 20 74 68 65 20 52 45 4c 45 41 53 45 20   ** the RELEASE 
b8c0: 63 61 6c 6c 20 62 65 6c 6f 77 20 63 61 6e 20 6e  call below can n
b8d0: 65 76 65 72 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a  ever fail..  */.
b8e0: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 69 53 74    assert( p->iSt
b8f0: 61 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64 62  atement==0 || db
b900: 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43  ->flags&SQLITE_C
b910: 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 72 63  ountRows );.  rc
b920: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 6c   = sqlite3VdbeCl
b930: 6f 73 65 53 74 61 74 65 6d 65 6e 74 28 70 2c 20  oseStatement(p, 
b940: 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
b950: 45 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63  E);.  assert( rc
b960: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a  ==SQLITE_OK );..
b970: 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20    /* Invalidate 
b980: 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c 20 63 75  all ephemeral cu
b990: 72 73 6f 72 20 72 6f 77 20 63 61 63 68 65 73 20  rsor row caches 
b9a0: 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65 43 74 72  */.  p->cacheCtr
b9b0: 20 3d 20 28 70 2d 3e 63 61 63 68 65 43 74 72 20   = (p->cacheCtr 
b9c0: 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61  + 2)|1;..  /* Ma
b9d0: 6b 65 20 73 75 72 65 20 74 68 65 20 72 65 73 75  ke sure the resu
b9e0: 6c 74 73 20 6f 66 20 74 68 65 20 63 75 72 72 65  lts of the curre
b9f0: 6e 74 20 72 6f 77 20 61 72 65 20 5c 30 30 30 20  nt row are \000 
ba00: 74 65 72 6d 69 6e 61 74 65 64 0a 20 20 2a 2a 20  terminated.  ** 
ba10: 61 6e 64 20 68 61 76 65 20 61 6e 20 61 73 73 69  and have an assi
ba20: 67 6e 65 64 20 74 79 70 65 2e 20 20 54 68 65 20  gned type.  The 
ba30: 72 65 73 75 6c 74 73 20 61 72 65 20 64 65 2d 65  results are de-e
ba40: 70 68 65 6d 65 72 61 6c 69 7a 65 64 20 61 73 0a  phemeralized as.
ba50: 20 20 2a 2a 20 61 20 73 69 64 65 20 65 66 66 65    ** a side effe
ba60: 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d 20  ct..  */.  pMem 
ba70: 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20  = p->pResultSet 
ba80: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
ba90: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70  ;.  for(i=0; i<p
baa0: 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20 20  Op->p2; i++){.  
bab0: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
bac0: 61 6c 69 64 28 26 70 4d 65 6d 5b 69 5d 29 20 29  alid(&pMem[i]) )
bad0: 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72 61  ;.    Deephemera
bae0: 6c 69 7a 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a  lize(&pMem[i]);.
baf0: 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4d 65      assert( (pMe
bb00: 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d  m[i].flags & MEM
bb10: 5f 45 70 68 65 6d 29 3d 3d 30 0a 20 20 20 20 20  _Ephem)==0.     
bb20: 20 20 20 20 20 20 20 7c 7c 20 28 70 4d 65 6d 5b         || (pMem[
bb30: 69 5d 2e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  i].flags & (MEM_
bb40: 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d  Str|MEM_Blob))==
bb50: 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 );.    sqlite3
bb60: 56 64 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e  VdbeMemNulTermin
bb70: 61 74 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20  ate(&pMem[i]);. 
bb80: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
bb90: 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70 4d  E(pOp->p1+i, &pM
bba0: 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69 66  em[i]);.  }.  if
bbb0: 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ( db->mallocFail
bbc0: 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  ed ) goto no_mem
bbd0: 3b 0a 0a 20 20 69 66 28 20 64 62 2d 3e 6d 54 72  ;..  if( db->mTr
bbe0: 61 63 65 20 26 20 53 51 4c 49 54 45 5f 54 52 41  ace & SQLITE_TRA
bbf0: 43 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 64 62  CE_ROW ){.    db
bc00: 2d 3e 78 54 72 61 63 65 28 53 51 4c 49 54 45 5f  ->xTrace(SQLITE_
bc10: 54 52 41 43 45 5f 52 4f 57 2c 20 64 62 2d 3e 70  TRACE_ROW, db->p
bc20: 54 72 61 63 65 41 72 67 2c 20 70 2c 20 30 29 3b  TraceArg, p, 0);
bc30: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 74 75 72  .  }..  /* Retur
bc40: 6e 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a  n SQLITE_ROW.  *
bc50: 2f 0a 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74  /.  p->pc = (int
bc60: 29 28 70 4f 70 20 2d 20 61 4f 70 29 20 2b 20 31  )(pOp - aOp) + 1
bc70: 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  ;.  rc = SQLITE_
bc80: 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65  ROW;.  goto vdbe
bc90: 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f  _return;.}../* O
bca0: 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50 31  pcode: Concat P1
bcb0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
bcc0: 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b  nopsis: r[P3]=r[
bcd0: 50 32 5d 2b 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  P2]+r[P1].**.** 
bce0: 41 64 64 20 74 68 65 20 74 65 78 74 20 69 6e 20  Add the text in 
bcf0: 72 65 67 69 73 74 65 72 20 50 31 20 6f 6e 74 6f  register P1 onto
bd00: 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
bd10: 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69 73  text in.** regis
bd20: 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65  ter P2 and store
bd30: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
bd40: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
bd50: 66 20 65 69 74 68 65 72 20 74 68 65 20 50 31 20  f either the P1 
bd60: 6f 72 20 50 32 20 74 65 78 74 20 61 72 65 20 4e  or P2 text are N
bd70: 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 4e  ULL then store N
bd80: 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a  ULL in P3..**.**
bd90: 20 20 20 50 33 20 3d 20 50 32 20 7c 7c 20 50 31     P3 = P2 || P1
bda0: 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c  .**.** It is ill
bdb0: 65 67 61 6c 20 66 6f 72 20 50 31 20 61 6e 64 20  egal for P1 and 
bdc0: 50 33 20 74 6f 20 62 65 20 74 68 65 20 73 61 6d  P3 to be the sam
bdd0: 65 20 72 65 67 69 73 74 65 72 2e 20 53 6f 6d 65  e register. Some
bde0: 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33 20  times,.** if P3 
bdf0: 69 73 20 74 68 65 20 73 61 6d 65 20 72 65 67 69  is the same regi
be00: 73 74 65 72 20 61 73 20 50 32 2c 20 74 68 65 20  ster as P2, the 
be10: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69  implementation i
be20: 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f  s able.** to avo
be30: 69 64 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a 2a  id a memcpy()..*
be40: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61 74  /.case OP_Concat
be50: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
be60: 20 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e 43   same as TK_CONC
be70: 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  AT, in1, in2, ou
be80: 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74  t3 */.  i64 nByt
be90: 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  e;          /* T
bea0: 6f 74 61 6c 20 73 69 7a 65 20 6f 66 20 74 68 65  otal size of the
beb0: 20 6f 75 74 70 75 74 20 73 74 72 69 6e 67 20 6f   output string o
bec0: 72 20 62 6c 6f 62 20 2a 2f 0a 20 20 75 31 36 20  r blob */.  u16 
bed0: 66 6c 61 67 73 31 3b 20 20 20 20 20 20 20 20 20  flags1;         
bee0: 2f 2a 20 49 6e 69 74 69 61 6c 20 66 6c 61 67 73  /* Initial flags
bef0: 20 66 6f 72 20 50 31 20 2a 2f 0a 20 20 75 31 36   for P1 */.  u16
bf00: 20 66 6c 61 67 73 32 3b 20 20 20 20 20 20 20 20   flags2;        
bf10: 20 2f 2a 20 49 6e 69 74 69 61 6c 20 66 6c 61 67   /* Initial flag
bf20: 73 20 66 6f 72 20 50 32 20 2a 2f 0a 0a 20 20 70  s for P2 */..  p
bf30: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
bf40: 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26  >p1];.  pIn2 = &
bf50: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
bf60: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
bf70: 70 2d 3e 70 33 5d 3b 0a 20 20 74 65 73 74 63 61  p->p3];.  testca
bf80: 73 65 28 20 70 49 6e 31 3d 3d 70 49 6e 32 20 29  se( pIn1==pIn2 )
bf90: 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  ;.  testcase( pO
bfa0: 75 74 3d 3d 70 49 6e 32 20 29 3b 0a 20 20 61 73  ut==pIn2 );.  as
bfb0: 73 65 72 74 28 20 70 49 6e 31 21 3d 70 4f 75 74  sert( pIn1!=pOut
bfc0: 20 29 3b 0a 20 20 66 6c 61 67 73 31 20 3d 20 70   );.  flags1 = p
bfd0: 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20 20 74 65  In1->flags;.  te
bfe0: 73 74 63 61 73 65 28 20 66 6c 61 67 73 31 20 26  stcase( flags1 &
bff0: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 74   MEM_Null );.  t
c000: 65 73 74 63 61 73 65 28 20 70 49 6e 32 2d 3e 66  estcase( pIn2->f
c010: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
c020: 29 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 31  );.  if( (flags1
c030: 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20   | pIn2->flags) 
c040: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
c050: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
c060: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
c070: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
c080: 69 66 28 20 28 66 6c 61 67 73 31 20 26 20 28 4d  if( (flags1 & (M
c090: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
c0a0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  )==0 ){.    if( 
c0b0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74  sqlite3VdbeMemSt
c0c0: 72 69 6e 67 69 66 79 28 70 49 6e 31 2c 65 6e 63  ringify(pIn1,enc
c0d0: 6f 64 69 6e 67 2c 30 29 20 29 20 67 6f 74 6f 20  oding,0) ) goto 
c0e0: 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 66 6c 61 67  no_mem;.    flag
c0f0: 73 31 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73  s1 = pIn1->flags
c100: 20 26 20 7e 4d 45 4d 5f 53 74 72 3b 0a 20 20 7d   & ~MEM_Str;.  }
c110: 65 6c 73 65 20 69 66 28 20 28 66 6c 61 67 73 31  else if( (flags1
c120: 20 26 20 4d 45 4d 5f 5a 65 72 6f 29 21 3d 30 20   & MEM_Zero)!=0 
c130: 29 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  ){.    if( sqlit
c140: 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42  e3VdbeMemExpandB
c150: 6c 6f 62 28 70 49 6e 31 29 20 29 20 67 6f 74 6f  lob(pIn1) ) goto
c160: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 66 6c 61   no_mem;.    fla
c170: 67 73 31 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67  gs1 = pIn1->flag
c180: 73 20 26 20 7e 4d 45 4d 5f 53 74 72 3b 0a 20 20  s & ~MEM_Str;.  
c190: 7d 0a 20 20 66 6c 61 67 73 32 20 3d 20 70 49 6e  }.  flags2 = pIn
c1a0: 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20  2->flags;.  if( 
c1b0: 28 66 6c 61 67 73 32 20 26 20 28 4d 45 4d 5f 53  (flags2 & (MEM_S
c1c0: 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30  tr|MEM_Blob))==0
c1d0: 20 29 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69   ){.    if( sqli
c1e0: 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67  te3VdbeMemString
c1f0: 69 66 79 28 70 49 6e 32 2c 65 6e 63 6f 64 69 6e  ify(pIn2,encodin
c200: 67 2c 30 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  g,0) ) goto no_m
c210: 65 6d 3b 0a 20 20 20 20 66 6c 61 67 73 32 20 3d  em;.    flags2 =
c220: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 7e   pIn2->flags & ~
c230: 4d 45 4d 5f 53 74 72 3b 0a 20 20 7d 65 6c 73 65  MEM_Str;.  }else
c240: 20 69 66 28 20 28 66 6c 61 67 73 32 20 26 20 4d   if( (flags2 & M
c250: 45 4d 5f 5a 65 72 6f 29 21 3d 30 20 29 7b 0a 20  EM_Zero)!=0 ){. 
c260: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64     if( sqlite3Vd
c270: 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28  beMemExpandBlob(
c280: 70 49 6e 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f  pIn2) ) goto no_
c290: 6d 65 6d 3b 0a 20 20 20 20 66 6c 61 67 73 32 20  mem;.    flags2 
c2a0: 3d 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20  = pIn2->flags & 
c2b0: 7e 4d 45 4d 5f 53 74 72 3b 0a 20 20 7d 0a 20 20  ~MEM_Str;.  }.  
c2c0: 6e 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20  nByte = pIn1->n 
c2d0: 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28  + pIn2->n;.  if(
c2e0: 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69   nByte>db->aLimi
c2f0: 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
c300: 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
c310: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
c320: 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
c330: 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28  eMemGrow(pOut, (
c340: 69 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f 75  int)nByte+2, pOu
c350: 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20 20  t==pIn2) ){.    
c360: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
c370: 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
c380: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29  g(pOut, MEM_Str)
c390: 3b 0a 20 20 69 66 28 20 70 4f 75 74 21 3d 70 49  ;.  if( pOut!=pI
c3a0: 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79  n2 ){.    memcpy
c3b0: 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e  (pOut->z, pIn2->
c3c0: 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 20  z, pIn2->n);.   
c3d0: 20 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e   assert( (pIn2->
c3e0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29  flags & MEM_Dyn)
c3f0: 20 3d 3d 20 28 66 6c 61 67 73 32 20 26 20 4d 45   == (flags2 & ME
c400: 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 70 49  M_Dyn) );.    pI
c410: 6e 32 2d 3e 66 6c 61 67 73 20 3d 20 66 6c 61 67  n2->flags = flag
c420: 73 32 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79  s2;.  }.  memcpy
c430: 28 26 70 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e  (&pOut->z[pIn2->
c440: 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e  n], pIn1->z, pIn
c450: 31 2d 3e 6e 29 3b 0a 20 20 61 73 73 65 72 74 28  1->n);.  assert(
c460: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
c470: 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61  MEM_Dyn) == (fla
c480: 67 73 31 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29  gs1 & MEM_Dyn) )
c490: 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  ;.  pIn1->flags 
c4a0: 3d 20 66 6c 61 67 73 31 3b 0a 20 20 70 4f 75 74  = flags1;.  pOut
c4b0: 2d 3e 7a 5b 6e 42 79 74 65 5d 3d 30 3b 0a 20 20  ->z[nByte]=0;.  
c4c0: 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 2b 31 5d  pOut->z[nByte+1]
c4d0: 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c   = 0;.  pOut->fl
c4e0: 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b  ags |= MEM_Term;
c4f0: 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e  .  pOut->n = (in
c500: 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d  t)nByte;.  pOut-
c510: 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b  >enc = encoding;
c520: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
c530: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
c540: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
c550: 6f 64 65 3a 20 41 64 64 20 50 31 20 50 32 20 50  ode: Add P1 P2 P
c560: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
c570: 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2b 72  s: r[P3]=r[P1]+r
c580: 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74  [P2].**.** Add t
c590: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
c5a0: 73 74 65 72 20 50 31 20 74 6f 20 74 68 65 20 76  ster P1 to the v
c5b0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
c5c0: 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65   P2.** and store
c5d0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
c5e0: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
c5f0: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
c600: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
c610: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
c620: 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 6c 74 69 70  * Opcode: Multip
c630: 6c 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ly P1 P2 P3 * *.
c640: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
c650: 33 5d 3d 72 5b 50 31 5d 2a 72 5b 50 32 5d 0a 2a  3]=r[P1]*r[P2].*
c660: 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79  *.**.** Multiply
c670: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
c680: 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65  gister P1 by the
c690: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
c6a0: 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f  er P2.** and sto
c6b0: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
c6c0: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
c6d0: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
c6e0: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
c6f0: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
c700: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 75 62 74  ./* Opcode: Subt
c710: 72 61 63 74 20 50 31 20 50 32 20 50 33 20 2a 20  ract P1 P2 P3 * 
c720: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
c730: 5b 50 33 5d 3d 72 5b 50 32 5d 2d 72 5b 50 31 5d  [P3]=r[P2]-r[P1]
c740: 0a 2a 2a 0a 2a 2a 20 53 75 62 74 72 61 63 74 20  .**.** Subtract 
c750: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
c760: 69 73 74 65 72 20 50 31 20 66 72 6f 6d 20 74 68  ister P1 from th
c770: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
c780: 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74  ter P2.** and st
c790: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
c7a0: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
c7b0: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
c7c0: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
c7d0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
c7e0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76  /./* Opcode: Div
c7f0: 69 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ide P1 P2 P3 * *
c800: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
c810: 50 33 5d 3d 72 5b 50 32 5d 2f 72 5b 50 31 5d 0a  P3]=r[P2]/r[P1].
c820: 2a 2a 0a 2a 2a 20 44 69 76 69 64 65 20 74 68 65  **.** Divide the
c830: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
c840: 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c  er P1 by the val
c850: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
c860: 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74  2.** and store t
c870: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
c880: 69 73 74 65 72 20 50 33 20 28 50 33 3d 50 32 2f  ister P3 (P3=P2/
c890: 50 31 29 2e 20 49 66 20 74 68 65 20 76 61 6c 75  P1). If the valu
c8a0: 65 20 69 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65  e in .** registe
c8b0: 72 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68  r P1 is zero, th
c8c0: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
c8d0: 20 4e 55 4c 4c 2e 20 49 66 20 65 69 74 68 65 72   NULL. If either
c8e0: 20 69 6e 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55   input is .** NU
c8f0: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
c900: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
c910: 63 6f 64 65 3a 20 52 65 6d 61 69 6e 64 65 72 20  code: Remainder 
c920: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
c930: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
c940: 72 5b 50 32 5d 25 72 5b 50 31 5d 0a 2a 2a 0a 2a  r[P2]%r[P1].**.*
c950: 2a 20 43 6f 6d 70 75 74 65 20 74 68 65 20 72 65  * Compute the re
c960: 6d 61 69 6e 64 65 72 20 61 66 74 65 72 20 69 6e  mainder after in
c970: 74 65 67 65 72 20 72 65 67 69 73 74 65 72 20 50  teger register P
c980: 32 20 69 73 20 64 69 76 69 64 65 64 20 62 79 20  2 is divided by 
c990: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20  .** register P1 
c9a0: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
c9b0: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
c9c0: 20 50 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20   P3. .** If the 
c9d0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
c9e0: 72 20 50 31 20 69 73 20 7a 65 72 6f 20 74 68 65  r P1 is zero the
c9f0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
ca00: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70  .** If either op
ca10: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74  erand is NULL, t
ca20: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
ca30: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64  L..*/.case OP_Ad
ca40: 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d:              
ca50: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
ca60: 54 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e  TK_PLUS, in1, in
ca70: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
ca80: 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20  OP_Subtract:    
ca90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
caa0: 65 20 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69  e as TK_MINUS, i
cab0: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
cac0: 0a 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c  .case OP_Multipl
cad0: 79 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y:              
cae0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54  /* same as TK_ST
caf0: 41 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  AR, in1, in2, ou
cb00: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69  t3 */.case OP_Di
cb10: 76 69 64 65 3a 20 20 20 20 20 20 20 20 20 20 20  vide:           
cb20: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
cb30: 54 4b 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69  TK_SLASH, in1, i
cb40: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
cb50: 20 4f 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b   OP_Remainder: {
cb60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
cb70: 6d 65 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e  me as TK_REM, in
cb80: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
cb90: 20 20 63 68 61 72 20 62 49 6e 74 69 6e 74 3b 20    char bIntint; 
cba0: 20 20 2f 2a 20 53 74 61 72 74 65 64 20 6f 75 74    /* Started out
cbb0: 20 61 73 20 74 77 6f 20 69 6e 74 65 67 65 72 20   as two integer 
cbc0: 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 20 20 75 31  operands */.  u1
cbd0: 36 20 66 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a  6 flags;      /*
cbe0: 20 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20   Combined MEM_* 
cbf0: 66 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74 68 20  flags from both 
cc00: 69 6e 70 75 74 73 20 2a 2f 0a 20 20 75 31 36 20  inputs */.  u16 
cc10: 74 79 70 65 31 3b 20 20 20 20 20 20 2f 2a 20 4e  type1;      /* N
cc20: 75 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20 6c  umeric type of l
cc30: 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  eft operand */. 
cc40: 20 75 31 36 20 74 79 70 65 32 3b 20 20 20 20 20   u16 type2;     
cc50: 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79 70 65   /* Numeric type
cc60: 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e   of right operan
cc70: 64 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 20 20  d */.  i64 iA;  
cc80: 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65         /* Intege
cc90: 72 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20  r value of left 
cca0: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34  operand */.  i64
ccb0: 20 69 42 3b 20 20 20 20 20 20 20 20 20 2f 2a 20   iB;         /* 
ccc0: 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66  Integer value of
ccd0: 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a   right operand *
cce0: 2f 0a 20 20 64 6f 75 62 6c 65 20 72 41 3b 20 20  /.  double rA;  
ccf0: 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75      /* Real valu
cd00: 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e  e of left operan
cd10: 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 42  d */.  double rB
cd20: 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76  ;      /* Real v
cd30: 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70  alue of right op
cd40: 65 72 61 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e 31  erand */..  pIn1
cd50: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
cd60: 5d 3b 0a 20 20 74 79 70 65 31 20 3d 20 6e 75 6d  ];.  type1 = num
cd70: 65 72 69 63 54 79 70 65 28 70 49 6e 31 29 3b 0a  ericType(pIn1);.
cd80: 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
cd90: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 74 79 70 65 32  Op->p2];.  type2
cda0: 20 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28 70   = numericType(p
cdb0: 49 6e 32 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26  In2);.  pOut = &
cdc0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
cdd0: 20 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66   flags = pIn1->f
cde0: 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61  lags | pIn2->fla
cdf0: 67 73 3b 0a 20 20 69 66 28 20 28 74 79 70 65 31  gs;.  if( (type1
ce00: 20 26 20 74 79 70 65 32 20 26 20 4d 45 4d 5f 49   & type2 & MEM_I
ce10: 6e 74 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 41  nt)!=0 ){.    iA
ce20: 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20   = pIn1->u.i;.  
ce30: 20 20 69 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69    iB = pIn2->u.i
ce40: 3b 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d 20  ;.    bIntint = 
ce50: 31 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20 70  1;.    switch( p
ce60: 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20  Op->opcode ){.  
ce70: 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a      case OP_Add:
ce80: 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74         if( sqlit
ce90: 65 33 41 64 64 49 6e 74 36 34 28 26 69 42 2c 69  e3AddInt64(&iB,i
cea0: 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74  A) ) goto fp_mat
ceb0: 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  h;  break;.     
cec0: 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63   case OP_Subtrac
ced0: 74 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  t:  if( sqlite3S
cee0: 75 62 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20  ubInt64(&iB,iA) 
cef0: 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20  ) goto fp_math; 
cf00: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
cf10: 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20  se OP_Multiply: 
cf20: 20 69 66 28 20 73 71 6c 69 74 65 33 4d 75 6c 49   if( sqlite3MulI
cf30: 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67  nt64(&iB,iA) ) g
cf40: 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72  oto fp_math;  br
cf50: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
cf60: 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20  OP_Divide: {.   
cf70: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29       if( iA==0 )
cf80: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
cf90: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
cfa0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
cfb0: 3d 2d 31 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c  =-1 && iB==SMALL
cfc0: 45 53 54 5f 49 4e 54 36 34 20 29 20 67 6f 74 6f  EST_INT64 ) goto
cfd0: 20 66 70 5f 6d 61 74 68 3b 0a 20 20 20 20 20 20   fp_math;.      
cfe0: 20 20 69 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20    iB /= iA;.    
cff0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
d000: 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74   }.      default
d010: 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  : {.        if( 
d020: 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69  iA==0 ) goto ari
d030: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
d040: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  s_null;.        
d050: 69 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20  if( iA==-1 ) iA 
d060: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 42 20  = 1;.        iB 
d070: 25 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62  %= iA;.        b
d080: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
d090: 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e    }.    pOut->u.
d0a0: 69 20 3d 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53  i = iB;.    MemS
d0b0: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
d0c0: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c   MEM_Int);.  }el
d0d0: 73 65 20 69 66 28 20 28 66 6c 61 67 73 20 26 20  se if( (flags & 
d0e0: 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a  MEM_Null)!=0 ){.
d0f0: 20 20 20 20 67 6f 74 6f 20 61 72 69 74 68 6d 65      goto arithme
d100: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
d110: 6c 6c 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ll;.  }else{.   
d120: 20 62 49 6e 74 69 6e 74 20 3d 20 30 3b 0a 66 70   bIntint = 0;.fp
d130: 5f 6d 61 74 68 3a 0a 20 20 20 20 72 41 20 3d 20  _math:.    rA = 
d140: 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56  sqlite3VdbeRealV
d150: 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 20 20  alue(pIn1);.    
d160: 72 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rB = sqlite3Vdbe
d170: 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 32 29 3b  RealValue(pIn2);
d180: 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70  .    switch( pOp
d190: 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20  ->opcode ){.    
d1a0: 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20    case OP_Add:  
d1b0: 20 20 20 20 20 20 20 72 42 20 2b 3d 20 72 41 3b         rB += rA;
d1c0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
d1d0: 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74      case OP_Subt
d1e0: 72 61 63 74 3a 20 20 20 20 72 42 20 2d 3d 20 72  ract:    rB -= r
d1f0: 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  A;       break;.
d200: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75        case OP_Mu
d210: 6c 74 69 70 6c 79 3a 20 20 20 20 72 42 20 2a 3d  ltiply:    rB *=
d220: 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b   rA;       break
d230: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
d240: 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20  Divide: {.      
d250: 20 20 2f 2a 20 28 64 6f 75 62 6c 65 29 30 20 49    /* (double)0 I
d260: 6e 20 63 61 73 65 20 6f 66 20 53 51 4c 49 54 45  n case of SQLITE
d270: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
d280: 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20  OINT... */.     
d290: 20 20 20 69 66 28 20 72 41 3d 3d 28 64 6f 75 62     if( rA==(doub
d2a0: 6c 65 29 30 20 29 20 67 6f 74 6f 20 61 72 69 74  le)0 ) goto arit
d2b0: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
d2c0: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 72  _null;.        r
d2d0: 42 20 2f 3d 20 72 41 3b 0a 20 20 20 20 20 20 20  B /= rA;.       
d2e0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
d2f0: 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b        default: {
d300: 0a 20 20 20 20 20 20 20 20 69 41 20 3d 20 73 71  .        iA = sq
d310: 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
d320: 65 28 70 49 6e 31 29 3b 0a 20 20 20 20 20 20 20  e(pIn1);.       
d330: 20 69 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62   iB = sqlite3Vdb
d340: 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b  eIntValue(pIn2);
d350: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
d360: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
d370: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
d380: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
d390: 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31   iA==-1 ) iA = 1
d3a0: 3b 0a 20 20 20 20 20 20 20 20 72 42 20 3d 20 28  ;.        rB = (
d3b0: 64 6f 75 62 6c 65 29 28 69 42 20 25 20 69 41 29  double)(iB % iA)
d3c0: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
d3d0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23  .      }.    }.#
d3e0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
d3f0: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
d400: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
d410: 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   rB;.    MemSetT
d420: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
d430: 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20  M_Int);.#else.  
d440: 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 73 4e    if( sqlite3IsN
d450: 61 4e 28 72 42 29 20 29 7b 0a 20 20 20 20 20 20  aN(rB) ){.      
d460: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
d470: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
d480: 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e      }.    pOut->
d490: 75 2e 72 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65  u.r = rB;.    Me
d4a0: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
d4b0: 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20  t, MEM_Real);.  
d4c0: 20 20 69 66 28 20 28 28 74 79 70 65 31 7c 74 79    if( ((type1|ty
d4d0: 70 65 32 29 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d  pe2)&(MEM_Real|M
d4e0: 45 4d 5f 49 6e 74 52 65 61 6c 29 29 3d 3d 30 20  EM_IntReal))==0 
d4f0: 26 26 20 21 62 49 6e 74 69 6e 74 20 29 7b 0a 20  && !bIntint ){. 
d500: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d510: 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79 28  IntegerAffinity(
d520: 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23 65 6e  pOut);.    }.#en
d530: 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  dif.  }.  break;
d540: 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  ..arithmetic_res
d550: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73  ult_is_null:.  s
d560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
d570: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 62 72  Null(pOut);.  br
d580: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
d590: 65 3a 20 43 6f 6c 6c 53 65 71 20 50 31 20 2a 20  e: CollSeq P1 * 
d5a0: 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  * P4.**.** P4 is
d5b0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
d5c0: 43 6f 6c 6c 53 65 71 20 6f 62 6a 65 63 74 2e 20  CollSeq object. 
d5d0: 49 66 20 74 68 65 20 6e 65 78 74 20 63 61 6c 6c  If the next call
d5e0: 20 74 6f 20 61 20 75 73 65 72 20 66 75 6e 63 74   to a user funct
d5f0: 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67  ion.** or aggreg
d600: 61 74 65 20 63 61 6c 6c 73 20 73 71 6c 69 74 65  ate calls sqlite
d610: 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28  3GetFuncCollSeq(
d620: 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f  ), this collatio
d630: 6e 20 73 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a  n sequence will.
d640: 2a 2a 20 62 65 20 72 65 74 75 72 6e 65 64 2e 20  ** be returned. 
d650: 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20  This is used by 
d660: 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e  the built-in min
d670: 28 29 2c 20 6d 61 78 28 29 20 61 6e 64 20 6e 75  (), max() and nu
d680: 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69  llif().** functi
d690: 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31  ons..**.** If P1
d6a0: 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
d6b0: 65 6e 20 69 74 20 69 73 20 61 20 72 65 67 69 73  en it is a regis
d6c0: 74 65 72 20 74 68 61 74 20 61 20 73 75 62 73 65  ter that a subse
d6d0: 71 75 65 6e 74 20 6d 69 6e 28 29 20 6f 72 0a 2a  quent min() or.*
d6e0: 2a 20 6d 61 78 28 29 20 61 67 67 72 65 67 61 74  * max() aggregat
d6f0: 65 20 77 69 6c 6c 20 73 65 74 20 74 6f 20 31 20  e will set to 1 
d700: 69 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  if the current r
d710: 6f 77 20 69 73 20 6e 6f 74 20 74 68 65 20 6d 69  ow is not the mi
d720: 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20 6d 61 78 69  nimum or.** maxi
d730: 6d 75 6d 2e 20 20 54 68 65 20 50 31 20 72 65 67  mum.  The P1 reg
d740: 69 73 74 65 72 20 69 73 20 69 6e 69 74 69 61 6c  ister is initial
d750: 69 7a 65 64 20 74 6f 20 30 20 62 79 20 74 68 69  ized to 0 by thi
d760: 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  s instruction..*
d770: 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61  *.** The interfa
d780: 63 65 20 75 73 65 64 20 62 79 20 74 68 65 20 69  ce used by the i
d790: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
d7a0: 20 74 68 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f   the aforementio
d7b0: 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a  ned functions.**
d7c0: 20 74 6f 20 72 65 74 72 69 65 76 65 20 74 68 65   to retrieve the
d7d0: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
d7e0: 6e 63 65 20 73 65 74 20 62 79 20 74 68 69 73 20  nce set by this 
d7f0: 6f 70 63 6f 64 65 20 69 73 20 6e 6f 74 20 61 76  opcode is not av
d800: 61 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69  ailable.** publi
d810: 63 6c 79 2e 20 20 4f 6e 6c 79 20 62 75 69 6c 74  cly.  Only built
d820: 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20 68 61  -in functions ha
d830: 76 65 20 61 63 63 65 73 73 20 74 6f 20 74 68 69  ve access to thi
d840: 73 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61  s feature..*/.ca
d850: 73 65 20 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b  se OP_CollSeq: {
d860: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
d870: 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53  p4type==P4_COLLS
d880: 45 51 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  EQ );.  if( pOp-
d890: 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  >p1 ){.    sqlit
d8a0: 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
d8b0: 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  4(&aMem[pOp->p1]
d8c0: 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  , 0);.  }.  brea
d8d0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
d8e0: 20 42 69 74 41 6e 64 20 50 31 20 50 32 20 50 33   BitAnd P1 P2 P3
d8f0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
d900: 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 26 72 5b  : r[P3]=r[P1]&r[
d910: 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74  P2].**.** Take t
d920: 68 65 20 62 69 74 2d 77 69 73 65 20 41 4e 44 20  he bit-wise AND 
d930: 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  of the values in
d940: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
d950: 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65   P2 and.** store
d960: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
d970: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
d980: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
d990: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
d9a0: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
d9b0: 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4f 72 20  * Opcode: BitOr 
d9c0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
d9d0: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
d9e0: 72 5b 50 31 5d 7c 72 5b 50 32 5d 0a 2a 2a 0a 2a  r[P1]|r[P2].**.*
d9f0: 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77  * Take the bit-w
da00: 69 73 65 20 4f 52 20 6f 66 20 74 68 65 20 76 61  ise OR of the va
da10: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
da20: 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a   P1 and P2 and.*
da30: 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  * store the resu
da40: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
da50: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
da60: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
da70: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
da80: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
da90: 20 53 68 69 66 74 4c 65 66 74 20 50 31 20 50 32   ShiftLeft P1 P2
daa0: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
dab0: 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d  sis: r[P3]=r[P2]
dac0: 3c 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68  <<r[P1].**.** Sh
dad0: 69 66 74 20 74 68 65 20 69 6e 74 65 67 65 72 20  ift the integer 
dae0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
daf0: 72 20 50 32 20 74 6f 20 74 68 65 20 6c 65 66 74  r P2 to the left
db00: 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65   by the.** numbe
db10: 72 20 6f 66 20 62 69 74 73 20 73 70 65 63 69 66  r of bits specif
db20: 69 65 64 20 62 79 20 74 68 65 20 69 6e 74 65 67  ied by the integ
db30: 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  er in register P
db40: 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20  1..** Store the 
db50: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
db60: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
db70: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
db80: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
db90: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
dba0: 6f 64 65 3a 20 53 68 69 66 74 52 69 67 68 74 20  ode: ShiftRight 
dbb0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
dbc0: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
dbd0: 72 5b 50 32 5d 3e 3e 72 5b 50 31 5d 0a 2a 2a 0a  r[P2]>>r[P1].**.
dbe0: 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e 74  ** Shift the int
dbf0: 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65  eger value in re
dc00: 67 69 73 74 65 72 20 50 32 20 74 6f 20 74 68 65  gister P2 to the
dc10: 20 72 69 67 68 74 20 62 79 20 74 68 65 0a 2a 2a   right by the.**
dc20: 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20   number of bits 
dc30: 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65  specified by the
dc40: 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69   integer in regi
dc50: 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72  ster P1..** Stor
dc60: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
dc70: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
dc80: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
dc90: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
dca0: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
dcb0: 63 61 73 65 20 4f 50 5f 42 69 74 41 6e 64 3a 20  case OP_BitAnd: 
dcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcd0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49  /* same as TK_BI
dce0: 54 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  TAND, in1, in2, 
dcf0: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
dd00: 42 69 74 4f 72 3a 20 20 20 20 20 20 20 20 20 20  BitOr:          
dd10: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
dd20: 61 73 20 54 4b 5f 42 49 54 4f 52 2c 20 69 6e 31  as TK_BITOR, in1
dd30: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
dd40: 61 73 65 20 4f 50 5f 53 68 69 66 74 4c 65 66 74  ase OP_ShiftLeft
dd50: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  :              /
dd60: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 53 48  * same as TK_LSH
dd70: 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  IFT, in1, in2, o
dd80: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ut3 */.case OP_S
dd90: 68 69 66 74 52 69 67 68 74 3a 20 7b 20 20 20 20  hiftRight: {    
dda0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
ddb0: 73 20 54 4b 5f 52 53 48 49 46 54 2c 20 69 6e 31  s TK_RSHIFT, in1
ddc0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
ddd0: 20 69 36 34 20 69 41 3b 0a 20 20 75 36 34 20 75   i64 iA;.  u64 u
dde0: 41 3b 0a 20 20 69 36 34 20 69 42 3b 0a 20 20 75  A;.  i64 iB;.  u
ddf0: 38 20 6f 70 3b 0a 0a 20 20 70 49 6e 31 20 3d 20  8 op;..  pIn1 = 
de00: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
de10: 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
de20: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20  Op->p2];.  pOut 
de30: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
de40: 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
de50: 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61  lags | pIn2->fla
de60: 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  gs) & MEM_Null )
de70: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
de80: 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
de90: 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
dea0: 7d 0a 20 20 69 41 20 3d 20 73 71 6c 69 74 65 33  }.  iA = sqlite3
deb0: 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
dec0: 32 29 3b 0a 20 20 69 42 20 3d 20 73 71 6c 69 74  2);.  iB = sqlit
ded0: 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
dee0: 49 6e 31 29 3b 0a 20 20 6f 70 20 3d 20 70 4f 70  In1);.  op = pOp
def0: 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 69 66 28 20  ->opcode;.  if( 
df00: 6f 70 3d 3d 4f 50 5f 42 69 74 41 6e 64 20 29 7b  op==OP_BitAnd ){
df10: 0a 20 20 20 20 69 41 20 26 3d 20 69 42 3b 0a 20  .    iA &= iB;. 
df20: 20 7d 65 6c 73 65 20 69 66 28 20 6f 70 3d 3d 4f   }else if( op==O
df30: 50 5f 42 69 74 4f 72 20 29 7b 0a 20 20 20 20 69  P_BitOr ){.    i
df40: 41 20 7c 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65  A |= iB;.  }else
df50: 20 69 66 28 20 69 42 21 3d 30 20 29 7b 0a 20 20   if( iB!=0 ){.  
df60: 20 20 61 73 73 65 72 74 28 20 6f 70 3d 3d 4f 50    assert( op==OP
df70: 5f 53 68 69 66 74 52 69 67 68 74 20 7c 7c 20 6f  _ShiftRight || o
df80: 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 20  p==OP_ShiftLeft 
df90: 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 73 68  );..    /* If sh
dfa0: 69 66 74 69 6e 67 20 62 79 20 61 20 6e 65 67 61  ifting by a nega
dfb0: 74 69 76 65 20 61 6d 6f 75 6e 74 2c 20 73 68 69  tive amount, shi
dfc0: 66 74 20 69 6e 20 74 68 65 20 6f 74 68 65 72 20  ft in the other 
dfd0: 64 69 72 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 20  direction */.   
dfe0: 20 69 66 28 20 69 42 3c 30 20 29 7b 0a 20 20 20   if( iB<0 ){.   
dff0: 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 68     assert( OP_Sh
e000: 69 66 74 52 69 67 68 74 3d 3d 4f 50 5f 53 68 69  iftRight==OP_Shi
e010: 66 74 4c 65 66 74 2b 31 20 29 3b 0a 20 20 20 20  ftLeft+1 );.    
e020: 20 20 6f 70 20 3d 20 32 2a 4f 50 5f 53 68 69 66    op = 2*OP_Shif
e030: 74 4c 65 66 74 20 2b 20 31 20 2d 20 6f 70 3b 0a  tLeft + 1 - op;.
e040: 20 20 20 20 20 20 69 42 20 3d 20 69 42 3e 28 2d        iB = iB>(-
e050: 36 34 29 20 3f 20 2d 69 42 20 3a 20 36 34 3b 0a  64) ? -iB : 64;.
e060: 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 69      }..    if( i
e070: 42 3e 3d 36 34 20 29 7b 0a 20 20 20 20 20 20 69  B>=64 ){.      i
e080: 41 20 3d 20 28 69 41 3e 3d 30 20 7c 7c 20 6f 70  A = (iA>=0 || op
e090: 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 29 20  ==OP_ShiftLeft) 
e0a0: 3f 20 30 20 3a 20 2d 31 3b 0a 20 20 20 20 7d 65  ? 0 : -1;.    }e
e0b0: 6c 73 65 7b 0a 20 20 20 20 20 20 6d 65 6d 63 70  lse{.      memcp
e0c0: 79 28 26 75 41 2c 20 26 69 41 2c 20 73 69 7a 65  y(&uA, &iA, size
e0d0: 6f 66 28 75 41 29 29 3b 0a 20 20 20 20 20 20 69  of(uA));.      i
e0e0: 66 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c  f( op==OP_ShiftL
e0f0: 65 66 74 20 29 7b 0a 20 20 20 20 20 20 20 20 75  eft ){.        u
e100: 41 20 3c 3c 3d 20 69 42 3b 0a 20 20 20 20 20 20  A <<= iB;.      
e110: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 75  }else{.        u
e120: 41 20 3e 3e 3d 20 69 42 3b 0a 20 20 20 20 20 20  A >>= iB;.      
e130: 20 20 2f 2a 20 53 69 67 6e 2d 65 78 74 65 6e 64    /* Sign-extend
e140: 20 6f 6e 20 61 20 72 69 67 68 74 20 73 68 69 66   on a right shif
e150: 74 20 6f 66 20 61 20 6e 65 67 61 74 69 76 65 20  t of a negative 
e160: 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 20 20  number */.      
e170: 20 20 69 66 28 20 69 41 3c 30 20 29 20 75 41 20    if( iA<0 ) uA 
e180: 7c 3d 20 28 28 28 28 75 36 34 29 30 78 66 66 66  |= ((((u64)0xfff
e190: 66 66 66 66 66 29 3c 3c 33 32 29 7c 30 78 66 66  fffff)<<32)|0xff
e1a0: 66 66 66 66 66 66 29 20 3c 3c 20 28 36 34 2d 69  ffffff) << (64-i
e1b0: 42 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  B);.      }.    
e1c0: 20 20 6d 65 6d 63 70 79 28 26 69 41 2c 20 26 75    memcpy(&iA, &u
e1d0: 41 2c 20 73 69 7a 65 6f 66 28 69 41 29 29 3b 0a  A, sizeof(iA));.
e1e0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f 75 74      }.  }.  pOut
e1f0: 2d 3e 75 2e 69 20 3d 20 69 41 3b 0a 20 20 4d 65  ->u.i = iA;.  Me
e200: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
e210: 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62  t, MEM_Int);.  b
e220: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
e230: 64 65 3a 20 41 64 64 49 6d 6d 20 20 50 31 20 50  de: AddImm  P1 P
e240: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
e250: 73 69 73 3a 20 72 5b 50 31 5d 3d 72 5b 50 31 5d  sis: r[P1]=r[P1]
e260: 2b 50 32 0a 2a 2a 20 0a 2a 2a 20 41 64 64 20 74  +P2.** .** Add t
e270: 68 65 20 63 6f 6e 73 74 61 6e 74 20 50 32 20 74  he constant P2 t
e280: 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  o the value in r
e290: 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 54  egister P1..** T
e2a0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77  he result is alw
e2b0: 61 79 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  ays an integer..
e2c0: 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63 65 20 61  **.** To force a
e2d0: 6e 79 20 72 65 67 69 73 74 65 72 20 74 6f 20 62  ny register to b
e2e0: 65 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 6a 75  e an integer, ju
e2f0: 73 74 20 61 64 64 20 30 2e 0a 2a 2f 0a 63 61 73  st add 0..*/.cas
e300: 65 20 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b 20 20  e OP_AddImm: {  
e310: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
e320: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
e330: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d  em[pOp->p1];.  m
e340: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
e350: 70 2c 20 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69  p, pIn1);.  sqli
e360: 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
e370: 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49  rify(pIn1);.  pI
e380: 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e  n1->u.i += pOp->
e390: 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p2;.  break;.}..
e3a0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 73 74 42  /* Opcode: MustB
e3b0: 65 49 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  eInt P1 P2 * * *
e3c0: 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65 20 74 68  .** .** Force th
e3d0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
e3e0: 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 6e 20  ter P1 to be an 
e3f0: 69 6e 74 65 67 65 72 2e 20 20 49 66 20 74 68 65  integer.  If the
e400: 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20   value.** in P1 
e410: 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65  is not an intege
e420: 72 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62 65 20  r and cannot be 
e430: 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61  converted into a
e440: 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 77 69 74  n integer.** wit
e450: 68 6f 75 74 20 64 61 74 61 20 6c 6f 73 73 2c 20  hout data loss, 
e460: 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69  then jump immedi
e470: 61 74 65 6c 79 20 74 6f 20 50 32 2c 20 6f 72 20  ately to P2, or 
e480: 69 66 20 50 32 3d 3d 30 0a 2a 2a 20 72 61 69 73  if P2==0.** rais
e490: 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53 4d  e an SQLITE_MISM
e4a0: 41 54 43 48 20 65 78 63 65 70 74 69 6f 6e 2e 0a  ATCH exception..
e4b0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 73 74 42  */.case OP_MustB
e4c0: 65 49 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20  eInt: {         
e4d0: 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
e4e0: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
e4f0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
e500: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
e510: 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a   MEM_Int)==0 ){.
e520: 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74      applyAffinit
e530: 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41  y(pIn1, SQLITE_A
e540: 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f  FF_NUMERIC, enco
e550: 64 69 6e 67 29 3b 0a 20 20 20 20 69 66 28 20 28  ding);.    if( (
e560: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
e570: 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20  M_Int)==0 ){.   
e580: 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
e590: 65 6e 28 31 2c 20 32 29 3b 0a 20 20 20 20 20 20  en(1, 2);.      
e5a0: 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29  if( pOp->p2==0 )
e5b0: 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
e5c0: 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a  QLITE_MISMATCH;.
e5d0: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
e5e0: 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
e5f0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
e600: 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f        goto jump_
e610: 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 7d 0a 20  to_p2;.      }. 
e620: 20 20 20 7d 0a 20 20 7d 0a 20 20 56 64 62 65 42     }.  }.  VdbeB
e630: 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 20 32 29  ranchTaken(0, 2)
e640: 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
e650: 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74  ag(pIn1, MEM_Int
e660: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23  );.  break;.}..#
e670: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
e680: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
e690: 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61  T./* Opcode: Rea
e6a0: 6c 41 66 66 69 6e 69 74 79 20 50 31 20 2a 20 2a  lAffinity P1 * *
e6b0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65   * *.**.** If re
e6c0: 67 69 73 74 65 72 20 50 31 20 68 6f 6c 64 73 20  gister P1 holds 
e6d0: 61 6e 20 69 6e 74 65 67 65 72 20 63 6f 6e 76 65  an integer conve
e6e0: 72 74 20 69 74 20 74 6f 20 61 20 72 65 61 6c 20  rt it to a real 
e6f0: 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  value..**.** Thi
e700: 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64  s opcode is used
e710: 20 77 68 65 6e 20 65 78 74 72 61 63 74 69 6e 67   when extracting
e720: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f   information fro
e730: 6d 20 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74 0a  m a column that.
e740: 2a 2a 20 68 61 73 20 52 45 41 4c 20 61 66 66 69  ** has REAL affi
e750: 6e 69 74 79 2e 20 20 53 75 63 68 20 63 6f 6c 75  nity.  Such colu
e760: 6d 6e 20 76 61 6c 75 65 73 20 6d 61 79 20 73 74  mn values may st
e770: 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 61 73  ill be stored as
e780: 0a 2a 2a 20 69 6e 74 65 67 65 72 73 2c 20 66 6f  .** integers, fo
e790: 72 20 73 70 61 63 65 20 65 66 66 69 63 69 65 6e  r space efficien
e7a0: 63 79 2c 20 62 75 74 20 61 66 74 65 72 20 65 78  cy, but after ex
e7b0: 74 72 61 63 74 69 6f 6e 20 77 65 20 77 61 6e 74  traction we want
e7c0: 20 74 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76 65   them.** to have
e7d0: 20 6f 6e 6c 79 20 61 20 72 65 61 6c 20 76 61 6c   only a real val
e7e0: 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ue..*/.case OP_R
e7f0: 65 61 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20 20  ealAffinity: {  
e800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e810: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  /* in1 */.  pIn1
e820: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
e830: 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
e840: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c  lags & (MEM_Int|
e850: 4d 45 4d 5f 49 6e 74 52 65 61 6c 29 20 29 7b 0a  MEM_IntReal) ){.
e860: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49      testcase( pI
e870: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
e880: 49 6e 74 20 29 3b 0a 20 20 20 20 74 65 73 74 63  Int );.    testc
e890: 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ase( pIn1->flags
e8a0: 20 26 20 4d 45 4d 5f 49 6e 74 52 65 61 6c 20 29   & MEM_IntReal )
e8b0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
e8c0: 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31  eMemRealify(pIn1
e8d0: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
e8e0: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  }.#endif..#ifnde
e8f0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41  f SQLITE_OMIT_CA
e900: 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 61  ST./* Opcode: Ca
e910: 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  st P1 P2 * * *.*
e920: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69  * Synopsis: affi
e930: 6e 69 74 79 28 72 5b 50 31 5d 29 0a 2a 2a 0a 2a  nity(r[P1]).**.*
e940: 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75  * Force the valu
e950: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
e960: 20 74 6f 20 62 65 20 74 68 65 20 74 79 70 65 20   to be the type 
e970: 64 65 66 69 6e 65 64 20 62 79 20 50 32 2e 0a 2a  defined by P2..*
e980: 2a 20 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c  * .** <ul>.** <l
e990: 69 3e 20 50 32 3d 3d 27 41 27 20 26 72 61 72 72  i> P2=='A' &rarr
e9a0: 3b 20 42 4c 4f 42 0a 2a 2a 20 3c 6c 69 3e 20 50  ; BLOB.** <li> P
e9b0: 32 3d 3d 27 42 27 20 26 72 61 72 72 3b 20 54 45  2=='B' &rarr; TE
e9c0: 58 54 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27  XT.** <li> P2=='
e9d0: 43 27 20 26 72 61 72 72 3b 20 4e 55 4d 45 52 49  C' &rarr; NUMERI
e9e0: 43 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 44  C.** <li> P2=='D
e9f0: 27 20 26 72 61 72 72 3b 20 49 4e 54 45 47 45 52  ' &rarr; INTEGER
ea00: 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 45 27  .** <li> P2=='E'
ea10: 20 26 72 61 72 72 3b 20 52 45 41 4c 0a 2a 2a 20   &rarr; REAL.** 
ea20: 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  </ul>.**.** A NU
ea30: 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20  LL value is not 
ea40: 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20  changed by this 
ea50: 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d  routine.  It rem
ea60: 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  ains NULL..*/.ca
ea70: 73 65 20 4f 50 5f 43 61 73 74 3a 20 7b 20 20 20  se OP_Cast: {   
ea80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ea90: 2a 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72  * in1 */.  asser
eaa0: 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 53 51 4c 49  t( pOp->p2>=SQLI
eab0: 54 45 5f 41 46 46 5f 42 4c 4f 42 20 26 26 20 70  TE_AFF_BLOB && p
eac0: 4f 70 2d 3e 70 32 3c 3d 53 51 4c 49 54 45 5f 41  Op->p2<=SQLITE_A
ead0: 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20 74 65 73  FF_REAL );.  tes
eae0: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d  tcase( pOp->p2==
eaf0: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20  SQLITE_AFF_TEXT 
eb00: 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
eb10: 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41  Op->p2==SQLITE_A
eb20: 46 46 5f 42 4c 4f 42 20 29 3b 0a 20 20 74 65 73  FF_BLOB );.  tes
eb30: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d  tcase( pOp->p2==
eb40: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
eb50: 49 43 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  IC );.  testcase
eb60: 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  ( pOp->p2==SQLIT
eb70: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 29 3b  E_AFF_INTEGER );
eb80: 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70  .  testcase( pOp
eb90: 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46  ->p2==SQLITE_AFF
eba0: 5f 52 45 41 4c 20 29 3b 0a 20 20 70 49 6e 31 20  _REAL );.  pIn1 
ebb0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
ebc0: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
ebd0: 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20  ange(p, pIn1);. 
ebe0: 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62   rc = ExpandBlob
ebf0: 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65  (pIn1);.  sqlite
ec00: 33 56 64 62 65 4d 65 6d 43 61 73 74 28 70 49 6e  3VdbeMemCast(pIn
ec10: 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 65 6e 63 6f  1, pOp->p2, enco
ec20: 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f  ding);.  UPDATE_
ec30: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e  MAX_BLOBSIZE(pIn
ec40: 31 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  1);.  if( rc ) g
ec50: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
ec60: 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
ec70: 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
ec80: 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f  ITE_OMIT_CAST */
ec90: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20  ../* Opcode: Eq 
eca0: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
ecb0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72  * Synopsis: IF r
ecc0: 5b 50 33 5d 3d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a  [P3]==r[P1].**.*
ecd0: 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76 61  * Compare the va
ece0: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
ecf0: 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66 20   P1 and P3.  If 
ed00: 72 65 67 28 50 33 29 3d 3d 72 65 67 28 50 31 29  reg(P3)==reg(P1)
ed10: 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f   then.** jump to
ed20: 20 61 64 64 72 65 73 73 20 50 32 2e 20 20 4f 72   address P2.  Or
ed30: 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53   if the SQLITE_S
ed40: 54 4f 52 45 50 32 20 66 6c 61 67 20 69 73 20 73  TOREP2 flag is s
ed50: 65 74 20 69 6e 20 50 35 2c 20 74 68 65 6e 0a 2a  et in P5, then.*
ed60: 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  * store the resu
ed70: 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e  lt of comparison
ed80: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
ed90: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  .**.** The SQLIT
eda0: 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69  E_AFF_MASK porti
edb0: 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62 65  on of P5 must be
edc0: 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68 61   an affinity cha
edd0: 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49  racter -.** SQLI
ede0: 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51 4c  TE_AFF_TEXT, SQL
edf0: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c  ITE_AFF_INTEGER,
ee00: 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 41   and so forth. A
ee10: 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
ee20: 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20  e .** to coerce 
ee30: 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63 6f  both inputs acco
ee40: 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61 66  rding to this af
ee50: 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74 68  finity before th
ee60: 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20  e.** comparison 
ee70: 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65 20  is made. If the 
ee80: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
ee90: 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e 75  is 0x00, then nu
eea0: 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74  meric.** affinit
eeb0: 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65 20  y is used. Note 
eec0: 74 68 61 74 20 74 68 65 20 61 66 66 69 6e 69 74  that the affinit
eed0: 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72  y conversions ar
eee0: 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b  e stored.** back
eef0: 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74 20   into the input 
ef00: 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
ef10: 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f 70   P3.  So this op
ef20: 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a 2a  code can cause.*
ef30: 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63 68 61  * persistent cha
ef40: 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74 65 72  nges to register
ef50: 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a  s P1 and P3..**.
ef60: 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76  ** Once any conv
ef70: 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61 6b  ersions have tak
ef80: 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65  en place, and ne
ef90: 69 74 68 65 72 20 76 61 6c 75 65 20 69 73 20 4e  ither value is N
efa0: 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c  ULL, .** the val
efb0: 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64  ues are compared
efc0: 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73  . If both values
efd0: 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e 20   are blobs then 
efe0: 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75  memcmp() is.** u
eff0: 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  sed to determine
f000: 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
f010: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
f020: 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 0a   If both values.
f030: 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68 65  ** are text, the
f040: 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74  n the appropriat
f050: 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  e collating func
f060: 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20 69  tion specified i
f070: 6e 0a 2a 2a 20 50 34 20 69 73 20 75 73 65 64 20  n.** P4 is used 
f080: 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70 61 72  to do the compar
f090: 69 73 6f 6e 2e 20 20 49 66 20 50 34 20 69 73 20  ison.  If P4 is 
f0a0: 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20 74 68  not specified th
f0b0: 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69  en.** memcmp() i
f0c0: 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72  s used to compar
f0d0: 65 20 74 65 78 74 20 73 74 72 69 6e 67 2e 20 20  e text string.  
f0e0: 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61  If both values a
f0f0: 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74  re.** numeric, t
f100: 68 65 6e 20 61 20 6e 75 6d 65 72 69 63 20 63 6f  hen a numeric co
f110: 6d 70 61 72 69 73 6f 6e 20 69 73 20 75 73 65 64  mparison is used
f120: 2e 20 49 66 20 74 68 65 20 74 77 6f 20 76 61 6c  . If the two val
f130: 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69  ues.** are of di
f140: 66 66 65 72 65 6e 74 20 74 79 70 65 73 2c 20 74  fferent types, t
f150: 68 65 6e 20 6e 75 6d 62 65 72 73 20 61 72 65 20  hen numbers are 
f160: 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20  considered less 
f170: 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20  than.** strings 
f180: 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65 20  and strings are 
f190: 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20  considered less 
f1a0: 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a  than blobs..**.*
f1b0: 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  * If SQLITE_NULL
f1c0: 45 51 20 69 73 20 73 65 74 20 69 6e 20 50 35 20  EQ is set in P5 
f1d0: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
f1e0: 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  of comparison is
f1f0: 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a   always either.*
f200: 2a 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20  * true or false 
f210: 61 6e 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c  and is never NUL
f220: 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72  L.  If both oper
f230: 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68  ands are NULL th
f240: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a  en the result.**
f250: 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69   of comparison i
f260: 73 20 74 72 75 65 2e 20 20 49 66 20 65 69 74 68  s true.  If eith
f270: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
f280: 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  LL then the resu
f290: 6c 74 20 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20  lt is false..** 
f2a0: 49 66 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61  If neither opera
f2b0: 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 72  nd is NULL the r
f2c0: 65 73 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d  esult is the sam
f2d0: 65 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65  e as it would be
f2e0: 20 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54   if.** the SQLIT
f2f0: 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65  E_NULLEQ flag we
f300: 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  re omitted from 
f310: 50 35 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 62 6f 74  P5..**.** If bot
f320: 68 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  h SQLITE_STOREP2
f330: 20 61 6e 64 20 53 51 4c 49 54 45 5f 4b 45 45 50   and SQLITE_KEEP
f340: 4e 55 4c 4c 20 66 6c 61 67 73 20 61 72 65 20 73  NULL flags are s
f350: 65 74 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 63  et then the.** c
f360: 6f 6e 74 65 6e 74 20 6f 66 20 72 5b 50 32 5d 20  ontent of r[P2] 
f370: 69 73 20 6f 6e 6c 79 20 63 68 61 6e 67 65 64 20  is only changed 
f380: 69 66 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65  if the new value
f390: 20 69 73 20 4e 55 4c 4c 20 6f 72 20 30 20 28 66   is NULL or 0 (f
f3a0: 61 6c 73 65 29 2e 0a 2a 2a 20 49 6e 20 6f 74 68  alse)..** In oth
f3b0: 65 72 20 77 6f 72 64 73 2c 20 61 20 70 72 69 6f  er words, a prio
f3c0: 72 20 72 5b 50 32 5d 20 76 61 6c 75 65 20 77 69  r r[P2] value wi
f3d0: 6c 6c 20 6e 6f 74 20 62 65 20 6f 76 65 72 77 72  ll not be overwr
f3e0: 69 74 74 65 6e 20 62 79 20 31 20 28 74 72 75 65  itten by 1 (true
f3f0: 29 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  )..*/./* Opcode:
f400: 20 4e 65 20 50 31 20 50 32 20 50 33 20 50 34 20   Ne P1 P2 P3 P4 
f410: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
f420: 49 46 20 72 5b 50 33 5d 21 3d 72 5b 50 31 5d 0a  IF r[P3]!=r[P1].
f430: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
f440: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 45   just like the E
f450: 71 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  q opcode except 
f460: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
f470: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
f480: 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67   operands in reg
f490: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
f4a0: 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20   are not equal. 
f4b0: 20 53 65 65 20 74 68 65 20 45 71 20 6f 70 63 6f   See the Eq opco
f4c0: 64 65 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69  de for.** additi
f4d0: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
f4e0: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 62 6f 74 68 20  ..**.** If both 
f4f0: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 61  SQLITE_STOREP2 a
f500: 6e 64 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55  nd SQLITE_KEEPNU
f510: 4c 4c 20 66 6c 61 67 73 20 61 72 65 20 73 65 74  LL flags are set
f520: 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 63 6f 6e   then the.** con
f530: 74 65 6e 74 20 6f 66 20 72 5b 50 32 5d 20 69 73  tent of r[P2] is
f540: 20 6f 6e 6c 79 20 63 68 61 6e 67 65 64 20 69 66   only changed if
f550: 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65 20 69   the new value i
f560: 73 20 4e 55 4c 4c 20 6f 72 20 31 20 28 74 72 75  s NULL or 1 (tru
f570: 65 29 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20  e)..** In other 
f580: 77 6f 72 64 73 2c 20 61 20 70 72 69 6f 72 20 72  words, a prior r
f590: 5b 50 32 5d 20 76 61 6c 75 65 20 77 69 6c 6c 20  [P2] value will 
f5a0: 6e 6f 74 20 62 65 20 6f 76 65 72 77 72 69 74 74  not be overwritt
f5b0: 65 6e 20 62 79 20 30 20 28 66 61 6c 73 65 29 2e  en by 0 (false).
f5c0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  .*/./* Opcode: L
f5d0: 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
f5e0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46  .** Synopsis: IF
f5f0: 20 72 5b 50 33 5d 3c 72 5b 50 31 5d 0a 2a 2a 0a   r[P3]<r[P1].**.
f600: 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76  ** Compare the v
f610: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
f620: 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66  r P1 and P3.  If
f630: 20 72 65 67 28 50 33 29 3c 72 65 67 28 50 31 29   reg(P3)<reg(P1)
f640: 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f   then.** jump to
f650: 20 61 64 64 72 65 73 73 20 50 32 2e 20 20 4f 72   address P2.  Or
f660: 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53   if the SQLITE_S
f670: 54 4f 52 45 50 32 20 66 6c 61 67 20 69 73 20 73  TOREP2 flag is s
f680: 65 74 20 69 6e 20 50 35 20 73 74 6f 72 65 0a 2a  et in P5 store.*
f690: 2a 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  * the result of 
f6a0: 63 6f 6d 70 61 72 69 73 6f 6e 20 28 30 20 6f 72  comparison (0 or
f6b0: 20 31 20 6f 72 20 4e 55 4c 4c 29 20 69 6e 74 6f   1 or NULL) into
f6c0: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
f6d0: 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
f6e0: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74  E_JUMPIFNULL bit
f6f0: 20 6f 66 20 50 35 20 69 73 20 73 65 74 20 61 6e   of P5 is set an
f700: 64 20 65 69 74 68 65 72 20 72 65 67 28 50 31 29  d either reg(P1)
f710: 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29 20 69   or.** reg(P3) i
f720: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  s NULL then the 
f730: 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 20  take the jump.  
f740: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55  If the SQLITE_JU
f750: 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74  MPIFNULL .** bit
f760: 20 69 73 20 63 6c 65 61 72 20 74 68 65 6e 20 66   is clear then f
f770: 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 66 20 65  all through if e
f780: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
f790: 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   NULL..**.** The
f7a0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
f7b0: 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d   portion of P5 m
f7c0: 75 73 74 20 62 65 20 61 6e 20 61 66 66 69 6e 69  ust be an affini
f7d0: 74 79 20 63 68 61 72 61 63 74 65 72 20 2d 0a 2a  ty character -.*
f7e0: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  * SQLITE_AFF_TEX
f7f0: 54 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  T, SQLITE_AFF_IN
f800: 54 45 47 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f  TEGER, and so fo
f810: 72 74 68 2e 20 41 6e 20 61 74 74 65 6d 70 74 20  rth. An attempt 
f820: 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63  is made .** to c
f830: 6f 65 72 63 65 20 62 6f 74 68 20 69 6e 70 75 74  oerce both input
f840: 73 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74  s according to t
f850: 68 69 73 20 61 66 66 69 6e 69 74 79 20 62 65 66  his affinity bef
f860: 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61  ore the.** compa
f870: 72 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49  rison is made. I
f880: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46  f the SQLITE_AFF
f890: 5f 4d 41 53 4b 20 69 73 20 30 78 30 30 2c 20 74  _MASK is 0x00, t
f8a0: 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61  hen numeric.** a
f8b0: 66 66 69 6e 69 74 79 20 69 73 20 75 73 65 64 2e  ffinity is used.
f8c0: 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 61   Note that the a
f8d0: 66 66 69 6e 69 74 79 20 63 6f 6e 76 65 72 73 69  ffinity conversi
f8e0: 6f 6e 73 20 61 72 65 20 73 74 6f 72 65 64 0a 2a  ons are stored.*
f8f0: 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20  * back into the 
f900: 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20  input registers 
f910: 50 31 20 61 6e 64 20 50 33 2e 20 20 53 6f 20 74  P1 and P3.  So t
f920: 68 69 73 20 6f 70 63 6f 64 65 20 63 61 6e 20 63  his opcode can c
f930: 61 75 73 65 0a 2a 2a 20 70 65 72 73 69 73 74 65  ause.** persiste
f940: 6e 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72 65  nt changes to re
f950: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
f960: 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e  3..**.** Once an
f970: 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61  y conversions ha
f980: 76 65 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20  ve taken place, 
f990: 61 6e 64 20 6e 65 69 74 68 65 72 20 76 61 6c 75  and neither valu
f9a0: 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74  e is NULL, .** t
f9b0: 68 65 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f  he values are co
f9c0: 6d 70 61 72 65 64 2e 20 49 66 20 62 6f 74 68 20  mpared. If both 
f9d0: 76 61 6c 75 65 73 20 61 72 65 20 62 6c 6f 62 73  values are blobs
f9e0: 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69   then memcmp() i
f9f0: 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64 65 74  s.** used to det
fa00: 65 72 6d 69 6e 65 20 74 68 65 20 72 65 73 75 6c  ermine the resul
fa10: 74 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72  ts of the compar
fa20: 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20 76  ison.  If both v
fa30: 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74 65 78  alues.** are tex
fa40: 74 2c 20 74 68 65 6e 20 74 68 65 20 61 70 70 72  t, then the appr
fa50: 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e  opriate collatin
fa60: 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69  g function speci
fa70: 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73  fied in.** P4 is
fa80: 20 20 75 73 65 64 20 74 6f 20 64 6f 20 74 68 65    used to do the
fa90: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66   comparison.  If
faa0: 20 50 34 20 69 73 20 6e 6f 74 20 73 70 65 63 69   P4 is not speci
fab0: 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d  fied then.** mem
fac0: 63 6d 70 28 29 20 69 73 20 75 73 65 64 20 74 6f  cmp() is used to
fad0: 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20 73 74   compare text st
fae0: 72 69 6e 67 2e 20 20 49 66 20 62 6f 74 68 20 76  ring.  If both v
faf0: 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d  alues are.** num
fb00: 65 72 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d  eric, then a num
fb10: 65 72 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20  eric comparison 
fb20: 69 73 20 75 73 65 64 2e 20 49 66 20 74 68 65 20  is used. If the 
fb30: 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72  two values.** ar
fb40: 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74  e of different t
fb50: 79 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65  ypes, then numbe
fb60: 72 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  rs are considere
fb70: 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73  d less than.** s
fb80: 74 72 69 6e 67 73 20 61 6e 64 20 73 74 72 69 6e  trings and strin
fb90: 67 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  gs are considere
fba0: 64 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62  d less than blob
fbb0: 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  s..*/./* Opcode:
fbc0: 20 4c 65 20 50 31 20 50 32 20 50 33 20 50 34 20   Le P1 P2 P3 P4 
fbd0: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
fbe0: 49 46 20 72 5b 50 33 5d 3c 3d 72 5b 50 31 5d 0a  IF r[P3]<=r[P1].
fbf0: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
fc00: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
fc10: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
fc20: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
fc30: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
fc40: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
fc50: 73 74 65 72 20 50 33 20 69 73 20 6c 65 73 73 20  ster P3 is less 
fc60: 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
fc70: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
fc80: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  ** register P1. 
fc90: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
fca0: 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
fcb0: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
fcc0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20  /./* Opcode: Gt 
fcd0: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
fce0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72  * Synopsis: IF r
fcf0: 5b 50 33 5d 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P3]>r[P1].**.**
fd00: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
fd10: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
fd20: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
fd30: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
fd40: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  n if.** the cont
fd50: 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
fd60: 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68  P3 is greater th
fd70: 61 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  an the content o
fd80: 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  f.** register P1
fd90: 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70  .  See the Lt op
fda0: 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
fdb0: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
fdc0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47  .*/./* Opcode: G
fdd0: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
fde0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46  .** Synopsis: IF
fdf0: 20 72 5b 50 33 5d 3e 3d 72 5b 50 31 5d 0a 2a 2a   r[P3]>=r[P1].**
fe00: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
fe10: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
fe20: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
fe30: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
fe40: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63  aken if.** the c
fe50: 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
fe60: 65 72 20 50 33 20 69 73 20 67 72 65 61 74 65 72  er P3 is greater
fe70: 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
fe80: 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  o the content of
fe90: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e  .** register P1.
fea0: 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63    See the Lt opc
feb0: 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
fec0: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
fed0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 71 3a 20 20  */.case OP_Eq:  
fee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
fef0: 73 61 6d 65 20 61 73 20 54 4b 5f 45 51 2c 20 6a  same as TK_EQ, j
ff00: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
ff10: 0a 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20  .case OP_Ne:    
ff20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
ff30: 6d 65 20 61 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d  me as TK_NE, jum
ff40: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
ff50: 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 20 20  ase OP_Lt:      
ff60: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
ff70: 20 61 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c   as TK_LT, jump,
ff80: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
ff90: 65 20 4f 50 5f 4c 65 3a 20 20 20 20 20 20 20 20  e OP_Le:        
ffa0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
ffb0: 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69  s TK_LE, jump, i
ffc0: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
ffd0: 4f 50 5f 47 74 3a 20 20 20 20 20 20 20 20 20 20  OP_Gt:          
ffe0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
fff0: 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_GT, jump, in1
10000 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
10010 5f 47 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  _Ge: {          
10020 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
10030 5f 47 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _GE, jump, in1, 
10040 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73  in3 */.  int res
10050 2c 20 72 65 73 32 3b 20 20 20 20 20 20 2f 2a 20  , res2;      /* 
10060 52 65 73 75 6c 74 20 6f 66 20 74 68 65 20 63 6f  Result of the co
10070 6d 70 61 72 69 73 6f 6e 20 6f 66 20 70 49 6e 31  mparison of pIn1
10080 20 61 67 61 69 6e 73 74 20 70 49 6e 33 20 2a 2f   against pIn3 */
10090 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79  .  char affinity
100a0 3b 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69  ;      /* Affini
100b0 74 79 20 74 6f 20 75 73 65 20 66 6f 72 20 63 6f  ty to use for co
100c0 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 31  mparison */.  u1
100d0 36 20 66 6c 61 67 73 31 3b 20 20 20 20 20 20 20  6 flags1;       
100e0 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69    /* Copy of ini
100f0 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 70 49  tial value of pI
10100 6e 31 2d 3e 66 6c 61 67 73 20 2a 2f 0a 20 20 75  n1->flags */.  u
10110 31 36 20 66 6c 61 67 73 33 3b 20 20 20 20 20 20  16 flags3;      
10120 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e     /* Copy of in
10130 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 70  itial value of p
10140 49 6e 33 2d 3e 66 6c 61 67 73 20 2a 2f 0a 0a 20  In3->flags */.. 
10150 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
10160 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d  p->p1];.  pIn3 =
10170 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
10180 0a 20 20 66 6c 61 67 73 31 20 3d 20 70 49 6e 31  .  flags1 = pIn1
10190 2d 3e 66 6c 61 67 73 3b 0a 20 20 66 6c 61 67 73  ->flags;.  flags
101a0 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b  3 = pIn3->flags;
101b0 0a 20 20 69 66 28 20 28 66 6c 61 67 73 31 20 7c  .  if( (flags1 |
101c0 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f 4e 75 6c   flags3)&MEM_Nul
101d0 6c 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 65 20  l ){.    /* One 
101e0 6f 72 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73  or both operands
101f0 20 61 72 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20   are NULL */.   
10200 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53   if( pOp->p5 & S
10210 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 29 7b 0a  QLITE_NULLEQ ){.
10220 20 20 20 20 20 20 2f 2a 20 49 66 20 53 51 4c 49        /* If SQLI
10230 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74  TE_NULLEQ is set
10240 20 28 77 68 69 63 68 20 77 69 6c 6c 20 6f 6e 6c   (which will onl
10250 79 20 68 61 70 70 65 6e 20 69 66 20 74 68 65 20  y happen if the 
10260 6f 70 65 72 61 74 6f 72 20 69 73 0a 20 20 20 20  operator is.    
10270 20 20 2a 2a 20 4f 50 5f 45 71 20 6f 72 20 4f 50    ** OP_Eq or OP
10280 5f 4e 65 29 20 74 68 65 6e 20 74 61 6b 65 20 74  _Ne) then take t
10290 68 65 20 6a 75 6d 70 20 6f 72 20 6e 6f 74 20 64  he jump or not d
102a0 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
102b0 68 65 72 0a 20 20 20 20 20 20 2a 2a 20 6f 72 20  her.      ** or 
102c0 6e 6f 74 20 62 6f 74 68 20 6f 70 65 72 61 6e 64  not both operand
102d0 73 20 61 72 65 20 6e 75 6c 6c 2e 0a 20 20 20 20  s are null..    
102e0 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72    */.      asser
102f0 74 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d  t( (flags1 & MEM
10300 5f 43 6c 65 61 72 65 64 29 3d 3d 30 20 29 3b 0a  _Cleared)==0 );.
10310 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70        assert( (p
10320 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
10330 4a 55 4d 50 49 46 4e 55 4c 4c 29 3d 3d 30 20 7c  JUMPIFNULL)==0 |
10340 7c 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a  | CORRUPT_DB );.
10350 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
10360 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54  (pOp->p5 & SQLIT
10370 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 29 21 3d 30  E_JUMPIFNULL)!=0
10380 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28 66   );.      if( (f
10390 6c 61 67 73 31 26 66 6c 61 67 73 33 26 4d 45 4d  lags1&flags3&MEM
103a0 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20 20  _Null)!=0.      
103b0 20 26 26 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f   && (flags3&MEM_
103c0 43 6c 65 61 72 65 64 29 3d 3d 30 0a 20 20 20 20  Cleared)==0.    
103d0 20 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 73    ){.        res
103e0 20 3d 20 30 3b 20 20 2f 2a 20 4f 70 65 72 61 6e   = 0;  /* Operan
103f0 64 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a  ds are equal */.
10400 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
10410 20 20 20 20 20 72 65 73 20 3d 20 28 28 66 6c 61       res = ((fla
10420 67 73 33 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 20  gs3 & MEM_Null) 
10430 3f 20 2d 31 20 3a 20 2b 31 29 3b 20 20 2f 2a 20  ? -1 : +1);  /* 
10440 4f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 6f 74  Operands are not
10450 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20   equal */.      
10460 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
10470 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 55 4c     /* SQLITE_NUL
10480 4c 45 51 20 69 73 20 63 6c 65 61 72 20 61 6e 64  LEQ is clear and
10490 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 6f 70   at least one op
104a0 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a 20  erand is NULL,. 
104b0 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65       ** then the
104c0 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79   result is alway
104d0 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 20 20 2a 2a  s NULL..      **
104e0 20 54 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   The jump is tak
104f0 65 6e 20 69 66 20 74 68 65 20 53 51 4c 49 54 45  en if the SQLITE
10500 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20  _JUMPIFNULL bit 
10510 69 73 20 73 65 74 2e 0a 20 20 20 20 20 20 2a 2f  is set..      */
10520 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
10530 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52  p5 & SQLITE_STOR
10540 45 50 32 20 29 7b 0a 20 20 20 20 20 20 20 20 70  EP2 ){.        p
10550 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
10560 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20 20 69 43  >p2];.        iC
10570 6f 6d 70 61 72 65 20 3d 20 31 3b 20 20 20 20 2f  ompare = 1;    /
10580 2a 20 4f 70 65 72 61 6e 64 73 20 61 72 65 20 6e  * Operands are n
10590 6f 74 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20  ot equal */.    
105a0 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
105b0 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20  ange(p, pOut);. 
105c0 20 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70         MemSetTyp
105d0 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
105e0 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20 52  Null);.        R
105f0 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
10600 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p2, pOut);.  
10610 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
10620 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
10630 65 6e 28 32 2c 33 29 3b 0a 20 20 20 20 20 20 20  en(2,3);.       
10640 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53   if( pOp->p5 & S
10650 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
10660 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f   ){.          go
10670 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
10680 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
10690 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
106a0 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
106b0 20 2f 2a 20 4e 65 69 74 68 65 72 20 6f 70 65 72   /* Neither oper
106c0 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 20 20 44 6f  and is NULL.  Do
106d0 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 2a   a comparison. *
106e0 2f 0a 20 20 20 20 61 66 66 69 6e 69 74 79 20 3d  /.    affinity =
106f0 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
10700 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a 20 20 20 20  E_AFF_MASK;.    
10710 69 66 28 20 61 66 66 69 6e 69 74 79 3e 3d 53 51  if( affinity>=SQ
10720 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
10730 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 66   ){.      if( (f
10740 6c 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29 26  lags1 | flags3)&
10750 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20  MEM_Str ){.     
10760 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 20 26     if( (flags1 &
10770 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 49 6e   (MEM_Int|MEM_In
10780 74 52 65 61 6c 7c 4d 45 4d 5f 52 65 61 6c 7c 4d  tReal|MEM_Real|M
10790 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74  EM_Str))==MEM_St
107a0 72 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61  r ){.          a
107b0 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
107c0 69 74 79 28 70 49 6e 31 2c 30 29 3b 0a 20 20 20  ity(pIn1,0);.   
107d0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 66         assert( f
107e0 6c 61 67 73 33 3d 3d 70 49 6e 33 2d 3e 66 6c 61  lags3==pIn3->fla
107f0 67 73 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20  gs );.          
10800 2f 2a 20 74 65 73 74 63 61 73 65 28 20 66 6c 61  /* testcase( fla
10810 67 73 33 21 3d 70 49 6e 33 2d 3e 66 6c 61 67 73  gs3!=pIn3->flags
10820 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 2a 2a   );.          **
10830 20 74 68 69 73 20 75 73 65 64 20 74 6f 20 62 65   this used to be
10840 20 70 6f 73 73 69 62 6c 65 20 77 69 74 68 20 70   possible with p
10850 49 6e 31 3d 3d 70 49 6e 33 2c 20 62 75 74 20 6e  In1==pIn3, but n
10860 6f 74 20 73 69 6e 63 65 0a 20 20 20 20 20 20 20  ot since.       
10870 20 20 20 2a 2a 20 74 68 65 20 63 6f 6c 75 6d 6e     ** the column
10880 20 63 61 63 68 65 20 77 61 73 20 72 65 6d 6f 76   cache was remov
10890 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  ed.  The followi
108a0 6e 67 20 61 73 73 69 67 6e 6d 65 6e 74 0a 20 20  ng assignment.  
108b0 20 20 20 20 20 20 20 20 2a 2a 20 69 73 20 65 73          ** is es
108c0 73 65 6e 74 69 61 6c 6c 79 20 61 20 6e 6f 2d 6f  sentially a no-o
108d0 70 2e 20 20 42 75 74 2c 20 69 74 20 70 72 6f 76  p.  But, it prov
108e0 69 64 65 73 20 64 65 66 65 6e 73 65 2d 69 6e 2d  ides defense-in-
108f0 64 65 70 74 68 0a 20 20 20 20 20 20 20 20 20 20  depth.          
10900 2a 2a 20 69 6e 20 63 61 73 65 20 6f 75 72 20 61  ** in case our a
10910 6e 61 6c 79 73 69 73 20 69 73 20 69 6e 63 6f 72  nalysis is incor
10920 72 65 63 74 2c 20 73 6f 20 69 74 20 69 73 20 6c  rect, so it is l
10930 65 66 74 20 69 6e 2e 20 2a 2f 0a 20 20 20 20 20  eft in. */.     
10940 20 20 20 20 20 66 6c 61 67 73 33 20 3d 20 70 49       flags3 = pI
10950 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 20 20 20  n3->flags;.     
10960 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
10970 20 28 66 6c 61 67 73 33 20 26 20 28 4d 45 4d 5f   (flags3 & (MEM_
10980 49 6e 74 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c 7c  Int|MEM_IntReal|
10990 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72  MEM_Real|MEM_Str
109a0 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20  ))==MEM_Str ){. 
109b0 20 20 20 20 20 20 20 20 20 61 70 70 6c 79 4e 75           applyNu
109c0 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49  mericAffinity(pI
109d0 6e 33 2c 30 29 3b 0a 20 20 20 20 20 20 20 20 7d  n3,0);.        }
109e0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 2f  .      }.      /
109f0 2a 20 48 61 6e 64 6c 65 20 74 68 65 20 63 6f 6d  * Handle the com
10a00 6d 6f 6e 20 63 61 73 65 20 6f 66 20 69 6e 74 65  mon case of inte
10a10 67 65 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20 68  ger comparison h
10a20 65 72 65 2c 20 61 73 20 61 6e 0a 20 20 20 20 20  ere, as an.     
10a30 20 2a 2a 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e   ** optimization
10a40 2c 20 74 6f 20 61 76 6f 69 64 20 61 20 63 61 6c  , to avoid a cal
10a50 6c 20 74 6f 20 73 71 6c 69 74 65 33 4d 65 6d 43  l to sqlite3MemC
10a60 6f 6d 70 61 72 65 28 29 20 2a 2f 0a 20 20 20 20  ompare() */.    
10a70 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
10a80 67 73 20 26 20 70 49 6e 33 2d 3e 66 6c 61 67 73  gs & pIn3->flags
10a90 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
10aa0 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 49  {.        if( pI
10ab0 6e 33 2d 3e 75 2e 69 20 3e 20 70 49 6e 31 2d 3e  n3->u.i > pIn1->
10ac0 75 2e 69 20 29 7b 20 72 65 73 20 3d 20 2b 31 3b  u.i ){ res = +1;
10ad0 20 67 6f 74 6f 20 63 6f 6d 70 61 72 65 5f 6f 70   goto compare_op
10ae0 3b 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20  ; }.        if( 
10af0 70 49 6e 33 2d 3e 75 2e 69 20 3c 20 70 49 6e 31  pIn3->u.i < pIn1
10b00 2d 3e 75 2e 69 20 29 7b 20 72 65 73 20 3d 20 2d  ->u.i ){ res = -
10b10 31 3b 20 67 6f 74 6f 20 63 6f 6d 70 61 72 65 5f  1; goto compare_
10b20 6f 70 3b 20 7d 0a 20 20 20 20 20 20 20 20 72 65  op; }.        re
10b30 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 67  s = 0;.        g
10b40 6f 74 6f 20 63 6f 6d 70 61 72 65 5f 6f 70 3b 0a  oto compare_op;.
10b50 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
10b60 65 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d 3d  e if( affinity==
10b70 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20  SQLITE_AFF_TEXT 
10b80 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c  ){.      if( (fl
10b90 61 67 73 31 20 26 20 4d 45 4d 5f 53 74 72 29 3d  ags1 & MEM_Str)=
10ba0 3d 30 20 26 26 20 28 66 6c 61 67 73 31 26 28 4d  =0 && (flags1&(M
10bb0 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c  EM_Int|MEM_Real|
10bc0 4d 45 4d 5f 49 6e 74 52 65 61 6c 29 29 21 3d 30  MEM_IntReal))!=0
10bd0 20 29 7b 0a 20 20 20 20 20 20 20 20 74 65 73 74   ){.        test
10be0 63 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67  case( pIn1->flag
10bf0 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
10c00 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
10c10 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
10c20 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20 20  EM_Real );.     
10c30 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e     testcase( pIn
10c40 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
10c50 6e 74 52 65 61 6c 20 29 3b 0a 20 20 20 20 20 20  ntReal );.      
10c60 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
10c70 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31 2c 20  Stringify(pIn1, 
10c80 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b 0a 20 20  encoding, 1);.  
10c90 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
10ca0 28 66 6c 61 67 73 31 26 4d 45 4d 5f 44 79 6e 29  (flags1&MEM_Dyn)
10cb0 20 21 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73   != (pIn1->flags
10cc0 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20  &MEM_Dyn) );.   
10cd0 20 20 20 20 20 66 6c 61 67 73 31 20 3d 20 28 70       flags1 = (p
10ce0 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45  In1->flags & ~ME
10cf0 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28 66  M_TypeMask) | (f
10d00 6c 61 67 73 31 20 26 20 4d 45 4d 5f 54 79 70 65  lags1 & MEM_Type
10d10 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20 20 20 61  Mask);.        a
10d20 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70 49 6e  ssert( pIn1!=pIn
10d30 33 20 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  3 );.      }.   
10d40 20 20 20 69 66 28 20 28 66 6c 61 67 73 33 20 26     if( (flags3 &
10d50 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26 20   MEM_Str)==0 && 
10d60 28 66 6c 61 67 73 33 26 28 4d 45 4d 5f 49 6e 74  (flags3&(MEM_Int
10d70 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e  |MEM_Real|MEM_In
10d80 74 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a 20 20  tReal))!=0 ){.  
10d90 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
10da0 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
10db0 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20 20 20  M_Int );.       
10dc0 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 33 2d   testcase( pIn3-
10dd0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61  >flags & MEM_Rea
10de0 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73  l );.        tes
10df0 74 63 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61  tcase( pIn3->fla
10e00 67 73 20 26 20 4d 45 4d 5f 49 6e 74 52 65 61 6c  gs & MEM_IntReal
10e10 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   );.        sqli
10e20 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67  te3VdbeMemString
10e30 69 66 79 28 70 49 6e 33 2c 20 65 6e 63 6f 64 69  ify(pIn3, encodi
10e40 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20  ng, 1);.        
10e50 74 65 73 74 63 61 73 65 28 20 28 66 6c 61 67 73  testcase( (flags
10e60 33 26 4d 45 4d 5f 44 79 6e 29 20 21 3d 20 28 70  3&MEM_Dyn) != (p
10e70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 44  In3->flags&MEM_D
10e80 79 6e 29 20 29 3b 0a 20 20 20 20 20 20 20 20 66  yn) );.        f
10e90 6c 61 67 73 33 20 3d 20 28 70 49 6e 33 2d 3e 66  lags3 = (pIn3->f
10ea0 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 54 79 70 65  lags & ~MEM_Type
10eb0 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73 33 20  Mask) | (flags3 
10ec0 26 20 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b  & MEM_TypeMask);
10ed0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
10ee0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
10ef0 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53  p4type==P4_COLLS
10f00 45 51 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 70 43  EQ || pOp->p4.pC
10f10 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20 20 20 72 65  oll==0 );.    re
10f20 73 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f  s = sqlite3MemCo
10f30 6d 70 61 72 65 28 70 49 6e 33 2c 20 70 49 6e 31  mpare(pIn3, pIn1
10f40 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29  , pOp->p4.pColl)
10f50 3b 0a 20 20 7d 0a 63 6f 6d 70 61 72 65 5f 6f 70  ;.  }.compare_op
10f60 3a 0a 20 20 2f 2a 20 41 74 20 74 68 69 73 20 70  :.  /* At this p
10f70 6f 69 6e 74 2c 20 72 65 73 20 69 73 20 6e 65 67  oint, res is neg
10f80 61 74 69 76 65 2c 20 7a 65 72 6f 2c 20 6f 72 20  ative, zero, or 
10f90 70 6f 73 69 74 69 76 65 20 69 66 20 72 65 67 5b  positive if reg[
10fa0 50 31 5d 20 69 73 0a 20 20 2a 2a 20 6c 65 73 73  P1] is.  ** less
10fb0 20 74 68 61 6e 2c 20 65 71 75 61 6c 20 74 6f 2c   than, equal to,
10fc0 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e   or greater than
10fd0 20 72 65 67 5b 50 33 5d 2c 20 72 65 73 70 65 63   reg[P3], respec
10fe0 74 69 76 65 6c 79 2e 20 20 43 6f 6d 70 75 74 65  tively.  Compute
10ff0 0a 20 20 2a 2a 20 74 68 65 20 61 6e 73 77 65 72  .  ** the answer
11000 20 74 6f 20 74 68 69 73 20 6f 70 65 72 61 74 6f   to this operato
11010 72 20 69 6e 20 72 65 73 32 2c 20 64 65 70 65 6e  r in res2, depen
11020 64 69 6e 67 20 6f 6e 20 77 68 61 74 20 74 68 65  ding on what the
11030 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 20 20 2a 2a   comparison.  **
11040 20 6f 70 65 72 61 74 6f 72 20 61 63 74 75 61 6c   operator actual
11050 6c 79 20 69 73 2e 20 20 54 68 65 20 6e 65 78 74  ly is.  The next
11060 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 20 64   block of code d
11070 65 70 65 6e 64 73 20 6f 6e 20 74 68 65 20 66 61  epends on the fa
11080 63 74 0a 20 20 2a 2a 20 74 68 61 74 20 74 68 65  ct.  ** that the
11090 20 36 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70   6 comparison op
110a0 65 72 61 74 6f 72 73 20 61 72 65 20 63 6f 6e 73  erators are cons
110b0 65 63 75 74 69 76 65 20 69 6e 74 65 67 65 72 73  ecutive integers
110c0 20 69 6e 20 74 68 69 73 0a 20 20 2a 2a 20 6f 72   in this.  ** or
110d0 64 65 72 3a 20 20 4e 45 2c 20 45 51 2c 20 47 54  der:  NE, EQ, GT
110e0 2c 20 4c 45 2c 20 4c 54 2c 20 47 45 20 2a 2f 0a  , LE, LT, GE */.
110f0 20 20 61 73 73 65 72 74 28 20 4f 50 5f 45 71 3d    assert( OP_Eq=
11100 3d 4f 50 5f 4e 65 2b 31 20 29 3b 20 61 73 73 65  =OP_Ne+1 ); asse
11110 72 74 28 20 4f 50 5f 47 74 3d 3d 4f 50 5f 4e 65  rt( OP_Gt==OP_Ne
11120 2b 32 20 29 3b 20 61 73 73 65 72 74 28 20 4f 50  +2 ); assert( OP
11130 5f 4c 65 3d 3d 4f 50 5f 4e 65 2b 33 20 29 3b 0a  _Le==OP_Ne+3 );.
11140 20 20 61 73 73 65 72 74 28 20 4f 50 5f 4c 74 3d    assert( OP_Lt=
11150 3d 4f 50 5f 4e 65 2b 34 20 29 3b 20 61 73 73 65  =OP_Ne+4 ); asse
11160 72 74 28 20 4f 50 5f 47 65 3d 3d 4f 50 5f 4e 65  rt( OP_Ge==OP_Ne
11170 2b 35 20 29 3b 0a 20 20 69 66 28 20 72 65 73 3c  +5 );.  if( res<
11180 30 20 29 7b 20 20 20 20 20 20 20 20 20 20 20 20  0 ){            
11190 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6e              /* n
111a0 65 2c 20 65 71 2c 20 67 74 2c 20 6c 65 2c 20 6c  e, eq, gt, le, l
111b0 74 2c 20 67 65 20 2a 2f 0a 20 20 20 20 73 74 61  t, ge */.    sta
111c0 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  tic const unsign
111d0 65 64 20 63 68 61 72 20 61 4c 54 62 5b 5d 20 3d  ed char aLTb[] =
111e0 20 7b 20 31 2c 20 20 30 2c 20 20 30 2c 20 20 31   { 1,  0,  0,  1
111f0 2c 20 20 31 2c 20 20 30 20 7d 3b 0a 20 20 20 20  ,  1,  0 };.    
11200 72 65 73 32 20 3d 20 61 4c 54 62 5b 70 4f 70 2d  res2 = aLTb[pOp-
11210 3e 6f 70 63 6f 64 65 20 2d 20 4f 50 5f 4e 65 5d  >opcode - OP_Ne]
11220 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 72 65  ;.  }else if( re
11230 73 3d 3d 30 20 29 7b 0a 20 20 20 20 73 74 61 74  s==0 ){.    stat
11240 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  ic const unsigne
11250 64 20 63 68 61 72 20 61 45 51 62 5b 5d 20 3d 20  d char aEQb[] = 
11260 7b 20 30 2c 20 20 31 2c 20 20 30 2c 20 20 31 2c  { 0,  1,  0,  1,
11270 20 20 30 2c 20 20 31 20 7d 3b 0a 20 20 20 20 72    0,  1 };.    r
11280 65 73 32 20 3d 20 61 45 51 62 5b 70 4f 70 2d 3e  es2 = aEQb[pOp->
11290 6f 70 63 6f 64 65 20 2d 20 4f 50 5f 4e 65 5d 3b  opcode - OP_Ne];
112a0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 74  .  }else{.    st
112b0 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67  atic const unsig
112c0 6e 65 64 20 63 68 61 72 20 61 47 54 62 5b 5d 20  ned char aGTb[] 
112d0 3d 20 7b 20 31 2c 20 20 30 2c 20 20 31 2c 20 20  = { 1,  0,  1,  
112e0 30 2c 20 20 30 2c 20 20 31 20 7d 3b 0a 20 20 20  0,  0,  1 };.   
112f0 20 72 65 73 32 20 3d 20 61 47 54 62 5b 70 4f 70   res2 = aGTb[pOp
11300 2d 3e 6f 70 63 6f 64 65 20 2d 20 4f 50 5f 4e 65  ->opcode - OP_Ne
11310 5d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 55 6e 64  ];.  }..  /* Und
11320 6f 20 61 6e 79 20 63 68 61 6e 67 65 73 20 6d 61  o any changes ma
11330 64 65 20 62 79 20 61 70 70 6c 79 41 66 66 69 6e  de by applyAffin
11340 69 74 79 28 29 20 74 6f 20 74 68 65 20 69 6e 70  ity() to the inp
11350 75 74 20 72 65 67 69 73 74 65 72 73 2e 20 2a 2f  ut registers. */
11360 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 31  .  assert( (pIn1
11370 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79  ->flags & MEM_Dy
11380 6e 29 20 3d 3d 20 28 66 6c 61 67 73 31 20 26 20  n) == (flags1 & 
11390 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 70 49  MEM_Dyn) );.  pI
113a0 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 66 6c 61 67  n1->flags = flag
113b0 73 31 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  s1;.  assert( (p
113c0 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
113d0 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67 73 33  _Dyn) == (flags3
113e0 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20   & MEM_Dyn) );. 
113f0 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 3d 20 66   pIn3->flags = f
11400 6c 61 67 73 33 3b 0a 0a 20 20 69 66 28 20 70 4f  lags3;..  if( pO
11410 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53  p->p5 & SQLITE_S
11420 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 70 4f  TOREP2 ){.    pO
11430 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
11440 70 32 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72  p2];.    iCompar
11450 65 20 3d 20 72 65 73 3b 0a 20 20 20 20 69 66 28  e = res;.    if(
11460 20 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49   (pOp->p5 & SQLI
11470 54 45 5f 4b 45 45 50 4e 55 4c 4c 29 21 3d 30 20  TE_KEEPNULL)!=0 
11480 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ){.      /* The 
11490 4b 45 45 50 4e 55 4c 4c 20 66 6c 61 67 20 70 72  KEEPNULL flag pr
114a0 65 76 65 6e 74 73 20 4f 50 5f 45 71 20 66 72 6f  events OP_Eq fro
114b0 6d 20 6f 76 65 72 77 72 69 74 69 6e 67 20 61 20  m overwriting a 
114c0 4e 55 4c 4c 20 77 69 74 68 20 31 0a 20 20 20 20  NULL with 1.    
114d0 20 20 2a 2a 20 61 6e 64 20 70 72 65 76 65 6e 74    ** and prevent
114e0 73 20 4f 50 5f 4e 65 20 66 72 6f 6d 20 6f 76 65  s OP_Ne from ove
114f0 72 77 72 69 74 69 6e 67 20 4e 55 4c 4c 20 77 69  rwriting NULL wi
11500 74 68 20 30 2e 20 20 54 68 69 73 20 66 6c 61 67  th 0.  This flag
11510 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 6f 6e 6c  .      ** is onl
11520 79 20 75 73 65 64 20 69 6e 20 63 6f 6e 74 65 78  y used in contex
11530 74 73 20 77 68 65 72 65 20 65 69 74 68 65 72 3a  ts where either:
11540 0a 20 20 20 20 20 20 2a 2a 20 20 20 28 31 29 20  .      **   (1) 
11550 6f 70 3d 3d 4f 50 5f 45 71 20 26 26 20 28 72 5b  op==OP_Eq && (r[
11560 50 32 5d 3d 3d 4e 55 4c 4c 20 7c 7c 20 72 5b 50  P2]==NULL || r[P
11570 32 5d 3d 3d 30 29 0a 20 20 20 20 20 20 2a 2a 20  2]==0).      ** 
11580 20 20 28 32 29 20 6f 70 3d 3d 4f 50 5f 4e 65 20    (2) op==OP_Ne 
11590 26 26 20 28 72 5b 50 32 5d 3d 3d 4e 55 4c 4c 20  && (r[P2]==NULL 
115a0 7c 7c 20 72 5b 50 32 5d 3d 3d 31 29 0a 20 20 20  || r[P2]==1).   
115b0 20 20 20 2a 2a 20 54 68 65 72 65 66 6f 72 65 20     ** Therefore 
115c0 69 74 20 69 73 20 6e 6f 74 20 6e 65 63 65 73 73  it is not necess
115d0 61 72 79 20 74 6f 20 63 68 65 63 6b 20 74 68 65  ary to check the
115e0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 5b 50 32   content of r[P2
115f0 5d 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20 4e  ] for.      ** N
11600 55 4c 4c 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73  ULL. */.      as
11610 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
11620 65 3d 3d 4f 50 5f 4e 65 20 7c 7c 20 70 4f 70 2d  e==OP_Ne || pOp-
11630 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29  >opcode==OP_Eq )
11640 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
11650 72 65 73 32 3d 3d 30 20 7c 7c 20 72 65 73 32 3d  res2==0 || res2=
11660 3d 31 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74  =1 );.      test
11670 63 61 73 65 28 20 72 65 73 32 3d 3d 30 20 26 26  case( res2==0 &&
11680 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
11690 5f 45 71 20 29 3b 0a 20 20 20 20 20 20 74 65 73  _Eq );.      tes
116a0 74 63 61 73 65 28 20 72 65 73 32 3d 3d 31 20 26  tcase( res2==1 &
116b0 26 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  & pOp->opcode==O
116c0 50 5f 45 71 20 29 3b 0a 20 20 20 20 20 20 74 65  P_Eq );.      te
116d0 73 74 63 61 73 65 28 20 72 65 73 32 3d 3d 30 20  stcase( res2==0 
116e0 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  && pOp->opcode==
116f0 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20 20 20 74  OP_Ne );.      t
11700 65 73 74 63 61 73 65 28 20 72 65 73 32 3d 3d 31  estcase( res2==1
11710 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   && pOp->opcode=
11720 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20 20 20  =OP_Ne );.      
11730 69 66 28 20 28 70 4f 70 2d 3e 6f 70 63 6f 64 65  if( (pOp->opcode
11740 3d 3d 4f 50 5f 45 71 29 3d 3d 72 65 73 32 20 29  ==OP_Eq)==res2 )
11750 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
11760 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
11770 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20  ge(p, pOut);.   
11780 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
11790 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
117a0 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
117b0 72 65 73 32 3b 0a 20 20 20 20 52 45 47 49 53 54  res2;.    REGIST
117c0 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
117d0 2c 20 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65  , pOut);.  }else
117e0 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  {.    VdbeBranch
117f0 54 61 6b 65 6e 28 72 65 73 32 21 3d 30 2c 20 28  Taken(res2!=0, (
11800 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
11810 5f 4e 55 4c 4c 45 51 29 3f 32 3a 33 29 3b 0a 20  _NULLEQ)?2:3);. 
11820 20 20 20 69 66 28 20 72 65 73 32 20 29 7b 0a 20     if( res2 ){. 
11830 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74       goto jump_t
11840 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  o_p2;.    }.  }.
11850 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
11860 70 63 6f 64 65 3a 20 45 6c 73 65 4e 6f 74 45 71  pcode: ElseNotEq
11870 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   * P2 * * *.**.*
11880 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6d 75  * This opcode mu
11890 73 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66  st immediately f
118a0 6f 6c 6c 6f 77 20 61 6e 20 4f 50 5f 4c 74 20 6f  ollow an OP_Lt o
118b0 72 20 4f 50 5f 47 74 20 63 6f 6d 70 61 72 69 73  r OP_Gt comparis
118c0 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 0a 2a 2a 20  on operator..** 
118d0 49 66 20 72 65 73 75 6c 74 20 6f 66 20 61 6e 20  If result of an 
118e0 4f 50 5f 45 71 20 63 6f 6d 70 61 72 69 73 6f 6e  OP_Eq comparison
118f0 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 74 77 6f   on the same two
11900 20 6f 70 65 72 61 6e 64 73 0a 2a 2a 20 77 6f 75   operands.** wou
11910 6c 64 20 68 61 76 65 20 62 65 20 4e 55 4c 4c 20  ld have be NULL 
11920 6f 72 20 66 61 6c 73 65 20 28 30 29 2c 20 74 68  or false (0), th
11930 65 6e 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  en then jump to 
11940 50 32 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 72  P2. .** If the r
11950 65 73 75 6c 74 20 6f 66 20 61 6e 20 4f 50 5f 45  esult of an OP_E
11960 71 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 6e 20  q comparison on 
11970 74 68 65 20 74 77 6f 20 70 72 65 76 69 6f 75 73  the two previous
11980 20 6f 70 65 72 61 6e 64 73 0a 2a 2a 20 77 6f 75   operands.** wou
11990 6c 64 20 68 61 76 65 20 62 65 65 6e 20 74 72 75  ld have been tru
119a0 65 20 28 31 29 2c 20 74 68 65 6e 20 66 61 6c 6c  e (1), then fall
119b0 20 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a 63 61 73   through..*/.cas
119c0 65 20 4f 50 5f 45 6c 73 65 4e 6f 74 45 71 3a 20  e OP_ElseNotEq: 
119d0 7b 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20  {       /* same 
119e0 61 73 20 54 4b 5f 45 53 43 41 50 45 2c 20 6a 75  as TK_ESCAPE, ju
119f0 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
11a00 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 61 73 73  pOp>aOp );.  ass
11a10 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63  ert( pOp[-1].opc
11a20 6f 64 65 3d 3d 4f 50 5f 4c 74 20 7c 7c 20 70 4f  ode==OP_Lt || pO
11a30 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  p[-1].opcode==OP
11a40 5f 47 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  _Gt );.  assert(
11a50 20 70 4f 70 5b 2d 31 5d 2e 70 35 20 26 20 53 51   pOp[-1].p5 & SQ
11a60 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 3b 0a  LITE_STOREP2 );.
11a70 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
11a80 6e 28 69 43 6f 6d 70 61 72 65 21 3d 30 2c 20 32  n(iCompare!=0, 2
11a90 29 3b 0a 20 20 69 66 28 20 69 43 6f 6d 70 61 72  );.  if( iCompar
11aa0 65 21 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70  e!=0 ) goto jump
11ab0 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b  _to_p2;.  break;
11ac0 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .}.../* Opcode: 
11ad0 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20 2a 20  Permutation * * 
11ae0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74  * P4 *.**.** Set
11af0 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   the permutation
11b00 20 75 73 65 64 20 62 79 20 74 68 65 20 4f 50 5f   used by the OP_
11b10 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 6f 72  Compare operator
11b20 20 69 6e 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20   in the next.** 
11b30 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 54 68  instruction.  Th
11b40 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 69 73  e permutation is
11b50 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 50   stored in the P
11b60 34 20 6f 70 65 72 61 6e 64 2e 0a 2a 2a 0a 2a 2a  4 operand..**.**
11b70 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   The permutation
11b80 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 75   is only valid u
11b90 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 20 4f 50  ntil the next OP
11ba0 5f 43 6f 6d 70 61 72 65 20 74 68 61 74 20 68 61  _Compare that ha
11bb0 73 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f  s.** the OPFLAG_
11bc0 50 45 52 4d 55 54 45 20 62 69 74 20 73 65 74 20  PERMUTE bit set 
11bd0 69 6e 20 50 35 2e 20 54 79 70 69 63 61 6c 6c 79  in P5. Typically
11be0 20 74 68 65 20 4f 50 5f 50 65 72 6d 75 74 61 74   the OP_Permutat
11bf0 69 6f 6e 20 73 68 6f 75 6c 64 20 0a 2a 2a 20 6f  ion should .** o
11c00 63 63 75 72 20 69 6d 6d 65 64 69 61 74 65 6c 79  ccur immediately
11c10 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 4f 50   prior to the OP
11c20 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2a 0a 2a 2a 20  _Compare..**.** 
11c30 54 68 65 20 66 69 72 73 74 20 69 6e 74 65 67 65  The first intege
11c40 72 20 69 6e 20 74 68 65 20 50 34 20 69 6e 74 65  r in the P4 inte
11c50 67 65 72 20 61 72 72 61 79 20 69 73 20 74 68 65  ger array is the
11c60 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 61   length of the a
11c70 72 72 61 79 0a 2a 2a 20 61 6e 64 20 64 6f 65 73  rray.** and does
11c80 20 6e 6f 74 20 62 65 63 6f 6d 65 20 70 61 72 74   not become part
11c90 20 6f 66 20 74 68 65 20 70 65 72 6d 75 74 61 74   of the permutat
11ca0 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
11cb0 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a 20  Permutation: {. 
11cc0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
11cd0 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41  type==P4_INTARRA
11ce0 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Y );.  assert( p
11cf0 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a 20 20 61  Op->p4.ai );.  a
11d00 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 6f 70  ssert( pOp[1].op
11d10 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6d 70 61 72 65  code==OP_Compare
11d20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
11d30 70 5b 31 5d 2e 70 35 20 26 20 4f 50 46 4c 41 47  p[1].p5 & OPFLAG
11d40 5f 50 45 52 4d 55 54 45 20 29 3b 0a 20 20 62 72  _PERMUTE );.  br
11d50 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
11d60 65 3a 20 43 6f 6d 70 61 72 65 20 50 31 20 50 32  e: Compare P1 P2
11d70 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
11d80 6f 70 73 69 73 3a 20 72 5b 50 31 40 50 33 5d 20  opsis: r[P1@P3] 
11d90 3c 2d 3e 20 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a  <-> r[P2@P3].**.
11da0 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f 20 76  ** Compare two v
11db0 65 63 74 6f 72 73 20 6f 66 20 72 65 67 69 73 74  ectors of regist
11dc0 65 72 73 20 69 6e 20 72 65 67 28 50 31 29 2e 2e  ers in reg(P1)..
11dd0 72 65 67 28 50 31 2b 50 33 2d 31 29 20 28 63 61  reg(P1+P3-1) (ca
11de0 6c 6c 20 74 68 69 73 0a 2a 2a 20 76 65 63 74 6f  ll this.** vecto
11df0 72 20 22 41 22 29 20 61 6e 64 20 69 6e 20 72 65  r "A") and in re
11e00 67 28 50 32 29 2e 2e 72 65 67 28 50 32 2b 50 33  g(P2)..reg(P2+P3
11e10 2d 31 29 20 28 22 42 22 29 2e 20 20 53 61 76 65  -1) ("B").  Save
11e20 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a   the result of.*
11e30 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  * the comparison
11e40 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20   for use by the 
11e50 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69 6e 73  next OP_Jump ins
11e60 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  truct..**.** If 
11e70 50 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41  P5 has the OPFLA
11e80 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 73 65  G_PERMUTE bit se
11e90 74 2c 20 74 68 65 6e 20 74 68 65 20 6f 72 64 65  t, then the orde
11ea0 72 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20  r of comparison 
11eb0 69 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 64  is.** determined
11ec0 20 62 79 20 74 68 65 20 6d 6f 73 74 20 72 65 63   by the most rec
11ed0 65 6e 74 20 4f 50 5f 50 65 72 6d 75 74 61 74 69  ent OP_Permutati
11ee0 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 20 20 49 66  on operator.  If
11ef0 20 74 68 65 0a 2a 2a 20 4f 50 46 4c 41 47 5f 50   the.** OPFLAG_P
11f00 45 52 4d 55 54 45 20 62 69 74 20 69 73 20 63 6c  ERMUTE bit is cl
11f10 65 61 72 2c 20 74 68 65 6e 20 72 65 67 69 73 74  ear, then regist
11f20 65 72 20 61 72 65 20 63 6f 6d 70 61 72 65 64 20  er are compared 
11f30 69 6e 20 73 65 71 75 65 6e 74 69 61 6c 0a 2a 2a  in sequential.**
11f40 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34   order..**.** P4
11f50 20 69 73 20 61 20 4b 65 79 49 6e 66 6f 20 73 74   is a KeyInfo st
11f60 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65 66  ructure that def
11f70 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ines collating s
11f80 65 71 75 65 6e 63 65 73 20 61 6e 64 20 73 6f 72  equences and sor
11f90 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f 72 20  t.** orders for 
11fa0 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
11fb0 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   The permutation
11fc0 20 61 70 70 6c 69 65 73 20 74 6f 20 72 65 67 69   applies to regi
11fd0 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20  sters.** only.  
11fe0 54 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c 65 6d  The KeyInfo elem
11ff0 65 6e 74 73 20 61 72 65 20 75 73 65 64 20 73 65  ents are used se
12000 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a  quentially..**.*
12010 2a 20 54 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  * The comparison
12020 20 69 73 20 61 20 73 6f 72 74 20 63 6f 6d 70 61   is a sort compa
12030 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20  rison, so NULLs 
12040 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c 0a 2a  compare equal,.*
12050 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65 73 73  * NULLs are less
12060 20 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c 20 6e   than numbers, n
12070 75 6d 62 65 72 73 20 61 72 65 20 6c 65 73 73 20  umbers are less 
12080 74 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a 2a 2a  than strings,.**
12090 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65   and strings are
120a0 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73   less than blobs
120b0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6d  ..*/.case OP_Com
120c0 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b  pare: {.  int n;
120d0 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20  .  int i;.  int 
120e0 70 31 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20  p1;.  int p2;.  
120f0 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20 2a 70  const KeyInfo *p
12100 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 69  KeyInfo;.  int i
12110 64 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70  dx;.  CollSeq *p
12120 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c  Coll;    /* Coll
12130 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 74  ating sequence t
12140 6f 20 75 73 65 20 6f 6e 20 74 68 69 73 20 74 65  o use on this te
12150 72 6d 20 2a 2f 0a 20 20 69 6e 74 20 62 52 65 76  rm */.  int bRev
12160 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  ;          /* Tr
12170 75 65 20 66 6f 72 20 44 45 53 43 45 4e 44 49 4e  ue for DESCENDIN
12180 47 20 73 6f 72 74 20 6f 72 64 65 72 20 2a 2f 0a  G sort order */.
12190 20 20 69 6e 74 20 2a 61 50 65 72 6d 75 74 65 3b    int *aPermute;
121a0 20 20 20 20 20 2f 2a 20 54 68 65 20 70 65 72 6d       /* The perm
121b0 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a 20 20 69 66  utation */..  if
121c0 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  ( (pOp->p5 & OPF
121d0 4c 41 47 5f 50 45 52 4d 55 54 45 29 3d 3d 30 20  LAG_PERMUTE)==0 
121e0 29 7b 0a 20 20 20 20 61 50 65 72 6d 75 74 65 20  ){.    aPermute 
121f0 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  = 0;.  }else{.  
12200 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e 61 4f    assert( pOp>aO
12210 70 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  p );.    assert(
12220 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d   pOp[-1].opcode=
12230 3d 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20  =OP_Permutation 
12240 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
12250 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50  Op[-1].p4type==P
12260 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a 20 20  4_INTARRAY );.  
12270 20 20 61 50 65 72 6d 75 74 65 20 3d 20 70 4f 70    aPermute = pOp
12280 5b 2d 31 5d 2e 70 34 2e 61 69 20 2b 20 31 3b 0a  [-1].p4.ai + 1;.
12290 20 20 20 20 61 73 73 65 72 74 28 20 61 50 65 72      assert( aPer
122a0 6d 75 74 65 21 3d 30 20 29 3b 0a 20 20 7d 0a 20  mute!=0 );.  }. 
122b0 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20   n = pOp->p3;.  
122c0 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
122d0 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61  p4.pKeyInfo;.  a
122e0 73 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20  ssert( n>0 );.  
122f0 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f  assert( pKeyInfo
12300 21 3d 30 20 29 3b 0a 20 20 70 31 20 3d 20 70 4f  !=0 );.  p1 = pO
12310 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f  p->p1;.  p2 = pO
12320 70 2d 3e 70 32 3b 0a 23 69 66 64 65 66 20 53 51  p->p2;.#ifdef SQ
12330 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28  LITE_DEBUG.  if(
12340 20 61 50 65 72 6d 75 74 65 20 29 7b 0a 20 20 20   aPermute ){.   
12350 20 69 6e 74 20 6b 2c 20 6d 78 20 3d 20 30 3b 0a   int k, mx = 0;.
12360 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c 6e      for(k=0; k<n
12370 3b 20 6b 2b 2b 29 20 69 66 28 20 61 50 65 72 6d  ; k++) if( aPerm
12380 75 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78 20 3d  ute[k]>mx ) mx =
12390 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a 20 20   aPermute[k];.  
123a0 20 20 61 73 73 65 72 74 28 20 70 31 3e 30 20 26    assert( p1>0 &
123b0 26 20 70 31 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65  & p1+mx<=(p->nMe
123c0 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
123d0 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  )+1 );.    asser
123e0 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6d 78  t( p2>0 && p2+mx
123f0 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
12400 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
12410 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
12420 65 72 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b  ert( p1>0 && p1+
12430 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  n<=(p->nMem+1 - 
12440 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
12450 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e  .    assert( p2>
12460 30 20 26 26 20 70 32 2b 6e 3c 3d 28 70 2d 3e 6e  0 && p2+n<=(p->n
12470 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
12480 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 0a 23 65 6e  or)+1 );.  }.#en
12490 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45  dif /* SQLITE_DE
124a0 42 55 47 20 2a 2f 0a 20 20 66 6f 72 28 69 3d 30  BUG */.  for(i=0
124b0 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20  ; i<n; i++){.   
124c0 20 69 64 78 20 3d 20 61 50 65 72 6d 75 74 65 20   idx = aPermute 
124d0 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d 20 3a 20  ? aPermute[i] : 
124e0 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  i;.    assert( m
124f0 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
12500 70 31 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20  p1+idx]) );.    
12510 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
12520 69 64 28 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d  id(&aMem[p2+idx]
12530 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  ) );.    REGISTE
12540 52 5f 54 52 41 43 45 28 70 31 2b 69 64 78 2c 20  R_TRACE(p1+idx, 
12550 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 3b 0a  &aMem[p1+idx]);.
12560 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
12570 43 45 28 70 32 2b 69 64 78 2c 20 26 61 4d 65 6d  CE(p2+idx, &aMem
12580 5b 70 32 2b 69 64 78 5d 29 3b 0a 20 20 20 20 61  [p2+idx]);.    a
12590 73 73 65 72 74 28 20 69 3c 70 4b 65 79 49 6e 66  ssert( i<pKeyInf
125a0 6f 2d 3e 6e 4b 65 79 46 69 65 6c 64 20 29 3b 0a  o->nKeyField );.
125b0 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b 65 79      pColl = pKey
125c0 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a  Info->aColl[i];.
125d0 20 20 20 20 62 52 65 76 20 3d 20 70 4b 65 79 49      bRev = pKeyI
125e0 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65 72 5b  nfo->aSortOrder[
125f0 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72 65  i];.    iCompare
12600 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d   = sqlite3MemCom
12610 70 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b 69 64  pare(&aMem[p1+id
12620 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78  x], &aMem[p2+idx
12630 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20 69  ], pColl);.    i
12640 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a 20  f( iCompare ){. 
12650 20 20 20 20 20 69 66 28 20 62 52 65 76 20 29 20       if( bRev ) 
12660 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d  iCompare = -iCom
12670 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72 65 61  pare;.      brea
12680 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  k;.    }.  }.  b
12690 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
126a0 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32 20 50  de: Jump P1 P2 P
126b0 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
126c0 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75 63 74   to the instruct
126d0 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73 20 50  ion at address P
126e0 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64 65 70  1, P2, or P3 dep
126f0 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
12700 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73 74  r.** in the most
12710 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70 61   recent OP_Compa
12720 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  re instruction t
12730 68 65 20 50 31 20 76 65 63 74 6f 72 20 77 61 73  he P1 vector was
12740 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65 71   less than.** eq
12750 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74  ual to, or great
12760 65 72 20 74 68 61 6e 20 74 68 65 20 50 32 20 76  er than the P2 v
12770 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74 69 76  ector, respectiv
12780 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ely..*/.case OP_
12790 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20 20 20  Jump: {         
127a0 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
127b0 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c 30 20   if( iCompare<0 
127c0 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  ){.    VdbeBranc
127d0 68 54 61 6b 65 6e 28 30 2c 34 29 3b 20 70 4f 70  hTaken(0,4); pOp
127e0 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 31 20   = &aOp[pOp->p1 
127f0 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73 65 20 69 66  - 1];.  }else if
12800 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30 20 29 7b  ( iCompare==0 ){
12810 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
12820 61 6b 65 6e 28 31 2c 34 29 3b 20 70 4f 70 20 3d  aken(1,4); pOp =
12830 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20   &aOp[pOp->p2 - 
12840 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  1];.  }else{.   
12850 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
12860 28 32 2c 34 29 3b 20 70 4f 70 20 3d 20 26 61 4f  (2,4); pOp = &aO
12870 70 5b 70 4f 70 2d 3e 70 33 20 2d 20 31 5d 3b 0a  p[pOp->p3 - 1];.
12880 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
12890 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64 20 50  /* Opcode: And P
128a0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
128b0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28  ynopsis: r[P3]=(
128c0 72 5b 50 31 5d 20 26 26 20 72 5b 50 32 5d 29 0a  r[P1] && r[P2]).
128d0 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c  **.** Take the l
128e0 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66 20 74 68  ogical AND of th
128f0 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
12900 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 32 20  sters P1 and P2 
12910 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74 68 65  and.** write the
12920 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 72 65 67   result into reg
12930 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  ister P3..**.** 
12940 49 66 20 65 69 74 68 65 72 20 50 31 20 6f 72 20  If either P1 or 
12950 50 32 20 69 73 20 30 20 28 66 61 6c 73 65 29 20  P2 is 0 (false) 
12960 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
12970 69 73 20 30 20 65 76 65 6e 20 69 66 0a 2a 2a 20  is 0 even if.** 
12980 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20  the other input 
12990 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c  is NULL.  A NULL
129a0 20 61 6e 64 20 74 72 75 65 20 6f 72 20 74 77 6f   and true or two
129b0 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a 20 61   NULLs give.** a
129c0 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f   NULL output..*/
129d0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72 20 50  ./* Opcode: Or P
129e0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
129f0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28  ynopsis: r[P3]=(
12a00 72 5b 50 31 5d 20 7c 7c 20 72 5b 50 32 5d 29 0a  r[P1] || r[P2]).
12a10 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c  **.** Take the l
12a20 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74 68 65  ogical OR of the
12a30 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
12a40 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e  ter P1 and P2 an
12a50 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 61  d.** store the a
12a60 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73 74 65  nswer in registe
12a70 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65  r P3..**.** If e
12a80 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20 69  ither P1 or P2 i
12a90 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75 65 29  s nonzero (true)
12aa0 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
12ab0 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a 2a 20   is 1 (true).** 
12ac0 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74 68 65  even if the othe
12ad0 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e  r input is NULL.
12ae0 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66 61 6c    A NULL and fal
12af0 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 0a  se or two NULLs.
12b00 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c 20 6f  ** give a NULL o
12b10 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  utput..*/.case O
12b20 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20  P_And:          
12b30 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
12b40 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c  K_AND, in1, in2,
12b50 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
12b60 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20  _Or: {          
12b70 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
12b80 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  _OR, in1, in2, o
12b90 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76 31 3b  ut3 */.  int v1;
12ba0 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70 65 72      /* Left oper
12bb0 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45 2c 20  and:  0==FALSE, 
12bc0 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e  1==TRUE, 2==UNKN
12bd0 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  OWN or NULL */. 
12be0 20 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a 20 52   int v2;    /* R
12bf0 69 67 68 74 20 6f 70 65 72 61 6e 64 3a 20 30 3d  ight operand: 0=
12c00 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c  =FALSE, 1==TRUE,
12c10 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e   2==UNKNOWN or N
12c20 55 4c 4c 20 2a 2f 0a 0a 20 20 76 31 20 3d 20 73  ULL */..  v1 = s
12c30 71 6c 69 74 65 33 56 64 62 65 42 6f 6f 6c 65 61  qlite3VdbeBoolea
12c40 6e 56 61 6c 75 65 28 26 61 4d 65 6d 5b 70 4f 70  nValue(&aMem[pOp
12c50 2d 3e 70 31 5d 2c 20 32 29 3b 0a 20 20 76 32 20  ->p1], 2);.  v2 
12c60 3d 20 73 71 6c 69 74 65 33 56 64 62 65 42 6f 6f  = sqlite3VdbeBoo
12c70 6c 65 61 6e 56 61 6c 75 65 28 26 61 4d 65 6d 5b  leanValue(&aMem[
12c80 70 4f 70 2d 3e 70 32 5d 2c 20 32 29 3b 0a 20 20  pOp->p2], 2);.  
12c90 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
12ca0 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20 73  =OP_And ){.    s
12cb0 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69  tatic const unsi
12cc0 67 6e 65 64 20 63 68 61 72 20 61 6e 64 5f 6c 6f  gned char and_lo
12cd0 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c 20  gic[] = { 0, 0, 
12ce0 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20 32  0, 0, 1, 2, 0, 2
12cf0 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20  , 2 };.    v1 = 
12d00 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76  and_logic[v1*3+v
12d10 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  2];.  }else{.   
12d20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e   static const un
12d30 73 69 67 6e 65 64 20 63 68 61 72 20 6f 72 5f 6c  signed char or_l
12d40 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c  ogic[] = { 0, 1,
12d50 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c 20   2, 1, 1, 1, 2, 
12d60 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d  1, 2 };.    v1 =
12d70 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76   or_logic[v1*3+v
12d80 32 5d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d  2];.  }.  pOut =
12d90 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
12da0 0a 20 20 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a  .  if( v1==2 ){.
12db0 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
12dc0 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c  ag(pOut, MEM_Nul
12dd0 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  l);.  }else{.   
12de0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b   pOut->u.i = v1;
12df0 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
12e00 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
12e10 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  t);.  }.  break;
12e20 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
12e30 73 54 72 75 65 20 50 31 20 50 32 20 50 33 20 50  sTrue P1 P2 P3 P
12e40 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
12e50 20 72 5b 50 32 5d 20 3d 20 63 6f 61 6c 65 73 63   r[P2] = coalesc
12e60 65 28 72 5b 50 31 5d 3d 3d 54 52 55 45 2c 50 33  e(r[P1]==TRUE,P3
12e70 29 20 5e 20 50 34 0a 2a 2a 0a 2a 2a 20 54 68 69  ) ^ P4.**.** Thi
12e80 73 20 6f 70 63 6f 64 65 20 69 6d 70 6c 65 6d 65  s opcode impleme
12e90 6e 74 73 20 74 68 65 20 49 53 20 54 52 55 45 2c  nts the IS TRUE,
12ea0 20 49 53 20 46 41 4c 53 45 2c 20 49 53 20 4e 4f   IS FALSE, IS NO
12eb0 54 20 54 52 55 45 2c 20 61 6e 64 0a 2a 2a 20 49  T TRUE, and.** I
12ec0 53 20 4e 4f 54 20 46 41 4c 53 45 20 6f 70 65 72  S NOT FALSE oper
12ed0 61 74 6f 72 73 2e 0a 2a 2a 0a 2a 2a 20 49 6e 74  ators..**.** Int
12ee0 65 72 70 72 65 74 20 74 68 65 20 76 61 6c 75 65  erpret the value
12ef0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
12f00 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c  as a boolean val
12f10 75 65 2e 20 20 53 74 6f 72 65 20 74 68 61 74 0a  ue.  Store that.
12f20 2a 2a 20 62 6f 6f 6c 65 61 6e 20 28 61 20 30 20  ** boolean (a 0 
12f30 6f 72 20 31 29 20 69 6e 20 72 65 67 69 73 74 65  or 1) in registe
12f40 72 20 50 32 2e 20 20 4f 72 20 69 66 20 74 68 65  r P2.  Or if the
12f50 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
12f60 65 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e 55 4c  er P1 is .** NUL
12f70 4c 2c 20 74 68 65 6e 20 74 68 65 20 50 33 20 69  L, then the P3 i
12f80 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
12f90 73 74 65 72 20 50 32 2e 20 20 49 6e 76 65 72 74  ster P2.  Invert
12fa0 20 74 68 65 20 61 6e 73 77 65 72 20 69 66 20 50   the answer if P
12fb0 34 0a 2a 2a 20 69 73 20 31 2e 0a 2a 2a 0a 2a 2a  4.** is 1..**.**
12fc0 20 54 68 65 20 6c 6f 67 69 63 20 69 73 20 73 75   The logic is su
12fd0 6d 6d 61 72 69 7a 65 64 20 6c 69 6b 65 20 74 68  mmarized like th
12fe0 69 73 3a 0a 2a 2a 0a 2a 2a 20 3c 75 6c 3e 20 0a  is:.**.** <ul> .
12ff0 2a 2a 20 3c 6c 69 3e 20 49 66 20 50 33 3d 3d 30  ** <li> If P3==0
13000 20 61 6e 64 20 50 34 3d 3d 30 20 20 74 68 65 6e   and P4==0  then
13010 20 20 72 5b 50 32 5d 20 3a 3d 20 72 5b 50 31 5d    r[P2] := r[P1]
13020 20 49 53 20 54 52 55 45 0a 2a 2a 20 3c 6c 69 3e   IS TRUE.** <li>
13030 20 49 66 20 50 33 3d 3d 31 20 61 6e 64 20 50 34   If P3==1 and P4
13040 3d 3d 31 20 20 74 68 65 6e 20 20 72 5b 50 32 5d  ==1  then  r[P2]
13050 20 3a 3d 20 72 5b 50 31 5d 20 49 53 20 46 41 4c   := r[P1] IS FAL
13060 53 45 0a 2a 2a 20 3c 6c 69 3e 20 49 66 20 50 33  SE.** <li> If P3
13070 3d 3d 30 20 61 6e 64 20 50 34 3d 3d 31 20 20 74  ==0 and P4==1  t
13080 68 65 6e 20 20 72 5b 50 32 5d 20 3a 3d 20 72 5b  hen  r[P2] := r[
13090 50 31 5d 20 49 53 20 4e 4f 54 20 54 52 55 45 0a  P1] IS NOT TRUE.
130a0 2a 2a 20 3c 6c 69 3e 20 49 66 20 50 33 3d 3d 31  ** <li> If P3==1
130b0 20 61 6e 64 20 50 34 3d 3d 30 20 20 74 68 65 6e   and P4==0  then
130c0 20 20 72 5b 50 32 5d 20 3a 3d 20 72 5b 50 31 5d    r[P2] := r[P1]
130d0 20 49 53 20 4e 4f 54 20 46 41 4c 53 45 0a 2a 2a   IS NOT FALSE.**
130e0 20 3c 2f 75 6c 3e 0a 2a 2f 0a 63 61 73 65 20 4f   </ul>.*/.case O
130f0 50 5f 49 73 54 72 75 65 3a 20 7b 20 20 20 20 20  P_IsTrue: {     
13100 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
13110 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65  , out2 */.  asse
13120 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
13130 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61  =P4_INT32 );.  a
13140 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 69  ssert( pOp->p4.i
13150 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 69  ==0 || pOp->p4.i
13160 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==1 );.  assert(
13170 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 7c 7c 20 70   pOp->p3==0 || p
13180 4f 70 2d 3e 70 33 3d 3d 31 20 29 3b 0a 20 20 73  Op->p3==1 );.  s
13190 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
131a0 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d  Int64(&aMem[pOp-
131b0 3e 70 32 5d 2c 0a 20 20 20 20 20 20 73 71 6c 69  >p2],.      sqli
131c0 74 65 33 56 64 62 65 42 6f 6f 6c 65 61 6e 56 61  te3VdbeBooleanVa
131d0 6c 75 65 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  lue(&aMem[pOp->p
131e0 31 5d 2c 20 70 4f 70 2d 3e 70 33 29 20 5e 20 70  1], pOp->p3) ^ p
131f0 4f 70 2d 3e 70 34 2e 69 29 3b 0a 20 20 62 72 65  Op->p4.i);.  bre
13200 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
13210 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20  : Not P1 P2 * * 
13220 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
13230 5b 50 32 5d 3d 20 21 72 5b 50 31 5d 0a 2a 2a 0a  [P2]= !r[P1].**.
13240 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
13250 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
13260 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f 6c 65  er P1 as a boole
13270 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f 72 65  an value.  Store
13280 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20   the.** boolean 
13290 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20 72 65  complement in re
132a0 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 74  gister P2.  If t
132b0 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
132c0 73 74 65 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e  ster P1 is .** N
132d0 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55 4c 4c  ULL, then a NULL
132e0 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 50 32   is stored in P2
132f0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74  ..*/.case OP_Not
13300 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
13310 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
13320 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20  _NOT, in1, out2 
13330 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
13340 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
13350 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
13360 70 32 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  p2];.  if( (pIn1
13370 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
13380 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  ll)==0 ){.    sq
13390 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
133a0 6e 74 36 34 28 70 4f 75 74 2c 20 21 73 71 6c 69  nt64(pOut, !sqli
133b0 74 65 33 56 64 62 65 42 6f 6f 6c 65 61 6e 56 61  te3VdbeBooleanVa
133c0 6c 75 65 28 70 49 6e 31 2c 30 29 29 3b 0a 20 20  lue(pIn1,0));.  
133d0 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
133e0 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
133f0 28 70 4f 75 74 29 3b 0a 20 20 7d 0a 20 20 62 72  (pOut);.  }.  br
13400 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
13410 65 3a 20 42 69 74 4e 6f 74 20 50 31 20 50 32 20  e: BitNot P1 P2 
13420 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
13430 73 3a 20 72 5b 50 32 5d 3d 20 7e 72 5b 50 31 5d  s: r[P2]= ~r[P1]
13440 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  .**.** Interpret
13450 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
13460 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61  register P1 as a
13470 6e 20 69 6e 74 65 67 65 72 2e 20 20 53 74 6f 72  n integer.  Stor
13480 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f  e the.** ones-co
13490 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20  mplement of the 
134a0 50 31 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65  P1 value into re
134b0 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 50  gister P2.  If P
134c0 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c  1 holds.** a NUL
134d0 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 61 20 4e  L then store a N
134e0 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61  ULL in P2..*/.ca
134f0 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b 20  se OP_BitNot: { 
13500 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
13510 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f 54  ame as TK_BITNOT
13520 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20  , in1, out2 */. 
13530 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
13540 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p1];.  pOut =
13550 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
13560 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
13570 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
13580 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
13590 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
135a0 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  0 ){.    pOut->f
135b0 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
135c0 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
135d0 7e 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56  ~sqlite3VdbeIntV
135e0 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 7d 0a  alue(pIn1);.  }.
135f0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
13600 70 63 6f 64 65 3a 20 4f 6e 63 65 20 50 31 20 50  pcode: Once P1 P
13610 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 61  2 * * *.**.** Fa
13620 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
13630 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
13640 6f 6e 20 74 68 65 20 66 69 72 73 74 20 74 69 6d  on the first tim
13650 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  e this opcode is
13660 0a 2a 2a 20 65 6e 63 6f 75 6e 74 65 72 65 64 20  .** encountered 
13670 6f 6e 20 65 61 63 68 20 69 6e 76 6f 63 61 74 69  on each invocati
13680 6f 6e 20 6f 66 20 74 68 65 20 62 79 74 65 2d 63  on of the byte-c
13690 6f 64 65 20 70 72 6f 67 72 61 6d 2e 20 20 4a 75  ode program.  Ju
136a0 6d 70 20 74 6f 20 50 32 0a 2a 2a 20 6f 6e 20 74  mp to P2.** on t
136b0 68 65 20 73 65 63 6f 6e 64 20 61 6e 64 20 61 6c  he second and al
136c0 6c 20 73 75 62 73 65 71 75 65 6e 74 20 65 6e 63  l subsequent enc
136d0 6f 75 6e 74 65 72 73 20 64 75 72 69 6e 67 20 74  ounters during t
136e0 68 65 20 73 61 6d 65 20 69 6e 76 6f 63 61 74 69  he same invocati
136f0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 6f 70 2d 6c 65  on..**.** Top-le
13700 76 65 6c 20 70 72 6f 67 72 61 6d 73 20 64 65 74  vel programs det
13710 65 72 6d 69 6e 65 20 66 69 72 73 74 20 69 6e 76  ermine first inv
13720 6f 63 61 74 69 6f 6e 20 62 79 20 63 6f 6d 70 61  ocation by compa
13730 72 69 6e 67 20 74 68 65 20 50 31 0a 2a 2a 20 6f  ring the P1.** o
13740 70 65 72 61 6e 64 20 61 67 61 69 6e 73 74 20 74  perand against t
13750 68 65 20 50 31 20 6f 70 65 72 61 6e 64 20 6f 6e  he P1 operand on
13760 20 74 68 65 20 4f 50 5f 49 6e 69 74 20 6f 70 63   the OP_Init opc
13770 6f 64 65 20 61 74 20 74 68 65 20 62 65 67 69 6e  ode at the begin
13780 6e 69 6e 67 0a 2a 2a 20 6f 66 20 74 68 65 20 70  ning.** of the p
13790 72 6f 67 72 61 6d 2e 20 20 49 66 20 74 68 65 20  rogram.  If the 
137a0 50 31 20 76 61 6c 75 65 73 20 64 69 66 66 65 72  P1 values differ
137b0 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  , then fall thro
137c0 75 67 68 20 61 6e 64 20 6d 61 6b 65 0a 2a 2a 20  ugh and make.** 
137d0 74 68 65 20 50 31 20 6f 66 20 74 68 69 73 20 6f  the P1 of this o
137e0 70 63 6f 64 65 20 65 71 75 61 6c 20 74 6f 20 74  pcode equal to t
137f0 68 65 20 50 31 20 6f 66 20 4f 50 5f 49 6e 69 74  he P1 of OP_Init
13800 2e 20 20 49 66 20 50 31 20 76 61 6c 75 65 73 20  .  If P1 values 
13810 61 72 65 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20  are.** the same 
13820 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
13830 6d 70 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 73 75  mp..**.** For su
13840 62 70 72 6f 67 72 61 6d 73 2c 20 74 68 65 72 65  bprograms, there
13850 20 69 73 20 61 20 62 69 74 6d 61 73 6b 20 69 6e   is a bitmask in
13860 20 74 68 65 20 56 64 62 65 46 72 61 6d 65 20 74   the VdbeFrame t
13870 68 61 74 20 64 65 74 65 72 6d 69 6e 65 73 0a 2a  hat determines.*
13880 2a 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  * whether or not
13890 20 74 68 65 20 6a 75 6d 70 20 73 68 6f 75 6c 64   the jump should
138a0 20 62 65 20 74 61 6b 65 6e 2e 20 20 54 68 65 20   be taken.  The 
138b0 62 69 74 6d 61 73 6b 20 69 73 20 6e 65 63 65 73  bitmask is neces
138c0 73 61 72 79 0a 2a 2a 20 62 65 63 61 75 73 65 20  sary.** because 
138d0 74 68 65 20 73 65 6c 66 2d 61 6c 74 65 72 69 6e  the self-alterin
138e0 67 20 63 6f 64 65 20 74 72 69 63 6b 20 64 6f 65  g code trick doe
138f0 73 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 72 20 72  s not work for r
13900 65 63 75 72 73 69 76 65 0a 2a 2a 20 74 72 69 67  ecursive.** trig
13910 67 65 72 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  gers..*/.case OP
13920 5f 4f 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20  _Once: {        
13930 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
13940 20 20 75 33 32 20 69 41 64 64 72 3b 20 20 20 20    u32 iAddr;    
13950 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
13960 64 64 72 65 73 73 20 6f 66 20 74 68 69 73 20 69  ddress of this i
13970 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20  nstruction */.  
13980 61 73 73 65 72 74 28 20 70 2d 3e 61 4f 70 5b 30  assert( p->aOp[0
13990 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 69  ].opcode==OP_Ini
139a0 74 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70 46  t );.  if( p->pF
139b0 72 61 6d 65 20 29 7b 0a 20 20 20 20 69 41 64 64  rame ){.    iAdd
139c0 72 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  r = (int)(pOp - 
139d0 70 2d 3e 61 4f 70 29 3b 0a 20 20 20 20 69 66 28  p->aOp);.    if(
139e0 20 28 70 2d 3e 70 46 72 61 6d 65 2d 3e 61 4f 6e   (p->pFrame->aOn
139f0 63 65 5b 69 41 64 64 72 2f 38 5d 20 26 20 28 31  ce[iAddr/8] & (1
13a00 3c 3c 28 69 41 64 64 72 20 26 20 37 29 29 29 21  <<(iAddr & 7)))!
13a10 3d 30 20 29 7b 0a 20 20 20 20 20 20 56 64 62 65  =0 ){.      Vdbe
13a20 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 20 32  BranchTaken(1, 2
13a30 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a 75  );.      goto ju
13a40 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a  mp_to_p2;.    }.
13a50 20 20 20 20 70 2d 3e 70 46 72 61 6d 65 2d 3e 61      p->pFrame->a
13a60 4f 6e 63 65 5b 69 41 64 64 72 2f 38 5d 20 7c 3d  Once[iAddr/8] |=
13a70 20 31 3c 3c 28 69 41 64 64 72 20 26 20 37 29 3b   1<<(iAddr & 7);
13a80 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66  .  }else{.    if
13a90 28 20 70 2d 3e 61 4f 70 5b 30 5d 2e 70 31 3d 3d  ( p->aOp[0].p1==
13aa0 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 20  pOp->p1 ){.     
13ab0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
13ac0 28 31 2c 20 32 29 3b 0a 20 20 20 20 20 20 67 6f  (1, 2);.      go
13ad0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
13ae0 20 20 20 7d 0a 20 20 7d 0a 20 20 56 64 62 65 42     }.  }.  VdbeB
13af0 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 20 32 29  ranchTaken(0, 2)
13b00 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 2d  ;.  pOp->p1 = p-
13b10 3e 61 4f 70 5b 30 5d 2e 70 31 3b 0a 20 20 62 72  >aOp[0].p1;.  br
13b20 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
13b30 65 3a 20 49 66 20 50 31 20 50 32 20 50 33 20 2a  e: If P1 P2 P3 *
13b40 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f   *.**.** Jump to
13b50 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
13b60 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
13b70 69 73 20 74 72 75 65 2e 20 20 54 68 65 20 76 61  is true.  The va
13b80 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64  lue.** is consid
13b90 65 72 65 64 20 74 72 75 65 20 69 66 20 69 74 20  ered true if it 
13ba0 69 73 20 6e 75 6d 65 72 69 63 20 61 6e 64 20 6e  is numeric and n
13bb0 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66 20 74 68 65  on-zero.  If the
13bc0 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20   value.** in P1 
13bd0 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b  is NULL then tak
13be0 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e  e the jump if an
13bf0 64 20 6f 6e 6c 79 20 69 66 20 50 33 20 69 73 20  d only if P3 is 
13c00 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73  non-zero..*/.cas
13c10 65 20 4f 50 5f 49 66 3a 20 20 7b 20 20 20 20 20  e OP_If:  {     
13c20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
13c30 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20  p, in1 */.  int 
13c40 63 3b 0a 20 20 63 20 3d 20 73 71 6c 69 74 65 33  c;.  c = sqlite3
13c50 56 64 62 65 42 6f 6f 6c 65 61 6e 56 61 6c 75 65  VdbeBooleanValue
13c60 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c  (&aMem[pOp->p1],
13c70 20 70 4f 70 2d 3e 70 33 29 3b 0a 20 20 56 64 62   pOp->p3);.  Vdb
13c80 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 63 21 3d  eBranchTaken(c!=
13c90 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 63 20 29  0, 2);.  if( c )
13ca0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
13cb0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
13cc0 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74 20 50   Opcode: IfNot P
13cd0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
13ce0 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
13cf0 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
13d00 69 73 74 65 72 20 50 31 20 69 73 20 46 61 6c 73  ister P1 is Fals
13d10 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a  e.  The value.**
13d20 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 66   is considered f
13d30 61 6c 73 65 20 69 66 20 69 74 20 68 61 73 20 61  alse if it has a
13d40 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 20 6f   numeric value o
13d50 66 20 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20  f zero.  If the 
13d60 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69  value.** in P1 i
13d70 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65  s NULL then take
13d80 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 64   the jump if and
13d90 20 6f 6e 6c 79 20 69 66 20 50 33 20 69 73 20 6e   only if P3 is n
13da0 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65  on-zero..*/.case
13db0 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20 20 20 20   OP_IfNot: {    
13dc0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
13dd0 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 63 3b   in1 */.  int c;
13de0 0a 20 20 63 20 3d 20 21 73 71 6c 69 74 65 33 56  .  c = !sqlite3V
13df0 64 62 65 42 6f 6f 6c 65 61 6e 56 61 6c 75 65 28  dbeBooleanValue(
13e00 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20  &aMem[pOp->p1], 
13e10 21 70 4f 70 2d 3e 70 33 29 3b 0a 20 20 56 64 62  !pOp->p3);.  Vdb
13e20 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 63 21 3d  eBranchTaken(c!=
13e30 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 63 20 29  0, 2);.  if( c )
13e40 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
13e50 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
13e60 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c 6c 20   Opcode: IsNull 
13e70 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
13e80 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
13e90 5d 3d 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32 0a  ]==NULL goto P2.
13ea0 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32  **.** Jump to P2
13eb0 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   if the value in
13ec0 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
13ed0 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
13ee0 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  _IsNull: {      
13ef0 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
13f00 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d 70   TK_ISNULL, jump
13f10 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
13f20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
13f30 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
13f40 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67  ken( (pIn1->flag
13f50 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  s & MEM_Null)!=0
13f60 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  , 2);.  if( (pIn
13f70 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
13f80 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20 67  ull)!=0 ){.    g
13f90 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
13fa0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
13fb0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e 75  /* Opcode: NotNu
13fc0 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ll P1 P2 * * *.*
13fd0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
13fe0 5b 50 31 5d 21 3d 4e 55 4c 4c 20 67 6f 74 6f 20  [P1]!=NULL goto 
13ff0 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f  P2.**.** Jump to
14000 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
14010 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
14020 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a  is not NULL.  .*
14030 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c  /.case OP_NotNul
14040 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  l: {            
14050 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f  /* same as TK_NO
14060 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31  TNULL, jump, in1
14070 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
14080 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56  em[pOp->p1];.  V
14090 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20  dbeBranchTaken( 
140a0 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
140b0 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 2c 20 32 29 3b  EM_Null)==0, 2);
140c0 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
140d0 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
140e0 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a  =0 ){.    goto j
140f0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
14100 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
14110 63 6f 64 65 3a 20 49 66 4e 75 6c 6c 52 6f 77 20  code: IfNullRow 
14120 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
14130 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 50 31 2e  Synopsis: if P1.
14140 6e 75 6c 6c 52 6f 77 20 74 68 65 6e 20 72 5b 50  nullRow then r[P
14150 33 5d 3d 4e 55 4c 4c 2c 20 67 6f 74 6f 20 50 32  3]=NULL, goto P2
14160 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65  .**.** Check the
14170 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 73 65   cursor P1 to se
14180 65 20 69 66 20 69 74 20 69 73 20 63 75 72 72 65  e if it is curre
14190 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 61 74  ntly pointing at
141a0 20 61 20 4e 55 4c 4c 20 72 6f 77 2e 0a 2a 2a 20   a NULL row..** 
141b0 49 66 20 69 74 20 69 73 2c 20 74 68 65 6e 20 73  If it is, then s
141c0 65 74 20 72 65 67 69 73 74 65 72 20 50 33 20 74  et register P3 t
141d0 6f 20 4e 55 4c 4c 20 61 6e 64 20 6a 75 6d 70 20  o NULL and jump 
141e0 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
141f0 32 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e  2..** If P1 is n
14200 6f 74 20 6f 6e 20 61 20 4e 55 4c 4c 20 72 6f 77  ot on a NULL row
14210 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  , then fall thro
14220 75 67 68 20 77 69 74 68 6f 75 74 20 6d 61 6b 69  ugh without maki
14230 6e 67 20 61 6e 79 0a 2a 2a 20 63 68 61 6e 67 65  ng any.** change
14240 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  s..*/.case OP_If
14250 4e 75 6c 6c 52 6f 77 3a 20 7b 20 20 20 20 20 20  NullRow: {      
14260 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
14270 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
14280 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
14290 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
142a0 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70  sert( p->apCsr[p
142b0 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20 20  Op->p1]!=0 );.  
142c0 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  if( p->apCsr[pOp
142d0 2d 3e 70 31 5d 2d 3e 6e 75 6c 6c 52 6f 77 20 29  ->p1]->nullRow )
142e0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
142f0 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 61 4d 65 6d  eMemSetNull(aMem
14300 20 2b 20 70 4f 70 2d 3e 70 33 29 3b 0a 20 20 20   + pOp->p3);.   
14310 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
14320 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
14330 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
14340 45 4e 41 42 4c 45 5f 4f 46 46 53 45 54 5f 53 51  ENABLE_OFFSET_SQ
14350 4c 5f 46 55 4e 43 0a 2f 2a 20 4f 70 63 6f 64 65  L_FUNC./* Opcode
14360 3a 20 4f 66 66 73 65 74 20 50 31 20 50 32 20 50  : Offset P1 P2 P
14370 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
14380 73 3a 20 72 5b 50 33 5d 20 3d 20 73 71 6c 69 74  s: r[P3] = sqlit
14390 65 5f 6f 66 66 73 65 74 28 50 31 29 0a 2a 2a 0a  e_offset(P1).**.
143a0 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72 65 67 69  ** Store in regi
143b0 73 74 65 72 20 72 5b 50 33 5d 20 74 68 65 20 62  ster r[P3] the b
143c0 79 74 65 20 6f 66 66 73 65 74 20 69 6e 74 6f 20  yte offset into 
143d0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
143e0 65 20 74 68 61 74 20 69 73 20 74 68 65 0a 2a 2a  e that is the.**
143f0 20 73 74 61 72 74 20 6f 66 20 74 68 65 20 70 61   start of the pa
14400 79 6c 6f 61 64 20 66 6f 72 20 74 68 65 20 72 65  yload for the re
14410 63 6f 72 64 20 61 74 20 77 68 69 63 68 20 74 68  cord at which th
14420 61 74 20 63 75 72 73 6f 72 20 50 31 20 69 73 20  at cursor P1 is 
14430 63 75 72 72 65 6e 74 6c 79 0a 2a 2a 20 70 6f 69  currently.** poi
14440 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  nting..**.** P2 
14450 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75  is the column nu
14460 6d 62 65 72 20 66 6f 72 20 74 68 65 20 61 72 67  mber for the arg
14470 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 73 71 6c  ument to the sql
14480 69 74 65 5f 6f 66 66 73 65 74 28 29 20 66 75 6e  ite_offset() fun
14490 63 74 69 6f 6e 2e 0a 2a 2a 20 54 68 69 73 20 6f  ction..** This o
144a0 70 63 6f 64 65 20 64 6f 65 73 20 6e 6f 74 20 75  pcode does not u
144b0 73 65 20 50 32 20 69 74 73 65 6c 66 2c 20 62 75  se P2 itself, bu
144c0 74 20 74 68 65 20 50 32 20 76 61 6c 75 65 20 69  t the P2 value i
144d0 73 20 75 73 65 64 20 62 79 20 74 68 65 0a 2a 2a  s used by the.**
144e0 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e   code generator.
144f0 20 20 54 68 65 20 50 31 2c 20 50 32 2c 20 61 6e    The P1, P2, an
14500 64 20 50 33 20 6f 70 65 72 61 6e 64 73 20 74 6f  d P3 operands to
14510 20 74 68 69 73 20 6f 70 63 6f 64 65 20 61 72 65   this opcode are
14520 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20   the.** same as 
14530 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 2e 0a 2a  for OP_Column..*
14540 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
14550 20 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62   is only availab
14560 6c 65 20 69 66 20 53 51 4c 69 74 65 20 69 73 20  le if SQLite is 
14570 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68  compiled with th
14580 65 0a 2a 2a 20 2d 44 53 51 4c 49 54 45 5f 45 4e  e.** -DSQLITE_EN
14590 41 42 4c 45 5f 4f 46 46 53 45 54 5f 53 51 4c 5f  ABLE_OFFSET_SQL_
145a0 46 55 4e 43 20 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a  FUNC option..*/.
145b0 63 61 73 65 20 4f 50 5f 4f 66 66 73 65 74 3a 20  case OP_Offset: 
145c0 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75  {          /* ou
145d0 74 33 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  t3 */.  VdbeCurs
145e0 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68  or *pC;    /* Th
145f0 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 2a 2f  e VDBE cursor */
14600 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
14610 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
14620 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
14630 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
14640 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Op->p1];.  pOut 
14650 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
14660 70 33 5d 3b 0a 20 20 69 66 28 20 4e 45 56 45 52  p3];.  if( NEVER
14670 28 70 43 3d 3d 30 29 20 7c 7c 20 70 43 2d 3e 65  (pC==0) || pC->e
14680 43 75 72 54 79 70 65 21 3d 43 55 52 54 59 50 45  CurType!=CURTYPE
14690 5f 42 54 52 45 45 20 29 7b 0a 20 20 20 20 73 71  _BTREE ){.    sq
146a0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
146b0 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c  ull(pOut);.  }el
146c0 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  se{.    sqlite3V
146d0 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70  dbeMemSetInt64(p
146e0 4f 75 74 2c 20 73 71 6c 69 74 65 33 42 74 72 65  Out, sqlite3Btre
146f0 65 4f 66 66 73 65 74 28 70 43 2d 3e 75 63 2e 70  eOffset(pC->uc.p
14700 43 75 72 73 6f 72 29 29 3b 0a 20 20 7d 0a 20 20  Cursor));.  }.  
14710 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
14720 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  /* SQLITE_ENABLE
14730 5f 4f 46 46 53 45 54 5f 53 51 4c 5f 46 55 4e 43  _OFFSET_SQL_FUNC
14740 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
14750 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20  Column P1 P2 P3 
14760 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
14770 73 3a 20 72 5b 50 33 5d 3d 50 58 0a 2a 2a 0a 2a  s: r[P3]=PX.**.*
14780 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
14790 64 61 74 61 20 74 68 61 74 20 63 75 72 73 6f 72  data that cursor
147a0 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 20 61 73   P1 points to as
147b0 20 61 20 73 74 72 75 63 74 75 72 65 20 62 75 69   a structure bui
147c0 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20  lt using.** the 
147d0 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72  MakeRecord instr
147e0 75 63 74 69 6f 6e 2e 20 20 28 53 65 65 20 74 68  uction.  (See th
147f0 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70 63  e MakeRecord opc
14800 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
14810 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  al.** informatio
14820 6e 20 61 62 6f 75 74 20 74 68 65 20 66 6f 72 6d  n about the form
14830 61 74 20 6f 66 20 74 68 65 20 64 61 74 61 2e 29  at of the data.)
14840 20 20 45 78 74 72 61 63 74 20 74 68 65 20 50 32    Extract the P2
14850 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72  -th column.** fr
14860 6f 6d 20 74 68 69 73 20 72 65 63 6f 72 64 2e 20  om this record. 
14870 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6c 65   If there are le
14880 73 73 20 74 68 61 74 20 28 50 32 2b 31 29 20 0a  ss that (P2+1) .
14890 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  ** values in the
148a0 20 72 65 63 6f 72 64 2c 20 65 78 74 72 61 63 74   record, extract
148b0 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54   a NULL..**.** T
148c0 68 65 20 76 61 6c 75 65 20 65 78 74 72 61 63 74  he value extract
148d0 65 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ed is stored in 
148e0 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a  register P3..**.
148f0 2a 2a 20 49 66 20 74 68 65 20 72 65 63 6f 72 64  ** If the record
14900 20 63 6f 6e 74 61 69 6e 73 20 66 65 77 65 72 20   contains fewer 
14910 74 68 61 6e 20 50 32 20 66 69 65 6c 64 73 2c 20  than P2 fields, 
14920 74 68 65 6e 20 65 78 74 72 61 63 74 20 61 20 4e  then extract a N
14930 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69 66 20  ULL.  Or,.** if 
14940 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20  the P4 argument 
14950 69 73 20 61 20 50 34 5f 4d 45 4d 20 75 73 65 20  is a P4_MEM use 
14960 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
14970 20 50 34 20 61 72 67 75 6d 65 6e 74 20 61 73 0a   P4 argument as.
14980 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 2e 0a 2a  ** the result..*
14990 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
149a0 41 47 5f 43 4c 45 41 52 43 41 43 48 45 20 62 69  AG_CLEARCACHE bi
149b0 74 20 69 73 20 73 65 74 20 6f 6e 20 50 35 20 61  t is set on P5 a
149c0 6e 64 20 50 31 20 69 73 20 61 20 70 73 65 75 64  nd P1 is a pseud
149d0 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 2c 0a  o-table cursor,.
149e0 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 61 63 68  ** then the cach
149f0 65 20 6f 66 20 74 68 65 20 63 75 72 73 6f 72 20  e of the cursor 
14a00 69 73 20 72 65 73 65 74 20 70 72 69 6f 72 20 74  is reset prior t
14a10 6f 20 65 78 74 72 61 63 74 69 6e 67 20 74 68 65  o extracting the
14a20 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54 68 65 20   column..** The 
14a30 66 69 72 73 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20  first OP_Column 
14a40 61 67 61 69 6e 73 74 20 61 20 70 73 65 75 64 6f  against a pseudo
14a50 2d 74 61 62 6c 65 20 61 66 74 65 72 20 74 68 65  -table after the
14a60 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f   value of the co
14a70 6e 74 65 6e 74 0a 2a 2a 20 72 65 67 69 73 74 65  ntent.** registe
14a80 72 20 68 61 73 20 63 68 61 6e 67 65 64 20 73 68  r has changed sh
14a90 6f 75 6c 64 20 68 61 76 65 20 74 68 69 73 20 62  ould have this b
14aa0 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 49 66  it set..**.** If
14ab0 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47   the OPFLAG_LENG
14ac0 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47  THARG and OPFLAG
14ad0 5f 54 59 50 45 4f 46 41 52 47 20 62 69 74 73 20  _TYPEOFARG bits 
14ae0 61 72 65 20 73 65 74 20 6f 6e 20 50 35 20 74 68  are set on P5 th
14af0 65 6e 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74  en.** the result
14b00 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 20 74   is guaranteed t
14b10 6f 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 61  o only be used a
14b20 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 6f  s the argument o
14b30 66 20 61 20 6c 65 6e 67 74 68 28 29 0a 2a 2a 20  f a length().** 
14b40 6f 72 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63  or typeof() func
14b50 74 69 6f 6e 2c 20 72 65 73 70 65 63 74 69 76 65  tion, respective
14b60 6c 79 2e 20 20 54 68 65 20 6c 6f 61 64 69 6e 67  ly.  The loading
14b70 20 6f 66 20 6c 61 72 67 65 20 62 6c 6f 62 73 20   of large blobs 
14b80 63 61 6e 20 62 65 0a 2a 2a 20 73 6b 69 70 70 65  can be.** skippe
14b90 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 61  d for length() a
14ba0 6e 64 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 6c  nd all content l
14bb0 6f 61 64 69 6e 67 20 63 61 6e 20 62 65 20 73 6b  oading can be sk
14bc0 69 70 70 65 64 20 66 6f 72 20 74 79 70 65 6f 66  ipped for typeof
14bd0 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  ()..*/.case OP_C
14be0 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69 6e 74 20 70  olumn: {.  int p
14bf0 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  2;            /*
14c00 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74   column number t
14c10 6f 20 72 65 74 72 69 65 76 65 20 2a 2f 0a 20 20  o retrieve */.  
14c20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
14c30 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63     /* The VDBE c
14c40 75 72 73 6f 72 20 2a 2f 0a 20 20 42 74 43 75 72  ursor */.  BtCur
14c50 73 6f 72 20 2a 70 43 72 73 72 3b 20 20 20 2f 2a  sor *pCrsr;   /*
14c60 20 54 68 65 20 42 54 72 65 65 20 63 75 72 73 6f   The BTree curso
14c70 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66 66  r */.  u32 *aOff
14c80 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f 66  set;      /* aOf
14c90 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66 73 65  fset[i] is offse
14ca0 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20 64 61  t to start of da
14cb0 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c 75  ta for i-th colu
14cc0 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b  mn */.  int len;
14cd0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
14ce0 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20  e length of the 
14cf0 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74 61 20  serialized data 
14d00 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 2a  for the column *
14d10 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  /.  int i;      
14d20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
14d30 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4d 65 6d 20  ounter */.  Mem 
14d40 2a 70 44 65 73 74 3b 20 20 20 20 20 20 20 20 2f  *pDest;        /
14d50 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69 74 65  * Where to write
14d60 20 74 68 65 20 65 78 74 72 61 63 74 65 64 20 76   the extracted v
14d70 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d  alue */.  Mem sM
14d80 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  em;          /* 
14d90 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20  For storing the 
14da0 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63  record being dec
14db0 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  oded */.  const 
14dc0 75 38 20 2a 7a 44 61 74 61 3b 20 20 20 2f 2a 20  u8 *zData;   /* 
14dd0 50 61 72 74 20 6f 66 20 74 68 65 20 72 65 63 6f  Part of the reco
14de0 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64  rd being decoded
14df0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a   */.  const u8 *
14e00 7a 48 64 72 3b 20 20 20 20 2f 2a 20 4e 65 78 74  zHdr;    /* Next
14e10 20 75 6e 70 61 72 73 65 64 20 62 79 74 65 20 6f   unparsed byte o
14e20 66 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a  f the header */.
14e30 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 45 6e 64    const u8 *zEnd
14e40 48 64 72 3b 20 2f 2a 20 50 6f 69 6e 74 65 72 20  Hdr; /* Pointer 
14e50 74 6f 20 66 69 72 73 74 20 62 79 74 65 20 61 66  to first byte af
14e60 74 65 72 20 74 68 65 20 68 65 61 64 65 72 20 2a  ter the header *
14e70 2f 0a 20 20 75 36 34 20 6f 66 66 73 65 74 36 34  /.  u64 offset64
14e80 3b 20 20 20 20 20 20 2f 2a 20 36 34 2d 62 69 74  ;      /* 64-bit
14e90 20 6f 66 66 73 65 74 20 2a 2f 0a 20 20 75 33 32   offset */.  u32
14ea0 20 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   t;             
14eb0 2f 2a 20 41 20 74 79 70 65 20 63 6f 64 65 20 66  /* A type code f
14ec0 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 20 68  rom the record h
14ed0 65 61 64 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a  eader */.  Mem *
14ee0 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  pReg;         /*
14ef0 20 50 73 65 75 64 6f 54 61 62 6c 65 20 69 6e 70   PseudoTable inp
14f00 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 0a  ut register */..
14f10 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
14f20 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 32 20 3d  pOp->p1];.  p2 =
14f30 20 70 4f 70 2d 3e 70 32 3b 0a 0a 20 20 2f 2a 20   pOp->p2;..  /* 
14f40 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 63 61  If the cursor ca
14f50 63 68 65 20 69 73 20 73 74 61 6c 65 20 28 6d 65  che is stale (me
14f60 61 6e 69 6e 67 20 69 74 20 69 73 20 6e 6f 74 20  aning it is not 
14f70 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20  currently point 
14f80 61 74 0a 20 20 2a 2a 20 74 68 65 20 63 6f 72 72  at.  ** the corr
14f90 65 63 74 20 72 6f 77 29 20 74 68 65 6e 20 62 72  ect row) then br
14fa0 69 6e 67 20 69 74 20 75 70 2d 74 6f 2d 64 61 74  ing it up-to-dat
14fb0 65 20 62 79 20 64 6f 69 6e 67 20 74 68 65 20 6e  e by doing the n
14fc0 65 63 65 73 73 61 72 79 20 0a 20 20 2a 2a 20 42  ecessary .  ** B
14fd0 2d 54 72 65 65 20 73 65 65 6b 2e 20 2a 2f 0a 20  -Tree seek. */. 
14fe0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
14ff0 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 26 70  eCursorMoveto(&p
15000 43 2c 20 26 70 32 29 3b 0a 20 20 69 66 28 20 72  C, &p2);.  if( r
15010 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
15020 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20  ue_to_error;..  
15030 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
15040 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
15050 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
15060 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44 65 73  ursor) );.  pDes
15070 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
15080 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  3];.  memAboutTo
15090 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29  Change(p, pDest)
150a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
150b0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
150c0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
150d0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
150e0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c  );.  assert( p2<
150f0 70 43 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20 20  pC->nField );.  
15100 61 4f 66 66 73 65 74 20 3d 20 70 43 2d 3e 61 4f  aOffset = pC->aO
15110 66 66 73 65 74 3b 0a 20 20 61 73 73 65 72 74 28  ffset;.  assert(
15120 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43   pC->eCurType!=C
15130 55 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a 20  URTYPE_VTAB );. 
15140 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
15150 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 50  rType!=CURTYPE_P
15160 53 45 55 44 4f 20 7c 7c 20 70 43 2d 3e 6e 75 6c  SEUDO || pC->nul
15170 6c 52 6f 77 20 29 3b 0a 20 20 61 73 73 65 72 74  lRow );.  assert
15180 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d  ( pC->eCurType!=
15190 43 55 52 54 59 50 45 5f 53 4f 52 54 45 52 20 29  CURTYPE_SORTER )
151a0 3b 0a 0a 20 20 69 66 28 20 70 43 2d 3e 63 61 63  ;..  if( pC->cac
151b0 68 65 53 74 61 74 75 73 21 3d 70 2d 3e 63 61 63  heStatus!=p->cac
151c0 68 65 43 74 72 20 29 7b 20 20 20 20 20 20 20 20  heCtr ){        
151d0 20 20 20 20 20 20 20 20 2f 2a 4f 50 54 49 4d 49          /*OPTIMI
151e0 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a  ZATION-IF-FALSE*
151f0 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75  /.    if( pC->nu
15200 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 69  llRow ){.      i
15210 66 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  f( pC->eCurType=
15220 3d 43 55 52 54 59 50 45 5f 50 53 45 55 44 4f 20  =CURTYPE_PSEUDO 
15230 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 46 6f  ){.        /* Fo
15240 72 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 61  r the special ca
15250 73 65 20 6f 66 20 61 73 20 70 73 65 75 64 6f 2d  se of as pseudo-
15260 63 75 72 73 6f 72 2c 20 74 68 65 20 73 65 65 6b  cursor, the seek
15270 52 65 73 75 6c 74 20 66 69 65 6c 64 0a 20 20 20  Result field.   
15280 20 20 20 20 20 2a 2a 20 69 64 65 6e 74 69 66 69       ** identifi
15290 65 73 20 74 68 65 20 72 65 67 69 73 74 65 72 20  es the register 
152a0 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 72  that holds the r
152b0 65 63 6f 72 64 20 2a 2f 0a 20 20 20 20 20 20 20  ecord */.       
152c0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 73 65 65   assert( pC->see
152d0 6b 52 65 73 75 6c 74 3e 30 20 29 3b 0a 20 20 20  kResult>0 );.   
152e0 20 20 20 20 20 70 52 65 67 20 3d 20 26 61 4d 65       pReg = &aMe
152f0 6d 5b 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74  m[pC->seekResult
15300 5d 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ];.        asser
15310 74 28 20 70 52 65 67 2d 3e 66 6c 61 67 73 20 26  t( pReg->flags &
15320 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20   MEM_Blob );.   
15330 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
15340 49 73 56 61 6c 69 64 28 70 52 65 67 29 20 29 3b  IsValid(pReg) );
15350 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70 61 79  .        pC->pay
15360 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e 73  loadSize = pC->s
15370 7a 52 6f 77 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a  zRow = pReg->n;.
15380 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77          pC->aRow
15390 20 3d 20 28 75 38 2a 29 70 52 65 67 2d 3e 7a 3b   = (u8*)pReg->z;
153a0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
153b0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
153c0 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73  eMemSetNull(pDes
153d0 74 29 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f  t);.        goto
153e0 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a   op_column_out;.
153f0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
15400 65 7b 0a 20 20 20 20 20 20 70 43 72 73 72 20 3d  e{.      pCrsr =
15410 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b   pC->uc.pCursor;
15420 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
15430 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
15440 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
15450 20 20 20 20 61 73 73 65 72 74 28 20 70 43 72 73      assert( pCrs
15460 72 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  r );.      asser
15470 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  t( sqlite3BtreeC
15480 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72  ursorIsValid(pCr
15490 73 72 29 20 29 3b 0a 20 20 20 20 20 20 70 43 2d  sr) );.      pC-
154a0 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 73  >payloadSize = s
154b0 71 6c 69 74 65 33 42 74 72 65 65 50 61 79 6c 6f  qlite3BtreePaylo
154c0 61 64 53 69 7a 65 28 70 43 72 73 72 29 3b 0a 20  adSize(pCrsr);. 
154d0 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20       pC->aRow = 
154e0 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 79 6c  sqlite3BtreePayl
154f0 6f 61 64 46 65 74 63 68 28 70 43 72 73 72 2c 20  oadFetch(pCrsr, 
15500 26 70 43 2d 3e 73 7a 52 6f 77 29 3b 0a 20 20 20  &pC->szRow);.   
15510 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 73     assert( pC->s
15520 7a 52 6f 77 3c 3d 70 43 2d 3e 70 61 79 6c 6f 61  zRow<=pC->payloa
15530 64 53 69 7a 65 20 29 3b 0a 20 20 20 20 20 20 61  dSize );.      a
15540 73 73 65 72 74 28 20 70 43 2d 3e 73 7a 52 6f 77  ssert( pC->szRow
15550 3c 3d 36 35 35 33 36 20 29 3b 20 20 2f 2a 20 4d  <=65536 );  /* M
15560 61 78 69 6d 75 6d 20 70 61 67 65 20 73 69 7a 65  aximum page size
15570 20 69 73 20 36 34 4b 69 42 20 2a 2f 0a 20 20 20   is 64KiB */.   
15580 20 20 20 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f     if( pC->paylo
15590 61 64 53 69 7a 65 20 3e 20 28 75 33 32 29 64 62  adSize > (u32)db
155a0 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
155b0 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
155c0 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 74 6f  .        goto to
155d0 6f 5f 62 69 67 3b 0a 20 20 20 20 20 20 7d 0a 20  o_big;.      }. 
155e0 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 63 61 63     }.    pC->cac
155f0 68 65 53 74 61 74 75 73 20 3d 20 70 2d 3e 63 61  heStatus = p->ca
15600 63 68 65 43 74 72 3b 0a 20 20 20 20 70 43 2d 3e  cheCtr;.    pC->
15610 69 48 64 72 4f 66 66 73 65 74 20 3d 20 67 65 74  iHdrOffset = get
15620 56 61 72 69 6e 74 33 32 28 70 43 2d 3e 61 52 6f  Varint32(pC->aRo
15630 77 2c 20 61 4f 66 66 73 65 74 5b 30 5d 29 3b 0a  w, aOffset[0]);.
15640 20 20 20 20 70 43 2d 3e 6e 48 64 72 50 61 72 73      pC->nHdrPars
15650 65 64 20 3d 20 30 3b 0a 0a 0a 20 20 20 20 69 66  ed = 0;...    if
15660 28 20 70 43 2d 3e 73 7a 52 6f 77 3c 61 4f 66 66  ( pC->szRow<aOff
15670 73 65 74 5b 30 5d 20 29 7b 20 20 20 20 20 20 2f  set[0] ){      /
15680 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46  *OPTIMIZATION-IF
15690 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 20 20 2f  -FALSE*/.      /
156a0 2a 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20  * pC->aRow does 
156b0 6e 6f 74 20 68 61 76 65 20 74 6f 20 68 6f 6c 64  not have to hold
156c0 20 74 68 65 20 65 6e 74 69 72 65 20 72 6f 77 2c   the entire row,
156d0 20 62 75 74 20 69 74 20 64 6f 65 73 20 61 74 20   but it does at 
156e0 6c 65 61 73 74 0a 20 20 20 20 20 20 2a 2a 20 6e  least.      ** n
156f0 65 65 64 20 74 6f 20 63 6f 76 65 72 20 74 68 65  eed to cover the
15700 20 68 65 61 64 65 72 20 6f 66 20 74 68 65 20 72   header of the r
15710 65 63 6f 72 64 2e 20 20 49 66 20 70 43 2d 3e 61  ecord.  If pC->a
15720 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e  Row does not con
15730 74 61 69 6e 0a 20 20 20 20 20 20 2a 2a 20 74 68  tain.      ** th
15740 65 20 63 6f 6d 70 6c 65 74 65 20 68 65 61 64 65  e complete heade
15750 72 2c 20 74 68 65 6e 20 73 65 74 20 69 74 20 74  r, then set it t
15760 6f 20 7a 65 72 6f 2c 20 66 6f 72 63 69 6e 67 20  o zero, forcing 
15770 74 68 65 20 68 65 61 64 65 72 20 74 6f 20 62 65  the header to be
15780 0a 20 20 20 20 20 20 2a 2a 20 64 79 6e 61 6d 69  .      ** dynami
15790 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 2e  cally allocated.
157a0 20 2a 2f 0a 20 20 20 20 20 20 70 43 2d 3e 61 52   */.      pC->aR
157b0 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 43  ow = 0;.      pC
157c0 2d 3e 73 7a 52 6f 77 20 3d 20 30 3b 0a 0a 20 20  ->szRow = 0;..  
157d0 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65      /* Make sure
157e0 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62   a corrupt datab
157f0 61 73 65 20 68 61 73 20 6e 6f 74 20 67 69 76 65  ase has not give
15800 6e 20 75 73 20 61 6e 20 6f 76 65 72 73 69 7a 65  n us an oversize
15810 20 68 65 61 64 65 72 2e 0a 20 20 20 20 20 20 2a   header..      *
15820 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77 20 74 6f  * Do this now to
15830 20 61 76 6f 69 64 20 61 6e 20 6f 76 65 72 73 69   avoid an oversi
15840 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ze memory alloca
15850 74 69 6f 6e 2e 0a 20 20 20 20 20 20 2a 2a 0a 20  tion..      **. 
15860 20 20 20 20 20 2a 2a 20 54 79 70 65 20 65 6e 74       ** Type ent
15870 72 69 65 73 20 63 61 6e 20 62 65 20 62 65 74 77  ries can be betw
15880 65 65 6e 20 31 20 61 6e 64 20 35 20 62 79 74 65  een 1 and 5 byte
15890 73 20 65 61 63 68 2e 20 20 42 75 74 20 34 20 61  s each.  But 4 a
158a0 6e 64 20 35 20 62 79 74 65 0a 20 20 20 20 20 20  nd 5 byte.      
158b0 2a 2a 20 74 79 70 65 73 20 75 73 65 20 73 6f 20  ** types use so 
158c0 6d 75 63 68 20 64 61 74 61 20 73 70 61 63 65 20  much data space 
158d0 74 68 61 74 20 74 68 65 72 65 20 63 61 6e 20 6f  that there can o
158e0 6e 6c 79 20 62 65 20 34 30 39 36 20 61 6e 64 20  nly be 4096 and 
158f0 33 32 20 6f 66 0a 20 20 20 20 20 20 2a 2a 20 74  32 of.      ** t
15900 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76 65 6c  hem, respectivel
15910 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78 69 6d  y.  So the maxim
15920 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68  um header length
15930 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 61 0a   results from a.
15940 20 20 20 20 20 20 2a 2a 20 33 2d 62 79 74 65 20        ** 3-byte 
15950 74 79 70 65 20 66 6f 72 20 65 61 63 68 20 6f 66  type for each of
15960 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20   the maximum of 
15970 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c  32768 columns pl
15980 75 73 20 74 68 72 65 65 0a 20 20 20 20 20 20 2a  us three.      *
15990 2a 20 65 78 74 72 61 20 62 79 74 65 73 20 66 6f  * extra bytes fo
159a0 72 20 74 68 65 20 68 65 61 64 65 72 20 6c 65 6e  r the header len
159b0 67 74 68 20 69 74 73 65 6c 66 2e 20 20 33 32 37  gth itself.  327
159c0 36 38 2a 33 20 2b 20 33 20 3d 20 39 38 33 30 37  68*3 + 3 = 98307
159d0 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
159e0 20 69 66 28 20 61 4f 66 66 73 65 74 5b 30 5d 20   if( aOffset[0] 
159f0 3e 20 39 38 33 30 37 20 7c 7c 20 61 4f 66 66 73  > 98307 || aOffs
15a00 65 74 5b 30 5d 20 3e 20 70 43 2d 3e 70 61 79 6c  et[0] > pC->payl
15a10 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20 20 20 20  oadSize ){.     
15a20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
15a30 6e 5f 63 6f 72 72 75 70 74 3b 0a 20 20 20 20 20  n_corrupt;.     
15a40 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
15a50 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 61      /* This is a
15a60 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 20  n optimization. 
15a70 20 42 79 20 73 6b 69 70 70 69 6e 67 20 6f 76 65   By skipping ove
15a80 72 20 74 68 65 20 66 69 72 73 74 20 66 65 77 20  r the first few 
15a90 74 65 73 74 73 0a 20 20 20 20 20 20 2a 2a 20 28  tests.      ** (
15aa0 65 78 3a 20 70 43 2d 3e 6e 48 64 72 50 61 72 73  ex: pC->nHdrPars
15ab0 65 64 3c 3d 70 32 29 20 69 6e 20 74 68 65 20 6e  ed<=p2) in the n
15ac0 65 78 74 20 73 65 63 74 69 6f 6e 2c 20 77 65 20  ext section, we 
15ad0 61 63 68 69 65 76 65 20 61 0a 20 20 20 20 20 20  achieve a.      
15ae0 2a 2a 20 6d 65 61 73 75 72 61 62 6c 65 20 70 65  ** measurable pe
15af0 72 66 6f 72 6d 61 6e 63 65 20 67 61 69 6e 2e 0a  rformance gain..
15b00 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a        **.      *
15b10 2a 20 54 68 69 73 20 62 72 61 6e 63 68 20 69 73  * This branch is
15b20 20 74 61 6b 65 6e 20 65 76 65 6e 20 69 66 20 61   taken even if a
15b30 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 2e 20 20 53  Offset[0]==0.  S
15b40 75 63 68 20 61 20 72 65 63 6f 72 64 20 69 73 20  uch a record is 
15b50 6e 65 76 65 72 0a 20 20 20 20 20 20 2a 2a 20 67  never.      ** g
15b60 65 6e 65 72 61 74 65 64 20 62 79 20 53 51 4c 69  enerated by SQLi
15b70 74 65 2c 20 61 6e 64 20 63 6f 75 6c 64 20 62 65  te, and could be
15b80 20 63 6f 6e 73 69 64 65 72 65 64 20 63 6f 72 72   considered corr
15b90 75 70 74 69 6f 6e 2c 20 62 75 74 20 77 65 0a 20  uption, but we. 
15ba0 20 20 20 20 20 2a 2a 20 61 63 63 65 70 74 20 69       ** accept i
15bb0 74 20 66 6f 72 20 68 69 73 74 6f 72 69 63 61 6c  t for historical
15bc0 20 72 65 61 73 6f 6e 73 2e 20 20 57 68 65 6e 20   reasons.  When 
15bd0 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 2c 20 74  aOffset[0]==0, t
15be0 68 65 20 63 6f 64 65 20 74 68 69 73 0a 20 20 20  he code this.   
15bf0 20 20 20 2a 2a 20 62 72 61 6e 63 68 20 6a 75 6d     ** branch jum
15c00 70 73 20 74 6f 20 72 65 61 64 73 20 70 61 73 74  ps to reads past
15c10 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
15c20 72 65 63 6f 72 64 2c 20 62 75 74 20 6e 65 76 65  record, but neve
15c30 72 20 6d 6f 72 65 0a 20 20 20 20 20 20 2a 2a 20  r more.      ** 
15c40 74 68 61 6e 20 61 20 66 65 77 20 62 79 74 65 73  than a few bytes
15c50 2e 20 20 45 76 65 6e 20 69 66 20 74 68 65 20 72  .  Even if the r
15c60 65 63 6f 72 64 20 6f 63 63 75 72 73 20 61 74 20  ecord occurs at 
15c70 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 70  the end of the p
15c80 61 67 65 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e  age.      ** con
15c90 74 65 6e 74 20 61 72 65 61 2c 20 74 68 65 20 22  tent area, the "
15ca0 70 61 67 65 20 68 65 61 64 65 72 22 20 63 6f 6d  page header" com
15cb0 65 73 20 61 66 74 65 72 20 74 68 65 20 70 61 67  es after the pag
15cc0 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 73 6f  e content and so
15cd0 0a 20 20 20 20 20 20 2a 2a 20 74 68 69 73 20 6f  .      ** this o
15ce0 76 65 72 72 65 61 64 20 69 73 20 68 61 72 6d 6c  verread is harml
15cf0 65 73 73 2e 20 20 53 69 6d 69 6c 61 72 20 6f 76  ess.  Similar ov
15d00 65 72 72 65 61 64 73 20 63 61 6e 20 6f 63 63 75  erreads can occu
15d10 72 20 66 6f 72 20 61 20 63 6f 72 72 75 70 74 0a  r for a corrupt.
15d20 20 20 20 20 20 20 2a 2a 20 64 61 74 61 62 61 73        ** databas
15d30 65 20 66 69 6c 65 2e 0a 20 20 20 20 20 20 2a 2f  e file..      */
15d40 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 70  .      zData = p
15d50 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 20 20 61  C->aRow;.      a
15d60 73 73 65 72 74 28 20 70 43 2d 3e 6e 48 64 72 50  ssert( pC->nHdrP
15d70 61 72 73 65 64 3c 3d 70 32 20 29 3b 20 20 20 20  arsed<=p2 );    
15d80 20 20 20 20 20 2f 2a 20 43 6f 6e 64 69 74 69 6f       /* Conditio
15d90 6e 61 6c 20 73 6b 69 70 70 65 64 20 2a 2f 0a 20  nal skipped */. 
15da0 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 61       testcase( a
15db0 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 20 29 3b 0a  Offset[0]==0 );.
15dc0 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
15dd0 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65 72  lumn_read_header
15de0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f  ;.    }.  }..  /
15df0 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 74 20 6c  * Make sure at l
15e00 65 61 73 74 20 74 68 65 20 66 69 72 73 74 20 70  east the first p
15e10 32 2b 31 20 65 6e 74 72 69 65 73 20 6f 66 20 74  2+1 entries of t
15e20 68 65 20 68 65 61 64 65 72 20 68 61 76 65 20 62  he header have b
15e30 65 65 6e 0a 20 20 2a 2a 20 70 61 72 73 65 64 20  een.  ** parsed 
15e40 61 6e 64 20 76 61 6c 69 64 20 69 6e 66 6f 72 6d  and valid inform
15e50 61 74 69 6f 6e 20 69 73 20 69 6e 20 61 4f 66 66  ation is in aOff
15e60 73 65 74 5b 5d 20 61 6e 64 20 70 43 2d 3e 61 54  set[] and pC->aT
15e70 79 70 65 5b 5d 2e 0a 20 20 2a 2f 0a 20 20 69 66  ype[]..  */.  if
15e80 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64  ( pC->nHdrParsed
15e90 3c 3d 70 32 20 29 7b 0a 20 20 20 20 2f 2a 20 49  <=p2 ){.    /* I
15ea0 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65 20  f there is more 
15eb0 68 65 61 64 65 72 20 61 76 61 69 6c 61 62 6c 65  header available
15ec0 20 66 6f 72 20 70 61 72 73 69 6e 67 20 69 6e 20   for parsing in 
15ed0 74 68 65 20 72 65 63 6f 72 64 2c 20 74 72 79 0a  the record, try.
15ee0 20 20 20 20 2a 2a 20 74 6f 20 65 78 74 72 61 63      ** to extrac
15ef0 74 20 61 64 64 69 74 69 6f 6e 61 6c 20 66 69 65  t additional fie
15f00 6c 64 73 20 75 70 20 74 68 72 6f 75 67 68 20 74  lds up through t
15f10 68 65 20 70 32 2b 31 2d 74 68 20 66 69 65 6c 64  he p2+1-th field
15f20 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28   .    */.    if(
15f30 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 3c   pC->iHdrOffset<
15f40 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b 0a 20 20  aOffset[0] ){.  
15f50 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65      /* Make sure
15f60 20 7a 44 61 74 61 20 70 6f 69 6e 74 73 20 74 6f   zData points to
15f70 20 65 6e 6f 75 67 68 20 6f 66 20 74 68 65 20 72   enough of the r
15f80 65 63 6f 72 64 20 74 6f 20 63 6f 76 65 72 20 74  ecord to cover t
15f90 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20 20  he header. */.  
15fa0 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77      if( pC->aRow
15fb0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 6d  ==0 ){.        m
15fc0 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20  emset(&sMem, 0, 
15fd0 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20  sizeof(sMem));. 
15fe0 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
15ff0 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74  te3VdbeMemFromBt
16000 72 65 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ree(pC->uc.pCurs
16010 6f 72 2c 20 30 2c 20 61 4f 66 66 73 65 74 5b 30  or, 0, aOffset[0
16020 5d 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20  ], &sMem);.     
16030 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
16040 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
16050 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
16060 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20          zData = 
16070 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20  (u8*)sMem.z;.   
16080 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
16090 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61 52    zData = pC->aR
160a0 6f 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20  ow;.      }.  . 
160b0 20 20 20 20 20 2f 2a 20 46 69 6c 6c 20 69 6e 20       /* Fill in 
160c0 70 43 2d 3e 61 54 79 70 65 5b 69 5d 20 61 6e 64  pC->aType[i] and
160d0 20 61 4f 66 66 73 65 74 5b 69 5d 20 76 61 6c 75   aOffset[i] valu
160e0 65 73 20 74 68 72 6f 75 67 68 20 74 68 65 20 70  es through the p
160f0 32 2d 74 68 20 66 69 65 6c 64 2e 20 2a 2f 0a 20  2-th field. */. 
16100 20 20 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61     op_column_rea
16110 64 5f 68 65 61 64 65 72 3a 0a 20 20 20 20 20 20  d_header:.      
16120 69 20 3d 20 70 43 2d 3e 6e 48 64 72 50 61 72 73  i = pC->nHdrPars
16130 65 64 3b 0a 20 20 20 20 20 20 6f 66 66 73 65 74  ed;.      offset
16140 36 34 20 3d 20 61 4f 66 66 73 65 74 5b 69 5d 3b  64 = aOffset[i];
16150 0a 20 20 20 20 20 20 7a 48 64 72 20 3d 20 7a 44  .      zHdr = zD
16160 61 74 61 20 2b 20 70 43 2d 3e 69 48 64 72 4f 66  ata + pC->iHdrOf
16170 66 73 65 74 3b 0a 20 20 20 20 20 20 7a 45 6e 64  fset;.      zEnd
16180 48 64 72 20 3d 20 7a 44 61 74 61 20 2b 20 61 4f  Hdr = zData + aO
16190 66 66 73 65 74 5b 30 5d 3b 0a 20 20 20 20 20 20  ffset[0];.      
161a0 74 65 73 74 63 61 73 65 28 20 7a 48 64 72 3e 3d  testcase( zHdr>=
161b0 7a 45 6e 64 48 64 72 20 29 3b 0a 20 20 20 20 20  zEndHdr );.     
161c0 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 69 66 28   do{.        if(
161d0 20 28 70 43 2d 3e 61 54 79 70 65 5b 69 5d 20 3d   (pC->aType[i] =
161e0 20 74 20 3d 20 7a 48 64 72 5b 30 5d 29 3c 30 78   t = zHdr[0])<0x
161f0 38 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  80 ){.          
16200 7a 48 64 72 2b 2b 3b 0a 20 20 20 20 20 20 20 20  zHdr++;.        
16210 20 20 6f 66 66 73 65 74 36 34 20 2b 3d 20 73 71    offset64 += sq
16220 6c 69 74 65 33 56 64 62 65 4f 6e 65 42 79 74 65  lite3VdbeOneByte
16230 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29  SerialTypeLen(t)
16240 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
16250 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64 72 20  .          zHdr 
16260 2b 3d 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  += sqlite3GetVar
16270 69 6e 74 33 32 28 7a 48 64 72 2c 20 26 74 29 3b  int32(zHdr, &t);
16280 0a 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e 61  .          pC->a
16290 54 79 70 65 5b 69 5d 20 3d 20 74 3b 0a 20 20 20  Type[i] = t;.   
162a0 20 20 20 20 20 20 20 6f 66 66 73 65 74 36 34 20         offset64 
162b0 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  += sqlite3VdbeSe
162c0 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a  rialTypeLen(t);.
162d0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
162e0 20 20 61 4f 66 66 73 65 74 5b 2b 2b 69 5d 20 3d    aOffset[++i] =
162f0 20 28 75 33 32 29 28 6f 66 66 73 65 74 36 34 20   (u32)(offset64 
16300 26 20 30 78 66 66 66 66 66 66 66 66 29 3b 0a 20  & 0xffffffff);. 
16310 20 20 20 20 20 7d 77 68 69 6c 65 28 20 69 3c 3d       }while( i<=
16320 70 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64 48  p2 && zHdr<zEndH
16330 64 72 20 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20  dr );..      /* 
16340 54 68 65 20 72 65 63 6f 72 64 20 69 73 20 63 6f  The record is co
16350 72 72 75 70 74 20 69 66 20 61 6e 79 20 6f 66 20  rrupt if any of 
16360 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72  the following ar
16370 65 20 74 72 75 65 3a 0a 20 20 20 20 20 20 2a 2a  e true:.      **
16380 20 28 31 29 20 74 68 65 20 62 79 74 65 73 20 6f   (1) the bytes o
16390 66 20 74 68 65 20 68 65 61 64 65 72 20 65 78 74  f the header ext
163a0 65 6e 64 20 70 61 73 74 20 74 68 65 20 64 65 63  end past the dec
163b0 6c 61 72 65 64 20 68 65 61 64 65 72 20 73 69 7a  lared header siz
163c0 65 0a 20 20 20 20 20 20 2a 2a 20 28 32 29 20 74  e.      ** (2) t
163d0 68 65 20 65 6e 74 69 72 65 20 68 65 61 64 65 72  he entire header
163e0 20 77 61 73 20 75 73 65 64 20 62 75 74 20 6e 6f   was used but no
163f0 74 20 61 6c 6c 20 64 61 74 61 20 77 61 73 20 75  t all data was u
16400 73 65 64 0a 20 20 20 20 20 20 2a 2a 20 28 33 29  sed.      ** (3)
16410 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
16420 64 61 74 61 20 65 78 74 65 6e 64 73 20 62 65 79  data extends bey
16430 6f 6e 64 20 74 68 65 20 65 6e 64 20 6f 66 20 74  ond the end of t
16440 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20 20 20  he record..     
16450 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28 7a   */.      if( (z
16460 48 64 72 3e 3d 7a 45 6e 64 48 64 72 20 26 26 20  Hdr>=zEndHdr && 
16470 28 7a 48 64 72 3e 7a 45 6e 64 48 64 72 20 7c 7c  (zHdr>zEndHdr ||
16480 20 6f 66 66 73 65 74 36 34 21 3d 70 43 2d 3e 70   offset64!=pC->p
16490 61 79 6c 6f 61 64 53 69 7a 65 29 29 0a 20 20 20  ayloadSize)).   
164a0 20 20 20 20 7c 7c 20 28 6f 66 66 73 65 74 36 34      || (offset64
164b0 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69   > pC->payloadSi
164c0 7a 65 29 0a 20 20 20 20 20 20 29 7b 0a 20 20 20  ze).      ){.   
164d0 20 20 20 20 20 69 66 28 20 61 4f 66 66 73 65 74       if( aOffset
164e0 5b 30 5d 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  [0]==0 ){.      
164f0 20 20 20 20 69 20 3d 20 30 3b 0a 20 20 20 20 20      i = 0;.     
16500 20 20 20 20 20 7a 48 64 72 20 3d 20 7a 45 6e 64       zHdr = zEnd
16510 48 64 72 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  Hdr;.        }el
16520 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66  se{.          if
16530 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 20  ( pC->aRow==0 ) 
16540 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
16550 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20  lease(&sMem);.  
16560 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f          goto op_
16570 63 6f 6c 75 6d 6e 5f 63 6f 72 72 75 70 74 3b 0a  column_corrupt;.
16580 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
16590 7d 0a 0a 20 20 20 20 20 20 70 43 2d 3e 6e 48 64  }..      pC->nHd
165a0 72 50 61 72 73 65 64 20 3d 20 69 3b 0a 20 20 20  rParsed = i;.   
165b0 20 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65     pC->iHdrOffse
165c0 74 20 3d 20 28 75 33 32 29 28 7a 48 64 72 20 2d  t = (u32)(zHdr -
165d0 20 7a 44 61 74 61 29 3b 0a 20 20 20 20 20 20 69   zData);.      i
165e0 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29  f( pC->aRow==0 )
165f0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
16600 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20  elease(&sMem);. 
16610 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
16620 74 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a 20 20  t = 0;.    }..  
16630 20 20 2f 2a 20 49 66 20 61 66 74 65 72 20 74 72    /* If after tr
16640 79 69 6e 67 20 74 6f 20 65 78 74 72 61 63 74 20  ying to extract 
16650 6e 65 77 20 65 6e 74 72 69 65 73 20 66 72 6f 6d  new entries from
16660 20 74 68 65 20 68 65 61 64 65 72 2c 20 6e 48 64   the header, nHd
16670 72 50 61 72 73 65 64 20 69 73 0a 20 20 20 20 2a  rParsed is.    *
16680 2a 20 73 74 69 6c 6c 20 6e 6f 74 20 75 70 20 74  * still not up t
16690 6f 20 70 32 2c 20 74 68 61 74 20 6d 65 61 6e 73  o p2, that means
166a0 20 74 68 61 74 20 74 68 65 20 72 65 63 6f 72 64   that the record
166b0 20 68 61 73 20 66 65 77 65 72 20 74 68 61 6e 20   has fewer than 
166c0 70 32 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e  p2.    ** column
166d0 73 2e 20 20 53 6f 20 74 68 65 20 72 65 73 75 6c  s.  So the resul
166e0 74 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72  t will be either
166f0 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c   the default val
16700 75 65 20 6f 72 20 61 20 4e 55 4c 4c 2e 0a 20 20  ue or a NULL..  
16710 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d    */.    if( pC-
16720 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20  >nHdrParsed<=p2 
16730 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70  ){.      if( pOp
16740 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d  ->p4type==P4_MEM
16750 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
16760 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
16770 77 43 6f 70 79 28 70 44 65 73 74 2c 20 70 4f 70  wCopy(pDest, pOp
16780 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53  ->p4.pMem, MEM_S
16790 74 61 74 69 63 29 3b 0a 20 20 20 20 20 20 7d 65  tatic);.      }e
167a0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  lse{.        sql
167b0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
167c0 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20  ll(pDest);.     
167d0 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70   }.      goto op
167e0 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20  _column_out;.   
167f0 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
16800 74 20 3d 20 70 43 2d 3e 61 54 79 70 65 5b 70 32  t = pC->aType[p2
16810 5d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 45 78 74  ];.  }..  /* Ext
16820 72 61 63 74 20 74 68 65 20 63 6f 6e 74 65 6e 74  ract the content
16830 20 66 6f 72 20 74 68 65 20 70 32 2b 31 2d 74 68   for the p2+1-th
16840 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6e 74 72 6f   column.  Contro
16850 6c 20 63 61 6e 20 6f 6e 6c 79 0a 20 20 2a 2a 20  l can only.  ** 
16860 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74  reach this point
16870 20 69 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c   if aOffset[p2],
16880 20 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d 2c 20   aOffset[p2+1], 
16890 61 6e 64 20 70 43 2d 3e 61 54 79 70 65 5b 70 32  and pC->aType[p2
168a0 5d 20 61 72 65 0a 20 20 2a 2a 20 61 6c 6c 20 76  ] are.  ** all v
168b0 61 6c 69 64 2e 0a 20 20 2a 2f 0a 20 20 61 73 73  alid..  */.  ass
168c0 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 48 64 72  ert( p2<pC->nHdr
168d0 50 61 72 73 65 64 20 29 3b 0a 20 20 61 73 73 65  Parsed );.  asse
168e0 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
168f0 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73  K );.  assert( s
16900 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d  qlite3VdbeCheckM
16910 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 70 44 65  emInvariants(pDe
16920 73 74 29 20 29 3b 0a 20 20 69 66 28 20 56 64 62  st) );.  if( Vdb
16930 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 44 65 73  eMemDynamic(pDes
16940 74 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  t) ){.    sqlite
16950 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
16960 70 44 65 73 74 29 3b 0a 20 20 7d 0a 20 20 61 73  pDest);.  }.  as
16970 73 65 72 74 28 20 74 3d 3d 70 43 2d 3e 61 54 79  sert( t==pC->aTy
16980 70 65 5b 70 32 5d 20 29 3b 0a 20 20 69 66 28 20  pe[p2] );.  if( 
16990 70 43 2d 3e 73 7a 52 6f 77 3e 3d 61 4f 66 66 73  pC->szRow>=aOffs
169a0 65 74 5b 70 32 2b 31 5d 20 29 7b 0a 20 20 20 20  et[p2+1] ){.    
169b0 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 63  /* This is the c
169c0 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 68 65 72 65  ommon case where
169d0 20 74 68 65 20 64 65 73 69 72 65 64 20 63 6f 6e   the desired con
169e0 74 65 6e 74 20 66 69 74 73 20 6f 6e 20 74 68 65  tent fits on the
169f0 20 6f 72 69 67 69 6e 61 6c 0a 20 20 20 20 2a 2a   original.    **
16a00 20 70 61 67 65 20 2d 20 77 68 65 72 65 20 74 68   page - where th
16a10 65 20 63 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74  e content is not
16a20 20 6f 6e 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20   on an overflow 
16a30 70 61 67 65 20 2a 2f 0a 20 20 20 20 7a 44 61 74  page */.    zDat
16a40 61 20 3d 20 70 43 2d 3e 61 52 6f 77 20 2b 20 61  a = pC->aRow + a
16a50 4f 66 66 73 65 74 5b 70 32 5d 3b 0a 20 20 20 20  Offset[p2];.    
16a60 69 66 28 20 74 3c 31 32 20 29 7b 0a 20 20 20 20  if( t<12 ){.    
16a70 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72    sqlite3VdbeSer
16a80 69 61 6c 47 65 74 28 7a 44 61 74 61 2c 20 74 2c  ialGet(zData, t,
16a90 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c   pDest);.    }el
16aa0 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20  se{.      /* If 
16ab0 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65  the column value
16ac0 20 69 73 20 61 20 73 74 72 69 6e 67 2c 20 77 65   is a string, we
16ad0 20 6e 65 65 64 20 61 20 70 65 72 73 69 73 74 65   need a persiste
16ae0 6e 74 20 76 61 6c 75 65 2c 20 6e 6f 74 0a 20 20  nt value, not.  
16af0 20 20 20 20 2a 2a 20 61 20 4d 45 4d 5f 45 70 68      ** a MEM_Eph
16b00 65 6d 20 76 61 6c 75 65 2e 20 20 54 68 69 73 20  em value.  This 
16b10 62 72 61 6e 63 68 20 69 73 20 61 20 66 61 73 74  branch is a fast
16b20 20 73 68 6f 72 74 2d 63 75 74 20 74 68 61 74 20   short-cut that 
16b30 69 73 20 65 71 75 69 76 61 6c 65 6e 74 0a 20 20  is equivalent.  
16b40 20 20 20 20 2a 2a 20 74 6f 20 63 61 6c 6c 69 6e      ** to callin
16b50 67 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  g sqlite3VdbeSer
16b60 69 61 6c 47 65 74 28 29 20 61 6e 64 20 73 71 6c  ialGet() and sql
16b70 69 74 65 33 56 64 62 65 44 65 65 70 68 65 6d 65  ite3VdbeDeepheme
16b80 72 61 6c 69 7a 65 28 29 2e 0a 20 20 20 20 20 20  ralize()..      
16b90 2a 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63 20  */.      static 
16ba0 63 6f 6e 73 74 20 75 31 36 20 61 46 6c 61 67 5b  const u16 aFlag[
16bb0 5d 20 3d 20 7b 20 4d 45 4d 5f 42 6c 6f 62 2c 20  ] = { MEM_Blob, 
16bc0 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 54 65 72 6d  MEM_Str|MEM_Term
16bd0 20 7d 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d   };.      pDest-
16be0 3e 6e 20 3d 20 6c 65 6e 20 3d 20 28 74 2d 31 32  >n = len = (t-12
16bf0 29 2f 32 3b 0a 20 20 20 20 20 20 70 44 65 73 74  )/2;.      pDest
16c00 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
16c10 3b 0a 20 20 20 20 20 20 69 66 28 20 70 44 65 73  ;.      if( pDes
16c20 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3c 20 6c 65  t->szMalloc < le
16c30 6e 2b 32 20 29 7b 0a 20 20 20 20 20 20 20 20 70  n+2 ){.        p
16c40 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  Dest->flags = ME
16c50 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  M_Null;.        
16c60 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
16c70 65 6d 47 72 6f 77 28 70 44 65 73 74 2c 20 6c 65  emGrow(pDest, le
16c80 6e 2b 32 2c 20 30 29 20 29 20 67 6f 74 6f 20 6e  n+2, 0) ) goto n
16c90 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65 6c  o_mem;.      }el
16ca0 73 65 7b 0a 20 20 20 20 20 20 20 20 70 44 65 73  se{.        pDes
16cb0 74 2d 3e 7a 20 3d 20 70 44 65 73 74 2d 3e 7a 4d  t->z = pDest->zM
16cc0 61 6c 6c 6f 63 3b 0a 20 20 20 20 20 20 7d 0a 20  alloc;.      }. 
16cd0 20 20 20 20 20 6d 65 6d 63 70 79 28 70 44 65 73       memcpy(pDes
16ce0 74 2d 3e 7a 2c 20 7a 44 61 74 61 2c 20 6c 65 6e  t->z, zData, len
16cf0 29 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e  );.      pDest->
16d00 7a 5b 6c 65 6e 5d 20 3d 20 30 3b 0a 20 20 20 20  z[len] = 0;.    
16d10 20 20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 2b 31    pDest->z[len+1
16d20 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 44 65  ] = 0;.      pDe
16d30 73 74 2d 3e 66 6c 61 67 73 20 3d 20 61 46 6c 61  st->flags = aFla
16d40 67 5b 74 26 31 5d 3b 0a 20 20 20 20 7d 0a 20 20  g[t&1];.    }.  
16d50 7d 65 6c 73 65 7b 0a 20 20 20 20 70 44 65 73 74  }else{.    pDest
16d60 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
16d70 3b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 62 72  ;.    /* This br
16d80 61 6e 63 68 20 68 61 70 70 65 6e 73 20 6f 6e 6c  anch happens onl
16d90 79 20 77 68 65 6e 20 63 6f 6e 74 65 6e 74 20 69  y when content i
16da0 73 20 6f 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61  s on overflow pa
16db0 67 65 73 20 2a 2f 0a 20 20 20 20 69 66 28 20 28  ges */.    if( (
16dc0 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c  (pOp->p5 & (OPFL
16dd0 41 47 5f 4c 45 4e 47 54 48 41 52 47 7c 4f 50 46  AG_LENGTHARG|OPF
16de0 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29 29 21  LAG_TYPEOFARG))!
16df0 3d 30 0a 20 20 20 20 20 20 20 20 20 20 26 26 20  =0.          && 
16e00 28 28 74 3e 3d 31 32 20 26 26 20 28 74 26 31 29  ((t>=12 && (t&1)
16e10 3d 3d 30 29 20 7c 7c 20 28 70 4f 70 2d 3e 70 35  ==0) || (pOp->p5
16e20 20 26 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46   & OPFLAG_TYPEOF
16e30 41 52 47 29 21 3d 30 29 29 0a 20 20 20 20 20 7c  ARG)!=0)).     |
16e40 7c 20 28 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33  | (len = sqlite3
16e50 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65  VdbeSerialTypeLe
16e60 6e 28 74 29 29 3d 3d 30 0a 20 20 20 20 29 7b 0a  n(t))==0.    ){.
16e70 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 6e 74        /* Content
16e80 20 69 73 20 69 72 72 65 6c 65 76 61 6e 74 20 66   is irrelevant f
16e90 6f 72 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 31  or.      **    1
16ea0 2e 20 74 68 65 20 74 79 70 65 6f 66 28 29 20 66  . the typeof() f
16eb0 75 6e 63 74 69 6f 6e 2c 0a 20 20 20 20 20 20 2a  unction,.      *
16ec0 2a 20 20 20 20 32 2e 20 74 68 65 20 6c 65 6e 67  *    2. the leng
16ed0 74 68 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69  th(X) function i
16ee0 66 20 58 20 69 73 20 61 20 62 6c 6f 62 2c 20 61  f X is a blob, a
16ef0 6e 64 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 33  nd.      **    3
16f00 2e 20 69 66 20 74 68 65 20 63 6f 6e 74 65 6e 74  . if the content
16f10 20 6c 65 6e 67 74 68 20 69 73 20 7a 65 72 6f 2e   length is zero.
16f20 0a 20 20 20 20 20 20 2a 2a 20 53 6f 20 77 65 20  .      ** So we 
16f30 6d 69 67 68 74 20 61 73 20 77 65 6c 6c 20 75 73  might as well us
16f40 65 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74 20  e bogus content 
16f50 72 61 74 68 65 72 20 74 68 61 6e 20 72 65 61 64  rather than read
16f60 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e  ing.      ** con
16f70 74 65 6e 74 20 66 72 6f 6d 20 64 69 73 6b 2e 20  tent from disk. 
16f80 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20  .      **.      
16f90 2a 2a 20 41 6c 74 68 6f 75 67 68 20 73 71 6c 69  ** Although sqli
16fa0 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74  te3VdbeSerialGet
16fb0 28 29 20 6d 61 79 20 72 65 61 64 20 61 74 20 6d  () may read at m
16fc0 6f 73 74 20 38 20 62 79 74 65 73 20 66 72 6f 6d  ost 8 bytes from
16fd0 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 62 75   the.      ** bu
16fe0 66 66 65 72 20 70 61 73 73 65 64 20 74 6f 20 69  ffer passed to i
16ff0 74 2c 20 64 65 62 75 67 67 69 6e 67 20 66 75 6e  t, debugging fun
17000 63 74 69 6f 6e 20 56 64 62 65 4d 65 6d 50 72 65  ction VdbeMemPre
17010 74 74 79 50 72 69 6e 74 28 29 20 6d 61 79 0a 20  ttyPrint() may. 
17020 20 20 20 20 20 2a 2a 20 72 65 61 64 20 75 70 20       ** read up 
17030 74 6f 20 31 36 2e 20 53 6f 20 31 36 20 62 79 74  to 16. So 16 byt
17040 65 73 20 6f 66 20 62 6f 67 75 73 20 63 6f 6e 74  es of bogus cont
17050 65 6e 74 20 69 73 20 73 75 70 70 6c 69 65 64 2e  ent is supplied.
17060 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
17070 73 74 61 74 69 63 20 75 38 20 61 5a 65 72 6f 5b  static u8 aZero[
17080 31 36 5d 3b 20 20 2f 2a 20 54 68 69 73 20 69 73  16];  /* This is
17090 20 74 68 65 20 62 6f 67 75 73 20 63 6f 6e 74 65   the bogus conte
170a0 6e 74 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69  nt */.      sqli
170b0 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74  te3VdbeSerialGet
170c0 28 61 5a 65 72 6f 2c 20 74 2c 20 70 44 65 73 74  (aZero, t, pDest
170d0 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
170e0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
170f0 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
17100 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
17110 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65   aOffset[p2], le
17120 6e 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20  n, pDest);.     
17130 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
17140 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
17150 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
17160 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
17170 65 72 69 61 6c 47 65 74 28 28 63 6f 6e 73 74 20  erialGet((const 
17180 75 38 2a 29 70 44 65 73 74 2d 3e 7a 2c 20 74 2c  u8*)pDest->z, t,
17190 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 70   pDest);.      p
171a0 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  Dest->flags &= ~
171b0 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20 20 20 20 7d  MEM_Ephem;.    }
171c0 0a 20 20 7d 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f  .  }..op_column_
171d0 6f 75 74 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41  out:.  UPDATE_MA
171e0 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74  X_BLOBSIZE(pDest
171f0 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
17200 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65  ACE(pOp->p3, pDe
17210 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 0a 6f  st);.  break;..o
17220 70 5f 63 6f 6c 75 6d 6e 5f 63 6f 72 72 75 70 74  p_column_corrupt
17230 3a 0a 20 20 69 66 28 20 61 4f 70 5b 30 5d 2e 70  :.  if( aOp[0].p
17240 33 3e 30 20 29 7b 0a 20 20 20 20 70 4f 70 20 3d  3>0 ){.    pOp =
17250 20 26 61 4f 70 5b 61 4f 70 5b 30 5d 2e 70 33 2d   &aOp[aOp[0].p3-
17260 31 5d 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  1];.    break;. 
17270 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d   }else{.    rc =
17280 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
17290 42 4b 50 54 3b 0a 20 20 20 20 67 6f 74 6f 20 61  BKPT;.    goto a
172a0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
172b0 72 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 20 4f 70 63  r;.  }.}../* Opc
172c0 6f 64 65 3a 20 41 66 66 69 6e 69 74 79 20 50 31  ode: Affinity P1
172d0 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
172e0 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e 69 74 79  nopsis: affinity
172f0 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a  (r[P1@P2]).**.**
17300 20 41 70 70 6c 79 20 61 66 66 69 6e 69 74 69 65   Apply affinitie
17310 73 20 74 6f 20 61 20 72 61 6e 67 65 20 6f 66 20  s to a range of 
17320 50 32 20 72 65 67 69 73 74 65 72 73 20 73 74 61  P2 registers sta
17330 72 74 69 6e 67 20 77 69 74 68 20 50 31 2e 0a 2a  rting with P1..*
17340 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 73 74 72  *.** P4 is a str
17350 69 6e 67 20 74 68 61 74 20 69 73 20 50 32 20 63  ing that is P2 c
17360 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20  haracters long. 
17370 54 68 65 20 4e 2d 74 68 20 63 68 61 72 61 63 74  The N-th charact
17380 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72  er of the.** str
17390 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74 68  ing indicates th
173a0 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74  e column affinit
173b0 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65  y that should be
173c0 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 4e 2d   used for the N-
173d0 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c  th.** memory cel
173e0 6c 20 69 6e 20 74 68 65 20 72 61 6e 67 65 2e 0a  l in the range..
173f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66 69 6e  */.case OP_Affin
17400 69 74 79 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63  ity: {.  const c
17410 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20  har *zAffinity; 
17420 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
17430 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20  y to be applied 
17440 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e 69 74 79 20  */..  zAffinity 
17450 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61  = pOp->p4.z;.  a
17460 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79  ssert( zAffinity
17470 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
17480 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
17490 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74  assert( zAffinit
174a0 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b  y[pOp->p2]==0 );
174b0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
174c0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 77 68 69 6c  pOp->p1];.  whil
174d0 65 28 20 31 20 2f 2a 65 64 69 74 2d 62 79 2d 62  e( 1 /*edit-by-b
174e0 72 65 61 6b 2a 2f 20 29 7b 0a 20 20 20 20 61 73  reak*/ ){.    as
174f0 73 65 72 74 28 20 70 49 6e 31 20 3c 3d 20 26 70  sert( pIn1 <= &p
17500 2d 3e 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b  ->aMem[(p->nMem+
17510 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 5d  1 - p->nCursor)]
17520 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
17530 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29  memIsValid(pIn1)
17540 20 29 3b 0a 20 20 20 20 61 70 70 6c 79 41 66 66   );.    applyAff
17550 69 6e 69 74 79 28 70 49 6e 31 2c 20 7a 41 66 66  inity(pIn1, zAff
17560 69 6e 69 74 79 5b 30 5d 2c 20 65 6e 63 6f 64 69  inity[0], encodi
17570 6e 67 29 3b 0a 20 20 20 20 69 66 28 20 7a 41 66  ng);.    if( zAf
17580 66 69 6e 69 74 79 5b 30 5d 3d 3d 53 51 4c 49 54  finity[0]==SQLIT
17590 45 5f 41 46 46 5f 52 45 41 4c 20 26 26 20 28 70  E_AFF_REAL && (p
175a0 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
175b0 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20 20 20 20  _Int)!=0 ){.    
175c0 20 20 2f 2a 20 57 68 65 6e 20 61 70 70 6c 79 69    /* When applyi
175d0 6e 67 20 52 45 41 4c 20 61 66 66 69 6e 69 74 79  ng REAL affinity
175e0 2c 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  , if the result 
175f0 69 73 20 73 74 69 6c 6c 20 4d 45 4d 5f 49 6e 74  is still MEM_Int
17600 2c 20 0a 20 20 20 20 20 20 2a 2a 20 69 6e 64 69  , .      ** indi
17610 63 61 74 65 20 74 68 61 74 20 52 45 41 4c 20 69  cate that REAL i
17620 73 20 61 63 74 75 61 6c 6c 79 20 64 65 73 69 72  s actually desir
17630 65 64 20 2a 2f 0a 20 20 20 20 20 20 70 49 6e 31  ed */.      pIn1
17640 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 49  ->flags |= MEM_I
17650 6e 74 52 65 61 6c 3b 0a 20 20 20 20 20 20 70 49  ntReal;.      pI
17660 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45  n1->flags &= ~ME
17670 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a 20 20 20  M_Int;.    }.   
17680 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
17690 28 69 6e 74 29 28 70 49 6e 31 2d 61 4d 65 6d 29  (int)(pIn1-aMem)
176a0 2c 20 70 49 6e 31 29 3b 0a 20 20 20 20 7a 41 66  , pIn1);.    zAf
176b0 66 69 6e 69 74 79 2b 2b 3b 0a 20 20 20 20 69 66  finity++;.    if
176c0 28 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d 3d 3d  ( zAffinity[0]==
176d0 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 70  0 ) break;.    p
176e0 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65  In1++;.  }.  bre
176f0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
17700 3a 20 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20  : MakeRecord P1 
17710 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
17720 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b  nopsis: r[P3]=mk
17730 72 65 63 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a  rec(r[P1@P2]).**
17740 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72  .** Convert P2 r
17750 65 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69  egisters beginni
17760 6e 67 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20  ng with P1 into 
17770 74 68 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d  the [record form
17780 61 74 5d 0a 2a 2a 20 75 73 65 20 61 73 20 61 20  at].** use as a 
17790 64 61 74 61 20 72 65 63 6f 72 64 20 69 6e 20 61  data record in a
177a0 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
177b0 6f 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69  or as a key.** i
177c0 6e 20 61 6e 20 69 6e 64 65 78 2e 20 20 54 68 65  n an index.  The
177d0 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
177e0 65 20 63 61 6e 20 64 65 63 6f 64 65 20 74 68 65  e can decode the
177f0 20 72 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a   record later..*
17800 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61  *.** P4 may be a
17810 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20   string that is 
17820 50 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f  P2 characters lo
17830 6e 67 2e 20 20 54 68 65 20 4e 2d 74 68 20 63 68  ng.  The N-th ch
17840 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a  aracter of the.*
17850 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74  * string indicat
17860 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66  es the column af
17870 66 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75  finity that shou
17880 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72 20 74  ld be used for t
17890 68 65 20 4e 2d 74 68 0a 2a 2a 20 66 69 65 6c 64  he N-th.** field
178a0 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65   of the index ke
178b0 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70  y..**.** The map
178c0 70 69 6e 67 20 66 72 6f 6d 20 63 68 61 72 61 63  ping from charac
178d0 74 65 72 20 74 6f 20 61 66 66 69 6e 69 74 79 20  ter to affinity 
178e0 69 73 20 67 69 76 65 6e 20 62 79 20 74 68 65 20  is given by the 
178f0 53 51 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d  SQLITE_AFF_.** m
17900 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20 69 6e  acros defined in
17910 20 73 71 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a   sqliteInt.h..**
17920 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 4e 55 4c  .** If P4 is NUL
17930 4c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78  L then all index
17940 20 66 69 65 6c 64 73 20 68 61 76 65 20 74 68 65   fields have the
17950 20 61 66 66 69 6e 69 74 79 20 42 4c 4f 42 2e 0a   affinity BLOB..
17960 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52  */.case OP_MakeR
17970 65 63 6f 72 64 3a 20 7b 0a 20 20 4d 65 6d 20 2a  ecord: {.  Mem *
17980 70 52 65 63 3b 20 20 20 20 20 20 20 20 20 20 20  pRec;           
17990 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 65 63    /* The new rec
179a0 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e 44 61  ord */.  u64 nDa
179b0 74 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ta;             
179c0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
179d0 65 73 20 6f 66 20 64 61 74 61 20 73 70 61 63 65  es of data space
179e0 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72 3b 20   */.  int nHdr; 
179f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
17a00 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
17a10 6f 66 20 68 65 61 64 65 72 20 73 70 61 63 65 20  of header space 
17a20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 20  */.  i64 nByte; 
17a30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
17a40 61 74 61 20 73 70 61 63 65 20 72 65 71 75 69 72  ata space requir
17a50 65 64 20 66 6f 72 20 74 68 69 73 20 72 65 63 6f  ed for this reco
17a60 72 64 20 2a 2f 0a 20 20 69 36 34 20 6e 5a 65 72  rd */.  i64 nZer
17a70 6f 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  o;             /
17a80 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f  * Number of zero
17a90 20 62 79 74 65 73 20 61 74 20 74 68 65 20 65 6e   bytes at the en
17aa0 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  d of the record 
17ab0 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e 74  */.  int nVarint
17ac0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
17ad0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
17ae0 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20 20  n a varint */.  
17af0 75 33 32 20 73 65 72 69 61 6c 5f 74 79 70 65 3b  u32 serial_type;
17b00 20 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 66         /* Type f
17b10 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ield */.  Mem *p
17b20 44 61 74 61 30 3b 20 20 20 20 20 20 20 20 20 20  Data0;          
17b30 20 2f 2a 20 46 69 72 73 74 20 66 69 65 6c 64 20   /* First field 
17b40 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64 20 69  to be combined i
17b50 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20 2a  nto the record *
17b60 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b 20  /.  Mem *pLast; 
17b70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61             /* La
17b80 73 74 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20  st field of the 
17b90 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
17ba0 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20  nField;         
17bb0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
17bc0 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65  fields in the re
17bd0 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  cord */.  char *
17be0 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20  zAffinity;      
17bf0 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79   /* The affinity
17c00 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20   string for the 
17c10 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
17c20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20  file_format;    
17c30 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d 61     /* File forma
17c40 74 20 74 6f 20 75 73 65 20 66 6f 72 20 65 6e 63  t to use for enc
17c50 6f 64 69 6e 67 20 2a 2f 0a 20 20 75 33 32 20 6c  oding */.  u32 l
17c60 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  en;             
17c70 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 61    /* Length of a
17c80 20 66 69 65 6c 64 20 2a 2f 0a 20 20 75 38 20 2a   field */.  u8 *
17c90 7a 48 64 72 3b 20 20 20 20 20 20 20 20 20 20 20  zHdr;           
17ca0 20 20 20 2f 2a 20 57 68 65 72 65 20 74 6f 20 77     /* Where to w
17cb0 72 69 74 65 20 6e 65 78 74 20 62 79 74 65 20 6f  rite next byte o
17cc0 66 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a  f the header */.
17cd0 20 20 75 38 20 2a 7a 50 61 79 6c 6f 61 64 3b 20    u8 *zPayload; 
17ce0 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65 72           /* Wher
17cf0 65 20 74 6f 20 77 72 69 74 65 20 6e 65 78 74 20  e to write next 
17d00 62 79 74 65 20 6f 66 20 74 68 65 20 70 61 79 6c  byte of the payl
17d10 6f 61 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73  oad */..  /* Ass
17d20 75 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64  uming the record
17d30 20 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c   contains N fiel
17d40 64 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66  ds, the record f
17d50 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a  ormat looks.  **
17d60 20 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a   like this:.  **
17d70 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .  ** ----------
17d80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17d90 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17da0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17db0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
17dc0 20 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c   ** | hdr-size |
17dd0 20 74 79 70 65 20 30 20 7c 20 74 79 70 65 20 31   type 0 | type 1
17de0 20 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d   | ... | type N-
17df0 31 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20  1 | data0 | ... 
17e00 7c 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20  | data N-1 | .  
17e10 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ** -------------
17e20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17e30 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17e40 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17e50 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a  -----------.  **
17e60 0a 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73  .  ** Data(0) is
17e70 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69   taken from regi
17e80 73 74 65 72 20 50 31 2e 20 20 44 61 74 61 28 31  ster P1.  Data(1
17e90 29 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67  ) comes from reg
17ea0 69 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20  ister P1+1.  ** 
17eb0 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20  and so forth..  
17ec0 2a 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70  **.  ** Each typ
17ed0 65 20 66 69 65 6c 64 20 69 73 20 61 20 76 61 72  e field is a var
17ee0 69 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67  int representing
17ef0 20 74 68 65 20 73 65 72 69 61 6c 20 74 79 70 65   the serial type
17f00 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f   of the .  ** co
17f10 72 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61  rresponding data
17f20 20 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71   element (see sq
17f30 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
17f40 79 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a  ype()). The.  **
17f50 20 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20   hdr-size field 
17f60 69 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74  is also a varint
17f70 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66   which is the of
17f80 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65  fset from the be
17f90 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20  ginning.  ** of 
17fa0 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61  the record to da
17fb0 74 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74  ta0..  */.  nDat
17fc0 61 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f  a = 0;         /
17fd0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
17fe0 73 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20  s of data space 
17ff0 2a 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20  */.  nHdr = 0;  
18000 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
18010 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65  r of bytes of he
18020 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20  ader space */.  
18030 6e 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20  nZero = 0;      
18040 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
18050 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68  zero bytes at th
18060 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63  e end of the rec
18070 6f 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20  ord */.  nField 
18080 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66  = pOp->p1;.  zAf
18090 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34  finity = pOp->p4
180a0 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46  .z;.  assert( nF
180b0 69 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ield>0 && pOp->p
180c0 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e  2>0 && pOp->p2+n
180d0 46 69 65 6c 64 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  Field<=(p->nMem+
180e0 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  1 - p->nCursor)+
180f0 31 20 29 3b 0a 20 20 70 44 61 74 61 30 20 3d 20  1 );.  pData0 = 
18100 26 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20  &aMem[nField];. 
18110 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70   nField = pOp->p
18120 32 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44  2;.  pLast = &pD
18130 61 74 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a  ata0[nField-1];.
18140 20 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20    file_format = 
18150 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46  p->minWriteFileF
18160 6f 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20 49 64 65  ormat;..  /* Ide
18170 6e 74 69 66 79 20 74 68 65 20 6f 75 74 70 75 74  ntify the output
18180 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 20 20 61   register */.  a
18190 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70  ssert( pOp->p3<p
181a0 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70  Op->p1 || pOp->p
181b0 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e  3>=pOp->p1+pOp->
181c0 70 32 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26  p2 );.  pOut = &
181d0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
181e0 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
181f0 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f  e(p, pOut);..  /
18200 2a 20 41 70 70 6c 79 20 74 68 65 20 72 65 71 75  * Apply the requ
18210 65 73 74 65 64 20 61 66 66 69 6e 69 74 79 20 74  ested affinity t
18220 6f 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20 20 2a  o all inputs.  *
18230 2f 0a 20 20 61 73 73 65 72 74 28 20 70 44 61 74  /.  assert( pDat
18240 61 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 69  a0<=pLast );.  i
18250 66 28 20 7a 41 66 66 69 6e 69 74 79 20 29 7b 0a  f( zAffinity ){.
18260 20 20 20 20 70 52 65 63 20 3d 20 70 44 61 74 61      pRec = pData
18270 30 3b 0a 20 20 20 20 64 6f 7b 0a 20 20 20 20 20  0;.    do{.     
18280 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
18290 52 65 63 2b 2b 2c 20 2a 28 7a 41 66 66 69 6e 69  Rec++, *(zAffini
182a0 74 79 2b 2b 29 2c 20 65 6e 63 6f 64 69 6e 67 29  ty++), encoding)
182b0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
182c0 7a 41 66 66 69 6e 69 74 79 5b 30 5d 3d 3d 30 20  zAffinity[0]==0 
182d0 7c 7c 20 70 52 65 63 3c 3d 70 4c 61 73 74 20 29  || pRec<=pLast )
182e0 3b 0a 20 20 20 20 7d 77 68 69 6c 65 28 20 7a 41  ;.    }while( zA
182f0 66 66 69 6e 69 74 79 5b 30 5d 20 29 3b 0a 20 20  ffinity[0] );.  
18300 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
18310 5f 45 4e 41 42 4c 45 5f 4e 55 4c 4c 5f 54 52 49  _ENABLE_NULL_TRI
18320 4d 0a 20 20 2f 2a 20 4e 55 4c 4c 73 20 63 61 6e  M.  /* NULLs can
18330 20 62 65 20 73 61 66 65 6c 79 20 74 72 69 6d 6d   be safely trimm
18340 65 64 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20  ed from the end 
18350 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2c 20 61  of the record, a
18360 73 20 6c 6f 6e 67 20 61 73 0a 20 20 2a 2a 20 61  s long as.  ** a
18370 73 20 74 68 65 20 73 63 68 65 6d 61 20 66 6f 72  s the schema for
18380 6d 61 74 20 69 73 20 32 20 6f 72 20 6d 6f 72 65  mat is 2 or more
18390 20 61 6e 64 20 6e 6f 6e 65 20 6f 66 20 74 68 65   and none of the
183a0 20 6f 6d 69 74 74 65 64 20 63 6f 6c 75 6d 6e 73   omitted columns
183b0 0a 20 20 2a 2a 20 68 61 76 65 20 61 20 6e 6f 6e  .  ** have a non
183c0 2d 4e 55 4c 4c 20 64 65 66 61 75 6c 74 20 76 61  -NULL default va
183d0 6c 75 65 2e 20 20 41 6c 73 6f 2c 20 74 68 65 20  lue.  Also, the 
183e0 72 65 63 6f 72 64 20 6d 75 73 74 20 62 65 20 6c  record must be l
183f0 65 66 74 20 77 69 74 68 0a 20 20 2a 2a 20 61 74  eft with.  ** at
18400 20 6c 65 61 73 74 20 6f 6e 65 20 66 69 65 6c 64   least one field
18410 2e 20 20 49 66 20 50 35 3e 30 20 74 68 65 6e 20  .  If P5>0 then 
18420 69 74 20 77 69 6c 6c 20 62 65 20 6f 6e 65 20 6d  it will be one m
18430 6f 72 65 20 74 68 61 6e 20 74 68 65 0a 20 20 2a  ore than the.  *
18440 2a 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 72  * index of the r
18450 69 67 68 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e  ight-most column
18460 20 77 69 74 68 20 61 20 6e 6f 6e 2d 4e 55 4c 4c   with a non-NULL
18470 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 2a   default value *
18480 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  /.  if( pOp->p5 
18490 29 7b 0a 20 20 20 20 77 68 69 6c 65 28 20 28 70  ){.    while( (p
184a0 4c 61 73 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45  Last->flags & ME
184b0 4d 5f 4e 75 6c 6c 29 21 3d 30 20 26 26 20 6e 46  M_Null)!=0 && nF
184c0 69 65 6c 64 3e 70 4f 70 2d 3e 70 35 20 29 7b 0a  ield>pOp->p5 ){.
184d0 20 20 20 20 20 20 70 4c 61 73 74 2d 2d 3b 0a 20        pLast--;. 
184e0 20 20 20 20 20 6e 46 69 65 6c 64 2d 2d 3b 0a 20       nField--;. 
184f0 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a     }.  }.#endif.
18500 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75  .  /* Loop throu
18510 67 68 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20  gh the elements 
18520 74 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75  that will make u
18530 70 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  p the record to 
18540 66 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20  figure.  ** out 
18550 68 6f 77 20 6d 75 63 68 20 73 70 61 63 65 20 69  how much space i
18560 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74  s required for t
18570 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 0a 20  he new record.. 
18580 20 2a 2f 0a 20 20 70 52 65 63 20 3d 20 70 4c 61   */.  pRec = pLa
18590 73 74 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73  st;.  do{.    as
185a0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
185b0 28 70 52 65 63 29 20 29 3b 0a 20 20 20 20 73 65  (pRec) );.    se
185c0 72 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69  rial_type = sqli
185d0 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
185e0 65 28 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72  e(pRec, file_for
185f0 6d 61 74 2c 20 26 6c 65 6e 29 3b 0a 20 20 20 20  mat, &len);.    
18600 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20  if( pRec->flags 
18610 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20  & MEM_Zero ){.  
18620 20 20 20 20 69 66 28 20 73 65 72 69 61 6c 5f 74      if( serial_t
18630 79 70 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ype==0 ){.      
18640 20 20 2f 2a 20 56 61 6c 75 65 73 20 77 69 74 68    /* Values with
18650 20 4d 45 4d 5f 4e 75 6c 6c 20 61 6e 64 20 4d 45   MEM_Null and ME
18660 4d 5f 5a 65 72 6f 20 61 72 65 20 63 72 65 61 74  M_Zero are creat
18670 65 64 20 62 79 20 78 43 6f 6c 75 6d 6e 20 76 69  ed by xColumn vi
18680 72 74 75 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a  rtual.        **
18690 20 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 20 74   table methods t
186a0 68 61 74 20 6e 65 76 65 72 20 69 6e 76 6f 6b 65  hat never invoke
186b0 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
186c0 78 78 78 78 78 28 29 20 77 68 69 6c 65 0a 20 20  xxxxx() while.  
186d0 20 20 20 20 20 20 2a 2a 20 63 6f 6d 70 75 74 69        ** computi
186e0 6e 67 20 61 6e 20 75 6e 63 68 61 6e 67 69 6e 67  ng an unchanging
186f0 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 69 6e   column value in
18700 20 61 6e 20 55 50 44 41 54 45 20 73 74 61 74 65   an UPDATE state
18710 6d 65 6e 74 2e 0a 20 20 20 20 20 20 20 20 2a 2a  ment..        **
18720 20 47 69 76 65 20 73 75 63 68 20 76 61 6c 75 65   Give such value
18730 73 20 61 20 73 70 65 63 69 61 6c 20 69 6e 74 65  s a special inte
18740 72 6e 61 6c 2d 75 73 65 2d 6f 6e 6c 79 20 73 65  rnal-use-only se
18750 72 69 61 6c 2d 74 79 70 65 20 6f 66 20 31 30 0a  rial-type of 10.
18760 20 20 20 20 20 20 20 20 2a 2a 20 73 6f 20 74 68          ** so th
18770 61 74 20 74 68 65 79 20 63 61 6e 20 62 65 20 70  at they can be p
18780 61 73 73 65 64 20 74 68 72 6f 75 67 68 20 74 6f  assed through to
18790 20 78 55 70 64 61 74 65 20 61 6e 64 20 68 61 76   xUpdate and hav
187a0 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 20 74  e.        ** a t
187b0 72 75 65 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  rue sqlite3_valu
187c0 65 5f 6e 6f 63 68 61 6e 67 65 28 29 2e 20 2a 2f  e_nochange(). */
187d0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
187e0 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47   pOp->p5==OPFLAG
187f0 5f 4e 4f 43 48 4e 47 5f 4d 41 47 49 43 20 7c 7c  _NOCHNG_MAGIC ||
18800 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 20   CORRUPT_DB );. 
18810 20 20 20 20 20 20 20 73 65 72 69 61 6c 5f 74 79         serial_ty
18820 70 65 20 3d 20 31 30 3b 0a 20 20 20 20 20 20 7d  pe = 10;.      }
18830 65 6c 73 65 20 69 66 28 20 6e 44 61 74 61 20 29  else if( nData )
18840 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71  {.        if( sq
18850 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61  lite3VdbeMemExpa
18860 6e 64 42 6c 6f 62 28 70 52 65 63 29 20 29 20 67  ndBlob(pRec) ) g
18870 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
18880 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
18890 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65 63 2d 3e   nZero += pRec->
188a0 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20 20  u.nZero;.       
188b0 20 6c 65 6e 20 2d 3d 20 70 52 65 63 2d 3e 75 2e   len -= pRec->u.
188c0 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20 7d 0a 20  nZero;.      }. 
188d0 20 20 20 7d 0a 20 20 20 20 6e 44 61 74 61 20 2b     }.    nData +
188e0 3d 20 6c 65 6e 3b 0a 20 20 20 20 74 65 73 74 63  = len;.    testc
188f0 61 73 65 28 20 73 65 72 69 61 6c 5f 74 79 70 65  ase( serial_type
18900 3d 3d 31 32 37 20 29 3b 0a 20 20 20 20 74 65 73  ==127 );.    tes
18910 74 63 61 73 65 28 20 73 65 72 69 61 6c 5f 74 79  tcase( serial_ty
18920 70 65 3d 3d 31 32 38 20 29 3b 0a 20 20 20 20 6e  pe==128 );.    n
18930 48 64 72 20 2b 3d 20 73 65 72 69 61 6c 5f 74 79  Hdr += serial_ty
18940 70 65 3c 3d 31 32 37 20 3f 20 31 20 3a 20 73 71  pe<=127 ? 1 : sq
18950 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 73  lite3VarintLen(s
18960 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20  erial_type);.   
18970 20 70 52 65 63 2d 3e 75 54 65 6d 70 20 3d 20 73   pRec->uTemp = s
18980 65 72 69 61 6c 5f 74 79 70 65 3b 0a 20 20 20 20  erial_type;.    
18990 69 66 28 20 70 52 65 63 3d 3d 70 44 61 74 61 30  if( pRec==pData0
189a0 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 70 52   ) break;.    pR
189b0 65 63 2d 2d 3b 0a 20 20 7d 77 68 69 6c 65 28 31  ec--;.  }while(1
189c0 29 3b 0a 0a 20 20 2f 2a 20 45 56 49 44 45 4e 43  );..  /* EVIDENC
189d0 45 2d 4f 46 3a 20 52 2d 32 32 35 36 34 2d 31 31  E-OF: R-22564-11
189e0 36 34 37 20 54 68 65 20 68 65 61 64 65 72 20 62  647 The header b
189f0 65 67 69 6e 73 20 77 69 74 68 20 61 20 73 69 6e  egins with a sin
18a00 67 6c 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20  gle varint.  ** 
18a10 77 68 69 63 68 20 64 65 74 65 72 6d 69 6e 65 73  which determines
18a20 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65   the total numbe
18a30 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68  r of bytes in th
18a40 65 20 68 65 61 64 65 72 2e 20 54 68 65 20 76 61  e header. The va
18a50 72 69 6e 74 0a 20 20 2a 2a 20 76 61 6c 75 65 20  rint.  ** value 
18a60 69 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74  is the size of t
18a70 68 65 20 68 65 61 64 65 72 20 69 6e 20 62 79 74  he header in byt
18a80 65 73 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65  es including the
18a90 20 73 69 7a 65 20 76 61 72 69 6e 74 0a 20 20 2a   size varint.  *
18aa0 2a 20 69 74 73 65 6c 66 2e 20 2a 2f 0a 20 20 74  * itself. */.  t
18ab0 65 73 74 63 61 73 65 28 20 6e 48 64 72 3d 3d 31  estcase( nHdr==1
18ac0 32 36 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  26 );.  testcase
18ad0 28 20 6e 48 64 72 3d 3d 31 32 37 20 29 3b 0a 20  ( nHdr==127 );. 
18ae0 20 69 66 28 20 6e 48 64 72 3c 3d 31 32 36 20 29   if( nHdr<=126 )
18af0 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 63 6f 6d  {.    /* The com
18b00 6d 6f 6e 20 63 61 73 65 20 2a 2f 0a 20 20 20 20  mon case */.    
18b10 6e 48 64 72 20 2b 3d 20 31 3b 0a 20 20 7d 65 6c  nHdr += 1;.  }el
18b20 73 65 7b 0a 20 20 20 20 2f 2a 20 52 61 72 65 20  se{.    /* Rare 
18b30 63 61 73 65 20 6f 66 20 61 20 72 65 61 6c 6c 79  case of a really
18b40 20 6c 61 72 67 65 20 68 65 61 64 65 72 20 2a 2f   large header */
18b50 0a 20 20 20 20 6e 56 61 72 69 6e 74 20 3d 20 73  .    nVarint = s
18b60 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28  qlite3VarintLen(
18b70 6e 48 64 72 29 3b 0a 20 20 20 20 6e 48 64 72 20  nHdr);.    nHdr 
18b80 2b 3d 20 6e 56 61 72 69 6e 74 3b 0a 20 20 20 20  += nVarint;.    
18b90 69 66 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69  if( nVarint<sqli
18ba0 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64  te3VarintLen(nHd
18bb0 72 29 20 29 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d  r) ) nHdr++;.  }
18bc0 0a 20 20 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b  .  nByte = nHdr+
18bd0 6e 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 4d 61 6b  nData;..  /* Mak
18be0 65 20 73 75 72 65 20 74 68 65 20 6f 75 74 70 75  e sure the outpu
18bf0 74 20 72 65 67 69 73 74 65 72 20 68 61 73 20 61  t register has a
18c00 20 62 75 66 66 65 72 20 6c 61 72 67 65 20 65 6e   buffer large en
18c10 6f 75 67 68 20 74 6f 20 73 74 6f 72 65 20 0a 20  ough to store . 
18c20 20 2a 2a 20 74 68 65 20 6e 65 77 20 72 65 63 6f   ** the new reco
18c30 72 64 2e 20 54 68 65 20 6f 75 74 70 75 74 20 72  rd. The output r
18c40 65 67 69 73 74 65 72 20 28 70 4f 70 2d 3e 70 33  egister (pOp->p3
18c50 29 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  ) is not allowed
18c60 20 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20   to.  ** be one 
18c70 6f 66 20 74 68 65 20 69 6e 70 75 74 20 72 65 67  of the input reg
18c80 69 73 74 65 72 73 20 28 62 65 63 61 75 73 65 20  isters (because 
18c90 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61  the following ca
18ca0 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74  ll to.  ** sqlit
18cb0 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e  e3VdbeMemClearAn
18cc0 64 52 65 73 69 7a 65 28 29 20 63 6f 75 6c 64 20  dResize() could 
18cd0 63 6c 6f 62 62 65 72 20 74 68 65 20 76 61 6c 75  clobber the valu
18ce0 65 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 75  e before it is u
18cf0 73 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  sed)..  */.  if(
18d00 20 6e 42 79 74 65 2b 6e 5a 65 72 6f 3c 3d 70 4f   nByte+nZero<=pO
18d10 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 29 7b 0a  ut->szMalloc ){.
18d20 20 20 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75      /* The outpu
18d30 74 20 72 65 67 69 73 74 65 72 20 69 73 20 61 6c  t register is al
18d40 72 65 61 64 79 20 6c 61 72 67 65 20 65 6e 6f 75  ready large enou
18d50 67 68 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 72  gh to hold the r
18d60 65 63 6f 72 64 2e 0a 20 20 20 20 2a 2a 20 4e 6f  ecord..    ** No
18d70 20 65 72 72 6f 72 20 63 68 65 63 6b 73 20 6f 72   error checks or
18d80 20 62 75 66 66 65 72 20 65 6e 6c 61 72 67 65 6d   buffer enlargem
18d90 65 6e 74 20 69 73 20 72 65 71 75 69 72 65 64 20  ent is required 
18da0 2a 2f 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 20 3d  */.    pOut->z =
18db0 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a   pOut->zMalloc;.
18dc0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
18dd0 4e 65 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72  Need to make sur
18de0 65 20 74 68 61 74 20 74 68 65 20 6f 75 74 70 75  e that the outpu
18df0 74 20 69 73 20 6e 6f 74 20 74 6f 6f 20 62 69 67  t is not too big
18e00 20 61 6e 64 20 74 68 65 6e 20 65 6e 6c 61 72 67   and then enlarg
18e10 65 0a 20 20 20 20 2a 2a 20 74 68 65 20 6f 75 74  e.    ** the out
18e20 70 75 74 20 72 65 67 69 73 74 65 72 20 74 6f 20  put register to 
18e30 68 6f 6c 64 20 74 68 65 20 66 75 6c 6c 20 72 65  hold the full re
18e40 73 75 6c 74 20 2a 2f 0a 20 20 20 20 69 66 28 20  sult */.    if( 
18e50 6e 42 79 74 65 2b 6e 5a 65 72 6f 3e 64 62 2d 3e  nByte+nZero>db->
18e60 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
18e70 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
18e80 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69       goto too_bi
18e90 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  g;.    }.    if(
18ea0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
18eb0 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4f  learAndResize(pO
18ec0 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 29 20  ut, (int)nByte) 
18ed0 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f  ){.      goto no
18ee0 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  _mem;.    }.  }.
18ef0 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74    pOut->n = (int
18f00 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e  )nByte;.  pOut->
18f10 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62  flags = MEM_Blob
18f20 3b 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20 29 7b  ;.  if( nZero ){
18f30 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65  .    pOut->u.nZe
18f40 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20  ro = nZero;.    
18f50 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pOut->flags |= M
18f60 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 55  EM_Zero;.  }.  U
18f70 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
18f80 5a 45 28 70 4f 75 74 29 3b 0a 20 20 7a 48 64 72  ZE(pOut);.  zHdr
18f90 20 3d 20 28 75 38 20 2a 29 70 4f 75 74 2d 3e 7a   = (u8 *)pOut->z
18fa0 3b 0a 20 20 7a 50 61 79 6c 6f 61 64 20 3d 20 7a  ;.  zPayload = z
18fb0 48 64 72 20 2b 20 6e 48 64 72 3b 0a 0a 20 20 2f  Hdr + nHdr;..  /
18fc0 2a 20 57 72 69 74 65 20 74 68 65 20 72 65 63 6f  * Write the reco
18fd0 72 64 20 2a 2f 0a 20 20 7a 48 64 72 20 2b 3d 20  rd */.  zHdr += 
18fe0 70 75 74 56 61 72 69 6e 74 33 32 28 7a 48 64 72  putVarint32(zHdr
18ff0 2c 20 6e 48 64 72 29 3b 0a 20 20 61 73 73 65 72  , nHdr);.  asser
19000 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61 73 74  t( pData0<=pLast
19010 20 29 3b 0a 20 20 70 52 65 63 20 3d 20 70 44 61   );.  pRec = pDa
19020 74 61 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 73  ta0;.  do{.    s
19030 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 70 52 65  erial_type = pRe
19040 63 2d 3e 75 54 65 6d 70 3b 0a 20 20 20 20 2f 2a  c->uTemp;.    /*
19050 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
19060 30 36 35 32 39 2d 34 37 33 36 32 20 46 6f 6c 6c  06529-47362 Foll
19070 6f 77 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76  owing the size v
19080 61 72 69 6e 74 20 61 72 65 20 6f 6e 65 20 6f 72  arint are one or
19090 20 6d 6f 72 65 0a 20 20 20 20 2a 2a 20 61 64 64   more.    ** add
190a0 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73 2c  itional varints,
190b0 20 6f 6e 65 20 70 65 72 20 63 6f 6c 75 6d 6e 2e   one per column.
190c0 20 2a 2f 0a 20 20 20 20 7a 48 64 72 20 2b 3d 20   */.    zHdr += 
190d0 70 75 74 56 61 72 69 6e 74 33 32 28 7a 48 64 72  putVarint32(zHdr
190e0 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20  , serial_type); 
190f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 65             /* se
19100 72 69 61 6c 20 74 79 70 65 20 2a 2f 0a 20 20 20  rial type */.   
19110 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a   /* EVIDENCE-OF:
19120 20 52 2d 36 34 35 33 36 2d 35 31 37 32 38 20 54   R-64536-51728 T
19130 68 65 20 76 61 6c 75 65 73 20 66 6f 72 20 65 61  he values for ea
19140 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  ch column in the
19150 20 72 65 63 6f 72 64 0a 20 20 20 20 2a 2a 20 69   record.    ** i
19160 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f  mmediately follo
19170 77 20 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f  w the header. */
19180 0a 20 20 20 20 7a 50 61 79 6c 6f 61 64 20 2b 3d  .    zPayload +=
19190 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
191a0 61 6c 50 75 74 28 7a 50 61 79 6c 6f 61 64 2c 20  alPut(zPayload, 
191b0 70 52 65 63 2c 20 73 65 72 69 61 6c 5f 74 79 70  pRec, serial_typ
191c0 65 29 3b 20 2f 2a 20 63 6f 6e 74 65 6e 74 20 2a  e); /* content *
191d0 2f 0a 20 20 7d 77 68 69 6c 65 28 20 28 2b 2b 70  /.  }while( (++p
191e0 52 65 63 29 3c 3d 70 4c 61 73 74 20 29 3b 0a 20  Rec)<=pLast );. 
191f0 20 61 73 73 65 72 74 28 20 6e 48 64 72 3d 3d 28   assert( nHdr==(
19200 69 6e 74 29 28 7a 48 64 72 20 2d 20 28 75 38 2a  int)(zHdr - (u8*
19210 29 70 4f 75 74 2d 3e 7a 29 20 29 3b 0a 20 20 61  )pOut->z) );.  a
19220 73 73 65 72 74 28 20 6e 42 79 74 65 3d 3d 28 69  ssert( nByte==(i
19230 6e 74 29 28 7a 50 61 79 6c 6f 61 64 20 2d 20 28  nt)(zPayload - (
19240 75 38 2a 29 70 4f 75 74 2d 3e 7a 29 20 29 3b 0a  u8*)pOut->z) );.
19250 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
19260 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
19270 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
19280 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 52  >nCursor) );.  R
19290 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
192a0 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p3, pOut);.  
192b0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
192c0 6f 64 65 3a 20 43 6f 75 6e 74 20 50 31 20 50 32  ode: Count P1 P2
192d0 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
192e0 69 73 3a 20 72 5b 50 32 5d 3d 63 6f 75 6e 74 28  is: r[P2]=count(
192f0 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68  ).**.** Store th
19300 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  e number of entr
19310 69 65 73 20 28 61 6e 20 69 6e 74 65 67 65 72 20  ies (an integer 
19320 76 61 6c 75 65 29 20 69 6e 20 74 68 65 20 74 61  value) in the ta
19330 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 0a 2a 2a  ble or index .**
19340 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f   opened by curso
19350 72 20 50 31 20 69 6e 20 72 65 67 69 73 74 65 72  r P1 in register
19360 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53   P2.*/.#ifndef S
19370 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45  QLITE_OMIT_BTREE
19380 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50 5f 43 6f  COUNT.case OP_Co
19390 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  unt: {         /
193a0 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 36 34 20  * out2 */.  i64 
193b0 6e 45 6e 74 72 79 3b 0a 20 20 42 74 43 75 72 73  nEntry;.  BtCurs
193c0 6f 72 20 2a 70 43 72 73 72 3b 0a 0a 20 20 61 73  or *pCrsr;..  as
193d0 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70  sert( p->apCsr[p
193e0 4f 70 2d 3e 70 31 5d 2d 3e 65 43 75 72 54 79 70  Op->p1]->eCurTyp
193f0 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
19400 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 2d   );.  pCrsr = p-
19410 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d  >apCsr[pOp->p1]-
19420 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61  >uc.pCursor;.  a
19430 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a  ssert( pCrsr );.
19440 20 20 6e 45 6e 74 72 79 20 3d 20 30 3b 20 20 2f    nEntry = 0;  /
19450 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f  * Not needed.  O
19460 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65  nly used to sile
19470 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a  nce a warning. *
19480 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
19490 42 74 72 65 65 43 6f 75 6e 74 28 70 43 72 73 72  BtreeCount(pCrsr
194a0 2c 20 26 6e 45 6e 74 72 79 29 3b 0a 20 20 69 66  , &nEntry);.  if
194b0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
194c0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
194d0 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
194e0 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
194f0 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e  .  pOut->u.i = n
19500 45 6e 74 72 79 3b 0a 20 20 62 72 65 61 6b 3b 0a  Entry;.  break;.
19510 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63  }.#endif../* Opc
19520 6f 64 65 3a 20 53 61 76 65 70 6f 69 6e 74 20 50  ode: Savepoint P
19530 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
19540 20 4f 70 65 6e 2c 20 72 65 6c 65 61 73 65 20 6f   Open, release o
19550 72 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 73  r rollback the s
19560 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 64 20 62  avepoint named b
19570 79 20 70 61 72 61 6d 65 74 65 72 20 50 34 2c 20  y parameter P4, 
19580 64 65 70 65 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20  depending.** on 
19590 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50 31 2e  the value of P1.
195a0 20 54 6f 20 6f 70 65 6e 20 61 20 6e 65 77 20 73   To open a new s
195b0 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 30 2e  avepoint, P1==0.
195c0 20 54 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d   To release (com
195d0 6d 69 74 29 20 61 6e 0a 2a 2a 20 65 78 69 73 74  mit) an.** exist
195e0 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 2c 20 50  ing savepoint, P
195f0 31 3d 3d 31 2c 20 6f 72 20 74 6f 20 72 6f 6c 6c  1==1, or to roll
19600 62 61 63 6b 20 61 6e 20 65 78 69 73 74 69 6e 67  back an existing
19610 20 73 61 76 65 70 6f 69 6e 74 20 50 31 3d 3d 32   savepoint P1==2
19620 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 61 76  ..*/.case OP_Sav
19630 65 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20  epoint: {.  int 
19640 70 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  p1;             
19650 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
19660 61 6c 75 65 20 6f 66 20 50 31 20 6f 70 65 72 61  alue of P1 opera
19670 6e 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e  nd */.  char *zN
19680 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
19690 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
196a0 6f 66 20 73 61 76 65 70 6f 69 6e 74 20 2a 2f 0a  of savepoint */.
196b0 20 20 69 6e 74 20 6e 4e 61 6d 65 3b 0a 20 20 53    int nName;.  S
196c0 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a  avepoint *pNew;.
196d0 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61    Savepoint *pSa
196e0 76 65 70 6f 69 6e 74 3b 0a 20 20 53 61 76 65 70  vepoint;.  Savep
196f0 6f 69 6e 74 20 2a 70 54 6d 70 3b 0a 20 20 69 6e  oint *pTmp;.  in
19700 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20  t iSavepoint;.  
19710 69 6e 74 20 69 69 3b 0a 0a 20 20 70 31 20 3d 20  int ii;..  p1 = 
19720 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65  pOp->p1;.  zName
19730 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20   = pOp->p4.z;.. 
19740 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20   /* Assert that 
19750 74 68 65 20 70 31 20 70 61 72 61 6d 65 74 65 72  the p1 parameter
19760 20 69 73 20 76 61 6c 69 64 2e 20 41 6c 73 6f 20   is valid. Also 
19770 74 68 61 74 20 69 66 20 74 68 65 72 65 20 69 73  that if there is
19780 20 6e 6f 20 6f 70 65 6e 0a 20 20 2a 2a 20 74 72   no open.  ** tr
19790 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20  ansaction, then 
197a0 74 68 65 72 65 20 63 61 6e 6e 6f 74 20 62 65 20  there cannot be 
197b0 61 6e 79 20 73 61 76 65 70 6f 69 6e 74 73 2e 20  any savepoints. 
197c0 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
197d0 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3d 3d  db->pSavepoint==
197e0 30 20 7c 7c 20 64 62 2d 3e 61 75 74 6f 43 6f 6d  0 || db->autoCom
197f0 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  mit==0 );.  asse
19800 72 74 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  rt( p1==SAVEPOIN
19810 54 5f 42 45 47 49 4e 7c 7c 70 31 3d 3d 53 41 56  T_BEGIN||p1==SAV
19820 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 7c 7c  EPOINT_RELEASE||
19830 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f  p1==SAVEPOINT_RO
19840 4c 4c 42 41 43 4b 20 29 3b 0a 20 20 61 73 73 65  LLBACK );.  asse
19850 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  rt( db->pSavepoi
19860 6e 74 20 7c 7c 20 64 62 2d 3e 69 73 54 72 61 6e  nt || db->isTran
19870 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
19880 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
19890 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43   checkSavepointC
198a0 6f 75 6e 74 28 64 62 29 20 29 3b 0a 20 20 61 73  ount(db) );.  as
198b0 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
198c0 65 72 20 29 3b 0a 0a 20 20 69 66 28 20 70 31 3d  er );..  if( p1=
198d0 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e  =SAVEPOINT_BEGIN
198e0 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   ){.    if( db->
198f0 6e 56 64 62 65 57 72 69 74 65 3e 30 20 29 7b 0a  nVdbeWrite>0 ){.
19900 20 20 20 20 20 20 2f 2a 20 41 20 6e 65 77 20 73        /* A new s
19910 61 76 65 70 6f 69 6e 74 20 63 61 6e 6e 6f 74 20  avepoint cannot 
19920 62 65 20 63 72 65 61 74 65 64 20 69 66 20 74 68  be created if th
19930 65 72 65 20 61 72 65 20 61 63 74 69 76 65 20 77  ere are active w
19940 72 69 74 65 20 0a 20 20 20 20 20 20 2a 2a 20 73  rite .      ** s
19950 74 61 74 65 6d 65 6e 74 73 20 28 69 2e 65 2e 20  tatements (i.e. 
19960 6f 70 65 6e 20 72 65 61 64 2f 77 72 69 74 65 20  open read/write 
19970 69 6e 63 72 65 6d 65 6e 74 61 6c 20 62 6c 6f 62  incremental blob
19980 20 68 61 6e 64 6c 65 73 29 2e 0a 20 20 20 20 20   handles)..     
19990 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65   */.      sqlite
199a0 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 63  3VdbeError(p, "c
199b0 61 6e 6e 6f 74 20 6f 70 65 6e 20 73 61 76 65 70  annot open savep
199c0 6f 69 6e 74 20 2d 20 53 51 4c 20 73 74 61 74 65  oint - SQL state
199d0 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73  ments in progres
199e0 73 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  s");.      rc = 
199f0 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20  SQLITE_BUSY;.   
19a00 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4e   }else{.      nN
19a10 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 53 74 72  ame = sqlite3Str
19a20 6c 65 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a 0a 23  len30(zName);..#
19a30 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
19a40 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
19a50 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 63 61        /* This ca
19a60 6c 6c 20 69 73 20 4f 6b 20 65 76 65 6e 20 69 66  ll is Ok even if
19a70 20 74 68 69 73 20 73 61 76 65 70 6f 69 6e 74 20   this savepoint 
19a80 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20 74 72  is actually a tr
19a90 61 6e 73 61 63 74 69 6f 6e 0a 20 20 20 20 20 20  ansaction.      
19aa0 2a 2a 20 73 61 76 65 70 6f 69 6e 74 20 28 61 6e  ** savepoint (an
19ab0 64 20 74 68 65 72 65 66 6f 72 65 20 73 68 6f 75  d therefore shou
19ac0 6c 64 20 6e 6f 74 20 70 72 6f 6d 70 74 20 78 53  ld not prompt xS
19ad0 61 76 65 70 6f 69 6e 74 28 29 29 20 63 61 6c 6c  avepoint()) call
19ae0 62 61 63 6b 73 2e 0a 20 20 20 20 20 20 2a 2a 20  backs..      ** 
19af0 49 66 20 74 68 69 73 20 69 73 20 61 20 74 72 61  If this is a tra
19b00 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
19b10 6e 74 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2c  nt being opened,
19b20 20 69 74 20 69 73 20 67 75 61 72 61 6e 74 65 65   it is guarantee
19b30 64 0a 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20  d.      ** that 
19b40 74 68 65 20 64 62 2d 3e 61 56 54 72 61 6e 73 5b  the db->aVTrans[
19b50 5d 20 61 72 72 61 79 20 69 73 20 65 6d 70 74 79  ] array is empty
19b60 2e 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65  .  */.      asse
19b70 72 74 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  rt( db->autoComm
19b80 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 54  it==0 || db->nVT
19b90 72 61 6e 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20  rans==0 );.     
19ba0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
19bb0 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53  bSavepoint(db, S
19bc0 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 0a  AVEPOINT_BEGIN,.
19bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bf0 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 64  db->nStatement+d
19c00 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 29 3b 0a  b->nSavepoint);.
19c10 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
19c20 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
19c30 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
19c40 72 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20  r;.#endif..     
19c50 20 2f 2a 20 43 72 65 61 74 65 20 61 20 6e 65 77   /* Create a new
19c60 20 73 61 76 65 70 6f 69 6e 74 20 73 74 72 75 63   savepoint struc
19c70 74 75 72 65 2e 20 2a 2f 0a 20 20 20 20 20 20 70  ture. */.      p
19c80 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 44 62 4d  New = sqlite3DbM
19c90 61 6c 6c 6f 63 52 61 77 4e 4e 28 64 62 2c 20 73  allocRawNN(db, s
19ca0 69 7a 65 6f 66 28 53 61 76 65 70 6f 69 6e 74 29  izeof(Savepoint)
19cb0 2b 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 20  +nName+1);.     
19cc0 20 69 66 28 20 70 4e 65 77 20 29 7b 0a 20 20 20   if( pNew ){.   
19cd0 20 20 20 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65       pNew->zName
19ce0 20 3d 20 28 63 68 61 72 20 2a 29 26 70 4e 65 77   = (char *)&pNew
19cf0 5b 31 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d  [1];.        mem
19d00 63 70 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c  cpy(pNew->zName,
19d10 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29   zName, nName+1)
19d20 3b 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f  ;.    .        /
19d30 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f  * If there is no
19d40 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f   open transactio
19d50 6e 2c 20 74 68 65 6e 20 6d 61 72 6b 20 74 68 69  n, then mark thi
19d60 73 20 61 73 20 61 20 73 70 65 63 69 61 6c 0a 20  s as a special. 
19d70 20 20 20 20 20 20 20 2a 2a 20 22 74 72 61 6e 73         ** "trans
19d80 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
19d90 22 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  ". */.        if
19da0 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  ( db->autoCommit
19db0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62   ){.          db
19dc0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30  ->autoCommit = 0
19dd0 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  ;.          db->
19de0 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
19df0 65 70 6f 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20  epoint = 1;.    
19e00 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
19e10 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f       db->nSavepo
19e20 69 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d  int++;.        }
19e30 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e  ..        /* Lin
19e40 6b 20 74 68 65 20 6e 65 77 20 73 61 76 65 70 6f  k the new savepo
19e50 69 6e 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74  int into the dat
19e60 61 62 61 73 65 20 68 61 6e 64 6c 65 27 73 20 6c  abase handle's l
19e70 69 73 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  ist. */.        
19e80 70 4e 65 77 2d 3e 70 4e 65 78 74 20 3d 20 64 62  pNew->pNext = db
19e90 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20  ->pSavepoint;.  
19ea0 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70        db->pSavep
19eb0 6f 69 6e 74 20 3d 20 70 4e 65 77 3b 0a 20 20 20  oint = pNew;.   
19ec0 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65       pNew->nDefe
19ed0 72 72 65 64 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e  rredCons = db->n
19ee0 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20  DeferredCons;.  
19ef0 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66        pNew->nDef
19f00 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 64  erredImmCons = d
19f10 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
19f20 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ons;.      }.   
19f30 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
19f40 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a  iSavepoint = 0;.
19f50 0a 20 20 20 20 2f 2a 20 46 69 6e 64 20 74 68 65  .    /* Find the
19f60 20 6e 61 6d 65 64 20 73 61 76 65 70 6f 69 6e 74   named savepoint
19f70 2e 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f  . If there is no
19f80 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74 2c   such savepoint,
19f90 20 74 68 65 6e 20 61 6e 0a 20 20 20 20 2a 2a 20   then an.    ** 
19fa0 61 6e 20 65 72 72 6f 72 20 69 73 20 72 65 74 75  an error is retu
19fb0 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65 72  rned to the user
19fc0 2e 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28 0a 20  .  */.    for(. 
19fd0 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20       pSavepoint 
19fe0 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  = db->pSavepoint
19ff0 3b 20 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f  ; .      pSavepo
1a000 69 6e 74 20 26 26 20 73 71 6c 69 74 65 33 53 74  int && sqlite3St
1a010 72 49 43 6d 70 28 70 53 61 76 65 70 6f 69 6e 74  rICmp(pSavepoint
1a020 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b  ->zName, zName);
1a030 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e  .      pSavepoin
1a040 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e  t = pSavepoint->
1a050 70 4e 65 78 74 0a 20 20 20 20 29 7b 0a 20 20 20  pNext.    ){.   
1a060 20 20 20 69 53 61 76 65 70 6f 69 6e 74 2b 2b 3b     iSavepoint++;
1a070 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 21  .    }.    if( !
1a080 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20  pSavepoint ){.  
1a090 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
1a0a0 72 72 6f 72 28 70 2c 20 22 6e 6f 20 73 75 63 68  rror(p, "no such
1a0b0 20 73 61 76 65 70 6f 69 6e 74 3a 20 25 73 22 2c   savepoint: %s",
1a0c0 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 72   zName);.      r
1a0d0 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
1a0e0 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
1a0f0 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30  db->nVdbeWrite>0
1a100 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e   && p1==SAVEPOIN
1a110 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20  T_RELEASE ){.   
1a120 20 20 20 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20     /* It is not 
1a130 70 6f 73 73 69 62 6c 65 20 74 6f 20 72 65 6c 65  possible to rele
1a140 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 20 73  ase (commit) a s
1a150 61 76 65 70 6f 69 6e 74 20 69 66 20 74 68 65 72  avepoint if ther
1a160 65 20 61 72 65 20 0a 20 20 20 20 20 20 2a 2a 20  e are .      ** 
1a170 61 63 74 69 76 65 20 77 72 69 74 65 20 73 74 61  active write sta
1a180 74 65 6d 65 6e 74 73 2e 0a 20 20 20 20 20 20 2a  tements..      *
1a190 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  /.      sqlite3V
1a1a0 64 62 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e  dbeError(p, "can
1a1b0 6e 6f 74 20 72 65 6c 65 61 73 65 20 73 61 76 65  not release save
1a1c0 70 6f 69 6e 74 20 2d 20 22 0a 20 20 20 20 20 20  point - ".      
1a1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1e0 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65      "SQL stateme
1a1f0 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22  nts in progress"
1a200 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  );.      rc = SQ
1a210 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d  LITE_BUSY;.    }
1a220 65 6c 73 65 7b 0a 0a 20 20 20 20 20 20 2f 2a 20  else{..      /* 
1a230 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65  Determine whethe
1a240 72 20 6f 72 20 6e 6f 74 20 74 68 69 73 20 69 73  r or not this is
1a250 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73   a transaction s
1a260 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 73 6f 2c  avepoint. If so,
1a270 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 74 68  .      ** and th
1a280 69 73 20 69 73 20 61 20 52 45 4c 45 41 53 45 20  is is a RELEASE 
1a290 63 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e 20 74 68  command, then th
1a2a0 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61  e current transa
1a2b0 63 74 69 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20  ction .      ** 
1a2c0 69 73 20 63 6f 6d 6d 69 74 74 65 64 2e 20 0a 20  is committed. . 
1a2d0 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 6e       */.      in
1a2e0 74 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20  t isTransaction 
1a2f0 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e  = pSavepoint->pN
1a300 65 78 74 3d 3d 30 20 26 26 20 64 62 2d 3e 69 73  ext==0 && db->is
1a310 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
1a320 6f 69 6e 74 3b 0a 20 20 20 20 20 20 69 66 28 20  oint;.      if( 
1a330 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 26 26  isTransaction &&
1a340 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
1a350 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20  ELEASE ){.      
1a360 20 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69    if( (rc = sqli
1a370 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70  te3VdbeCheckFk(p
1a380 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b  , 1))!=SQLITE_OK
1a390 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f   ){.          go
1a3a0 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
1a3b0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1a3c0 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
1a3d0 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66   = 1;.        if
1a3e0 28 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c  ( sqlite3VdbeHal
1a3f0 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53  t(p)==SQLITE_BUS
1a400 59 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70  Y ){.          p
1a410 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70  ->pc = (int)(pOp
1a420 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20 20 20   - aOp);.       
1a430 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
1a440 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  t = 0;.         
1a450 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
1a460 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
1a470 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
1a480 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d  eturn;.        }
1a490 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54  .        db->isT
1a4a0 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
1a4b0 69 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  int = 0;.       
1a4c0 20 72 63 20 3d 20 70 2d 3e 72 63 3b 0a 20 20 20   rc = p->rc;.   
1a4d0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1a4e0 20 20 69 6e 74 20 69 73 53 63 68 65 6d 61 43 68    int isSchemaCh
1a4f0 61 6e 67 65 3b 0a 20 20 20 20 20 20 20 20 69 53  ange;.        iS
1a500 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e  avepoint = db->n
1a510 53 61 76 65 70 6f 69 6e 74 20 2d 20 69 53 61 76  Savepoint - iSav
1a520 65 70 6f 69 6e 74 20 2d 20 31 3b 0a 20 20 20 20  epoint - 1;.    
1a530 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45      if( p1==SAVE
1a540 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29  POINT_ROLLBACK )
1a550 7b 0a 20 20 20 20 20 20 20 20 20 20 69 73 53 63  {.          isSc
1a560 68 65 6d 61 43 68 61 6e 67 65 20 3d 20 28 64 62  hemaChange = (db
1a570 2d 3e 6d 44 62 46 6c 61 67 73 20 26 20 44 42 46  ->mDbFlags & DBF
1a580 4c 41 47 5f 53 63 68 65 6d 61 43 68 61 6e 67 65  LAG_SchemaChange
1a590 29 21 3d 30 3b 0a 20 20 20 20 20 20 20 20 20 20  )!=0;.          
1a5a0 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d  for(ii=0; ii<db-
1a5b0 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20  >nDb; ii++){.   
1a5c0 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71           rc = sq
1a5d0 6c 69 74 65 33 42 74 72 65 65 54 72 69 70 41 6c  lite3BtreeTripAl
1a5e0 6c 43 75 72 73 6f 72 73 28 64 62 2d 3e 61 44 62  lCursors(db->aDb
1a5f0 5b 69 69 5d 2e 70 42 74 2c 0a 20 20 20 20 20 20  [ii].pBt,.      
1a600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a620 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f   SQLITE_ABORT_RO
1a630 4c 4c 42 41 43 4b 2c 0a 20 20 20 20 20 20 20 20  LLBACK,.        
1a640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1a660 73 53 63 68 65 6d 61 43 68 61 6e 67 65 3d 3d 30  sSchemaChange==0
1a670 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  );.            i
1a680 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1a690 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1a6a0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1a6b0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1a6c0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
1a6d0 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 20   isSchemaChange 
1a6e0 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  = 0;.        }. 
1a6f0 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b         for(ii=0;
1a700 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b   ii<db->nDb; ii+
1a710 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63  +){.          rc
1a720 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53   = sqlite3BtreeS
1a730 61 76 65 70 6f 69 6e 74 28 64 62 2d 3e 61 44 62  avepoint(db->aDb
1a740 5b 69 69 5d 2e 70 42 74 2c 20 70 31 2c 20 69 53  [ii].pBt, p1, iS
1a750 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20  avepoint);.     
1a760 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
1a770 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
1a780 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
1a790 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1a7a0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1a7b0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
1a7c0 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 20   isSchemaChange 
1a7d0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
1a7e0 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72  ite3ExpirePrepar
1a7f0 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 2c  edStatements(db,
1a800 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73   0);.          s
1a810 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63  qlite3ResetAllSc
1a820 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f  hemasOfConnectio
1a830 6e 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20  n(db);.         
1a840 20 64 62 2d 3e 6d 44 62 46 6c 61 67 73 20 7c 3d   db->mDbFlags |=
1a850 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 43 68   DBFLAG_SchemaCh
1a860 61 6e 67 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a  ange;.        }.
1a870 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20        }.  .     
1a880 20 2f 2a 20 52 65 67 61 72 64 6c 65 73 73 20 6f   /* Regardless o
1a890 66 20 77 68 65 74 68 65 72 20 74 68 69 73 20 69  f whether this i
1a8a0 73 20 61 20 52 45 4c 45 41 53 45 20 6f 72 20 52  s a RELEASE or R
1a8b0 4f 4c 4c 42 41 43 4b 2c 20 64 65 73 74 72 6f 79  OLLBACK, destroy
1a8c0 20 61 6c 6c 20 0a 20 20 20 20 20 20 2a 2a 20 73   all .      ** s
1a8d0 61 76 65 70 6f 69 6e 74 73 20 6e 65 73 74 65 64  avepoints nested
1a8e0 20 69 6e 73 69 64 65 20 6f 66 20 74 68 65 20 73   inside of the s
1a8f0 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f  avepoint being o
1a900 70 65 72 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a 20  perated on. */. 
1a910 20 20 20 20 20 77 68 69 6c 65 28 20 64 62 2d 3e       while( db->
1a920 70 53 61 76 65 70 6f 69 6e 74 21 3d 70 53 61 76  pSavepoint!=pSav
1a930 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20  epoint ){.      
1a940 20 20 70 54 6d 70 20 3d 20 64 62 2d 3e 70 53 61    pTmp = db->pSa
1a950 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20  vepoint;.       
1a960 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20   db->pSavepoint 
1a970 3d 20 70 54 6d 70 2d 3e 70 4e 65 78 74 3b 0a 20  = pTmp->pNext;. 
1a980 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62         sqlite3Db
1a990 46 72 65 65 28 64 62 2c 20 70 54 6d 70 29 3b 0a  Free(db, pTmp);.
1a9a0 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76          db->nSav
1a9b0 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20  epoint--;.      
1a9c0 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 69  }..      /* If i
1a9d0 74 20 69 73 20 61 20 52 45 4c 45 41 53 45 2c 20  t is a RELEASE, 
1a9e0 74 68 65 6e 20 64 65 73 74 72 6f 79 20 74 68 65  then destroy the
1a9f0 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67   savepoint being
1aa00 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 0a 20 20   operated on .  
1aa10 20 20 20 20 2a 2a 20 74 6f 6f 2e 20 49 66 20 69      ** too. If i
1aa20 74 20 69 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20  t is a ROLLBACK 
1aa30 54 4f 2c 20 74 68 65 6e 20 73 65 74 20 74 68 65  TO, then set the
1aa40 20 6e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72   number of defer
1aa50 72 65 64 20 0a 20 20 20 20 20 20 2a 2a 20 63 6f  red .      ** co
1aa60 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
1aa70 6f 6e 73 20 70 72 65 73 65 6e 74 20 69 6e 20 74  ons present in t
1aa80 68 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 74  he database to t
1aa90 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 0a  he value stored.
1aaa0 20 20 20 20 20 20 2a 2a 20 77 68 65 6e 20 74 68        ** when th
1aab0 65 20 73 61 76 65 70 6f 69 6e 74 20 77 61 73 20  e savepoint was 
1aac0 63 72 65 61 74 65 64 2e 20 20 2a 2f 0a 20 20 20  created.  */.   
1aad0 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50     if( p1==SAVEP
1aae0 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a  OINT_RELEASE ){.
1aaf0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1ab00 70 53 61 76 65 70 6f 69 6e 74 3d 3d 64 62 2d 3e  pSavepoint==db->
1ab10 70 53 61 76 65 70 6f 69 6e 74 20 29 3b 0a 20 20  pSavepoint );.  
1ab20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70        db->pSavep
1ab30 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e  oint = pSavepoin
1ab40 74 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20  t->pNext;.      
1ab50 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
1ab60 64 62 2c 20 70 53 61 76 65 70 6f 69 6e 74 29 3b  db, pSavepoint);
1ab70 0a 20 20 20 20 20 20 20 20 69 66 28 20 21 69 73  .        if( !is
1ab80 54 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20  Transaction ){. 
1ab90 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61           db->nSa
1aba0 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20  vepoint--;.     
1abb0 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65     }.      }else
1abc0 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44  {.        db->nD
1abd0 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 70 53  eferredCons = pS
1abe0 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72  avepoint->nDefer
1abf0 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20  redCons;.       
1ac00 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
1ac10 6d 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69  mCons = pSavepoi
1ac20 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  nt->nDeferredImm
1ac30 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  Cons;.      }.. 
1ac40 20 20 20 20 20 69 66 28 20 21 69 73 54 72 61 6e       if( !isTran
1ac50 73 61 63 74 69 6f 6e 20 7c 7c 20 70 31 3d 3d 53  saction || p1==S
1ac60 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43  AVEPOINT_ROLLBAC
1ac70 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  K ){.        rc 
1ac80 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  = sqlite3VtabSav
1ac90 65 70 6f 69 6e 74 28 64 62 2c 20 70 31 2c 20 69  epoint(db, p1, i
1aca0 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20  Savepoint);.    
1acb0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1acc0 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
1acd0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1ace0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
1acf0 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f   }.  if( rc ) go
1ad00 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1ad10 65 72 72 6f 72 3b 0a 0a 20 20 62 72 65 61 6b 3b  error;..  break;
1ad20 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
1ad30 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32 20  utoCommit P1 P2 
1ad40 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20  * * *.**.** Set 
1ad50 74 68 65 20 64 61 74 61 62 61 73 65 20 61 75 74  the database aut
1ad60 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74 6f  o-commit flag to
1ad70 20 50 31 20 28 31 20 6f 72 20 30 29 2e 20 49 66   P1 (1 or 0). If
1ad80 20 50 32 20 69 73 20 74 72 75 65 2c 20 72 6f 6c   P2 is true, rol
1ad90 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63 75  l.** back any cu
1ada0 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65 20 62  rrently active b
1adb0 74 72 65 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  tree transaction
1adc0 73 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  s. If there are 
1add0 61 6e 79 20 61 63 74 69 76 65 0a 2a 2a 20 56 4d  any active.** VM
1ade0 73 20 28 61 70 61 72 74 20 66 72 6f 6d 20 74 68  s (apart from th
1adf0 69 73 20 6f 6e 65 29 2c 20 74 68 65 6e 20 61 20  is one), then a 
1ae00 52 4f 4c 4c 42 41 43 4b 20 66 61 69 6c 73 2e 20  ROLLBACK fails. 
1ae10 20 41 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20   A COMMIT fails 
1ae20 69 66 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20  if.** there are 
1ae30 61 63 74 69 76 65 20 77 72 69 74 69 6e 67 20 56  active writing V
1ae40 4d 73 20 6f 72 20 61 63 74 69 76 65 20 56 4d 73  Ms or active VMs
1ae50 20 74 68 61 74 20 75 73 65 20 73 68 61 72 65 64   that use shared
1ae60 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   cache..**.** Th
1ae70 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63  is instruction c
1ae80 61 75 73 65 73 20 74 68 65 20 56 4d 20 74 6f 20  auses the VM to 
1ae90 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  halt..*/.case OP
1aea0 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20  _AutoCommit: {. 
1aeb0 20 69 6e 74 20 64 65 73 69 72 65 64 41 75 74 6f   int desiredAuto
1aec0 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e 74 20 69 52  Commit;.  int iR
1aed0 6f 6c 6c 62 61 63 6b 3b 0a 0a 20 20 64 65 73 69  ollback;..  desi
1aee0 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  redAutoCommit = 
1aef0 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c  pOp->p1;.  iRoll
1af00 62 61 63 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  back = pOp->p2;.
1af10 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65    assert( desire
1af20 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c  dAutoCommit==1 |
1af30 7c 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  | desiredAutoCom
1af40 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  mit==0 );.  asse
1af50 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  rt( desiredAutoC
1af60 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69 52 6f 6c  ommit==1 || iRol
1af70 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a 20 20 61 73  lback==0 );.  as
1af80 73 65 72 74 28 20 64 62 2d 3e 6e 56 64 62 65 41  sert( db->nVdbeA
1af90 63 74 69 76 65 3e 30 20 29 3b 20 20 2f 2a 20 41  ctive>0 );  /* A
1afa0 74 20 6c 65 61 73 74 20 74 68 69 73 20 6f 6e 65  t least this one
1afb0 20 56 4d 20 69 73 20 61 63 74 69 76 65 20 2a 2f   VM is active */
1afc0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
1afd0 73 52 65 61 64 65 72 20 29 3b 0a 0a 20 20 69 66  sReader );..  if
1afe0 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  ( desiredAutoCom
1aff0 6d 69 74 21 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d  mit!=db->autoCom
1b000 6d 69 74 20 29 7b 0a 20 20 20 20 69 66 28 20 69  mit ){.    if( i
1b010 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20  Rollback ){.    
1b020 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65    assert( desire
1b030 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29  dAutoCommit==1 )
1b040 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52  ;.      sqlite3R
1b050 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 2c 20 53  ollbackAll(db, S
1b060 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c  QLITE_ABORT_ROLL
1b070 42 41 43 4b 29 3b 0a 20 20 20 20 20 20 64 62 2d  BACK);.      db-
1b080 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b  >autoCommit = 1;
1b090 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 64  .    }else if( d
1b0a0 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
1b0b0 20 26 26 20 64 62 2d 3e 6e 56 64 62 65 57 72 69   && db->nVdbeWri
1b0c0 74 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a  te>0 ){.      /*
1b0d0 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   If this instruc
1b0e0 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20  tion implements 
1b0f0 61 20 43 4f 4d 4d 49 54 20 61 6e 64 20 6f 74 68  a COMMIT and oth
1b100 65 72 20 56 4d 73 20 61 72 65 20 77 72 69 74 69  er VMs are writi
1b110 6e 67 0a 20 20 20 20 20 20 2a 2a 20 72 65 74 75  ng.      ** retu
1b120 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69  rn an error indi
1b130 63 61 74 69 6e 67 20 74 68 61 74 20 74 68 65 20  cating that the 
1b140 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63  other VMs must c
1b150 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a  omplete first. .
1b160 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73        */.      s
1b170 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
1b180 70 2c 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69  p, "cannot commi
1b190 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20  t transaction - 
1b1a0 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
1b1b0 20 20 20 20 20 20 20 20 20 20 20 20 22 53 51 4c              "SQL
1b1c0 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70   statements in p
1b1d0 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20  rogress");.     
1b1e0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
1b1f0 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  Y;.      goto ab
1b200 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1b210 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
1b220 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62  (rc = sqlite3Vdb
1b230 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21  eCheckFk(p, 1))!
1b240 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1b250 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
1b260 74 75 72 6e 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  turn;.    }else{
1b270 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43  .      db->autoC
1b280 6f 6d 6d 69 74 20 3d 20 28 75 38 29 64 65 73 69  ommit = (u8)desi
1b290 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20  redAutoCommit;. 
1b2a0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73 71 6c     }.    if( sql
1b2b0 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d  ite3VdbeHalt(p)=
1b2c0 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
1b2d0 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69        p->pc = (i
1b2e0 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a  nt)(pOp - aOp);.
1b2f0 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
1b300 6d 6d 69 74 20 3d 20 28 75 38 29 28 31 2d 64 65  mmit = (u8)(1-de
1b310 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29  siredAutoCommit)
1b320 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20  ;.      p->rc = 
1b330 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
1b340 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62  ;.      goto vdb
1b350 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a  e_return;.    }.
1b360 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
1b370 6e 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 3b  nStatement==0 );
1b380 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6c 6f 73  .    sqlite3Clos
1b390 65 53 61 76 65 70 6f 69 6e 74 73 28 64 62 29 3b  eSavepoints(db);
1b3a0 0a 20 20 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d  .    if( p->rc==
1b3b0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1b3c0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 44     rc = SQLITE_D
1b3d0 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ONE;.    }else{.
1b3e0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
1b3f0 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20  E_ERROR;.    }. 
1b400 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
1b410 75 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  urn;.  }else{.  
1b420 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
1b430 6f 72 28 70 2c 0a 20 20 20 20 20 20 20 20 28 21  or(p,.        (!
1b440 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
1b450 74 29 3f 22 63 61 6e 6e 6f 74 20 73 74 61 72 74  t)?"cannot start
1b460 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77   a transaction w
1b470 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74  ithin a transact
1b480 69 6f 6e 22 3a 28 0a 20 20 20 20 20 20 20 20 28  ion":(.        (
1b490 69 52 6f 6c 6c 62 61 63 6b 29 3f 22 63 61 6e 6e  iRollback)?"cann
1b4a0 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f  ot rollback - no
1b4b0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
1b4c0 61 63 74 69 76 65 22 3a 0a 20 20 20 20 20 20 20  active":.       
1b4d0 20 20 20 20 20 20 20 20 20 20 20 20 22 63 61 6e              "can
1b4e0 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20  not commit - no 
1b4f0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61  transaction is a
1b500 63 74 69 76 65 22 29 29 3b 0a 20 20 20 20 20 20  ctive"));.      
1b510 20 20 20 0a 20 20 20 20 72 63 20 3d 20 53 51 4c     .    rc = SQL
1b520 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 67  ITE_ERROR;.    g
1b530 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1b540 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72  _error;.  }.  br
1b550 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1b560 65 3a 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 50  e: Transaction P
1b570 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
1b580 0a 2a 2a 20 42 65 67 69 6e 20 61 20 74 72 61 6e  .** Begin a tran
1b590 73 61 63 74 69 6f 6e 20 6f 6e 20 64 61 74 61 62  saction on datab
1b5a0 61 73 65 20 50 31 20 69 66 20 61 20 74 72 61 6e  ase P1 if a tran
1b5b0 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 61  saction is not a
1b5c0 6c 72 65 61 64 79 0a 2a 2a 20 61 63 74 69 76 65  lready.** active
1b5d0 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e 6f  ..** If P2 is no
1b5e0 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 77  n-zero, then a w
1b5f0 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e  rite-transaction
1b600 20 69 73 20 73 74 61 72 74 65 64 2c 20 6f 72 20   is started, or 
1b610 69 66 20 61 20 0a 2a 2a 20 72 65 61 64 2d 74 72  if a .** read-tr
1b620 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 6c 72  ansaction is alr
1b630 65 61 64 79 20 61 63 74 69 76 65 2c 20 69 74 20  eady active, it 
1b640 69 73 20 75 70 67 72 61 64 65 64 20 74 6f 20 61  is upgraded to a
1b650 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69   write-transacti
1b660 6f 6e 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  on..** If P2 is 
1b670 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 72 65 61  zero, then a rea
1b680 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  d-transaction is
1b690 20 73 74 61 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20   started..**.** 
1b6a0 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  P1 is the index 
1b6b0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
1b6c0 66 69 6c 65 20 6f 6e 20 77 68 69 63 68 20 74 68  file on which th
1b6d0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e transaction is
1b6e0 0a 2a 2a 20 73 74 61 72 74 65 64 2e 20 20 49 6e  .** started.  In
1b6f0 64 65 78 20 30 20 69 73 20 74 68 65 20 6d 61 69  dex 0 is the mai
1b700 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
1b710 61 6e 64 20 69 6e 64 65 78 20 31 20 69 73 20 74  and index 1 is t
1b720 68 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64 20  he.** file used 
1b730 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74 61  for temporary ta
1b740 62 6c 65 73 2e 20 20 49 6e 64 69 63 65 73 20 6f  bles.  Indices o
1b750 66 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 65 20  f 2 or more are 
1b760 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61  used for.** atta
1b770 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a  ched databases..
1b780 2a 2a 0a 2a 2a 20 49 66 20 61 20 77 72 69 74 65  **.** If a write
1b790 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
1b7a0 73 74 61 72 74 65 64 20 61 6e 64 20 74 68 65 20  started and the 
1b7b0 56 64 62 65 2e 75 73 65 73 53 74 6d 74 4a 6f 75  Vdbe.usesStmtJou
1b7c0 72 6e 61 6c 20 66 6c 61 67 20 69 73 0a 2a 2a 20  rnal flag is.** 
1b7d0 74 72 75 65 20 28 74 68 69 73 20 66 6c 61 67 20  true (this flag 
1b7e0 69 73 20 73 65 74 20 69 66 20 74 68 65 20 56 64  is set if the Vd
1b7f0 62 65 20 6d 61 79 20 6d 6f 64 69 66 79 20 6d 6f  be may modify mo
1b800 72 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20  re than one row 
1b810 61 6e 64 20 6d 61 79 0a 2a 2a 20 74 68 72 6f 77  and may.** throw
1b820 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74   an ABORT except
1b830 69 6f 6e 29 2c 20 61 20 73 74 61 74 65 6d 65 6e  ion), a statemen
1b840 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61  t transaction ma
1b850 79 20 61 6c 73 6f 20 62 65 20 6f 70 65 6e 65 64  y also be opened
1b860 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70 65 63 69 66  ..** More specif
1b870 69 63 61 6c 6c 79 2c 20 61 20 73 74 61 74 65 6d  ically, a statem
1b880 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
1b890 69 73 20 6f 70 65 6e 65 64 20 69 66 66 20 74 68  is opened iff th
1b8a0 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f  e database.** co
1b8b0 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72 72  nnection is curr
1b8c0 65 6e 74 6c 79 20 6e 6f 74 20 69 6e 20 61 75 74  ently not in aut
1b8d0 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f 72  ocommit mode, or
1b8e0 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6f 74   if there are ot
1b8f0 68 65 72 0a 2a 2a 20 61 63 74 69 76 65 20 73 74  her.** active st
1b900 61 74 65 6d 65 6e 74 73 2e 20 41 20 73 74 61 74  atements. A stat
1b910 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
1b920 6e 20 61 6c 6c 6f 77 73 20 74 68 65 20 63 68 61  n allows the cha
1b930 6e 67 65 73 20 6d 61 64 65 20 62 79 20 74 68 69  nges made by thi
1b940 73 0a 2a 2a 20 56 44 42 45 20 74 6f 20 62 65 20  s.** VDBE to be 
1b950 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 66 74 65  rolled back afte
1b960 72 20 61 6e 20 65 72 72 6f 72 20 77 69 74 68 6f  r an error witho
1b970 75 74 20 68 61 76 69 6e 67 20 74 6f 20 72 6f 6c  ut having to rol
1b980 6c 20 62 61 63 6b 20 74 68 65 0a 2a 2a 20 65 6e  l back the.** en
1b990 74 69 72 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  tire transaction
1b9a0 2e 20 49 66 20 6e 6f 20 65 72 72 6f 72 20 69 73  . If no error is
1b9b0 20 65 6e 63 6f 75 6e 74 65 72 65 64 2c 20 74 68   encountered, th
1b9c0 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  e statement tran
1b9d0 73 61 63 74 69 6f 6e 0a 2a 2a 20 77 69 6c 6c 20  saction.** will 
1b9e0 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6f  automatically co
1b9f0 6d 6d 69 74 20 77 68 65 6e 20 74 68 65 20 56 44  mmit when the VD
1ba00 42 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20  BE halts..**.** 
1ba10 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20 74 68  If P5!=0 then th
1ba20 69 73 20 6f 70 63 6f 64 65 20 61 6c 73 6f 20 63  is opcode also c
1ba30 68 65 63 6b 73 20 74 68 65 20 73 63 68 65 6d 61  hecks the schema
1ba40 20 63 6f 6f 6b 69 65 20 61 67 61 69 6e 73 74 20   cookie against 
1ba50 50 33 0a 2a 2a 20 61 6e 64 20 74 68 65 20 73 63  P3.** and the sc
1ba60 68 65 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e 20  hema generation 
1ba70 63 6f 75 6e 74 65 72 20 61 67 61 69 6e 73 74 20  counter against 
1ba80 50 34 2e 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b 69  P4..** The cooki
1ba90 65 20 63 68 61 6e 67 65 73 20 69 74 73 20 76 61  e changes its va
1baa0 6c 75 65 20 77 68 65 6e 65 76 65 72 20 74 68 65  lue whenever the
1bab0 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
1bac0 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68 69   changes..** Thi
1bad0 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 75  s operation is u
1bae0 73 65 64 20 74 6f 20 64 65 74 65 63 74 20 77 68  sed to detect wh
1baf0 65 6e 20 74 68 61 74 20 74 68 65 20 63 6f 6f 6b  en that the cook
1bb00 69 65 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a  ie has changed.*
1bb10 2a 20 61 6e 64 20 74 68 61 74 20 74 68 65 20 63  * and that the c
1bb20 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20 6e  urrent process n
1bb30 65 65 64 73 20 74 6f 20 72 65 72 65 61 64 20 74  eeds to reread t
1bb40 68 65 20 73 63 68 65 6d 61 2e 20 20 49 66 20 74  he schema.  If t
1bb50 68 65 20 73 63 68 65 6d 61 0a 2a 2a 20 63 6f 6f  he schema.** coo
1bb60 6b 69 65 20 69 6e 20 50 33 20 64 69 66 66 65 72  kie in P3 differ
1bb70 73 20 66 72 6f 6d 20 74 68 65 20 73 63 68 65 6d  s from the schem
1bb80 61 20 63 6f 6f 6b 69 65 20 69 6e 20 74 68 65 20  a cookie in the 
1bb90 64 61 74 61 62 61 73 65 20 68 65 61 64 65 72 20  database header 
1bba0 6f 72 0a 2a 2a 20 69 66 20 74 68 65 20 73 63 68  or.** if the sch
1bbb0 65 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e 20 63  ema generation c
1bbc0 6f 75 6e 74 65 72 20 69 6e 20 50 34 20 64 69 66  ounter in P4 dif
1bbd0 66 65 72 73 20 66 72 6f 6d 20 74 68 65 20 63 75  fers from the cu
1bbe0 72 72 65 6e 74 0a 2a 2a 20 67 65 6e 65 72 61 74  rrent.** generat
1bbf0 69 6f 6e 20 63 6f 75 6e 74 65 72 2c 20 74 68 65  ion counter, the
1bc00 6e 20 61 6e 20 53 51 4c 49 54 45 5f 53 43 48 45  n an SQLITE_SCHE
1bc10 4d 41 20 65 72 72 6f 72 20 69 73 20 72 61 69 73  MA error is rais
1bc20 65 64 20 61 6e 64 20 65 78 65 63 75 74 69 6f 6e  ed and execution
1bc30 0a 2a 2a 20 68 61 6c 74 73 2e 20 20 54 68 65 20  .** halts.  The 
1bc40 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 77  sqlite3_step() w
1bc50 72 61 70 70 65 72 20 66 75 6e 63 74 69 6f 6e 20  rapper function 
1bc60 6d 69 67 68 74 20 74 68 65 6e 20 72 65 70 72 65  might then repre
1bc70 70 61 72 65 20 74 68 65 0a 2a 2a 20 73 74 61 74  pare the.** stat
1bc80 65 6d 65 6e 74 20 61 6e 64 20 72 65 72 75 6e 20  ement and rerun 
1bc90 69 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69  it from the begi
1bca0 6e 6e 69 6e 67 2e 0a 2a 2f 0a 63 61 73 65 20 4f  nning..*/.case O
1bcb0 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a 20 7b  P_Transaction: {
1bcc0 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 20  .  Btree *pBt;. 
1bcd0 20 69 6e 74 20 69 4d 65 74 61 20 3d 20 30 3b 0a   int iMeta = 0;.
1bce0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
1bcf0 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73  sReader );.  ass
1bd00 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
1bd10 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d  ==0 || pOp->p2==
1bd20 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1bd30 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1bd40 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
1bd50 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
1bd60 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
1bd70 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20  k, pOp->p1) );. 
1bd80 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20   if( pOp->p2 && 
1bd90 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  (db->flags & SQL
1bda0 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 29 21 3d  ITE_QueryOnly)!=
1bdb0 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  0 ){.    rc = SQ
1bdc0 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 3b 0a 20  LITE_READONLY;. 
1bdd0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
1bde0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
1bdf0 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
1be00 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20  pOp->p1].pBt;.. 
1be10 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20   if( pBt ){.    
1be20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1be30 65 42 65 67 69 6e 54 72 61 6e 73 28 70 42 74 2c  eBeginTrans(pBt,
1be40 20 70 4f 70 2d 3e 70 32 2c 20 26 69 4d 65 74 61   pOp->p2, &iMeta
1be50 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28  );.    testcase(
1be60 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc==SQLITE_BUSY
1be70 5f 53 4e 41 50 53 48 4f 54 20 29 3b 0a 20 20 20  _SNAPSHOT );.   
1be80 20 74 65 73 74 63 61 73 65 28 20 72 63 3d 3d 53   testcase( rc==S
1be90 51 4c 49 54 45 5f 42 55 53 59 5f 52 45 43 4f 56  QLITE_BUSY_RECOV
1bea0 45 52 59 20 29 3b 0a 20 20 20 20 69 66 28 20 72  ERY );.    if( r
1beb0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
1bec0 20 20 20 20 20 20 69 66 28 20 28 72 63 26 30 78        if( (rc&0x
1bed0 66 66 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59  ff)==SQLITE_BUSY
1bee0 20 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 70   ){.        p->p
1bef0 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  c = (int)(pOp - 
1bf00 61 4f 70 29 3b 0a 20 20 20 20 20 20 20 20 70 2d  aOp);.        p-
1bf10 3e 72 63 20 3d 20 72 63 3b 0a 20 20 20 20 20 20  >rc = rc;.      
1bf20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
1bf30 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  rn;.      }.    
1bf40 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1bf50 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
1bf60 0a 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ..    if( pOp->p
1bf70 32 20 26 26 20 70 2d 3e 75 73 65 73 53 74 6d 74  2 && p->usesStmt
1bf80 4a 6f 75 72 6e 61 6c 20 0a 20 20 20 20 20 26 26  Journal .     &&
1bf90 20 28 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74   (db->autoCommit
1bfa0 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65  ==0 || db->nVdbe
1bfb0 52 65 61 64 3e 31 29 20 0a 20 20 20 20 29 7b 0a  Read>1) .    ){.
1bfc0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
1bfd0 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e 54 72  lite3BtreeIsInTr
1bfe0 61 6e 73 28 70 42 74 29 20 29 3b 0a 20 20 20 20  ans(pBt) );.    
1bff0 20 20 69 66 28 20 70 2d 3e 69 53 74 61 74 65 6d    if( p->iStatem
1c000 65 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ent==0 ){.      
1c010 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 53    assert( db->nS
1c020 74 61 74 65 6d 65 6e 74 3e 3d 30 20 26 26 20 64  tatement>=0 && d
1c030 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 3e 3d 30  b->nSavepoint>=0
1c040 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e   );.        db->
1c050 6e 53 74 61 74 65 6d 65 6e 74 2b 2b 3b 20 0a 20  nStatement++; . 
1c060 20 20 20 20 20 20 20 70 2d 3e 69 53 74 61 74 65         p->iState
1c070 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65  ment = db->nSave
1c080 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e 53 74 61  point + db->nSta
1c090 74 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20 7d 0a  tement;.      }.
1c0a0 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
1c0b0 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74  te3VtabSavepoint
1c0c0 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42  (db, SAVEPOINT_B
1c0d0 45 47 49 4e 2c 20 70 2d 3e 69 53 74 61 74 65 6d  EGIN, p->iStatem
1c0e0 65 6e 74 2d 31 29 3b 0a 20 20 20 20 20 20 69 66  ent-1);.      if
1c0f0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1c100 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
1c110 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69  sqlite3BtreeBegi
1c120 6e 53 74 6d 74 28 70 42 74 2c 20 70 2d 3e 69 53  nStmt(pBt, p->iS
1c130 74 61 74 65 6d 65 6e 74 29 3b 0a 20 20 20 20 20  tatement);.     
1c140 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 53 74 6f   }..      /* Sto
1c150 72 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 76  re the current v
1c160 61 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74 61  alue of the data
1c170 62 61 73 65 20 68 61 6e 64 6c 65 73 20 64 65 66  base handles def
1c180 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74  erred constraint
1c190 0a 20 20 20 20 20 20 2a 2a 20 63 6f 75 6e 74 65  .      ** counte
1c1a0 72 2e 20 49 66 20 74 68 65 20 73 74 61 74 65 6d  r. If the statem
1c1b0 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
1c1c0 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c  needs to be roll
1c1d0 65 64 20 62 61 63 6b 2c 0a 20 20 20 20 20 20 2a  ed back,.      *
1c1e0 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  * the value of t
1c1f0 68 69 73 20 63 6f 75 6e 74 65 72 20 6e 65 65 64  his counter need
1c200 73 20 74 6f 20 62 65 20 72 65 73 74 6f 72 65 64  s to be restored
1c210 20 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20 20 20 20   too.  */.      
1c220 70 2d 3e 6e 53 74 6d 74 44 65 66 43 6f 6e 73 20  p->nStmtDefCons 
1c230 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  = db->nDeferredC
1c240 6f 6e 73 3b 0a 20 20 20 20 20 20 70 2d 3e 6e 53  ons;.      p->nS
1c250 74 6d 74 44 65 66 49 6d 6d 43 6f 6e 73 20 3d 20  tmtDefImmCons = 
1c260 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
1c270 43 6f 6e 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  Cons;.    }.  }.
1c280 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1c290 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 74  5==0 || pOp->p4t
1c2a0 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
1c2b0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 0a 20  .  if( pOp->p5. 
1c2c0 20 20 26 26 20 28 69 4d 65 74 61 21 3d 70 4f 70    && (iMeta!=pOp
1c2d0 2d 3e 70 33 0a 20 20 20 20 20 20 7c 7c 20 64 62  ->p3.      || db
1c2e0 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
1c2f0 53 63 68 65 6d 61 2d 3e 69 47 65 6e 65 72 61 74  Schema->iGenerat
1c300 69 6f 6e 21 3d 70 4f 70 2d 3e 70 34 2e 69 29 0a  ion!=pOp->p4.i).
1c310 20 20 29 7b 0a 20 20 20 20 2f 2a 0a 20 20 20 20    ){.    /*.    
1c320 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f  ** IMPLEMENTATIO
1c330 4e 2d 4f 46 3a 20 52 2d 30 33 31 38 39 2d 35 31  N-OF: R-03189-51
1c340 31 33 35 20 41 73 20 65 61 63 68 20 53 51 4c 20  135 As each SQL 
1c350 73 74 61 74 65 6d 65 6e 74 20 72 75 6e 73 2c 20  statement runs, 
1c360 74 68 65 20 73 63 68 65 6d 61 0a 20 20 20 20 2a  the schema.    *
1c370 2a 20 76 65 72 73 69 6f 6e 20 69 73 20 63 68 65  * version is che
1c380 63 6b 65 64 20 74 6f 20 65 6e 73 75 72 65 20 74  cked to ensure t
1c390 68 61 74 20 74 68 65 20 73 63 68 65 6d 61 20 68  hat the schema h
1c3a0 61 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 73  as not changed s
1c3b0 69 6e 63 65 20 74 68 65 0a 20 20 20 20 2a 2a 20  ince the.    ** 
1c3c0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 77 61  SQL statement wa
1c3d0 73 20 70 72 65 70 61 72 65 64 2e 0a 20 20 20 20  s prepared..    
1c3e0 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62  */.    sqlite3Db
1c3f0 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72  Free(db, p->zErr
1c400 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72  Msg);.    p->zEr
1c410 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 44 62  rMsg = sqlite3Db
1c420 53 74 72 44 75 70 28 64 62 2c 20 22 64 61 74 61  StrDup(db, "data
1c430 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20  base schema has 
1c440 63 68 61 6e 67 65 64 22 29 3b 0a 20 20 20 20 2f  changed");.    /
1c450 2a 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 2d  * If the schema-
1c460 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65 20  cookie from the 
1c470 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d 61  database file ma
1c480 74 63 68 65 73 20 74 68 65 20 63 6f 6f 6b 69 65  tches the cookie
1c490 20 0a 20 20 20 20 2a 2a 20 73 74 6f 72 65 64 20   .    ** stored 
1c4a0 77 69 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d 6f  with the in-memo
1c4b0 72 79 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  ry representatio
1c4c0 6e 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 2c  n of the schema,
1c4d0 20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 72   do.    ** not r
1c4e0 65 6c 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61  eload the schema
1c4f0 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
1c500 73 65 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a  se file..    **.
1c510 20 20 20 20 2a 2a 20 49 66 20 76 69 72 74 75 61      ** If virtua
1c520 6c 2d 74 61 62 6c 65 73 20 61 72 65 20 69 6e 20  l-tables are in 
1c530 75 73 65 2c 20 74 68 69 73 20 69 73 20 6e 6f 74  use, this is not
1c540 20 6a 75 73 74 20 61 6e 20 6f 70 74 69 6d 69 7a   just an optimiz
1c550 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66  ation..    ** Of
1c560 74 65 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73 74  ten, v-tables st
1c570 6f 72 65 20 74 68 65 69 72 20 64 61 74 61 20 69  ore their data i
1c580 6e 20 6f 74 68 65 72 20 53 51 4c 69 74 65 20 74  n other SQLite t
1c590 61 62 6c 65 73 2c 20 77 68 69 63 68 0a 20 20 20  ables, which.   
1c5a0 20 2a 2a 20 61 72 65 20 71 75 65 72 69 65 64 20   ** are queried 
1c5b0 66 72 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65 78  from within xNex
1c5c0 74 28 29 20 61 6e 64 20 6f 74 68 65 72 20 76 2d  t() and other v-
1c5d0 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 20 75 73  table methods us
1c5e0 69 6e 67 0a 20 20 20 20 2a 2a 20 70 72 65 70 61  ing.    ** prepa
1c5f0 72 65 64 20 71 75 65 72 69 65 73 2e 20 49 66 20  red queries. If 
1c600 73 75 63 68 20 61 20 71 75 65 72 79 20 69 73 20  such a query is 
1c610 6f 75 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65 20  out-of-date, we 
1c620 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a 20  do not want to. 
1c630 20 20 20 2a 2a 20 64 69 73 63 61 72 64 20 74 68     ** discard th
1c640 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
1c650 61 2c 20 61 73 20 74 68 65 20 75 73 65 72 20 63  a, as the user c
1c660 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67  ode implementing
1c670 20 74 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74 61   the.    ** v-ta
1c680 62 6c 65 20 77 6f 75 6c 64 20 68 61 76 65 20 74  ble would have t
1c690 6f 20 62 65 20 72 65 61 64 79 20 66 6f 72 20 74  o be ready for t
1c6a0 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  he sqlite3_vtab 
1c6b0 73 74 72 75 63 74 75 72 65 20 69 74 73 65 6c 66  structure itself
1c6c0 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 69 6e  .    ** to be in
1c6d0 76 61 6c 69 64 61 74 65 64 20 77 68 65 6e 65 76  validated whenev
1c6e0 65 72 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  er sqlite3_step(
1c6f0 29 20 69 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d  ) is called from
1c700 20 77 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a 20   within .    ** 
1c710 61 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64  a v-table method
1c720 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
1c730 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
1c740 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d  ].pSchema->schem
1c750 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61 20  a_cookie!=iMeta 
1c760 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
1c770 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 64  ResetOneSchema(d
1c780 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20  b, pOp->p1);.   
1c790 20 7d 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65   }.    p->expire
1c7a0 64 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20  d = 1;.    rc = 
1c7b0 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20  SQLITE_SCHEMA;. 
1c7c0 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f   }.  if( rc ) go
1c7d0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1c7e0 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
1c7f0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  }../* Opcode: Re
1c800 61 64 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50  adCookie P1 P2 P
1c810 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64  3 * *.**.** Read
1c820 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50   cookie number P
1c830 33 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65 20  3 from database 
1c840 50 31 20 61 6e 64 20 77 72 69 74 65 20 69 74 20  P1 and write it 
1c850 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
1c860 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20 74 68  ..** P3==1 is th
1c870 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  e schema version
1c880 2e 20 20 50 33 3d 3d 32 20 69 73 20 74 68 65 20  .  P3==2 is the 
1c890 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e  database format.
1c8a0 0a 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74 68 65  .** P3==3 is the
1c8b0 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67   recommended pag
1c8c0 65 72 20 63 61 63 68 65 20 73 69 7a 65 2c 20 61  er cache size, a
1c8d0 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31  nd so forth.  P1
1c8e0 3d 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61  ==0 is.** the ma
1c8f0 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
1c900 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68   and P1==1 is th
1c910 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
1c920 75 73 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a  used to store.**
1c930 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1c940 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d  s..**.** There m
1c950 75 73 74 20 62 65 20 61 20 72 65 61 64 2d 6c 6f  ust be a read-lo
1c960 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ck on the databa
1c970 73 65 20 28 65 69 74 68 65 72 20 61 20 74 72 61  se (either a tra
1c980 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74  nsaction.** must
1c990 20 62 65 20 73 74 61 72 74 65 64 20 6f 72 20 74   be started or t
1c9a0 68 65 72 65 20 6d 75 73 74 20 62 65 20 61 6e 20  here must be an 
1c9b0 6f 70 65 6e 20 63 75 72 73 6f 72 29 20 62 65 66  open cursor) bef
1c9c0 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67  ore.** executing
1c9d0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
1c9e0 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  n..*/.case OP_Re
1c9f0 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20  adCookie: {     
1ca00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
1ca10 32 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61  2 */.  int iMeta
1ca20 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69  ;.  int iDb;.  i
1ca30 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20 61  nt iCookie;..  a
1ca40 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
1ca50 64 65 72 20 29 3b 0a 20 20 69 44 62 20 3d 20 70  der );.  iDb = p
1ca60 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b 69  Op->p1;.  iCooki
1ca70 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61  e = pOp->p3;.  a
1ca80 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53  ssert( pOp->p3<S
1ca90 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45  QLITE_N_BTREE_ME
1caa0 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  TA );.  assert( 
1cab0 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62  iDb>=0 && iDb<db
1cac0 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
1cad0 74 28 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  t( db->aDb[iDb].
1cae0 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  pBt!=0 );.  asse
1caf0 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
1cb00 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62  ->btreeMask, iDb
1cb10 29 20 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42  ) );..  sqlite3B
1cb20 74 72 65 65 47 65 74 4d 65 74 61 28 64 62 2d 3e  treeGetMeta(db->
1cb30 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43  aDb[iDb].pBt, iC
1cb40 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29 26 69  ookie, (u32 *)&i
1cb50 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74 20 3d 20  Meta);.  pOut = 
1cb60 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
1cb70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e  , pOp);.  pOut->
1cb80 75 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20 20 62  u.i = iMeta;.  b
1cb90 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1cba0 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20 50 31  de: SetCookie P1
1cbb0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
1cbc0 20 57 72 69 74 65 20 74 68 65 20 69 6e 74 65 67   Write the integ
1cbd0 65 72 20 76 61 6c 75 65 20 50 33 20 69 6e 74 6f  er value P3 into
1cbe0 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50   cookie number P
1cbf0 32 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31  2 of database P1
1cc00 2e 0a 2a 2a 20 50 32 3d 3d 31 20 69 73 20 74 68  ..** P2==1 is th
1cc10 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  e schema version
1cc20 2e 20 20 50 32 3d 3d 32 20 69 73 20 74 68 65 20  .  P2==2 is the 
1cc30 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e  database format.
1cc40 0a 2a 2a 20 50 32 3d 3d 33 20 69 73 20 74 68 65  .** P2==3 is the
1cc50 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67   recommended pag
1cc60 65 72 20 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a  er cache .** siz
1cc70 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e  e, and so forth.
1cc80 20 20 50 31 3d 3d 30 20 69 73 20 74 68 65 20 6d    P1==0 is the m
1cc90 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
1cca0 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74  e and P1==1 is t
1ccb0 68 65 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  he .** database 
1ccc0 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f  file used to sto
1ccd0 72 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  re temporary tab
1cce0 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61  les..**.** A tra
1ccf0 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65  nsaction must be
1cd00 20 73 74 61 72 74 65 64 20 62 65 66 6f 72 65 20   started before 
1cd10 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20 6f  executing this o
1cd20 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  pcode..*/.case O
1cd30 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 0a 20  P_SetCookie: {. 
1cd40 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 73 71 6c   Db *pDb;..  sql
1cd50 69 74 65 33 56 64 62 65 49 6e 63 72 57 72 69 74  ite3VdbeIncrWrit
1cd60 65 43 6f 75 6e 74 65 72 28 70 2c 20 30 29 3b 0a  eCounter(p, 0);.
1cd70 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1cd80 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45  2<SQLITE_N_BTREE
1cd90 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72  _META );.  asser
1cda0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1cdb0 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
1cdc0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
1cdd0 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
1cde0 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20  eMask, pOp->p1) 
1cdf0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
1ce00 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
1ce10 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b   pDb = &db->aDb[
1ce20 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1ce30 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20  rt( pDb->pBt!=0 
1ce40 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c  );.  assert( sql
1ce50 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48  ite3SchemaMutexH
1ce60 65 6c 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  eld(db, pOp->p1,
1ce70 20 30 29 20 29 3b 0a 20 20 2f 2a 20 53 65 65 20   0) );.  /* See 
1ce80 6e 6f 74 65 20 61 62 6f 75 74 20 69 6e 64 65 78  note about index
1ce90 20 73 68 69 66 74 69 6e 67 20 6f 6e 20 4f 50 5f   shifting on OP_
1cea0 52 65 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20  ReadCookie */.  
1ceb0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1cec0 65 55 70 64 61 74 65 4d 65 74 61 28 70 44 62 2d  eUpdateMeta(pDb-
1ced0 3e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 70  >pBt, pOp->p2, p
1cee0 4f 70 2d 3e 70 33 29 3b 0a 20 20 69 66 28 20 70  Op->p3);.  if( p
1cef0 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 53 43  Op->p2==BTREE_SC
1cf00 48 45 4d 41 5f 56 45 52 53 49 4f 4e 20 29 7b 0a  HEMA_VERSION ){.
1cf10 20 20 20 20 2f 2a 20 57 68 65 6e 20 74 68 65 20      /* When the 
1cf20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68  schema cookie ch
1cf30 61 6e 67 65 73 2c 20 72 65 63 6f 72 64 20 74 68  anges, record th
1cf40 65 20 6e 65 77 20 63 6f 6f 6b 69 65 20 69 6e 74  e new cookie int
1cf50 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20 20 20 70  ernally */.    p
1cf60 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 73 63 68  Db->pSchema->sch
1cf70 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20 70 4f 70  ema_cookie = pOp
1cf80 2d 3e 70 33 3b 0a 20 20 20 20 64 62 2d 3e 6d 44  ->p3;.    db->mD
1cf90 62 46 6c 61 67 73 20 7c 3d 20 44 42 46 4c 41 47  bFlags |= DBFLAG
1cfa0 5f 53 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20  _SchemaChange;. 
1cfb0 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e   }else if( pOp->
1cfc0 70 32 3d 3d 42 54 52 45 45 5f 46 49 4c 45 5f 46  p2==BTREE_FILE_F
1cfd0 4f 52 4d 41 54 20 29 7b 0a 20 20 20 20 2f 2a 20  ORMAT ){.    /* 
1cfe0 52 65 63 6f 72 64 20 63 68 61 6e 67 65 73 20 69  Record changes i
1cff0 6e 20 74 68 65 20 66 69 6c 65 20 66 6f 72 6d 61  n the file forma
1d000 74 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53  t */.    pDb->pS
1d010 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d  chema->file_form
1d020 61 74 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  at = pOp->p3;.  
1d030 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d  }.  if( pOp->p1=
1d040 3d 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 76  =1 ){.    /* Inv
1d050 61 6c 69 64 61 74 65 20 61 6c 6c 20 70 72 65 70  alidate all prep
1d060 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20  ared statements 
1d070 77 68 65 6e 65 76 65 72 20 74 68 65 20 54 45 4d  whenever the TEM
1d080 50 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 2a  P database.    *
1d090 2a 20 73 63 68 65 6d 61 20 69 73 20 63 68 61 6e  * schema is chan
1d0a0 67 65 64 2e 20 20 54 69 63 6b 65 74 20 23 31 36  ged.  Ticket #16
1d0b0 34 34 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65  44 */.    sqlite
1d0c0 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
1d0d0 74 61 74 65 6d 65 6e 74 73 28 64 62 2c 20 30 29  tatements(db, 0)
1d0e0 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64  ;.    p->expired
1d0f0 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20   = 0;.  }.  if( 
1d100 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
1d110 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1d120 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1d130 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64 20 50 31  ode: OpenRead P1
1d140 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
1d150 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50  Synopsis: root=P
1d160 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f  2 iDb=P3.**.** O
1d170 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20  pen a read-only 
1d180 63 75 72 73 6f 72 20 66 6f 72 20 74 68 65 20 64  cursor for the d
1d190 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 77 68  atabase table wh
1d1a0 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 73  ose root page is
1d1b0 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64 61 74 61  .** P2 in a data
1d1c0 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65 20  base file.  The 
1d1d0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73  database file is
1d1e0 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 50   determined by P
1d1f0 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65 61  3. .** P3==0 mea
1d200 6e 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ns the main data
1d210 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d 65 61 6e  base, P3==1 mean
1d220 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75  s the database u
1d230 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74 65 6d 70  sed for .** temp
1d240 6f 72 61 72 79 20 74 61 62 6c 65 73 2c 20 61 6e  orary tables, an
1d250 64 20 50 33 3e 31 20 6d 65 61 6e 73 20 75 73 65  d P3>1 means use
1d260 64 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  d the correspond
1d270 69 6e 67 20 61 74 74 61 63 68 65 64 0a 2a 2a 20  ing attached.** 
1d280 64 61 74 61 62 61 73 65 2e 20 20 47 69 76 65 20  database.  Give 
1d290 74 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20 61  the new cursor a
1d2a0 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6f 66 20  n identifier of 
1d2b0 50 31 2e 20 20 54 68 65 20 50 31 0a 2a 2a 20 76  P1.  The P1.** v
1d2c0 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f 74 20 62  alues need not b
1d2d0 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 62 75 74  e contiguous but
1d2e0 20 61 6c 6c 20 50 31 20 76 61 6c 75 65 73 20 73   all P1 values s
1d2f0 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c 6c 20 69  hould be small i
1d300 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49 74 20 69  ntegers..** It i
1d310 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 50  s an error for P
1d320 31 20 74 6f 20 62 65 20 6e 65 67 61 74 69 76 65  1 to be negative
1d330 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ..**.** Allowed 
1d340 50 35 20 62 69 74 73 3a 0a 2a 2a 20 3c 75 6c 3e  P5 bits:.** <ul>
1d350 0a 2a 2a 20 3c 6c 69 3e 20 20 3c 62 3e 30 78 30  .** <li>  <b>0x0
1d360 32 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 3c  2 OPFLAG_SEEKEQ<
1d370 2f 62 3e 3a 20 54 68 69 73 20 63 75 72 73 6f 72  /b>: This cursor
1d380 20 77 69 6c 6c 20 6f 6e 6c 79 20 62 65 20 75 73   will only be us
1d390 65 64 20 66 6f 72 0a 2a 2a 20 20 20 20 20 20 20  ed for.**       
1d3a0 65 71 75 61 6c 69 74 79 20 6c 6f 6f 6b 75 70 73  equality lookups
1d3b0 20 28 69 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73   (implemented as
1d3c0 20 61 20 70 61 69 72 20 6f 66 20 6f 70 63 6f 64   a pair of opcod
1d3d0 65 73 20 4f 50 5f 53 65 65 6b 47 45 2f 4f 50 5f  es OP_SeekGE/OP_
1d3e0 49 64 78 47 54 0a 2a 2a 20 20 20 20 20 20 20 6f  IdxGT.**       o
1d3f0 66 20 4f 50 5f 53 65 65 6b 4c 45 2f 4f 50 5f 49  f OP_SeekLE/OP_I
1d400 64 78 47 54 29 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a  dxGT).** </ul>.*
1d410 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75  *.** The P4 valu
1d420 65 20 6d 61 79 20 62 65 20 65 69 74 68 65 72 20  e may be either 
1d430 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49  an integer (P4_I
1d440 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74  NT32) or a point
1d450 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e  er to.** a KeyIn
1d460 66 6f 20 73 74 72 75 63 74 75 72 65 20 28 50 34  fo structure (P4
1d470 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74  _KEYINFO). If it
1d480 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
1d490 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 6f   a KeyInfo .** o
1d4a0 62 6a 65 63 74 2c 20 74 68 65 6e 20 74 61 62 6c  bject, then tabl
1d4b0 65 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 20 6d  e being opened m
1d4c0 75 73 74 20 62 65 20 61 6e 20 5b 69 6e 64 65 78  ust be an [index
1d4d0 20 62 2d 74 72 65 65 5d 20 77 68 65 72 65 20 74   b-tree] where t
1d4e0 68 65 0a 2a 2a 20 4b 65 79 49 6e 66 6f 20 6f 62  he.** KeyInfo ob
1d4f0 6a 65 63 74 20 64 65 66 69 6e 65 73 20 74 68 65  ject defines the
1d500 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c   content and col
1d510 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65  lating .** seque
1d520 6e 63 65 20 6f 66 20 74 68 61 74 20 69 6e 64 65  nce of that inde
1d530 78 20 62 2d 74 72 65 65 2e 20 4f 74 68 65 72 77  x b-tree. Otherw
1d540 69 73 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e  ise, if P4 is an
1d550 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c   integer .** val
1d560 75 65 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62  ue, then the tab
1d570 6c 65 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 20  le being opened 
1d580 6d 75 73 74 20 62 65 20 61 20 5b 74 61 62 6c 65  must be a [table
1d590 20 62 2d 74 72 65 65 5d 20 77 69 74 68 20 61 0a   b-tree] with a.
1d5a0 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  ** number of col
1d5b0 75 6d 6e 73 20 6e 6f 20 6c 65 73 73 20 74 68 61  umns no less tha
1d5c0 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50  n the value of P
1d5d0 34 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  4..**.** See als
1d5e0 6f 3a 20 4f 70 65 6e 57 72 69 74 65 2c 20 52 65  o: OpenWrite, Re
1d5f0 6f 70 65 6e 49 64 78 0a 2a 2f 0a 2f 2a 20 4f 70  openIdx.*/./* Op
1d600 63 6f 64 65 3a 20 52 65 6f 70 65 6e 49 64 78 20  code: ReopenIdx 
1d610 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
1d620 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74  * Synopsis: root
1d630 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a  =P2 iDb=P3.**.**
1d640 20 54 68 65 20 52 65 6f 70 65 6e 49 64 78 20 6f   The ReopenIdx o
1d650 70 63 6f 64 65 20 77 6f 72 6b 73 20 6c 69 6b 65  pcode works like
1d660 20 4f 50 5f 4f 70 65 6e 52 65 61 64 20 65 78 63   OP_OpenRead exc
1d670 65 70 74 20 74 68 61 74 20 69 74 20 66 69 72 73  ept that it firs
1d680 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20 73  t.** checks to s
1d690 65 65 20 69 66 20 74 68 65 20 63 75 72 73 6f 72  ee if the cursor
1d6a0 20 6f 6e 20 50 31 20 69 73 20 61 6c 72 65 61 64   on P1 is alread
1d6b0 79 20 6f 70 65 6e 20 6f 6e 20 74 68 65 20 73 61  y open on the sa
1d6c0 6d 65 0a 2a 2a 20 62 2d 74 72 65 65 20 61 6e 64  me.** b-tree and
1d6d0 20 69 66 20 69 74 20 69 73 20 74 68 69 73 20 6f   if it is this o
1d6e0 70 63 6f 64 65 20 62 65 63 6f 6d 65 73 20 61 20  pcode becomes a 
1d6f0 6e 6f 2d 6f 70 2e 20 20 49 6e 20 6f 74 68 65 72  no-op.  In other
1d700 20 77 6f 72 64 73 2c 0a 2a 2a 20 69 66 20 74 68   words,.** if th
1d710 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c 72 65  e cursor is alre
1d720 61 64 79 20 6f 70 65 6e 2c 20 64 6f 20 6e 6f 74  ady open, do not
1d730 20 72 65 6f 70 65 6e 20 69 74 2e 0a 2a 2a 0a 2a   reopen it..**.*
1d740 2a 20 54 68 65 20 52 65 6f 70 65 6e 49 64 78 20  * The ReopenIdx 
1d750 6f 70 63 6f 64 65 20 6d 61 79 20 6f 6e 6c 79 20  opcode may only 
1d760 62 65 20 75 73 65 64 20 77 69 74 68 20 50 35 3d  be used with P5=
1d770 3d 30 20 6f 72 20 50 35 3d 3d 4f 50 46 4c 41 47  =0 or P5==OPFLAG
1d780 5f 53 45 45 4b 45 51 0a 2a 2a 20 61 6e 64 20 77  _SEEKEQ.** and w
1d790 69 74 68 20 50 34 20 62 65 69 6e 67 20 61 20 50  ith P4 being a P
1d7a0 34 5f 4b 45 59 49 4e 46 4f 20 6f 62 6a 65 63 74  4_KEYINFO object
1d7b0 2e 20 20 46 75 72 74 68 65 72 6d 6f 72 65 2c 20  .  Furthermore, 
1d7c0 74 68 65 20 50 33 20 76 61 6c 75 65 20 6d 75 73  the P3 value mus
1d7d0 74 0a 2a 2a 20 62 65 20 74 68 65 20 73 61 6d 65  t.** be the same
1d7e0 20 61 73 20 65 76 65 72 79 20 6f 74 68 65 72 20   as every other 
1d7f0 52 65 6f 70 65 6e 49 64 78 20 6f 72 20 4f 70 65  ReopenIdx or Ope
1d800 6e 52 65 61 64 20 66 6f 72 20 74 68 65 20 73 61  nRead for the sa
1d810 6d 65 20 63 75 72 73 6f 72 0a 2a 2a 20 6e 75 6d  me cursor.** num
1d820 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 77  ber..**.** Allow
1d830 65 64 20 50 35 20 62 69 74 73 3a 0a 2a 2a 20 3c  ed P5 bits:.** <
1d840 75 6c 3e 0a 2a 2a 20 3c 6c 69 3e 20 20 3c 62 3e  ul>.** <li>  <b>
1d850 30 78 30 32 20 4f 50 46 4c 41 47 5f 53 45 45 4b  0x02 OPFLAG_SEEK
1d860 45 51 3c 2f 62 3e 3a 20 54 68 69 73 20 63 75 72  EQ</b>: This cur
1d870 73 6f 72 20 77 69 6c 6c 20 6f 6e 6c 79 20 62 65  sor will only be
1d880 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 20 20 20   used for.**    
1d890 20 20 20 65 71 75 61 6c 69 74 79 20 6c 6f 6f 6b     equality look
1d8a0 75 70 73 20 28 69 6d 70 6c 65 6d 65 6e 74 65 64  ups (implemented
1d8b0 20 61 73 20 61 20 70 61 69 72 20 6f 66 20 6f 70   as a pair of op
1d8c0 63 6f 64 65 73 20 4f 50 5f 53 65 65 6b 47 45 2f  codes OP_SeekGE/
1d8d0 4f 50 5f 49 64 78 47 54 0a 2a 2a 20 20 20 20 20  OP_IdxGT.**     
1d8e0 20 20 6f 66 20 4f 50 5f 53 65 65 6b 4c 45 2f 4f    of OP_SeekLE/O
1d8f0 50 5f 49 64 78 47 54 29 0a 2a 2a 20 3c 2f 75 6c  P_IdxGT).** </ul
1d900 3e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  >.**.** See also
1d910 3a 20 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 20 4f  : OP_OpenRead, O
1d920 50 5f 4f 70 65 6e 57 72 69 74 65 0a 2a 2f 0a 2f  P_OpenWrite.*/./
1d930 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 57 72  * Opcode: OpenWr
1d940 69 74 65 20 50 31 20 50 32 20 50 33 20 50 34 20  ite P1 P2 P3 P4 
1d950 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
1d960 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a  root=P2 iDb=P3.*
1d970 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64  *.** Open a read
1d980 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 6e 61  /write cursor na
1d990 6d 65 64 20 50 31 20 6f 6e 20 74 68 65 20 74 61  med P1 on the ta
1d9a0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f  ble or index who
1d9b0 73 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20  se root.** page 
1d9c0 69 73 20 50 32 20 28 6f 72 20 77 68 6f 73 65 20  is P2 (or whose 
1d9d0 72 6f 6f 74 20 70 61 67 65 20 69 73 20 68 65 6c  root page is hel
1d9e0 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  d in register P2
1d9f0 20 69 66 20 74 68 65 0a 2a 2a 20 4f 50 46 4c 41   if the.** OPFLA
1da00 47 5f 50 32 49 53 52 45 47 20 62 69 74 20 69 73  G_P2ISREG bit is
1da10 20 73 65 74 20 69 6e 20 50 35 20 2d 20 73 65 65   set in P5 - see
1da20 20 62 65 6c 6f 77 29 2e 0a 2a 2a 0a 2a 2a 20 54   below)..**.** T
1da30 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20  he P4 value may 
1da40 62 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74  be either an int
1da50 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20  eger (P4_INT32) 
1da60 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a  or a pointer to.
1da70 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72  ** a KeyInfo str
1da80 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e  ucture (P4_KEYIN
1da90 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20  FO). If it is a 
1daa0 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79  pointer to a Key
1dab0 49 6e 66 6f 20 0a 2a 2a 20 6f 62 6a 65 63 74 2c  Info .** object,
1dac0 20 74 68 65 6e 20 74 61 62 6c 65 20 62 65 69 6e   then table bein
1dad0 67 20 6f 70 65 6e 65 64 20 6d 75 73 74 20 62 65  g opened must be
1dae0 20 61 6e 20 5b 69 6e 64 65 78 20 62 2d 74 72 65   an [index b-tre
1daf0 65 5d 20 77 68 65 72 65 20 74 68 65 0a 2a 2a 20  e] where the.** 
1db00 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 64  KeyInfo object d
1db10 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65  efines the conte
1db20 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67  nt and collating
1db30 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66   .** sequence of
1db40 20 74 68 61 74 20 69 6e 64 65 78 20 62 2d 74 72   that index b-tr
1db50 65 65 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  ee. Otherwise, i
1db60 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67  f P4 is an integ
1db70 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 74 68  er .** value, th
1db80 65 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  en the table bei
1db90 6e 67 20 6f 70 65 6e 65 64 20 6d 75 73 74 20 62  ng opened must b
1dba0 65 20 61 20 5b 74 61 62 6c 65 20 62 2d 74 72 65  e a [table b-tre
1dbb0 65 5d 20 77 69 74 68 20 61 0a 2a 2a 20 6e 75 6d  e] with a.** num
1dbc0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 6e  ber of columns n
1dbd0 6f 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20  o less than the 
1dbe0 76 61 6c 75 65 20 6f 66 20 50 34 2e 0a 2a 2a 0a  value of P4..**.
1dbf0 2a 2a 20 41 6c 6c 6f 77 65 64 20 50 35 20 62 69  ** Allowed P5 bi
1dc00 74 73 3a 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c  ts:.** <ul>.** <
1dc10 6c 69 3e 20 20 3c 62 3e 30 78 30 32 20 4f 50 46  li>  <b>0x02 OPF
1dc20 4c 41 47 5f 53 45 45 4b 45 51 3c 2f 62 3e 3a 20  LAG_SEEKEQ</b>: 
1dc30 54 68 69 73 20 63 75 72 73 6f 72 20 77 69 6c 6c  This cursor will
1dc40 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 66 6f   only be used fo
1dc50 72 0a 2a 2a 20 20 20 20 20 20 20 65 71 75 61 6c  r.**       equal
1dc60 69 74 79 20 6c 6f 6f 6b 75 70 73 20 28 69 6d 70  ity lookups (imp
1dc70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 70 61  lemented as a pa
1dc80 69 72 20 6f 66 20 6f 70 63 6f 64 65 73 20 4f 50  ir of opcodes OP
1dc90 5f 53 65 65 6b 47 45 2f 4f 50 5f 49 64 78 47 54  _SeekGE/OP_IdxGT
1dca0 0a 2a 2a 20 20 20 20 20 20 20 6f 66 20 4f 50 5f  .**       of OP_
1dcb0 53 65 65 6b 4c 45 2f 4f 50 5f 49 64 78 47 54 29  SeekLE/OP_IdxGT)
1dcc0 0a 2a 2a 20 3c 6c 69 3e 20 20 3c 62 3e 30 78 30  .** <li>  <b>0x0
1dcd0 38 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45  8 OPFLAG_FORDELE
1dce0 54 45 3c 2f 62 3e 3a 20 54 68 69 73 20 63 75 72  TE</b>: This cur
1dcf0 73 6f 72 20 69 73 20 75 73 65 64 20 6f 6e 6c 79  sor is used only
1dd00 20 74 6f 20 73 65 65 6b 0a 2a 2a 20 20 20 20 20   to seek.**     
1dd10 20 20 61 6e 64 20 73 75 62 73 65 71 75 65 6e 74    and subsequent
1dd20 6c 79 20 64 65 6c 65 74 65 20 65 6e 74 72 69 65  ly delete entrie
1dd30 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 62 74  s in an index bt
1dd40 72 65 65 2e 20 20 54 68 69 73 20 69 73 20 61 0a  ree.  This is a.
1dd50 2a 2a 20 20 20 20 20 20 20 68 69 6e 74 20 74 6f  **       hint to
1dd60 20 74 68 65 20 73 74 6f 72 61 67 65 20 65 6e 67   the storage eng
1dd70 69 6e 65 20 74 68 61 74 20 74 68 65 20 73 74 6f  ine that the sto
1dd80 72 61 67 65 20 65 6e 67 69 6e 65 20 69 73 20 61  rage engine is a
1dd90 6c 6c 6f 77 65 64 20 74 6f 0a 2a 2a 20 20 20 20  llowed to.**    
1dda0 20 20 20 69 67 6e 6f 72 65 2e 20 20 54 68 65 20     ignore.  The 
1ddb0 68 69 6e 74 20 69 73 20 6e 6f 74 20 75 73 65 64  hint is not used
1ddc0 20 62 79 20 74 68 65 20 6f 66 66 69 63 69 61 6c   by the official
1ddd0 20 53 51 4c 69 74 65 20 62 2a 74 72 65 65 20 73   SQLite b*tree s
1dde0 74 6f 72 61 67 65 0a 2a 2a 20 20 20 20 20 20 20  torage.**       
1ddf0 65 6e 67 69 6e 65 2c 20 62 75 74 20 69 73 20 75  engine, but is u
1de00 73 65 64 20 62 79 20 43 4f 4d 44 42 32 2e 0a 2a  sed by COMDB2..*
1de10 2a 20 3c 6c 69 3e 20 20 3c 62 3e 30 78 31 30 20  * <li>  <b>0x10 
1de20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 3c 2f  OPFLAG_P2ISREG</
1de30 62 3e 3a 20 55 73 65 20 74 68 65 20 63 6f 6e 74  b>: Use the cont
1de40 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
1de50 50 32 0a 2a 2a 20 20 20 20 20 20 20 61 73 20 74  P2.**       as t
1de60 68 65 20 72 6f 6f 74 20 70 61 67 65 2c 20 6e 6f  he root page, no
1de70 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50  t the value of P
1de80 32 20 69 74 73 65 6c 66 2e 0a 2a 2a 20 3c 2f 75  2 itself..** </u
1de90 6c 3e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  l>.**.** This in
1dea0 73 74 72 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20  struction works 
1deb0 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64 20 65 78  like OpenRead ex
1dec0 63 65 70 74 20 74 68 61 74 20 69 74 20 6f 70 65  cept that it ope
1ded0 6e 73 20 74 68 65 20 63 75 72 73 6f 72 0a 2a 2a  ns the cursor.**
1dee0 20 69 6e 20 72 65 61 64 2f 77 72 69 74 65 20 6d   in read/write m
1def0 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ode..**.** See a
1df00 6c 73 6f 3a 20 4f 50 5f 4f 70 65 6e 52 65 61 64  lso: OP_OpenRead
1df10 2c 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78 0a 2a  , OP_ReopenIdx.*
1df20 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6f 70 65 6e  /.case OP_Reopen
1df30 49 64 78 3a 20 7b 0a 20 20 69 6e 74 20 6e 46 69  Idx: {.  int nFi
1df40 65 6c 64 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a  eld;.  KeyInfo *
1df50 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20  pKeyInfo;.  int 
1df60 70 32 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20  p2;.  int iDb;. 
1df70 20 69 6e 74 20 77 72 46 6c 61 67 3b 0a 20 20 42   int wrFlag;.  B
1df80 74 72 65 65 20 2a 70 58 3b 0a 20 20 56 64 62 65  tree *pX;.  Vdbe
1df90 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20  Cursor *pCur;.  
1dfa0 44 62 20 2a 70 44 62 3b 0a 0a 20 20 61 73 73 65  Db *pDb;..  asse
1dfb0 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c  rt( pOp->p5==0 |
1dfc0 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41  | pOp->p5==OPFLA
1dfd0 47 5f 53 45 45 4b 45 51 20 29 3b 0a 20 20 61 73  G_SEEKEQ );.  as
1dfe0 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
1dff0 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b  e==P4_KEYINFO );
1e000 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43  .  pCur = p->apC
1e010 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  sr[pOp->p1];.  i
1e020 66 28 20 70 43 75 72 20 26 26 20 70 43 75 72 2d  f( pCur && pCur-
1e030 3e 70 67 6e 6f 52 6f 6f 74 3d 3d 28 75 33 32 29  >pgnoRoot==(u32)
1e040 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20 20 61  pOp->p2 ){.    a
1e050 73 73 65 72 74 28 20 70 43 75 72 2d 3e 69 44 62  ssert( pCur->iDb
1e060 3d 3d 70 4f 70 2d 3e 70 33 20 29 3b 20 20 20 20  ==pOp->p3 );    
1e070 20 20 2f 2a 20 47 75 61 72 61 6e 74 65 65 64 20    /* Guaranteed 
1e080 62 79 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65  by the code gene
1e090 72 61 74 6f 72 20 2a 2f 0a 20 20 20 20 67 6f 74  rator */.    got
1e0a0 6f 20 6f 70 65 6e 5f 63 75 72 73 6f 72 5f 73 65  o open_cursor_se
1e0b0 74 5f 68 69 6e 74 73 3b 0a 20 20 7d 0a 20 20 2f  t_hints;.  }.  /
1e0c0 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20  * If the cursor 
1e0d0 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79  is not currently
1e0e0 20 6f 70 65 6e 20 6f 72 20 69 73 20 6f 70 65 6e   open or is open
1e0f0 20 6f 6e 20 61 20 64 69 66 66 65 72 65 6e 74 0a   on a different.
1e100 20 20 2a 2a 20 69 6e 64 65 78 2c 20 74 68 65 6e    ** index, then
1e110 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   fall through in
1e120 74 6f 20 4f 50 5f 4f 70 65 6e 52 65 61 64 20 74  to OP_OpenRead t
1e130 6f 20 66 6f 72 63 65 20 61 20 72 65 6f 70 65 6e  o force a reopen
1e140 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e   */.case OP_Open
1e150 52 65 61 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70  Read:.case OP_Op
1e160 65 6e 57 72 69 74 65 3a 0a 0a 20 20 61 73 73 65  enWrite:..  asse
1e170 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
1e180 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 7c 7c  =OP_OpenWrite ||
1e190 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70   pOp->p5==0 || p
1e1a0 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 53  Op->p5==OPFLAG_S
1e1b0 45 45 4b 45 51 20 29 3b 0a 20 20 61 73 73 65 72  EEKEQ );.  asser
1e1c0 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
1e1d0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1e1e0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65  ->opcode==OP_Ope
1e1f0 6e 52 65 61 64 20 7c 7c 20 70 4f 70 2d 3e 6f 70  nRead || pOp->op
1e200 63 6f 64 65 3d 3d 4f 50 5f 52 65 6f 70 65 6e 49  code==OP_ReopenI
1e210 64 78 0a 20 20 20 20 20 20 20 20 20 20 7c 7c 20  dx.          || 
1e220 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
1e230 3b 0a 0a 20 20 69 66 28 20 70 2d 3e 65 78 70 69  ;..  if( p->expi
1e240 72 65 64 3d 3d 31 20 29 7b 0a 20 20 20 20 72 63  red==1 ){.    rc
1e250 20 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f   = SQLITE_ABORT_
1e260 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 67 6f  ROLLBACK;.    go
1e270 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1e280 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 6e 46  error;.  }..  nF
1e290 69 65 6c 64 20 3d 20 30 3b 0a 20 20 70 4b 65 79  ield = 0;.  pKey
1e2a0 49 6e 66 6f 20 3d 20 30 3b 0a 20 20 70 32 20 3d  Info = 0;.  p2 =
1e2b0 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 44 62 20   pOp->p2;.  iDb 
1e2c0 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73  = pOp->p3;.  ass
1e2d0 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69  ert( iDb>=0 && i
1e2e0 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  Db<db->nDb );.  
1e2f0 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
1e300 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
1e310 20 69 44 62 29 20 29 3b 0a 20 20 70 44 62 20 3d   iDb) );.  pDb =
1e320 20 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a   &db->aDb[iDb];.
1e330 20 20 70 58 20 3d 20 70 44 62 2d 3e 70 42 74 3b    pX = pDb->pBt;
1e340 0a 20 20 61 73 73 65 72 74 28 20 70 58 21 3d 30  .  assert( pX!=0
1e350 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f   );.  if( pOp->o
1e360 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72  pcode==OP_OpenWr
1e370 69 74 65 20 29 7b 0a 20 20 20 20 61 73 73 65 72  ite ){.    asser
1e380 74 28 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c  t( OPFLAG_FORDEL
1e390 45 54 45 3d 3d 42 54 52 45 45 5f 46 4f 52 44 45  ETE==BTREE_FORDE
1e3a0 4c 45 54 45 20 29 3b 0a 20 20 20 20 77 72 46 6c  LETE );.    wrFl
1e3b0 61 67 20 3d 20 42 54 52 45 45 5f 57 52 43 53 52  ag = BTREE_WRCSR
1e3c0 20 7c 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50   | (pOp->p5 & OP
1e3d0 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 29 3b  FLAG_FORDELETE);
1e3e0 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c  .    assert( sql
1e3f0 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48  ite3SchemaMutexH
1e400 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20  eld(db, iDb, 0) 
1e410 29 3b 0a 20 20 20 20 69 66 28 20 70 44 62 2d 3e  );.    if( pDb->
1e420 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f  pSchema->file_fo
1e430 72 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e 57 72 69  rmat < p->minWri
1e440 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 29 7b 0a  teFileFormat ){.
1e450 20 20 20 20 20 20 70 2d 3e 6d 69 6e 57 72 69 74        p->minWrit
1e460 65 46 69 6c 65 46 6f 72 6d 61 74 20 3d 20 70 44  eFileFormat = pD
1e470 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65  b->pSchema->file
1e480 5f 66 6f 72 6d 61 74 3b 0a 20 20 20 20 7d 0a 20  _format;.    }. 
1e490 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77 72 46 6c   }else{.    wrFl
1e4a0 61 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66  ag = 0;.  }.  if
1e4b0 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ( pOp->p5 & OPFL
1e4c0 41 47 5f 50 32 49 53 52 45 47 20 29 7b 0a 20 20  AG_P2ISREG ){.  
1e4d0 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 29    assert( p2>0 )
1e4e0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32  ;.    assert( p2
1e4f0 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
1e500 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
1e510 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
1e520 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72  pcode==OP_OpenWr
1e530 69 74 65 20 29 3b 0a 20 20 20 20 70 49 6e 32 20  ite );.    pIn2 
1e540 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20  = &aMem[p2];.   
1e550 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
1e560 6c 69 64 28 70 49 6e 32 29 20 29 3b 0a 20 20 20  lid(pIn2) );.   
1e570 20 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e   assert( (pIn2->
1e580 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
1e590 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  !=0 );.    sqlit
1e5a0 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
1e5b0 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 20 20 70  ify(pIn2);.    p
1e5c0 32 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75  2 = (int)pIn2->u
1e5d0 2e 69 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 70  .i;.    /* The p
1e5e0 32 20 76 61 6c 75 65 20 61 6c 77 61 79 73 20 63  2 value always c
1e5f0 6f 6d 65 73 20 66 72 6f 6d 20 61 20 70 72 69 6f  omes from a prio
1e600 72 20 4f 50 5f 43 72 65 61 74 65 42 74 72 65 65  r OP_CreateBtree
1e610 20 6f 70 63 6f 64 65 20 61 6e 64 0a 20 20 20 20   opcode and.    
1e620 2a 2a 20 74 68 61 74 20 6f 70 63 6f 64 65 20 77  ** that opcode w
1e630 69 6c 6c 20 61 6c 77 61 79 73 20 73 65 74 20 74  ill always set t
1e640 68 65 20 70 32 20 76 61 6c 75 65 20 74 6f 20 32  he p2 value to 2
1e650 20 6f 72 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65   or more or else
1e660 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66   fail..    ** If
1e670 20 74 68 65 72 65 20 77 65 72 65 20 61 20 66 61   there were a fa
1e680 69 6c 75 72 65 2c 20 74 68 65 20 70 72 65 70 61  ilure, the prepa
1e690 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 77 6f  red statement wo
1e6a0 75 6c 64 20 68 61 76 65 20 68 61 6c 74 65 64 0a  uld have halted.
1e6b0 20 20 20 20 2a 2a 20 62 65 66 6f 72 65 20 72 65      ** before re
1e6c0 61 63 68 69 6e 67 20 74 68 69 73 20 69 6e 73 74  aching this inst
1e6d0 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20  ruction. */.    
1e6e0 61 73 73 65 72 74 28 20 70 32 3e 3d 32 20 29 3b  assert( p2>=2 );
1e6f0 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
1e700 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e  p4type==P4_KEYIN
1e710 46 4f 20 29 7b 0a 20 20 20 20 70 4b 65 79 49 6e  FO ){.    pKeyIn
1e720 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65  fo = pOp->p4.pKe
1e730 79 49 6e 66 6f 3b 0a 20 20 20 20 61 73 73 65 72  yInfo;.    asser
1e740 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63  t( pKeyInfo->enc
1e750 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 20  ==ENC(db) );.   
1e760 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
1e770 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20  o->db==db );.   
1e780 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79 49 6e   nField = pKeyIn
1e790 66 6f 2d 3e 6e 41 6c 6c 46 69 65 6c 64 3b 0a 20  fo->nAllField;. 
1e7a0 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e   }else if( pOp->
1e7b0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
1e7c0 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d   ){.    nField =
1e7d0 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a   pOp->p4.i;.  }.
1e7e0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1e7f0 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  1>=0 );.  assert
1e800 28 20 6e 46 69 65 6c 64 3e 3d 30 20 29 3b 0a 20  ( nField>=0 );. 
1e810 20 74 65 73 74 63 61 73 65 28 20 6e 46 69 65 6c   testcase( nFiel
1e820 64 3d 3d 30 20 29 3b 20 20 2f 2a 20 54 61 62 6c  d==0 );  /* Tabl
1e830 65 20 77 69 74 68 20 49 4e 54 45 47 45 52 20 50  e with INTEGER P
1e840 52 49 4d 41 52 59 20 4b 45 59 20 61 6e 64 20 6e  RIMARY KEY and n
1e850 6f 74 68 69 6e 67 20 65 6c 73 65 20 2a 2f 0a 20  othing else */. 
1e860 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65   pCur = allocate
1e870 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
1e880 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20  1, nField, iDb, 
1e890 43 55 52 54 59 50 45 5f 42 54 52 45 45 29 3b 0a  CURTYPE_BTREE);.
1e8a0 20 20 69 66 28 20 70 43 75 72 3d 3d 30 20 29 20    if( pCur==0 ) 
1e8b0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
1e8c0 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31  Cur->nullRow = 1
1e8d0 3b 0a 20 20 70 43 75 72 2d 3e 69 73 4f 72 64 65  ;.  pCur->isOrde
1e8e0 72 65 64 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d  red = 1;.  pCur-
1e8f0 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20 70 32 3b 0a  >pgnoRoot = p2;.
1e900 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
1e910 42 55 47 0a 20 20 70 43 75 72 2d 3e 77 72 46 6c  BUG.  pCur->wrFl
1e920 61 67 20 3d 20 77 72 46 6c 61 67 3b 0a 23 65 6e  ag = wrFlag;.#en
1e930 64 69 66 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  dif.  rc = sqlit
1e940 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 58  e3BtreeCursor(pX
1e950 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c 20 70 4b  , p2, wrFlag, pK
1e960 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e 75 63  eyInfo, pCur->uc
1e970 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 75  .pCursor);.  pCu
1e980 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b  r->pKeyInfo = pK
1e990 65 79 49 6e 66 6f 3b 0a 20 20 2f 2a 20 53 65 74  eyInfo;.  /* Set
1e9a0 20 74 68 65 20 56 64 62 65 43 75 72 73 6f 72 2e   the VdbeCursor.
1e9b0 69 73 54 61 62 6c 65 20 76 61 72 69 61 62 6c 65  isTable variable
1e9c0 2e 20 50 72 65 76 69 6f 75 73 20 76 65 72 73 69  . Previous versi
1e9d0 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69  ons of.  ** SQLi
1e9e0 74 65 20 75 73 65 64 20 74 6f 20 63 68 65 63 6b  te used to check
1e9f0 20 69 66 20 74 68 65 20 72 6f 6f 74 2d 70 61 67   if the root-pag
1ea00 65 20 66 6c 61 67 73 20 77 65 72 65 20 73 61 6e  e flags were san
1ea10 65 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74 0a  e at this point.
1ea20 20 20 2a 2a 20 61 6e 64 20 72 65 70 6f 72 74 20    ** and report 
1ea30 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74  database corrupt
1ea40 69 6f 6e 20 69 66 20 74 68 65 79 20 77 65 72 65  ion if they were
1ea50 20 6e 6f 74 2c 20 62 75 74 20 74 68 69 73 20 63   not, but this c
1ea60 68 65 63 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69  heck has.  ** si
1ea70 6e 63 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74  nce moved into t
1ea80 68 65 20 62 74 72 65 65 20 6c 61 79 65 72 2e 20  he btree layer. 
1ea90 20 2a 2f 20 20 0a 20 20 70 43 75 72 2d 3e 69 73   */  .  pCur->is
1eaa0 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74  Table = pOp->p4t
1eab0 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b  ype!=P4_KEYINFO;
1eac0 0a 0a 6f 70 65 6e 5f 63 75 72 73 6f 72 5f 73 65  ..open_cursor_se
1ead0 74 5f 68 69 6e 74 73 3a 0a 20 20 61 73 73 65 72  t_hints:.  asser
1eae0 74 28 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53  t( OPFLAG_BULKCS
1eaf0 52 3d 3d 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41  R==BTREE_BULKLOA
1eb00 44 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  D );.  assert( O
1eb10 50 46 4c 41 47 5f 53 45 45 4b 45 51 3d 3d 42 54  PFLAG_SEEKEQ==BT
1eb20 52 45 45 5f 53 45 45 4b 5f 45 51 20 29 3b 0a 20  REE_SEEK_EQ );. 
1eb30 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
1eb40 70 35 20 26 20 4f 50 46 4c 41 47 5f 42 55 4c 4b  p5 & OPFLAG_BULK
1eb50 43 53 52 20 29 3b 0a 23 69 66 64 65 66 20 53 51  CSR );.#ifdef SQ
1eb60 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53  LITE_ENABLE_CURS
1eb70 4f 52 5f 48 49 4e 54 53 0a 20 20 74 65 73 74 63  OR_HINTS.  testc
1eb80 61 73 65 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f  ase( pOp->p2 & O
1eb90 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a  PFLAG_SEEKEQ );.
1eba0 23 65 6e 64 69 66 0a 20 20 73 71 6c 69 74 65 33  #endif.  sqlite3
1ebb0 42 74 72 65 65 43 75 72 73 6f 72 48 69 6e 74 46  BtreeCursorHintF
1ebc0 6c 61 67 73 28 70 43 75 72 2d 3e 75 63 2e 70 43  lags(pCur->uc.pC
1ebd0 75 72 73 6f 72 2c 0a 20 20 20 20 20 20 20 20 20  ursor,.         
1ebe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebf0 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26        (pOp->p5 &
1ec00 20 28 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52   (OPFLAG_BULKCSR
1ec10 7c 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 29 29  |OPFLAG_SEEKEQ))
1ec20 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
1ec30 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1ec40 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
1ec50 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
1ec60 65 6e 44 75 70 20 50 31 20 50 32 20 2a 20 2a 20  enDup P1 P2 * * 
1ec70 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e  *.**.** Open a n
1ec80 65 77 20 63 75 72 73 6f 72 20 50 31 20 74 68 61  ew cursor P1 tha
1ec90 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
1eca0 73 61 6d 65 20 65 70 68 65 6d 65 72 61 6c 20 74  same ephemeral t
1ecb0 61 62 6c 65 20 61 73 0a 2a 2a 20 63 75 72 73 6f  able as.** curso
1ecc0 72 20 50 32 2e 20 20 54 68 65 20 50 32 20 63 75  r P2.  The P2 cu
1ecd0 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65 20 62  rsor must have b
1ece0 65 65 6e 20 6f 70 65 6e 65 64 20 62 79 20 61 20  een opened by a 
1ecf0 70 72 69 6f 72 20 4f 50 5f 4f 70 65 6e 45 70 68  prior OP_OpenEph
1ed00 65 6d 65 72 61 6c 0a 2a 2a 20 6f 70 63 6f 64 65  emeral.** opcode
1ed10 2e 20 20 4f 6e 6c 79 20 65 70 68 65 6d 65 72 61  .  Only ephemera
1ed20 6c 20 63 75 72 73 6f 72 73 20 6d 61 79 20 62 65  l cursors may be
1ed30 20 64 75 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a   duplicated..**.
1ed40 2a 2a 20 44 75 70 6c 69 63 61 74 65 20 65 70 68  ** Duplicate eph
1ed50 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 73 20 61  emeral cursors a
1ed60 72 65 20 75 73 65 64 20 66 6f 72 20 73 65 6c 66  re used for self
1ed70 2d 6a 6f 69 6e 73 20 6f 66 20 6d 61 74 65 72 69  -joins of materi
1ed80 61 6c 69 7a 65 64 20 76 69 65 77 73 2e 0a 2a 2f  alized views..*/
1ed90 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 44 75 70  .case OP_OpenDup
1eda0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
1edb0 20 2a 70 4f 72 69 67 3b 20 20 20 20 2f 2a 20 54   *pOrig;    /* T
1edc0 68 65 20 6f 72 69 67 69 6e 61 6c 20 63 75 72 73  he original curs
1edd0 6f 72 20 74 6f 20 62 65 20 64 75 70 6c 69 63 61  or to be duplica
1ede0 74 65 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ted */.  VdbeCur
1edf0 73 6f 72 20 2a 70 43 78 3b 20 20 20 20 20 20 2f  sor *pCx;      /
1ee00 2a 20 54 68 65 20 6e 65 77 20 63 75 72 73 6f 72  * The new cursor
1ee10 20 2a 2f 0a 0a 20 20 70 4f 72 69 67 20 3d 20 70   */..  pOrig = p
1ee20 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 32 5d  ->apCsr[pOp->p2]
1ee30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 72 69  ;.  assert( pOri
1ee40 67 2d 3e 70 42 74 78 21 3d 30 20 29 3b 20 20 2f  g->pBtx!=0 );  /
1ee50 2a 20 4f 6e 6c 79 20 65 70 68 65 6d 65 72 61 6c  * Only ephemeral
1ee60 20 63 75 72 73 6f 72 73 20 63 61 6e 20 62 65 20   cursors can be 
1ee70 64 75 70 6c 69 63 61 74 65 64 20 2a 2f 0a 0a 20  duplicated */.. 
1ee80 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43   pCx = allocateC
1ee90 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
1eea0 2c 20 70 4f 72 69 67 2d 3e 6e 46 69 65 6c 64 2c  , pOrig->nField,
1eeb0 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 42 54 52   -1, CURTYPE_BTR
1eec0 45 45 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d  EE);.  if( pCx==
1eed0 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
1eee0 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20  .  pCx->nullRow 
1eef0 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73 45 70  = 1;.  pCx->isEp
1ef00 68 65 6d 65 72 61 6c 20 3d 20 31 3b 0a 20 20 70  hemeral = 1;.  p
1ef10 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70  Cx->pKeyInfo = p
1ef20 4f 72 69 67 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  Orig->pKeyInfo;.
1ef30 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d    pCx->isTable =
1ef40 20 70 4f 72 69 67 2d 3e 69 73 54 61 62 6c 65 3b   pOrig->isTable;
1ef50 0a 20 20 70 43 78 2d 3e 70 67 6e 6f 52 6f 6f 74  .  pCx->pgnoRoot
1ef60 20 3d 20 70 4f 72 69 67 2d 3e 70 67 6e 6f 52 6f   = pOrig->pgnoRo
1ef70 6f 74 3b 0a 20 20 70 43 78 2d 3e 69 73 4f 72 64  ot;.  pCx->isOrd
1ef80 65 72 65 64 20 3d 20 70 4f 72 69 67 2d 3e 69 73  ered = pOrig->is
1ef90 4f 72 64 65 72 65 64 3b 0a 20 20 72 63 20 3d 20  Ordered;.  rc = 
1efa0 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
1efb0 6f 72 28 70 4f 72 69 67 2d 3e 70 42 74 78 2c 20  or(pOrig->pBtx, 
1efc0 70 43 78 2d 3e 70 67 6e 6f 52 6f 6f 74 2c 20 42  pCx->pgnoRoot, B
1efd0 54 52 45 45 5f 57 52 43 53 52 2c 0a 20 20 20 20  TREE_WRCSR,.    
1efe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eff0 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49        pCx->pKeyI
1f000 6e 66 6f 2c 20 70 43 78 2d 3e 75 63 2e 70 43 75  nfo, pCx->uc.pCu
1f010 72 73 6f 72 29 3b 0a 20 20 2f 2a 20 54 68 65 20  rsor);.  /* The 
1f020 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
1f030 6f 72 28 29 20 72 6f 75 74 69 6e 65 20 63 61 6e  or() routine can
1f040 20 6f 6e 6c 79 20 66 61 69 6c 20 66 6f 72 20 74   only fail for t
1f050 68 65 20 66 69 72 73 74 20 63 75 72 73 6f 72 0a  he first cursor.
1f060 20 20 2a 2a 20 6f 70 65 6e 65 64 20 66 6f 72 20    ** opened for 
1f070 61 20 64 61 74 61 62 61 73 65 2e 20 20 53 69 6e  a database.  Sin
1f080 63 65 20 74 68 65 72 65 20 69 73 20 61 6c 72 65  ce there is alre
1f090 61 64 79 20 61 6e 20 6f 70 65 6e 20 63 75 72 73  ady an open curs
1f0a0 6f 72 20 77 68 65 6e 20 74 68 69 73 0a 20 20 2a  or when this.  *
1f0b0 2a 20 6f 70 63 6f 64 65 20 69 73 20 72 75 6e 2c  * opcode is run,
1f0c0 20 74 68 65 20 73 71 6c 69 74 65 33 42 74 72 65   the sqlite3Btre
1f0d0 65 43 75 72 73 6f 72 28 29 20 63 61 6e 6e 6f 74  eCursor() cannot
1f0e0 20 66 61 69 6c 20 2a 2f 0a 20 20 61 73 73 65 72   fail */.  asser
1f0f0 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
1f100 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   );.  break;.}..
1f110 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1f120 45 70 68 65 6d 65 72 61 6c 20 50 31 20 50 32 20  Ephemeral P1 P2 
1f130 2a 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  * P4 P5.** Synop
1f140 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a  sis: nColumn=P2.
1f150 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77  **.** Open a new
1f160 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20   cursor P1 to a 
1f170 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e  transient table.
1f180 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 69  .** The cursor i
1f190 73 20 61 6c 77 61 79 73 20 6f 70 65 6e 65 64 20  s always opened 
1f1a0 72 65 61 64 2f 77 72 69 74 65 20 65 76 65 6e 20  read/write even 
1f1b0 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20  if .** the main 
1f1c0 64 61 74 61 62 61 73 65 20 69 73 20 72 65 61 64  database is read
1f1d0 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 65 70 68 65  -only.  The ephe
1f1e0 6d 65 72 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 69  meral.** table i
1f1f0 73 20 64 65 6c 65 74 65 64 20 61 75 74 6f 6d 61  s deleted automa
1f200 74 69 63 61 6c 6c 79 20 77 68 65 6e 20 74 68 65  tically when the
1f210 20 63 75 72 73 6f 72 20 69 73 20 63 6c 6f 73 65   cursor is close
1f220 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  d..**.** If the 
1f230 63 75 72 73 6f 72 20 50 31 20 69 73 20 61 6c 72  cursor P1 is alr
1f240 65 61 64 79 20 6f 70 65 6e 65 64 20 6f 6e 20 61  eady opened on a
1f250 6e 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  n ephemeral tabl
1f260 65 2c 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20  e, the table.** 
1f270 69 73 20 63 6c 65 61 72 65 64 20 28 61 6c 6c 20  is cleared (all 
1f280 63 6f 6e 74 65 6e 74 20 69 73 20 65 72 61 73 65  content is erase
1f290 64 29 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20  d)..**.** P2 is 
1f2a0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
1f2b0 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 65 70 68  lumns in the eph
1f2c0 65 6d 65 72 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a  emeral table..**
1f2d0 20 54 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e   The cursor poin
1f2e0 74 73 20 74 6f 20 61 20 42 54 72 65 65 20 74 61  ts to a BTree ta
1f2f0 62 6c 65 20 69 66 20 50 34 3d 3d 30 20 61 6e 64  ble if P4==0 and
1f300 20 74 6f 20 61 20 42 54 72 65 65 20 69 6e 64 65   to a BTree inde
1f310 78 0a 2a 2a 20 69 66 20 50 34 20 69 73 20 6e 6f  x.** if P4 is no
1f320 74 20 30 2e 20 20 49 66 20 50 34 20 69 73 20 6e  t 0.  If P4 is n
1f330 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69 6e  ot NULL, it poin
1f340 74 73 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20  ts to a KeyInfo 
1f350 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 74 68 61  structure.** tha
1f360 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 66 6f  t defines the fo
1f370 72 6d 61 74 20 6f 66 20 6b 65 79 73 20 69 6e 20  rmat of keys in 
1f380 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a  the index..**.**
1f390 20 54 68 65 20 50 35 20 70 61 72 61 6d 65 74 65   The P5 paramete
1f3a0 72 20 63 61 6e 20 62 65 20 61 20 6d 61 73 6b 20  r can be a mask 
1f3b0 6f 66 20 74 68 65 20 42 54 52 45 45 5f 2a 20 66  of the BTREE_* f
1f3c0 6c 61 67 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20  lags defined.** 
1f3d0 69 6e 20 62 74 72 65 65 2e 68 2e 20 20 54 68 65  in btree.h.  The
1f3e0 73 65 20 66 6c 61 67 73 20 63 6f 6e 74 72 6f 6c  se flags control
1f3f0 20 61 73 70 65 63 74 73 20 6f 66 20 74 68 65 20   aspects of the 
1f400 6f 70 65 72 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20  operation of.** 
1f410 74 68 65 20 62 74 72 65 65 2e 20 20 54 68 65 20  the btree.  The 
1f420 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e  BTREE_OMIT_JOURN
1f430 41 4c 20 61 6e 64 20 42 54 52 45 45 5f 53 49 4e  AL and BTREE_SIN
1f440 47 4c 45 20 66 6c 61 67 73 20 61 72 65 0a 2a 2a  GLE flags are.**
1f450 20 61 64 64 65 64 20 61 75 74 6f 6d 61 74 69 63   added automatic
1f460 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  ally..*/./* Opco
1f470 64 65 3a 20 4f 70 65 6e 41 75 74 6f 69 6e 64 65  de: OpenAutoinde
1f480 78 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  x P1 P2 * P4 *.*
1f490 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c  * Synopsis: nCol
1f4a0 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69  umn=P2.**.** Thi
1f4b0 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 74  s opcode works t
1f4c0 68 65 20 73 61 6d 65 20 61 73 20 4f 50 5f 4f 70  he same as OP_Op
1f4d0 65 6e 45 70 68 65 6d 65 72 61 6c 2e 20 20 49 74  enEphemeral.  It
1f4e0 20 68 61 73 20 61 0a 2a 2a 20 64 69 66 66 65 72   has a.** differ
1f4f0 65 6e 74 20 6e 61 6d 65 20 74 6f 20 64 69 73 74  ent name to dist
1f500 69 6e 67 75 69 73 68 20 69 74 73 20 75 73 65 2e  inguish its use.
1f510 20 20 54 61 62 6c 65 73 20 63 72 65 61 74 65 64    Tables created
1f520 20 75 73 69 6e 67 0a 2a 2a 20 62 79 20 74 68 69   using.** by thi
1f530 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65  s opcode will be
1f540 20 75 73 65 64 20 66 6f 72 20 61 75 74 6f 6d 61   used for automa
1f550 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20  tically created 
1f560 74 72 61 6e 73 69 65 6e 74 0a 2a 2a 20 69 6e 64  transient.** ind
1f570 69 63 65 73 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a  ices in joins..*
1f580 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 41 75  /.case OP_OpenAu
1f590 74 6f 69 6e 64 65 78 3a 20 0a 63 61 73 65 20 4f  toindex: .case O
1f5a0 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a  P_OpenEphemeral:
1f5b0 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
1f5c0 2a 70 43 78 3b 0a 20 20 4b 65 79 49 6e 66 6f 20  *pCx;.  KeyInfo 
1f5d0 2a 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20 73 74  *pKeyInfo;..  st
1f5e0 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 76  atic const int v
1f5f0 66 73 46 6c 61 67 73 20 3d 20 0a 20 20 20 20 20  fsFlags = .     
1f600 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41   SQLITE_OPEN_REA
1f610 44 57 52 49 54 45 20 7c 0a 20 20 20 20 20 20 53  DWRITE |.      S
1f620 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54  QLITE_OPEN_CREAT
1f630 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
1f640 5f 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56 45 20  _OPEN_EXCLUSIVE 
1f650 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
1f660 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53  PEN_DELETEONCLOS
1f670 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
1f680 5f 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f  _OPEN_TRANSIENT_
1f690 44 42 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  DB;.  assert( pO
1f6a0 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73  p->p1>=0 );.  as
1f6b0 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30  sert( pOp->p2>=0
1f6c0 20 29 3b 0a 20 20 70 43 78 20 3d 20 70 2d 3e 61   );.  pCx = p->a
1f6d0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1f6e0 20 69 66 28 20 70 43 78 20 29 7b 0a 20 20 20 20   if( pCx ){.    
1f6f0 2f 2a 20 49 66 20 74 68 65 20 65 70 68 65 72 6d  /* If the epherm
1f700 65 72 61 6c 20 74 61 62 6c 65 20 69 73 20 61 6c  eral table is al
1f710 72 65 61 64 79 20 6f 70 65 6e 2c 20 65 72 61 73  ready open, eras
1f720 65 20 61 6c 6c 20 65 78 69 73 74 69 6e 67 20 63  e all existing c
1f730 6f 6e 74 65 6e 74 0a 20 20 20 20 2a 2a 20 73 6f  ontent.    ** so
1f740 20 74 68 61 74 20 74 68 65 20 74 61 62 6c 65 20   that the table 
1f750 69 73 20 65 6d 70 74 79 20 61 67 61 69 6e 2c 20  is empty again, 
1f760 72 61 74 68 65 72 20 74 68 61 6e 20 63 72 65 61  rather than crea
1f770 74 69 6e 67 20 61 20 6e 65 77 20 74 61 62 6c 65  ting a new table
1f780 2e 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28  . */.    assert(
1f790 20 70 43 78 2d 3e 69 73 45 70 68 65 6d 65 72 61   pCx->isEphemera
1f7a0 6c 20 29 3b 0a 20 20 20 20 69 66 28 20 70 43 78  l );.    if( pCx
1f7b0 2d 3e 70 42 74 78 20 29 7b 0a 20 20 20 20 20 20  ->pBtx ){.      
1f7c0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1f7d0 65 43 6c 65 61 72 54 61 62 6c 65 28 70 43 78 2d  eClearTable(pCx-
1f7e0 3e 70 42 74 78 2c 20 70 43 78 2d 3e 70 67 6e 6f  >pBtx, pCx->pgno
1f7f0 52 6f 6f 74 2c 20 30 29 3b 0a 20 20 20 20 7d 0a  Root, 0);.    }.
1f800 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 43 78    }else{.    pCx
1f810 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
1f820 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  r(p, pOp->p1, pO
1f830 70 2d 3e 70 32 2c 20 2d 31 2c 20 43 55 52 54 59  p->p2, -1, CURTY
1f840 50 45 5f 42 54 52 45 45 29 3b 0a 20 20 20 20 69  PE_BTREE);.    i
1f850 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f  f( pCx==0 ) goto
1f860 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 70 43 78   no_mem;.    pCx
1f870 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
1f880 20 20 20 70 43 78 2d 3e 69 73 45 70 68 65 6d 65     pCx->isEpheme
1f890 72 61 6c 20 3d 20 31 3b 0a 20 20 20 20 72 63 20  ral = 1;.    rc 
1f8a0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4f 70  = sqlite3BtreeOp
1f8b0 65 6e 28 64 62 2d 3e 70 56 66 73 2c 20 30 2c 20  en(db->pVfs, 0, 
1f8c0 64 62 2c 20 26 70 43 78 2d 3e 70 42 74 78 2c 20  db, &pCx->pBtx, 
1f8d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f8e0 20 20 20 20 20 20 20 20 20 20 20 42 54 52 45 45             BTREE
1f8f0 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20  _OMIT_JOURNAL | 
1f900 42 54 52 45 45 5f 53 49 4e 47 4c 45 20 7c 20 70  BTREE_SINGLE | p
1f910 4f 70 2d 3e 70 35 2c 0a 20 20 20 20 20 20 20 20  Op->p5,.        
1f920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f930 20 20 76 66 73 46 6c 61 67 73 29 3b 0a 20 20 20    vfsFlags);.   
1f940 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1f950 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  OK ){.      rc =
1f960 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67   sqlite3BtreeBeg
1f970 69 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70 42 74  inTrans(pCx->pBt
1f980 78 2c 20 31 2c 20 30 29 3b 0a 20 20 20 20 7d 0a  x, 1, 0);.    }.
1f990 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
1f9a0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 2f  TE_OK ){.      /
1f9b0 2a 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74  * If a transient
1f9c0 20 69 6e 64 65 78 20 69 73 20 72 65 71 75 69 72   index is requir
1f9d0 65 64 2c 20 63 72 65 61 74 65 20 69 74 20 62 79  ed, create it by
1f9e0 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20 20 20 2a   calling.      *
1f9f0 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72  * sqlite3BtreeCr
1fa00 65 61 74 65 54 61 62 6c 65 28 29 20 77 69 74 68  eateTable() with
1fa10 20 74 68 65 20 42 54 52 45 45 5f 42 4c 4f 42 4b   the BTREE_BLOBK
1fa20 45 59 20 66 6c 61 67 20 62 65 66 6f 72 65 0a 20  EY flag before. 
1fa30 20 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20       ** opening 
1fa40 69 74 2e 20 49 66 20 61 20 74 72 61 6e 73 69 65  it. If a transie
1fa50 6e 74 20 74 61 62 6c 65 20 69 73 20 72 65 71 75  nt table is requ
1fa60 69 72 65 64 2c 20 6a 75 73 74 20 75 73 65 20 74  ired, just use t
1fa70 68 65 0a 20 20 20 20 20 20 2a 2a 20 61 75 74 6f  he.      ** auto
1fa80 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65  matically create
1fa90 64 20 74 61 62 6c 65 20 77 69 74 68 20 72 6f 6f  d table with roo
1faa0 74 2d 70 61 67 65 20 31 20 28 61 6e 20 42 4c 4f  t-page 1 (an BLO
1fab0 42 5f 49 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e  B_INTKEY table).
1fac0 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
1fad0 69 66 28 20 28 70 43 78 2d 3e 70 4b 65 79 49 6e  if( (pCx->pKeyIn
1fae0 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 20 3d 20  fo = pKeyInfo = 
1faf0 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
1fb00 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
1fb10 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
1fb20 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20  ype==P4_KEYINFO 
1fb30 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  );.        rc = 
1fb40 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61  sqlite3BtreeCrea
1fb50 74 65 54 61 62 6c 65 28 70 43 78 2d 3e 70 42 74  teTable(pCx->pBt
1fb60 78 2c 20 28 69 6e 74 2a 29 26 70 43 78 2d 3e 70  x, (int*)&pCx->p
1fb70 67 6e 6f 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20  gnoRoot,.       
1fb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42 54                BT
1fba0 52 45 45 5f 42 4c 4f 42 4b 45 59 20 7c 20 70 4f  REE_BLOBKEY | pO
1fbb0 70 2d 3e 70 35 29 3b 20 0a 20 20 20 20 20 20 20  p->p5); .       
1fbc0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1fbd0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  OK ){.          
1fbe0 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70 67 6e  assert( pCx->pgn
1fbf0 6f 52 6f 6f 74 3d 3d 4d 41 53 54 45 52 5f 52 4f  oRoot==MASTER_RO
1fc00 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20 20 20 20  OT+1 );.        
1fc10 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e    assert( pKeyIn
1fc20 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20  fo->db==db );.  
1fc30 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1fc40 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45  pKeyInfo->enc==E
1fc50 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20 20 20  NC(db) );.      
1fc60 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1fc70 42 74 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d  BtreeCursor(pCx-
1fc80 3e 70 42 74 78 2c 20 70 43 78 2d 3e 70 67 6e 6f  >pBtx, pCx->pgno
1fc90 52 6f 6f 74 2c 20 42 54 52 45 45 5f 57 52 43 53  Root, BTREE_WRCS
1fca0 52 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  R,.             
1fcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fcc0 20 20 20 20 20 70 4b 65 79 49 6e 66 6f 2c 20 70       pKeyInfo, p
1fcd0 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  Cx->uc.pCursor);
1fce0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
1fcf0 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20     pCx->isTable 
1fd00 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = 0;.      }else
1fd10 7b 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70  {.        pCx->p
1fd20 67 6e 6f 52 6f 6f 74 20 3d 20 4d 41 53 54 45 52  gnoRoot = MASTER
1fd30 5f 52 4f 4f 54 3b 0a 20 20 20 20 20 20 20 20 72  _ROOT;.        r
1fd40 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1fd50 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 78  Cursor(pCx->pBtx
1fd60 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20 42  , MASTER_ROOT, B
1fd70 54 52 45 45 5f 57 52 43 53 52 2c 0a 20 20 20 20  TREE_WRCSR,.    
1fd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd90 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 70              0, p
1fda0 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  Cx->uc.pCursor);
1fdb0 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e 69 73  .        pCx->is
1fdc0 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 20 20 20  Table = 1;.     
1fdd0 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 78   }.    }.    pCx
1fde0 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 28 70  ->isOrdered = (p
1fdf0 4f 70 2d 3e 70 35 21 3d 42 54 52 45 45 5f 55 4e  Op->p5!=BTREE_UN
1fe00 4f 52 44 45 52 45 44 29 3b 0a 20 20 7d 0a 20 20  ORDERED);.  }.  
1fe10 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
1fe20 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1fe30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1fe40 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 4f   Opcode: SorterO
1fe50 70 65 6e 20 50 31 20 50 32 20 50 33 20 50 34 20  pen P1 P2 P3 P4 
1fe60 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  *.**.** This opc
1fe70 6f 64 65 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f  ode works like O
1fe80 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  P_OpenEphemeral 
1fe90 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20 6f  except that it o
1fea0 70 65 6e 73 0a 2a 2a 20 61 20 74 72 61 6e 73 69  pens.** a transi
1feb0 65 6e 74 20 69 6e 64 65 78 20 74 68 61 74 20 69  ent index that i
1fec0 73 20 73 70 65 63 69 66 69 63 61 6c 6c 79 20 64  s specifically d
1fed0 65 73 69 67 6e 65 64 20 74 6f 20 73 6f 72 74 20  esigned to sort 
1fee0 6c 61 72 67 65 0a 2a 2a 20 74 61 62 6c 65 73 20  large.** tables 
1fef0 75 73 69 6e 67 20 61 6e 20 65 78 74 65 72 6e 61  using an externa
1ff00 6c 20 6d 65 72 67 65 2d 73 6f 72 74 20 61 6c 67  l merge-sort alg
1ff10 6f 72 69 74 68 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66  orithm..**.** If
1ff20 20 61 72 67 75 6d 65 6e 74 20 50 33 20 69 73 20   argument P3 is 
1ff30 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 69  non-zero, then i
1ff40 74 20 69 6e 64 69 63 61 74 65 73 20 74 68 61 74  t indicates that
1ff50 20 74 68 65 20 73 6f 72 74 65 72 20 6d 61 79 0a   the sorter may.
1ff60 2a 2a 20 61 73 73 75 6d 65 20 74 68 61 74 20 61  ** assume that a
1ff70 20 73 74 61 62 6c 65 20 73 6f 72 74 20 63 6f 6e   stable sort con
1ff80 73 69 64 65 72 69 6e 67 20 74 68 65 20 66 69 72  sidering the fir
1ff90 73 74 20 50 33 20 66 69 65 6c 64 73 20 6f 66 20  st P3 fields of 
1ffa0 65 61 63 68 0a 2a 2a 20 6b 65 79 20 69 73 20 73  each.** key is s
1ffb0 75 66 66 69 63 69 65 6e 74 20 74 6f 20 70 72 6f  ufficient to pro
1ffc0 64 75 63 65 20 74 68 65 20 72 65 71 75 69 72 65  duce the require
1ffd0 64 20 72 65 73 75 6c 74 73 2e 0a 2a 2f 0a 63 61  d results..*/.ca
1ffe0 73 65 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e  se OP_SorterOpen
1fff0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
20000 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74   *pCx;..  assert
20010 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a  ( pOp->p1>=0 );.
20020 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
20030 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20  2>=0 );.  pCx = 
20040 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
20050 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
20060 70 32 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f  p2, -1, CURTYPE_
20070 53 4f 52 54 45 52 29 3b 0a 20 20 69 66 28 20 70  SORTER);.  if( p
20080 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  Cx==0 ) goto no_
20090 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 70 4b 65 79  mem;.  pCx->pKey
200a0 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
200b0 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72  KeyInfo;.  asser
200c0 74 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f  t( pCx->pKeyInfo
200d0 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 61 73  ->db==db );.  as
200e0 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65 79 49  sert( pCx->pKeyI
200f0 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62  nfo->enc==ENC(db
20100 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ) );.  rc = sqli
20110 74 65 33 56 64 62 65 53 6f 72 74 65 72 49 6e 69  te3VdbeSorterIni
20120 74 28 64 62 2c 20 70 4f 70 2d 3e 70 33 2c 20 70  t(db, pOp->p3, p
20130 43 78 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  Cx);.  if( rc ) 
20140 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
20150 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
20160 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
20170 53 65 71 75 65 6e 63 65 54 65 73 74 20 50 31 20  SequenceTest P1 
20180 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
20190 70 73 69 73 3a 20 69 66 28 20 63 75 72 73 6f 72  psis: if( cursor
201a0 5b 50 31 5d 2e 63 74 72 2b 2b 20 29 20 70 63 20  [P1].ctr++ ) pc 
201b0 3d 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  = P2.**.** P1 is
201c0 20 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72   a sorter cursor
201d0 2e 20 49 66 20 74 68 65 20 73 65 71 75 65 6e 63  . If the sequenc
201e0 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72  e counter is cur
201f0 72 65 6e 74 6c 79 20 7a 65 72 6f 2c 20 6a 75 6d  rently zero, jum
20200 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 52 65 67 61  p.** to P2. Rega
20210 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65  rdless of whethe
20220 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6a 75 6d  r or not the jum
20230 70 20 69 73 20 74 61 6b 65 6e 2c 20 69 6e 63 72  p is taken, incr
20240 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 74 68 65  ement the.** the
20250 20 73 65 71 75 65 6e 63 65 20 76 61 6c 75 65 2e   sequence value.
20260 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75  .*/.case OP_Sequ
20270 65 6e 63 65 54 65 73 74 3a 20 7b 0a 20 20 56 64  enceTest: {.  Vd
20280 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
20290 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
202a0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
202b0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
202c0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
202d0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
202e0 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a  isSorter(pC) );.
202f0 20 20 69 66 28 20 28 70 43 2d 3e 73 65 71 43 6f    if( (pC->seqCo
20300 75 6e 74 2b 2b 29 3d 3d 30 20 29 7b 0a 20 20 20  unt++)==0 ){.   
20310 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
20320 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
20330 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  ../* Opcode: Ope
20340 6e 50 73 65 75 64 6f 20 50 31 20 50 32 20 50 33  nPseudo P1 P2 P3
20350 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
20360 3a 20 50 33 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  : P3 columns in 
20370 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  r[P2].**.** Open
20380 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 74 68   a new cursor th
20390 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66  at points to a f
203a0 61 6b 65 20 74 61 62 6c 65 20 74 68 61 74 20 63  ake table that c
203b0 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65  ontains a single
203c0 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74 61 2e  .** row of data.
203d0 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66    The content of
203e0 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20 69 73   that one row is
203f0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
20400 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74  memory.** regist
20410 65 72 20 50 32 2e 20 20 49 6e 20 6f 74 68 65 72  er P2.  In other
20420 20 77 6f 72 64 73 2c 20 63 75 72 73 6f 72 20 50   words, cursor P
20430 31 20 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69  1 becomes an ali
20440 61 73 20 66 6f 72 20 74 68 65 20 0a 2a 2a 20 4d  as for the .** M
20450 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 20  EM_Blob content 
20460 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 72 65 67  contained in reg
20470 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
20480 41 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63  A pseudo-table c
20490 72 65 61 74 65 64 20 62 79 20 74 68 69 73 20 6f  reated by this o
204a0 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f  pcode is used to
204b0 20 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65 0a 2a   hold a single.*
204c0 2a 20 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f  * row output fro
204d0 6d 20 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20  m the sorter so 
204e0 74 68 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e  that the row can
204f0 20 62 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69   be decomposed i
20500 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61  nto.** individua
20510 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20  l columns using 
20520 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  the OP_Column op
20530 63 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f  code.  The OP_Co
20540 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69  lumn opcode.** i
20550 73 20 74 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f  s the only curso
20560 72 20 6f 70 63 6f 64 65 20 74 68 61 74 20 77 6f  r opcode that wo
20570 72 6b 73 20 77 69 74 68 20 61 20 70 73 65 75 64  rks with a pseud
20580 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50  o-table..**.** P
20590 33 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  3 is the number 
205a0 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65  of fields in the
205b0 20 72 65 63 6f 72 64 73 20 74 68 61 74 20 77 69   records that wi
205c0 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 62 79 0a  ll be stored by.
205d0 2a 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61  ** the pseudo-ta
205e0 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ble..*/.case OP_
205f0 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20  OpenPseudo: {.  
20600 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b  VdbeCursor *pCx;
20610 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
20620 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p1>=0 );.  asse
20630 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 29  rt( pOp->p3>=0 )
20640 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61  ;.  pCx = alloca
20650 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
20660 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31  >p1, pOp->p3, -1
20670 2c 20 43 55 52 54 59 50 45 5f 50 53 45 55 44 4f  , CURTYPE_PSEUDO
20680 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20  );.  if( pCx==0 
20690 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
206a0 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20   pCx->nullRow = 
206b0 31 3b 0a 20 20 70 43 78 2d 3e 73 65 65 6b 52 65  1;.  pCx->seekRe
206c0 73 75 6c 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  sult = pOp->p2;.
206d0 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d    pCx->isTable =
206e0 20 31 3b 0a 20 20 2f 2a 20 47 69 76 65 20 74 68   1;.  /* Give th
206f0 69 73 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72  is pseudo-cursor
20700 20 61 20 66 61 6b 65 20 42 74 43 75 72 73 6f 72   a fake BtCursor
20710 20 70 6f 69 6e 74 65 72 20 73 6f 20 74 68 61 74   pointer so that
20720 20 70 43 78 0a 20 20 2a 2a 20 63 61 6e 20 62 65   pCx.  ** can be
20730 20 73 61 66 65 6c 79 20 70 61 73 73 65 64 20 74   safely passed t
20740 6f 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  o sqlite3VdbeCur
20750 73 6f 72 4d 6f 76 65 74 6f 28 29 2e 20 20 54 68  sorMoveto().  Th
20760 69 73 20 61 76 6f 69 64 73 20 61 20 74 65 73 74  is avoids a test
20770 0a 20 20 2a 2a 20 66 6f 72 20 70 43 78 2d 3e 65  .  ** for pCx->e
20780 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
20790 5f 42 54 52 45 45 20 69 6e 73 69 64 65 20 6f 66  _BTREE inside of
207a0 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
207b0 6f 72 4d 6f 76 65 74 6f 28 29 0a 20 20 2a 2a 20  orMoveto().  ** 
207c0 77 68 69 63 68 20 69 73 20 61 20 70 65 72 66 6f  which is a perfo
207d0 72 6d 61 6e 63 65 20 6f 70 74 69 6d 69 7a 61 74  rmance optimizat
207e0 69 6f 6e 20 2a 2f 0a 20 20 70 43 78 2d 3e 75 63  ion */.  pCx->uc
207f0 2e 70 43 75 72 73 6f 72 20 3d 20 73 71 6c 69 74  .pCursor = sqlit
20800 65 33 42 74 72 65 65 46 61 6b 65 56 61 6c 69 64  e3BtreeFakeValid
20810 43 75 72 73 6f 72 28 29 3b 0a 20 20 61 73 73 65  Cursor();.  asse
20820 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29  rt( pOp->p5==0 )
20830 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
20840 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50   Opcode: Close P
20850 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
20860 43 6c 6f 73 65 20 61 20 63 75 72 73 6f 72 20 70  Close a cursor p
20870 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64  reviously opened
20880 20 61 73 20 50 31 2e 20 20 49 66 20 50 31 20 69   as P1.  If P1 i
20890 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74  s not.** current
208a0 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e  ly open, this in
208b0 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61 20 6e  struction is a n
208c0 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  o-op..*/.case OP
208d0 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65  _Close: {.  asse
208e0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
208f0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
20900 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74 65  rsor );.  sqlite
20910 33 56 64 62 65 46 72 65 65 43 75 72 73 6f 72 28  3VdbeFreeCursor(
20920 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  p, p->apCsr[pOp-
20930 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73  >p1]);.  p->apCs
20940 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a  r[pOp->p1] = 0;.
20950 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 64    break;.}..#ifd
20960 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
20970 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f 4d 41 53  _COLUMN_USED_MAS
20980 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c  K./* Opcode: Col
20990 75 6d 6e 73 55 73 65 64 20 50 31 20 2a 20 2a 20  umnsUsed P1 * * 
209a0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  P4 *.**.** This 
209b0 6f 70 63 6f 64 65 20 28 77 68 69 63 68 20 6f 6e  opcode (which on
209c0 6c 79 20 65 78 69 73 74 73 20 69 66 20 53 51 4c  ly exists if SQL
209d0 69 74 65 20 77 61 73 20 63 6f 6d 70 69 6c 65 64  ite was compiled
209e0 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f   with.** SQLITE_
209f0 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53  ENABLE_COLUMN_US
20a00 45 44 5f 4d 41 53 4b 29 20 69 64 65 6e 74 69 66  ED_MASK) identif
20a10 69 65 73 20 77 68 69 63 68 20 63 6f 6c 75 6d 6e  ies which column
20a20 73 20 6f 66 20 74 68 65 0a 2a 2a 20 74 61 62 6c  s of the.** tabl
20a30 65 20 6f 72 20 69 6e 64 65 78 20 66 6f 72 20 63  e or index for c
20a40 75 72 73 6f 72 20 50 31 20 61 72 65 20 75 73 65  ursor P1 are use
20a50 64 2e 20 20 50 34 20 69 73 20 61 20 36 34 2d 62  d.  P4 is a 64-b
20a60 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20 28 50  it integer.** (P
20a70 34 5f 49 4e 54 36 34 29 20 69 6e 20 77 68 69 63  4_INT64) in whic
20a80 68 20 74 68 65 20 66 69 72 73 74 20 36 33 20 62  h the first 63 b
20a90 69 74 73 20 61 72 65 20 6f 6e 65 20 66 6f 72 20  its are one for 
20aa0 65 61 63 68 20 6f 66 20 74 68 65 0a 2a 2a 20 66  each of the.** f
20ab0 69 72 73 74 20 36 33 20 63 6f 6c 75 6d 6e 73 20  irst 63 columns 
20ac0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  of the table or 
20ad0 69 6e 64 65 78 20 74 68 61 74 20 61 72 65 20 61  index that are a
20ae0 63 74 75 61 6c 6c 79 20 75 73 65 64 0a 2a 2a 20  ctually used.** 
20af0 62 79 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20  by the cursor.  
20b00 54 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62  The high-order b
20b10 69 74 20 69 73 20 73 65 74 20 69 66 20 61 6e 79  it is set if any
20b20 20 63 6f 6c 75 6d 6e 20 61 66 74 65 72 0a 2a 2a   column after.**
20b30 20 74 68 65 20 36 34 74 68 20 69 73 20 75 73 65   the 64th is use
20b40 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  d..*/.case OP_Co
20b50 6c 75 6d 6e 73 55 73 65 64 3a 20 7b 0a 20 20 56  lumnsUsed: {.  V
20b60 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
20b70 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
20b80 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
20b90 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
20ba0 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
20bb0 3b 0a 20 20 70 43 2d 3e 6d 61 73 6b 55 73 65 64  ;.  pC->maskUsed
20bc0 20 3d 20 2a 28 75 36 34 2a 29 70 4f 70 2d 3e 70   = *(u64*)pOp->p
20bd0 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b  4.pI64;.  break;
20be0 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70  .}.#endif../* Op
20bf0 63 6f 64 65 3a 20 53 65 65 6b 47 45 20 50 31 20  code: SeekGE P1 
20c00 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
20c10 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
20c20 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  @P4].**.** If cu
20c30 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
20c40 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
20c50 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
20c60 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
20c70 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
20c80 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
20c90 20 61 73 20 74 68 65 20 6b 65 79 2e 20 20 49 66   as the key.  If
20ca0 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
20cb0 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20  s .** to an SQL 
20cc0 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69  index, then P3 i
20cd0 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61  s the first in a
20ce0 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65  n array of P4 re
20cf0 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74  gisters .** that
20d00 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20   are used as an 
20d10 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
20d20 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73  ey. .**.** Repos
20d30 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
20d40 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e  so that  it poin
20d50 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65  ts to the smalle
20d60 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
20d70 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  * is greater tha
20d80 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
20d90 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20  e key value. If 
20da0 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
20db0 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61 74 65 72  ords .** greater
20dc0 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
20dd0 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32  o the key and P2
20de0 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
20df0 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
20e00 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 75 72 73  *.** If the curs
20e10 6f 72 20 50 31 20 77 61 73 20 6f 70 65 6e 65 64  or P1 was opened
20e20 20 75 73 69 6e 67 20 74 68 65 20 4f 50 46 4c 41   using the OPFLA
20e30 47 5f 53 45 45 4b 45 51 20 66 6c 61 67 2c 20 74  G_SEEKEQ flag, t
20e40 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f  hen this.** opco
20e50 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 6c  de will always l
20e60 61 6e 64 20 6f 6e 20 61 20 72 65 63 6f 72 64 20  and on a record 
20e70 74 68 61 74 20 65 71 75 61 6c 6c 79 20 65 71 75  that equally equ
20e80 61 6c 73 20 74 68 65 20 6b 65 79 2c 20 6f 72 0a  als the key, or.
20e90 2a 2a 20 65 6c 73 65 20 6a 75 6d 70 20 69 6d 6d  ** else jump imm
20ea0 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20  ediately to P2. 
20eb0 20 57 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72   When the cursor
20ec0 20 69 73 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45   is OPFLAG_SEEKE
20ed0 51 2c 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64  Q, this.** opcod
20ee0 65 20 6d 75 73 74 20 62 65 20 66 6f 6c 6c 6f 77  e must be follow
20ef0 65 64 20 62 79 20 61 6e 20 49 64 78 4c 45 20 6f  ed by an IdxLE o
20f00 70 63 6f 64 65 20 77 69 74 68 20 74 68 65 20 73  pcode with the s
20f10 61 6d 65 20 61 72 67 75 6d 65 6e 74 73 2e 0a 2a  ame arguments..*
20f20 2a 20 54 68 65 20 49 64 78 4c 45 20 6f 70 63 6f  * The IdxLE opco
20f30 64 65 20 77 69 6c 6c 20 62 65 20 73 6b 69 70 70  de will be skipp
20f40 65 64 20 69 66 20 74 68 69 73 20 6f 70 63 6f 64  ed if this opcod
20f50 65 20 73 75 63 63 65 65 64 73 2c 20 62 75 74 20  e succeeds, but 
20f60 74 68 65 0a 2a 2a 20 49 64 78 4c 45 20 6f 70 63  the.** IdxLE opc
20f70 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64  ode will be used
20f80 20 6f 6e 20 73 75 62 73 65 71 75 65 6e 74 20 6c   on subsequent l
20f90 6f 6f 70 20 69 74 65 72 61 74 69 6f 6e 73 2e 0a  oop iterations..
20fa0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
20fb0 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  e leaves the cur
20fc0 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74  sor configured t
20fd0 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72  o move in forwar
20fe0 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d  d order,.** from
20ff0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74   the beginning t
21000 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20  oward the end.  
21010 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
21020 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a  the cursor is.**
21030 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75   configured to u
21040 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65  se Next, not Pre
21050 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  v..**.** See als
21060 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
21070 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b  nd, SeekLt, Seek
21080 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a  Gt, SeekLe.*/./*
21090 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 54 20   Opcode: SeekGT 
210a0 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
210b0 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
210c0 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
210d0 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
210e0 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
210f0 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
21100 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
21110 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76  ), .** use the v
21120 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
21130 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66   P3 as a key. If
21140 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
21150 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20  s .** to an SQL 
21160 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69  index, then P3 i
21170 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61  s the first in a
21180 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65  n array of P4 re
21190 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74  gisters .** that
211a0 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20   are used as an 
211b0 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
211c0 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73  ey. .**.** Repos
211d0 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
211e0 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e  so that  it poin
211f0 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65  ts to the smalle
21200 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
21210 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  * is greater tha
21220 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e  n the key value.
21230 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
21240 20 72 65 63 6f 72 64 73 20 67 72 65 61 74 65 72   records greater
21250 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65   than .** the ke
21260 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20  y and P2 is not 
21270 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20  zero, then jump 
21280 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  to P2..**.** Thi
21290 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
212a0 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69  the cursor confi
212b0 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e  gured to move in
212c0 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a   forward order,.
212d0 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69  ** from the begi
212e0 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65  nning toward the
212f0 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20   end.  In other 
21300 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f  words, the curso
21310 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72  r is.** configur
21320 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20  ed to use Next, 
21330 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20  not Prev..**.** 
21340 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
21350 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c   NotFound, SeekL
21360 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c  t, SeekGe, SeekL
21370 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
21380 53 65 65 6b 4c 54 20 50 31 20 50 32 20 50 33 20  SeekLT P1 P2 P3 
21390 50 34 20 2a 20 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 * .** Synopsi
213a0 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
213b0 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
213c0 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
213d0 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
213e0 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
213f0 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
21400 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
21410 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61  register P3 as a
21420 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20   key. If cursor 
21430 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f  P1 refers .** to
21440 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74   an SQL index, t
21450 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69  hen P3 is the fi
21460 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20  rst in an array 
21470 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
21480 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65  .** that are use
21490 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64  d as an unpacked
214a0 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a   index key. .**.
214b0 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75  ** Reposition cu
214c0 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
214d0 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
214e0 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20  e largest entry 
214f0 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73  that .** is less
21500 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61   than the key va
21510 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
21520 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c 65 73  e no records les
21530 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b  s than .** the k
21540 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74  ey and P2 is not
21550 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70   zero, then jump
21560 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68   to P2..**.** Th
21570 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
21580 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66   the cursor conf
21590 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69  igured to move i
215a0 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c  n reverse order,
215b0 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64  .** from the end
215c0 20 74 6f 77 61 72 64 20 74 68 65 20 62 65 67 69   toward the begi
215d0 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72  nning.  In other
215e0 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73   words, the curs
215f0 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  or is.** configu
21600 72 65 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c  red to use Prev,
21610 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a   not Next..**.**
21620 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
21630 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b  , NotFound, Seek
21640 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b  Gt, SeekGe, Seek
21650 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  Le.*/./* Opcode:
21660 20 53 65 65 6b 4c 45 20 50 31 20 50 32 20 50 33   SeekLE P1 P2 P3
21670 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
21680 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
21690 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
216a0 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
216b0 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
216c0 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
216d0 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
216e0 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
216f0 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61  register P3 as a
21700 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20   key. If cursor 
21710 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f  P1 refers .** to
21720 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74   an SQL index, t
21730 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69  hen P3 is the fi
21740 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20  rst in an array 
21750 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
21760 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65  .** that are use
21770 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64  d as an unpacked
21780 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a   index key. .**.
21790 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75  ** Reposition cu
217a0 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
217b0 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
217c0 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74   largest entry t
217d0 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20  hat .** is less 
217e0 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
217f0 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
21800 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
21810 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73  records .** less
21820 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
21830 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32  o the key and P2
21840 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
21850 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
21860 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
21870 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
21880 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  or configured to
21890 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65   move in reverse
218a0 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20   order,.** from 
218b0 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74  the end toward t
218c0 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49  he beginning.  I
218d0 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
218e0 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
218f0 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73  configured to us
21900 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74  e Prev, not Next
21910 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63  ..**.** If the c
21920 75 72 73 6f 72 20 50 31 20 77 61 73 20 6f 70 65  ursor P1 was ope
21930 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50  ned using the OP
21940 46 4c 41 47 5f 53 45 45 4b 45 51 20 66 6c 61 67  FLAG_SEEKEQ flag
21950 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f  , then this.** o
21960 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79  pcode will alway
21970 73 20 6c 61 6e 64 20 6f 6e 20 61 20 72 65 63 6f  s land on a reco
21980 72 64 20 74 68 61 74 20 65 71 75 61 6c 6c 79 20  rd that equally 
21990 65 71 75 61 6c 73 20 74 68 65 20 6b 65 79 2c 20  equals the key, 
219a0 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d 70 20  or.** else jump 
219b0 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
219c0 32 2e 20 20 57 68 65 6e 20 74 68 65 20 63 75 72  2.  When the cur
219d0 73 6f 72 20 69 73 20 4f 50 46 4c 41 47 5f 53 45  sor is OPFLAG_SE
219e0 45 4b 45 51 2c 20 74 68 69 73 0a 2a 2a 20 6f 70  EKEQ, this.** op
219f0 63 6f 64 65 20 6d 75 73 74 20 62 65 20 66 6f 6c  code must be fol
21a00 6c 6f 77 65 64 20 62 79 20 61 6e 20 49 64 78 47  lowed by an IdxG
21a10 45 20 6f 70 63 6f 64 65 20 77 69 74 68 20 74 68  E opcode with th
21a20 65 20 73 61 6d 65 20 61 72 67 75 6d 65 6e 74 73  e same arguments
21a30 2e 0a 2a 2a 20 54 68 65 20 49 64 78 47 45 20 6f  ..** The IdxGE o
21a40 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 6b  pcode will be sk
21a50 69 70 70 65 64 20 69 66 20 74 68 69 73 20 6f 70  ipped if this op
21a60 63 6f 64 65 20 73 75 63 63 65 65 64 73 2c 20 62  code succeeds, b
21a70 75 74 20 74 68 65 0a 2a 2a 20 49 64 78 47 45 20  ut the.** IdxGE 
21a80 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75  opcode will be u
21a90 73 65 64 20 6f 6e 20 73 75 62 73 65 71 75 65 6e  sed on subsequen
21aa0 74 20 6c 6f 6f 70 20 69 74 65 72 61 74 69 6f 6e  t loop iteration
21ab0 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  s..**.** See als
21ac0 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
21ad0 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b  nd, SeekGt, Seek
21ae0 47 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61  Ge, SeekLt.*/.ca
21af0 73 65 20 4f 50 5f 53 65 65 6b 4c 54 3a 20 20 20  se OP_SeekLT:   
21b00 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
21b10 6e 33 2c 20 67 72 6f 75 70 20 2a 2f 0a 63 61 73  n3, group */.cas
21b20 65 20 4f 50 5f 53 65 65 6b 4c 45 3a 20 20 20 20  e OP_SeekLE:    
21b30 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
21b40 33 2c 20 67 72 6f 75 70 20 2a 2f 0a 63 61 73 65  3, group */.case
21b50 20 4f 50 5f 53 65 65 6b 47 45 3a 20 20 20 20 20   OP_SeekGE:     
21b60 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
21b70 2c 20 67 72 6f 75 70 20 2a 2f 0a 63 61 73 65 20  , group */.case 
21b80 4f 50 5f 53 65 65 6b 47 54 3a 20 7b 20 20 20 20  OP_SeekGT: {    
21b90 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 2c     /* jump, in3,
21ba0 20 67 72 6f 75 70 20 2a 2f 0a 20 20 69 6e 74 20   group */.  int 
21bb0 72 65 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f  res;           /
21bc0 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73  * Comparison res
21bd0 75 6c 74 20 2a 2f 0a 20 20 69 6e 74 20 6f 63 3b  ult */.  int oc;
21be0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
21bf0 70 63 6f 64 65 20 2a 2f 0a 20 20 56 64 62 65 43  pcode */.  VdbeC
21c00 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a  ursor *pC;    /*
21c10 20 54 68 65 20 63 75 72 73 6f 72 20 74 6f 20 73   The cursor to s
21c20 65 65 6b 20 2a 2f 0a 20 20 55 6e 70 61 63 6b 65  eek */.  Unpacke
21c30 64 52 65 63 6f 72 64 20 72 3b 20 20 2f 2a 20 54  dRecord r;  /* T
21c40 68 65 20 6b 65 79 20 74 6f 20 73 65 65 6b 20 66  he key to seek f
21c50 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65  or */.  int nFie
21c60 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ld;        /* Nu
21c70 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
21c80 6f 72 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65  or fields in the
21c90 20 6b 65 79 20 2a 2f 0a 20 20 69 36 34 20 69 4b   key */.  i64 iK
21ca0 65 79 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ey;          /* 
21cb0 54 68 65 20 72 6f 77 69 64 20 77 65 20 61 72 65  The rowid we are
21cc0 20 74 6f 20 73 65 65 6b 20 74 6f 20 2a 2f 0a 20   to seek to */. 
21cd0 20 69 6e 74 20 65 71 4f 6e 6c 79 3b 20 20 20 20   int eqOnly;    
21ce0 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 69 6e 74 65      /* Only inte
21cf0 72 65 73 74 65 64 20 69 6e 20 3d 3d 20 72 65 73  rested in == res
21d00 75 6c 74 73 20 2a 2f 0a 0a 20 20 61 73 73 65 72  ults */..  asser
21d10 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
21d20 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
21d30 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
21d40 20 70 4f 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20   pOp->p2!=0 );. 
21d50 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
21d60 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
21d70 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
21d80 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
21d90 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
21da0 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  E );.  assert( O
21db0 50 5f 53 65 65 6b 4c 45 20 3d 3d 20 4f 50 5f 53  P_SeekLE == OP_S
21dc0 65 65 6b 4c 54 2b 31 20 29 3b 0a 20 20 61 73 73  eekLT+1 );.  ass
21dd0 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 45 20 3d  ert( OP_SeekGE =
21de0 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 32 20 29 3b  = OP_SeekLT+2 );
21df0 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65  .  assert( OP_Se
21e00 65 6b 47 54 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c  ekGT == OP_SeekL
21e10 54 2b 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28  T+3 );.  assert(
21e20 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29   pC->isOrdered )
21e30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
21e40 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  uc.pCursor!=0 );
21e50 0a 20 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70 63  .  oc = pOp->opc
21e60 6f 64 65 3b 0a 20 20 65 71 4f 6e 6c 79 20 3d 20  ode;.  eqOnly = 
21e70 30 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  0;.  pC->nullRow
21e80 20 3d 20 30 3b 0a 23 69 66 64 65 66 20 53 51 4c   = 0;.#ifdef SQL
21e90 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e  ITE_DEBUG.  pC->
21ea0 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70  seekOp = pOp->op
21eb0 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  code;.#endif..  
21ec0 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  if( pC->isTable 
21ed0 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 42 54  ){.    /* The BT
21ee0 52 45 45 5f 53 45 45 4b 5f 45 51 20 66 6c 61 67  REE_SEEK_EQ flag
21ef0 20 69 73 20 6f 6e 6c 79 20 73 65 74 20 6f 6e 20   is only set on 
21f00 69 6e 64 65 78 20 63 75 72 73 6f 72 73 20 2a 2f  index cursors */
21f10 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c  .    assert( sql
21f20 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 48  ite3BtreeCursorH
21f30 61 73 48 69 6e 74 28 70 43 2d 3e 75 63 2e 70 43  asHint(pC->uc.pC
21f40 75 72 73 6f 72 2c 20 42 54 52 45 45 5f 53 45 45  ursor, BTREE_SEE
21f50 4b 5f 45 51 29 3d 3d 30 0a 20 20 20 20 20 20 20  K_EQ)==0.       
21f60 20 20 20 20 20 20 20 7c 7c 20 43 4f 52 52 55 50         || CORRUP
21f70 54 5f 44 42 20 29 3b 0a 0a 20 20 20 20 2f 2a 20  T_DB );..    /* 
21f80 54 68 65 20 69 6e 70 75 74 20 76 61 6c 75 65 20  The input value 
21f90 69 6e 20 50 33 20 6d 69 67 68 74 20 62 65 20 6f  in P3 might be o
21fa0 66 20 61 6e 79 20 74 79 70 65 3a 20 69 6e 74 65  f any type: inte
21fb0 67 65 72 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e  ger, real, strin
21fc0 67 2c 0a 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20  g,.    ** blob, 
21fd0 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74  or NULL.  But it
21fe0 20 6e 65 65 64 73 20 74 6f 20 62 65 20 61 6e 20   needs to be an 
21ff0 69 6e 74 65 67 65 72 20 62 65 66 6f 72 65 20 77  integer before w
22000 65 20 63 61 6e 20 64 6f 0a 20 20 20 20 2a 2a 20  e can do.    ** 
22010 74 68 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f 6e  the seek, so con
22020 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20  vert it. */.    
22030 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
22040 2d 3e 70 33 5d 3b 0a 20 20 20 20 69 66 28 20 28  ->p3];.    if( (
22050 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pIn3->flags & (M
22060 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c  EM_Int|MEM_Real|
22070 4d 45 4d 5f 49 6e 74 52 65 61 6c 7c 4d 45 4d 5f  MEM_IntReal|MEM_
22080 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29  Str))==MEM_Str )
22090 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d  {.      applyNum
220a0 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e  ericAffinity(pIn
220b0 33 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20  3, 0);.    }.   
220c0 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56   iKey = sqlite3V
220d0 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 33  dbeIntValue(pIn3
220e0 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74 68  );..    /* If th
220f0 65 20 50 33 20 76 61 6c 75 65 20 63 6f 75 6c 64  e P3 value could
22100 20 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65   not be converte
22110 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65  d into an intege
22120 72 20 77 69 74 68 6f 75 74 0a 20 20 20 20 2a 2a  r without.    **
22130 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61   loss of informa
22140 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63 69  tion, then speci
22150 61 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73  al processing is
22160 20 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a   required... */.
22170 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66      if( (pIn3->f
22180 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c  lags & (MEM_Int|
22190 4d 45 4d 5f 49 6e 74 52 65 61 6c 29 29 3d 3d 30  MEM_IntReal))==0
221a0 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 70   ){.      if( (p
221b0 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
221c0 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Real)==0 ){.   
221d0 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e       if( (pIn3->
221e0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
221f0 29 20 7c 7c 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b  ) || oc>=OP_Seek
22200 47 45 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  GE ){.          
22210 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
22220 31 2c 32 29 3b 20 67 6f 74 6f 20 6a 75 6d 70 5f  1,2); goto jump_
22230 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 20 20 20  to_p2;.         
22240 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
22250 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
22260 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
22270 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  t(pC->uc.pCursor
22280 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20  , &res);.       
22290 20 20 20 67 6f 74 6f 20 73 65 65 6b 5f 6e 6f 74     goto seek_not
222a0 5f 66 6f 75 6e 64 3b 0a 20 20 20 20 20 20 20 20  _found;.        
222b0 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 0a 0a 20  }.      }else.. 
222c0 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 61       /* If the a
222d0 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65  pproximation iKe
222e0 79 20 69 73 20 6c 61 72 67 65 72 20 74 68 61 6e  y is larger than
222f0 20 74 68 65 20 61 63 74 75 61 6c 20 72 65 61 6c   the actual real
22300 20 73 65 61 72 63 68 0a 20 20 20 20 20 20 2a 2a   search.      **
22310 20 74 65 72 6d 2c 20 73 75 62 73 74 69 74 75 74   term, substitut
22320 65 20 3e 3d 20 66 6f 72 20 3e 20 61 6e 64 20 3c  e >= for > and <
22330 20 66 6f 72 20 3c 3d 2e 20 65 2e 67 2e 20 69 66   for <=. e.g. if
22340 20 74 68 65 20 73 65 61 72 63 68 20 74 65 72 6d   the search term
22350 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 34 2e 39  .      ** is 4.9
22360 20 61 6e 64 20 74 68 65 20 69 6e 74 65 67 65 72   and the integer
22370 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 35   approximation 5
22380 3a 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20  :.      **.     
22390 20 2a 2a 20 20 20 20 20 20 20 20 28 78 20 3e 20   **        (x > 
223a0 20 34 2e 39 29 20 20 20 20 2d 3e 20 20 20 20 20   4.9)    ->     
223b0 28 78 20 3e 3d 20 35 29 0a 20 20 20 20 20 20 2a  (x >= 5).      *
223c0 2a 20 20 20 20 20 20 20 20 28 78 20 3c 3d 20 34  *        (x <= 4
223d0 2e 39 29 20 20 20 20 2d 3e 20 20 20 20 20 28 78  .9)    ->     (x
223e0 20 3c 20 20 35 29 0a 20 20 20 20 20 20 2a 2f 0a   <  5).      */.
223f0 20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e        if( pIn3->
22400 75 2e 72 3c 28 64 6f 75 62 6c 65 29 69 4b 65 79  u.r<(double)iKey
22410 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
22420 72 74 28 20 4f 50 5f 53 65 65 6b 47 45 3d 3d 28  rt( OP_SeekGE==(
22430 4f 50 5f 53 65 65 6b 47 54 2d 31 29 20 29 3b 0a  OP_SeekGT-1) );.
22440 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
22450 4f 50 5f 53 65 65 6b 4c 54 3d 3d 28 4f 50 5f 53  OP_SeekLT==(OP_S
22460 65 65 6b 4c 45 2d 31 29 20 29 3b 0a 20 20 20 20  eekLE-1) );.    
22470 20 20 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f      assert( (OP_
22480 53 65 65 6b 4c 45 20 26 20 30 78 30 30 30 31 29  SeekLE & 0x0001)
22490 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20 26 20 30  ==(OP_SeekGT & 0
224a0 78 30 30 30 31 29 20 29 3b 0a 20 20 20 20 20 20  x0001) );.      
224b0 20 20 69 66 28 20 28 6f 63 20 26 20 30 78 30 30    if( (oc & 0x00
224c0 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20  01)==(OP_SeekGT 
224d0 26 20 30 78 30 30 30 31 29 20 29 20 6f 63 2d 2d  & 0x0001) ) oc--
224e0 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
224f0 20 2f 2a 20 49 66 20 74 68 65 20 61 70 70 72 6f   /* If the appro
22500 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69 73  ximation iKey is
22510 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e 20 74 68   smaller than th
22520 65 20 61 63 74 75 61 6c 20 72 65 61 6c 20 73 65  e actual real se
22530 61 72 63 68 0a 20 20 20 20 20 20 2a 2a 20 74 65  arch.      ** te
22540 72 6d 2c 20 73 75 62 73 74 69 74 75 74 65 20 3c  rm, substitute <
22550 3d 20 66 6f 72 20 3c 20 61 6e 64 20 3e 20 66 6f  = for < and > fo
22560 72 20 3e 3d 2e 20 20 2a 2f 0a 20 20 20 20 20 20  r >=.  */.      
22570 65 6c 73 65 20 69 66 28 20 70 49 6e 33 2d 3e 75  else if( pIn3->u
22580 2e 72 3e 28 64 6f 75 62 6c 65 29 69 4b 65 79 20  .r>(double)iKey 
22590 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
225a0 74 28 20 4f 50 5f 53 65 65 6b 4c 45 3d 3d 28 4f  t( OP_SeekLE==(O
225b0 50 5f 53 65 65 6b 4c 54 2b 31 29 20 29 3b 0a 20  P_SeekLT+1) );. 
225c0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f         assert( O
225d0 50 5f 53 65 65 6b 47 54 3d 3d 28 4f 50 5f 53 65  P_SeekGT==(OP_Se
225e0 65 6b 47 45 2b 31 29 20 29 3b 0a 20 20 20 20 20  ekGE+1) );.     
225f0 20 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f 53     assert( (OP_S
22600 65 65 6b 4c 54 20 26 20 30 78 30 30 30 31 29 3d  eekLT & 0x0001)=
22610 3d 28 4f 50 5f 53 65 65 6b 47 45 20 26 20 30 78  =(OP_SeekGE & 0x
22620 30 30 30 31 29 20 29 3b 0a 20 20 20 20 20 20 20  0001) );.       
22630 20 69 66 28 20 28 6f 63 20 26 20 30 78 30 30 30   if( (oc & 0x000
22640 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 20 26  1)==(OP_SeekLT &
22650 20 30 78 30 30 30 31 29 20 29 20 6f 63 2b 2b 3b   0x0001) ) oc++;
22660 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
22670 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
22680 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
22690 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  ed(pC->uc.pCurso
226a0 72 2c 20 30 2c 20 28 75 36 34 29 69 4b 65 79 2c  r, 0, (u64)iKey,
226b0 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70   0, &res);.    p
226c0 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20  C->movetoTarget 
226d0 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73 65 64  = iKey;  /* Used
226e0 20 62 79 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f   by OP_Delete */
226f0 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c  .    if( rc!=SQL
22700 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
22710 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
22720 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  o_error;.    }. 
22730 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 46   }else{.    /* F
22740 6f 72 20 61 20 63 75 72 73 6f 72 20 77 69 74 68  or a cursor with
22750 20 74 68 65 20 42 54 52 45 45 5f 53 45 45 4b 5f   the BTREE_SEEK_
22760 45 51 20 68 69 6e 74 2c 20 6f 6e 6c 79 20 74 68  EQ hint, only th
22770 65 20 4f 50 5f 53 65 65 6b 47 45 20 61 6e 64 0a  e OP_SeekGE and.
22780 20 20 20 20 2a 2a 20 4f 50 5f 53 65 65 6b 4c 45      ** OP_SeekLE
22790 20 6f 70 63 6f 64 65 73 20 61 72 65 20 61 6c 6c   opcodes are all
227a0 6f 77 65 64 2c 20 61 6e 64 20 74 68 65 73 65 20  owed, and these 
227b0 6d 75 73 74 20 62 65 20 69 6d 6d 65 64 69 61 74  must be immediat
227c0 65 6c 79 20 66 6f 6c 6c 6f 77 65 64 0a 20 20 20  ely followed.   
227d0 20 2a 2a 20 62 79 20 61 6e 20 4f 50 5f 49 64 78   ** by an OP_Idx
227e0 47 54 20 6f 72 20 4f 50 5f 49 64 78 4c 54 20 6f  GT or OP_IdxLT o
227f0 70 63 6f 64 65 2c 20 72 65 73 70 65 63 74 69 76  pcode, respectiv
22800 65 6c 79 2c 20 77 69 74 68 20 74 68 65 20 73 61  ely, with the sa
22810 6d 65 20 6b 65 79 2e 0a 20 20 20 20 2a 2f 0a 20  me key..    */. 
22820 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 42 74     if( sqlite3Bt
22830 72 65 65 43 75 72 73 6f 72 48 61 73 48 69 6e 74  reeCursorHasHint
22840 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
22850 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 29 20   BTREE_SEEK_EQ) 
22860 29 7b 0a 20 20 20 20 20 20 65 71 4f 6e 6c 79 20  ){.      eqOnly 
22870 3d 20 31 3b 0a 20 20 20 20 20 20 61 73 73 65 72  = 1;.      asser
22880 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
22890 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20 70 4f 70  OP_SeekGE || pOp
228a0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65  ->opcode==OP_See
228b0 6b 4c 45 20 29 3b 0a 20 20 20 20 20 20 61 73 73  kLE );.      ass
228c0 65 72 74 28 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f  ert( pOp[1].opco
228d0 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 7c 7c 20  de==OP_IdxLT || 
228e0 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  pOp[1].opcode==O
228f0 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20 20  P_IdxGT );.     
22900 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e   assert( pOp[1].
22910 70 31 3d 3d 70 4f 70 5b 30 5d 2e 70 31 20 29 3b  p1==pOp[0].p1 );
22920 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
22930 4f 70 5b 31 5d 2e 70 32 3d 3d 70 4f 70 5b 30 5d  Op[1].p2==pOp[0]
22940 2e 70 32 20 29 3b 0a 20 20 20 20 20 20 61 73 73  .p2 );.      ass
22950 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 33 3d 3d  ert( pOp[1].p3==
22960 70 4f 70 5b 30 5d 2e 70 33 20 29 3b 0a 20 20 20  pOp[0].p3 );.   
22970 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31     assert( pOp[1
22980 5d 2e 70 34 2e 69 3d 3d 70 4f 70 5b 30 5d 2e 70  ].p4.i==pOp[0].p
22990 34 2e 69 20 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  4.i );.    }..  
229a0 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e    nField = pOp->
229b0 70 34 2e 69 3b 0a 20 20 20 20 61 73 73 65 72 74  p4.i;.    assert
229c0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
229d0 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20 20 61  4_INT32 );.    a
229e0 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20  ssert( nField>0 
229f0 29 3b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66  );.    r.pKeyInf
22a00 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  o = pC->pKeyInfo
22a10 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d  ;.    r.nField =
22a20 20 28 75 31 36 29 6e 46 69 65 6c 64 3b 0a 0a 20   (u16)nField;.. 
22a30 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 6c     /* The next l
22a40 69 6e 65 20 6f 66 20 63 6f 64 65 20 63 6f 6d 70  ine of code comp
22a50 75 74 65 73 20 61 73 20 66 6f 6c 6c 6f 77 73 2c  utes as follows,
22a60 20 6f 6e 6c 79 20 66 61 73 74 65 72 3a 0a 20 20   only faster:.  
22a70 20 20 2a 2a 20 20 20 69 66 28 20 6f 63 3d 3d 4f    **   if( oc==O
22a80 50 5f 53 65 65 6b 47 54 20 7c 7c 20 6f 63 3d 3d  P_SeekGT || oc==
22a90 4f 50 5f 53 65 65 6b 4c 45 20 29 7b 0a 20 20 20  OP_SeekLE ){.   
22aa0 20 2a 2a 20 20 20 20 20 72 2e 64 65 66 61 75 6c   **     r.defaul
22ab0 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20 20 20 2a  t_rc = -1;.    *
22ac0 2a 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2a  *   }else{.    *
22ad0 2a 20 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f  *     r.default_
22ae0 72 63 20 3d 20 2b 31 3b 0a 20 20 20 20 2a 2a 20  rc = +1;.    ** 
22af0 20 20 7d 0a 20 20 20 20 2a 2f 0a 20 20 20 20 72    }.    */.    r
22b00 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 28 28  .default_rc = ((
22b10 31 20 26 20 28 6f 63 20 2d 20 4f 50 5f 53 65 65  1 & (oc - OP_See
22b20 6b 4c 54 29 29 20 3f 20 2d 31 20 3a 20 2b 31 29  kLT)) ? -1 : +1)
22b30 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63  ;.    assert( oc
22b40 21 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 72  !=OP_SeekGT || r
22b50 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2d 31 20  .default_rc==-1 
22b60 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f  );.    assert( o
22b70 63 21 3d 4f 50 5f 53 65 65 6b 4c 45 20 7c 7c 20  c!=OP_SeekLE || 
22b80 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2d 31  r.default_rc==-1
22b90 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
22ba0 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c  oc!=OP_SeekGE ||
22bb0 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2b   r.default_rc==+
22bc0 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  1 );.    assert(
22bd0 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c   oc!=OP_SeekLT |
22be0 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d  | r.default_rc==
22bf0 2b 31 20 29 3b 0a 0a 20 20 20 20 72 2e 61 4d 65  +1 );..    r.aMe
22c00 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
22c10 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  3];.#ifdef SQLIT
22c20 45 5f 44 45 42 55 47 0a 20 20 20 20 7b 20 69 6e  E_DEBUG.    { in
22c30 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c  t i; for(i=0; i<
22c40 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61  r.nField; i++) a
22c50 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
22c60 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b  d(&r.aMem[i]) );
22c70 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 72 2e   }.#endif.    r.
22c80 65 71 53 65 65 6e 20 3d 20 30 3b 0a 20 20 20 20  eqSeen = 0;.    
22c90 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
22ca0 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
22cb0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
22cc0 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b  &r, 0, 0, &res);
22cd0 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c  .    if( rc!=SQL
22ce0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
22cf0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
22d00 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  o_error;.    }. 
22d10 20 20 20 69 66 28 20 65 71 4f 6e 6c 79 20 26 26     if( eqOnly &&
22d20 20 72 2e 65 71 53 65 65 6e 3d 3d 30 20 29 7b 0a   r.eqSeen==0 ){.
22d30 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72 65        assert( re
22d40 73 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 67 6f  s!=0 );.      go
22d50 74 6f 20 73 65 65 6b 5f 6e 6f 74 5f 66 6f 75 6e  to seek_not_foun
22d60 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70  d;.    }.  }.  p
22d70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
22d80 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63  o = 0;.  pC->cac
22d90 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
22da0 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65 66 20 53  _STALE;.#ifdef S
22db0 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c  QLITE_TEST.  sql
22dc0 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e  ite3_search_coun
22dd0 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66  t++;.#endif.  if
22de0 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 45 20  ( oc>=OP_SeekGE 
22df0 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d  ){  assert( oc==
22e00 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20 6f 63 3d  OP_SeekGE || oc=
22e10 3d 4f 50 5f 53 65 65 6b 47 54 20 29 3b 0a 20 20  =OP_SeekGT );.  
22e20 20 20 69 66 28 20 72 65 73 3c 30 20 7c 7c 20 28    if( res<0 || (
22e30 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50  res==0 && oc==OP
22e40 5f 53 65 65 6b 47 54 29 20 29 7b 0a 20 20 20 20  _SeekGT) ){.    
22e50 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20    res = 0;.     
22e60 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
22e70 65 65 4e 65 78 74 28 70 43 2d 3e 75 63 2e 70 43  eeNext(pC->uc.pC
22e80 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20 20 20 20  ursor, 0);.     
22e90 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
22ea0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66  OK ){.        if
22eb0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e  ( rc==SQLITE_DON
22ec0 45 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72  E ){.          r
22ed0 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
22ee0 20 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 31           res = 1
22ef0 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
22f00 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
22f10 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
22f20 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  or;.        }.  
22f30 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
22f40 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a  .      res = 0;.
22f50 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
22f60 20 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f     assert( oc==O
22f70 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 6f 63 3d 3d  P_SeekLT || oc==
22f80 4f 50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20  OP_SeekLE );.   
22f90 20 69 66 28 20 72 65 73 3e 30 20 7c 7c 20 28 72   if( res>0 || (r
22fa0 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f  es==0 && oc==OP_
22fb0 53 65 65 6b 4c 54 29 20 29 7b 0a 20 20 20 20 20  SeekLT) ){.     
22fc0 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20   res = 0;.      
22fd0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
22fe0 65 50 72 65 76 69 6f 75 73 28 70 43 2d 3e 75 63  ePrevious(pC->uc
22ff0 2e 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20  .pCursor, 0);.  
23000 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
23010 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
23020 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
23030 44 4f 4e 45 20 29 7b 0a 20 20 20 20 20 20 20 20  DONE ){.        
23040 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
23050 3b 0a 20 20 20 20 20 20 20 20 20 20 72 65 73 20  ;.          res 
23060 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  = 1;.        }el
23070 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f  se{.          go
23080 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
23090 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d  error;.        }
230a0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
230b0 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 72 65 73  se{.      /* res
230c0 20 6d 69 67 68 74 20 62 65 20 6e 65 67 61 74 69   might be negati
230d0 76 65 20 62 65 63 61 75 73 65 20 74 68 65 20 74  ve because the t
230e0 61 62 6c 65 20 69 73 20 65 6d 70 74 79 2e 20 20  able is empty.  
230f0 43 68 65 63 6b 20 74 6f 0a 20 20 20 20 20 20 2a  Check to.      *
23100 2a 20 73 65 65 20 69 66 20 74 68 69 73 20 69 73  * see if this is
23110 20 74 68 65 20 63 61 73 65 2e 0a 20 20 20 20 20   the case..     
23120 20 2a 2f 0a 20 20 20 20 20 20 72 65 73 20 3d 20   */.      res = 
23130 73 71 6c 69 74 65 33 42 74 72 65 65 45 6f 66 28  sqlite3BtreeEof(
23140 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  pC->uc.pCursor);
23150 0a 20 20 20 20 7d 0a 20 20 7d 0a 73 65 65 6b 5f  .    }.  }.seek_
23160 6e 6f 74 5f 66 6f 75 6e 64 3a 0a 20 20 61 73 73  not_found:.  ass
23170 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29  ert( pOp->p2>0 )
23180 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
23190 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20  ken(res!=0,2);. 
231a0 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
231b0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
231c0 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 65 71 4f  .  }else if( eqO
231d0 6e 6c 79 20 29 7b 0a 20 20 20 20 61 73 73 65 72  nly ){.    asser
231e0 74 28 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65  t( pOp[1].opcode
231f0 3d 3d 4f 50 5f 49 64 78 4c 54 20 7c 7c 20 70 4f  ==OP_IdxLT || pO
23200 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  p[1].opcode==OP_
23210 49 64 78 47 54 20 29 3b 0a 20 20 20 20 70 4f 70  IdxGT );.    pOp
23220 2b 2b 3b 20 2f 2a 20 53 6b 69 70 20 74 68 65 20  ++; /* Skip the 
23230 4f 50 5f 49 64 78 4c 74 20 6f 72 20 4f 50 5f 49  OP_IdxLt or OP_I
23240 64 78 47 54 20 74 68 61 74 20 66 6f 6c 6c 6f 77  dxGT that follow
23250 73 20 2a 2f 0a 20 20 7d 0a 20 20 62 72 65 61 6b  s */.  }.  break
23260 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
23270 53 65 65 6b 48 69 74 20 50 31 20 50 32 20 2a 20  SeekHit P1 P2 * 
23280 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
23290 20 73 65 65 6b 48 69 74 3d 50 32 0a 2a 2a 0a 2a   seekHit=P2.**.*
232a0 2a 20 53 65 74 20 74 68 65 20 73 65 65 6b 48 69  * Set the seekHi
232b0 74 20 66 6c 61 67 20 6f 6e 20 63 75 72 73 6f 72  t flag on cursor
232c0 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65   P1 to the value
232d0 20 69 6e 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73   in P2..** The s
232e0 65 65 6b 48 69 74 20 66 6c 61 67 20 69 73 20 75  eekHit flag is u
232f0 73 65 64 20 62 79 20 74 68 65 20 49 66 4e 6f 48  sed by the IfNoH
23300 6f 70 65 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  ope opcode..**.*
23310 2a 20 50 31 20 6d 75 73 74 20 62 65 20 61 20 76  * P1 must be a v
23320 61 6c 69 64 20 62 2d 74 72 65 65 20 63 75 72 73  alid b-tree curs
23330 6f 72 2e 20 20 50 32 20 6d 75 73 74 20 62 65 20  or.  P2 must be 
23340 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2c  a boolean value,
23350 0a 2a 2a 20 65 69 74 68 65 72 20 30 20 6f 72 20  .** either 0 or 
23360 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  1..*/.case OP_Se
23370 65 6b 48 69 74 3a 20 7b 0a 20 20 56 64 62 65 43  ekHit: {.  VdbeC
23380 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73 73  ursor *pC;.  ass
23390 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
233a0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
233b0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
233c0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
233d0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
233e0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
233f0 70 4f 70 2d 3e 70 32 3d 3d 30 20 7c 7c 20 70 4f  pOp->p2==0 || pO
23400 70 2d 3e 70 32 3d 3d 31 20 29 3b 0a 20 20 70 43  p->p2==1 );.  pC
23410 2d 3e 73 65 65 6b 48 69 74 20 3d 20 70 4f 70 2d  ->seekHit = pOp-
23420 3e 70 32 20 26 20 31 3b 0a 20 20 62 72 65 61 6b  >p2 & 1;.  break
23430 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
23440 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 50  Found P1 P2 P3 P
23450 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
23460 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
23470 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65  .** If P4==0 the
23480 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f  n register P3 ho
23490 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74  lds a blob const
234a0 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65  ructed by MakeRe
234b0 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e  cord.  If.** P4>
234c0 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
234d0 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
234e0 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
234f0 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70  that form an unp
23500 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e  acked.** record.
23510 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31  .**.** Cursor P1
23520 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20   is on an index 
23530 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72  btree.  If the r
23540 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64  ecord identified
23550 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a   by P3 and P4.**
23560 20 69 73 20 61 20 70 72 65 66 69 78 20 6f 66 20   is a prefix of 
23570 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20  any entry in P1 
23580 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d  then a jump is m
23590 61 64 65 20 74 6f 20 50 32 20 61 6e 64 0a 2a 2a  ade to P2 and.**
235a0 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e   P1 is left poin
235b0 74 69 6e 67 20 61 74 20 74 68 65 20 6d 61 74 63  ting at the matc
235c0 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a  hing entry..**.*
235d0 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  * This operation
235e0 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
235f0 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68  or in a state wh
23600 65 72 65 20 69 74 20 63 61 6e 20 62 65 0a 2a 2a  ere it can be.**
23610 20 61 64 76 61 6e 63 65 64 20 69 6e 20 74 68 65   advanced in the
23620 20 66 6f 72 77 61 72 64 20 64 69 72 65 63 74 69   forward directi
23630 6f 6e 2e 20 20 54 68 65 20 4e 65 78 74 20 69 6e  on.  The Next in
23640 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 77  struction will w
23650 6f 72 6b 2c 0a 2a 2a 20 62 75 74 20 6e 6f 74 20  ork,.** but not 
23660 74 68 65 20 50 72 65 76 20 69 6e 73 74 72 75 63  the Prev instruc
23670 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  tion..**.** See 
23680 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20  also: NotFound, 
23690 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 4e 6f 74 45  NoConflict, NotE
236a0 78 69 73 74 73 2e 20 53 65 65 6b 47 65 0a 2a 2f  xists. SeekGe.*/
236b0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46  ./* Opcode: NotF
236c0 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 50 34  ound P1 P2 P3 P4
236d0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
236e0 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
236f0 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e  ** If P4==0 then
23700 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c   register P3 hol
23710 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72  ds a blob constr
23720 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63  ucted by MakeRec
23730 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30  ord.  If.** P4>0
23740 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
23750 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f  3 is the first o
23760 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74  f P4 registers t
23770 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61  hat form an unpa
23780 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a  cked.** record..
23790 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31  ** .** Cursor P1
237a0 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20   is on an index 
237b0 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72  btree.  If the r
237c0 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64  ecord identified
237d0 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a   by P3 and P4.**
237e0 20 69 73 20 6e 6f 74 20 74 68 65 20 70 72 65 66   is not the pref
237f0 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20  ix of any entry 
23800 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d  in P1 then a jum
23810 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 2e  p is made to P2.
23820 20 20 49 66 20 50 31 20 0a 2a 2a 20 64 6f 65 73    If P1 .** does
23830 20 63 6f 6e 74 61 69 6e 20 61 6e 20 65 6e 74 72   contain an entr
23840 79 20 77 68 6f 73 65 20 70 72 65 66 69 78 20 6d  y whose prefix m
23850 61 74 63 68 65 73 20 74 68 65 20 50 33 2f 50 34  atches the P3/P4
23860 20 72 65 63 6f 72 64 20 74 68 65 6e 20 63 6f 6e   record then con
23870 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74 68  trol.** falls th
23880 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
23890 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 6e  t instruction an
238a0 64 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69  d P1 is left poi
238b0 6e 74 69 6e 67 20 61 74 20 74 68 65 0a 2a 2a 20  nting at the.** 
238c0 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a  matching entry..
238d0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61  **.** This opera
238e0 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20  tion leaves the 
238f0 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74  cursor in a stat
23900 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f  e where it canno
23910 74 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64  t be.** advanced
23920 20 69 6e 20 65 69 74 68 65 72 20 64 69 72 65 63   in either direc
23930 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20  tion.  In other 
23940 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20  words, the Next 
23950 61 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f  and Prev.** opco
23960 64 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20  des do not work 
23970 61 66 74 65 72 20 74 68 69 73 20 6f 70 65 72 61  after this opera
23980 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  tion..**.** See 
23990 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
239a0 45 78 69 73 74 73 2c 20 4e 6f 43 6f 6e 66 6c 69  Exists, NoConfli
239b0 63 74 2c 20 49 66 4e 6f 48 6f 70 65 0a 2a 2f 0a  ct, IfNoHope.*/.
239c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 48  /* Opcode: IfNoH
239d0 6f 70 65 20 50 31 20 50 32 20 50 33 20 50 34 20  ope P1 P2 P3 P4 
239e0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
239f0 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
23a00 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 69 73  * Register P3 is
23a10 20 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34   the first of P4
23a20 20 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20   registers that 
23a30 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
23a40 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a  .** record..**.*
23a50 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f  * Cursor P1 is o
23a60 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65  n an index btree
23a70 2e 20 20 49 66 20 74 68 65 20 73 65 65 6b 48 69  .  If the seekHi
23a80 74 20 66 6c 61 67 20 69 73 20 73 65 74 20 6f 6e  t flag is set on
23a90 20 50 31 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 69   P1, then.** thi
23aa0 73 20 6f 70 63 6f 64 65 20 69 73 20 61 20 6e 6f  s opcode is a no
23ab0 2d 6f 70 2e 20 20 42 75 74 20 69 66 20 74 68 65  -op.  But if the
23ac0 20 73 65 65 6b 48 69 74 20 66 6c 61 67 20 6f 66   seekHit flag of
23ad0 20 50 31 20 69 73 20 63 6c 65 61 72 2c 20 74 68   P1 is clear, th
23ae0 65 6e 0a 2a 2a 20 63 68 65 63 6b 20 74 6f 20 73  en.** check to s
23af0 65 65 20 69 66 20 74 68 65 72 65 20 69 73 20 61  ee if there is a
23b00 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74  ny entry in P1 t
23b10 68 61 74 20 6d 61 74 63 68 65 73 20 74 68 65 0a  hat matches the.
23b20 2a 2a 20 70 72 65 66 69 78 20 69 64 65 6e 74 69  ** prefix identi
23b30 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50  fied by P3 and P
23b40 34 2e 20 20 49 66 20 6e 6f 20 65 6e 74 72 79 20  4.  If no entry 
23b50 6d 61 74 63 68 65 73 20 74 68 65 20 70 72 65 66  matches the pref
23b60 69 78 2c 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 50  ix,.** jump to P
23b70 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66 61  2.  Otherwise fa
23b80 6c 6c 20 74 68 72 6f 75 67 68 2e 0a 2a 2a 0a 2a  ll through..**.*
23b90 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 62 65  * This opcode be
23ba0 68 61 76 65 73 20 6c 69 6b 65 20 4f 50 5f 4e 6f  haves like OP_No
23bb0 74 46 6f 75 6e 64 20 69 66 20 74 68 65 20 73 65  tFound if the se
23bc0 65 6b 48 69 74 0a 2a 2a 20 66 6c 61 67 20 69 73  ekHit.** flag is
23bd0 20 63 6c 65 61 72 20 61 6e 64 20 69 74 20 62 65   clear and it be
23be0 68 61 76 65 73 20 6c 69 6b 65 20 4f 50 5f 4e 6f  haves like OP_No
23bf0 6f 70 20 69 66 20 74 68 65 20 73 65 65 6b 48 69  op if the seekHi
23c00 74 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a  t flag is set..*
23c10 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
23c20 20 69 73 20 75 73 65 64 20 69 6e 20 49 4e 20 63   is used in IN c
23c30 6c 61 75 73 65 20 70 72 6f 63 65 73 73 69 6e 67  lause processing
23c40 20 66 6f 72 20 61 20 6d 75 6c 74 69 2d 63 6f 6c   for a multi-col
23c50 75 6d 6e 20 6b 65 79 2e 0a 2a 2a 20 49 66 20 61  umn key..** If a
23c60 6e 20 49 4e 20 63 6c 61 75 73 65 20 69 73 20 61  n IN clause is a
23c70 74 74 61 63 68 65 64 20 74 6f 20 61 6e 20 65 6c  ttached to an el
23c80 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6b 65 79  ement of the key
23c90 20 6f 74 68 65 72 20 74 68 61 6e 20 74 68 65 0a   other than the.
23ca0 2a 2a 20 6c 65 66 74 2d 6d 6f 73 74 20 65 6c 65  ** left-most ele
23cb0 6d 65 6e 74 2c 20 61 6e 64 20 69 66 20 74 68 65  ment, and if the
23cc0 72 65 20 61 72 65 20 6e 6f 20 6d 61 74 63 68 65  re are no matche
23cd0 73 20 6f 6e 20 74 68 65 20 6d 6f 73 74 20 72 65  s on the most re
23ce0 63 65 6e 74 0a 2a 2a 20 73 65 65 6b 20 6f 76 65  cent.** seek ove
23cf0 72 20 74 68 65 20 77 68 6f 6c 65 20 6b 65 79 2c  r the whole key,
23d00 20 74 68 65 6e 20 69 74 20 6d 69 67 68 74 20 62   then it might b
23d10 65 20 74 68 61 74 20 6f 6e 65 20 6f 66 20 74 68  e that one of th
23d20 65 20 6b 65 79 20 65 6c 65 6d 65 6e 74 0a 2a 2a  e key element.**
23d30 20 74 6f 20 74 68 65 20 6c 65 66 74 20 69 73 20   to the left is 
23d40 70 72 6f 68 69 62 69 74 69 6e 67 20 61 20 6d 61  prohibiting a ma
23d50 74 63 68 2c 20 61 6e 64 20 68 65 6e 63 65 20 74  tch, and hence t
23d60 68 65 72 65 20 69 73 20 22 6e 6f 20 68 6f 70 65  here is "no hope
23d70 22 20 6f 66 0a 2a 2a 20 61 6e 79 20 6d 61 74 63  " of.** any matc
23d80 68 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  h regardless of 
23d90 68 6f 77 20 6d 61 6e 79 20 49 4e 20 63 6c 61 75  how many IN clau
23da0 73 65 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20  se elements are 
23db0 63 68 65 63 6b 65 64 2e 0a 2a 2a 20 49 6e 20 73  checked..** In s
23dc0 75 63 68 20 61 20 63 61 73 65 2c 20 77 65 20 61  uch a case, we a
23dd0 62 61 6e 64 6f 6e 20 74 68 65 20 49 4e 20 63 6c  bandon the IN cl
23de0 61 75 73 65 20 73 65 61 72 63 68 20 65 61 72 6c  ause search earl
23df0 79 2c 20 75 73 69 6e 67 20 74 68 69 73 0a 2a 2a  y, using this.**
23e00 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 6f 70   opcode.  The op
23e10 63 6f 64 65 20 6e 61 6d 65 20 63 6f 6d 65 73 20  code name comes 
23e20 66 72 6f 6d 20 74 68 65 20 66 61 63 74 20 74 68  from the fact th
23e30 61 74 20 74 68 65 0a 2a 2a 20 6a 75 6d 70 20 69  at the.** jump i
23e40 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 72 65  s taken if there
23e50 20 69 73 20 22 6e 6f 20 68 6f 70 65 22 20 6f 66   is "no hope" of
23e60 20 61 63 68 69 65 76 69 6e 67 20 61 20 6d 61 74   achieving a mat
23e70 63 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ch..**.** See al
23e80 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65  so: NotFound, Se
23e90 65 6b 48 69 74 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  ekHit.*/./* Opco
23ea0 64 65 3a 20 4e 6f 43 6f 6e 66 6c 69 63 74 20 50  de: NoConflict P
23eb0 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
23ec0 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
23ed0 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
23ee0 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73  P4==0 then regis
23ef0 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62  ter P3 holds a b
23f00 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20  lob constructed 
23f10 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20  by MakeRecord.  
23f20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20  If.** P4>0 then 
23f30 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74  register P3 is t
23f40 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72  he first of P4 r
23f50 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f  egisters that fo
23f60 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a  rm an unpacked.*
23f70 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a  * record..** .**
23f80 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e   Cursor P1 is on
23f90 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e   an index btree.
23fa0 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20    If the record 
23fb0 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33  identified by P3
23fc0 20 61 6e 64 20 50 34 0a 2a 2a 20 63 6f 6e 74 61   and P4.** conta
23fd0 69 6e 73 20 61 6e 79 20 4e 55 4c 4c 20 76 61 6c  ins any NULL val
23fe0 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  ue, jump immedia
23ff0 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20  tely to P2.  If 
24000 61 6c 6c 20 74 65 72 6d 73 20 6f 66 20 74 68 65  all terms of the
24010 0a 2a 2a 20 72 65 63 6f 72 64 20 61 72 65 20 6e  .** record are n
24020 6f 74 2d 4e 55 4c 4c 20 74 68 65 6e 20 61 20 63  ot-NULL then a c
24030 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 74 6f 20  heck is done to 
24040 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61 6e 79  determine if any
24050 20 72 6f 77 20 69 6e 20 74 68 65 0a 2a 2a 20 50   row in the.** P
24060 31 20 69 6e 64 65 78 20 62 74 72 65 65 20 68 61  1 index btree ha
24070 73 20 61 20 6d 61 74 63 68 69 6e 67 20 6b 65 79  s a matching key
24080 20 70 72 65 66 69 78 2e 20 20 49 66 20 74 68 65   prefix.  If the
24090 72 65 20 61 72 65 20 6e 6f 20 6d 61 74 63 68 65  re are no matche
240a0 73 2c 20 6a 75 6d 70 0a 2a 2a 20 69 6d 6d 65 64  s, jump.** immed
240b0 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49  iately to P2.  I
240c0 66 20 74 68 65 72 65 20 69 73 20 61 20 6d 61 74  f there is a mat
240d0 63 68 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ch, fall through
240e0 20 61 6e 64 20 6c 65 61 76 65 20 74 68 65 20 50   and leave the P
240f0 31 0a 2a 2a 20 63 75 72 73 6f 72 20 70 6f 69 6e  1.** cursor poin
24100 74 69 6e 67 20 74 6f 20 74 68 65 20 6d 61 74 63  ting to the matc
24110 68 69 6e 67 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20  hing row..**.** 
24120 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 73  This opcode is s
24130 69 6d 69 6c 61 72 20 74 6f 20 4f 50 5f 4e 6f 74  imilar to OP_Not
24140 46 6f 75 6e 64 20 77 69 74 68 20 74 68 65 20 65  Found with the e
24150 78 63 65 70 74 69 6f 6e 73 20 74 68 61 74 20 74  xceptions that t
24160 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 69 73 20  he.** branch is 
24170 61 6c 77 61 79 73 20 74 61 6b 65 6e 20 69 66 20  always taken if 
24180 61 6e 79 20 70 61 72 74 20 6f 66 20 74 68 65 20  any part of the 
24190 73 65 61 72 63 68 20 6b 65 79 20 69 6e 70 75 74  search key input
241a0 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20   is NULL..**.** 
241b0 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c  This operation l
241c0 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
241d0 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72   in a state wher
241e0 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a  e it cannot be.*
241f0 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20 65 69  * advanced in ei
24200 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20  ther direction. 
24210 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
24220 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72   the Next and Pr
24230 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f  ev.** opcodes do
24240 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65 72 20   not work after 
24250 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a  this operation..
24260 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
24270 4e 6f 74 46 6f 75 6e 64 2c 20 46 6f 75 6e 64 2c  NotFound, Found,
24280 20 4e 6f 74 45 78 69 73 74 73 0a 2a 2f 0a 63 61   NotExists.*/.ca
24290 73 65 20 4f 50 5f 49 66 4e 6f 48 6f 70 65 3a 20  se OP_IfNoHope: 
242a0 7b 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69  {     /* jump, i
242b0 6e 33 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  n3 */.  VdbeCurs
242c0 6f 72 20 2a 70 43 3b 0a 20 20 61 73 73 65 72 74  or *pC;.  assert
242d0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
242e0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
242f0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
24300 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
24310 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
24320 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 73 65 65  );.  if( pC->see
24330 6b 48 69 74 20 29 20 62 72 65 61 6b 3b 0a 20 20  kHit ) break;.  
24340 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
24350 69 6e 74 6f 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64  into OP_NotFound
24360 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50 5f 4e 6f   */.}.case OP_No
24370 43 6f 6e 66 6c 69 63 74 3a 20 20 20 20 20 2f 2a  Conflict:     /*
24380 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61   jump, in3 */.ca
24390 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20  se OP_NotFound: 
243a0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
243b0 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6f  n3 */.case OP_Fo
243c0 75 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  und: {        /*
243d0 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
243e0 69 6e 74 20 61 6c 72 65 61 64 79 45 78 69 73 74  int alreadyExist
243f0 73 3b 0a 20 20 69 6e 74 20 74 61 6b 65 4a 75 6d  s;.  int takeJum
24400 70 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 20 20 56  p;.  int ii;.  V
24410 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
24420 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61   int res;.  Unpa
24430 63 6b 65 64 52 65 63 6f 72 64 20 2a 70 46 72 65  ckedRecord *pFre
24440 65 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  e;.  UnpackedRec
24450 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b 0a 20 20  ord *pIdxKey;.  
24460 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
24470 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
24480 5f 54 45 53 54 0a 20 20 69 66 28 20 70 4f 70 2d  _TEST.  if( pOp-
24490 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 6f 43 6f  >opcode!=OP_NoCo
244a0 6e 66 6c 69 63 74 20 29 20 73 71 6c 69 74 65 33  nflict ) sqlite3
244b0 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a  _found_count++;.
244c0 23 65 6e 64 69 66 0a 0a 20 20 61 73 73 65 72 74  #endif..  assert
244d0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
244e0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
244f0 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
24500 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
24510 49 4e 54 33 32 20 29 3b 0a 20 20 70 43 20 3d 20  INT32 );.  pC = 
24520 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
24530 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
24540 3d 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  =0 );.#ifdef SQL
24550 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e  ITE_DEBUG.  pC->
24560 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70  seekOp = pOp->op
24570 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20 70  code;.#endif.  p
24580 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
24590 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p3];.  assert( 
245a0 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
245b0 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
245c0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e   assert( pC->uc.
245d0 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
245e0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
245f0 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20  ble==0 );.  if( 
24600 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a 20  pOp->p4.i>0 ){. 
24610 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20     r.pKeyInfo = 
24620 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
24630 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31    r.nField = (u1
24640 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20  6)pOp->p4.i;.   
24650 20 72 2e 61 4d 65 6d 20 3d 20 70 49 6e 33 3b 0a   r.aMem = pIn3;.
24660 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
24670 42 55 47 0a 20 20 20 20 66 6f 72 28 69 69 3d 30  BUG.    for(ii=0
24680 3b 20 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69  ; ii<r.nField; i
24690 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65  i++){.      asse
246a0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
246b0 72 2e 61 4d 65 6d 5b 69 69 5d 29 20 29 3b 0a 20  r.aMem[ii]) );. 
246c0 20 20 20 20 20 61 73 73 65 72 74 28 20 28 72 2e       assert( (r.
246d0 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26  aMem[ii].flags &
246e0 20 4d 45 4d 5f 5a 65 72 6f 29 3d 3d 30 20 7c 7c   MEM_Zero)==0 ||
246f0 20 72 2e 61 4d 65 6d 5b 69 69 5d 2e 6e 3d 3d 30   r.aMem[ii].n==0
24700 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 69 69   );.      if( ii
24710 20 29 20 52 45 47 49 53 54 45 52 5f 54 52 41 43   ) REGISTER_TRAC
24720 45 28 70 4f 70 2d 3e 70 33 2b 69 69 2c 20 26 72  E(pOp->p3+ii, &r
24730 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 20 20 20 20  .aMem[ii]);.    
24740 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 70 49 64  }.#endif.    pId
24750 78 4b 65 79 20 3d 20 26 72 3b 0a 20 20 20 20 70  xKey = &r;.    p
24760 46 72 65 65 20 3d 20 30 3b 0a 20 20 7d 65 6c 73  Free = 0;.  }els
24770 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
24780 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
24790 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 72 63 20  _Blob );.    rc 
247a0 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  = ExpandBlob(pIn
247b0 33 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  3);.    assert( 
247c0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
247d0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45   rc==SQLITE_NOME
247e0 4d 20 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20  M );.    if( rc 
247f0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
24800 20 20 20 70 46 72 65 65 20 3d 20 70 49 64 78 4b     pFree = pIdxK
24810 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  ey = sqlite3Vdbe
24820 41 6c 6c 6f 63 55 6e 70 61 63 6b 65 64 52 65 63  AllocUnpackedRec
24830 6f 72 64 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  ord(pC->pKeyInfo
24840 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64 78 4b  );.    if( pIdxK
24850 65 79 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  ey==0 ) goto no_
24860 6d 65 6d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  mem;.    sqlite3
24870 56 64 62 65 52 65 63 6f 72 64 55 6e 70 61 63 6b  VdbeRecordUnpack
24880 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70  (pC->pKeyInfo, p
24890 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c  In3->n, pIn3->z,
248a0 20 70 49 64 78 4b 65 79 29 3b 0a 20 20 7d 0a 20   pIdxKey);.  }. 
248b0 20 70 49 64 78 4b 65 79 2d 3e 64 65 66 61 75 6c   pIdxKey->defaul
248c0 74 5f 72 63 20 3d 20 30 3b 0a 20 20 74 61 6b 65  t_rc = 0;.  take
248d0 4a 75 6d 70 20 3d 20 30 3b 0a 20 20 69 66 28 20  Jump = 0;.  if( 
248e0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
248f0 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 7b 0a 20 20  NoConflict ){.  
24900 20 20 2f 2a 20 46 6f 72 20 74 68 65 20 4f 50 5f    /* For the OP_
24910 4e 6f 43 6f 6e 66 6c 69 63 74 20 6f 70 63 6f 64  NoConflict opcod
24920 65 2c 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  e, take the jump
24930 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 0a 20   if any of the. 
24940 20 20 20 2a 2a 20 69 6e 70 75 74 20 66 69 65 6c     ** input fiel
24950 64 73 20 61 72 65 20 4e 55 4c 4c 2c 20 73 69 6e  ds are NULL, sin
24960 63 65 20 61 6e 79 20 6b 65 79 20 77 69 74 68 20  ce any key with 
24970 61 20 4e 55 4c 4c 20 77 69 6c 6c 20 6e 6f 74 0a  a NULL will not.
24980 20 20 20 20 2a 2a 20 63 6f 6e 66 6c 69 63 74 20      ** conflict 
24990 2a 2f 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b  */.    for(ii=0;
249a0 20 69 69 3c 70 49 64 78 4b 65 79 2d 3e 6e 46 69   ii<pIdxKey->nFi
249b0 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20  eld; ii++){.    
249c0 20 20 69 66 28 20 70 49 64 78 4b 65 79 2d 3e 61    if( pIdxKey->a
249d0 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20  Mem[ii].flags & 
249e0 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
249f0 20 20 20 20 74 61 6b 65 4a 75 6d 70 20 3d 20 31      takeJump = 1
24a00 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
24a10 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
24a20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65   }.  rc = sqlite
24a30 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
24a40 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72  cked(pC->uc.pCur
24a50 73 6f 72 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c  sor, pIdxKey, 0,
24a60 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28   0, &res);.  if(
24a70 20 70 46 72 65 65 20 29 20 73 71 6c 69 74 65 33   pFree ) sqlite3
24a80 44 62 46 72 65 65 4e 4e 28 64 62 2c 20 70 46 72  DbFreeNN(db, pFr
24a90 65 65 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53  ee);.  if( rc!=S
24aa0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
24ab0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
24ac0 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70  o_error;.  }.  p
24ad0 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  C->seekResult = 
24ae0 72 65 73 3b 0a 20 20 61 6c 72 65 61 64 79 45 78  res;.  alreadyEx
24af0 69 73 74 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b  ists = (res==0);
24b00 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
24b10 20 31 2d 61 6c 72 65 61 64 79 45 78 69 73 74 73   1-alreadyExists
24b20 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64  ;.  pC->deferred
24b30 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43  Moveto = 0;.  pC
24b40 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
24b50 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69  CACHE_STALE;.  i
24b60 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
24b70 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20  OP_Found ){.    
24b80 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
24b90 61 6c 72 65 61 64 79 45 78 69 73 74 73 21 3d 30  alreadyExists!=0
24ba0 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 61 6c 72  ,2);.    if( alr
24bb0 65 61 64 79 45 78 69 73 74 73 20 29 20 67 6f 74  eadyExists ) got
24bc0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
24bd0 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42  }else{.    VdbeB
24be0 72 61 6e 63 68 54 61 6b 65 6e 28 74 61 6b 65 4a  ranchTaken(takeJ
24bf0 75 6d 70 7c 7c 61 6c 72 65 61 64 79 45 78 69 73  ump||alreadyExis
24c00 74 73 3d 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66  ts==0,2);.    if
24c10 28 20 74 61 6b 65 4a 75 6d 70 20 7c 7c 20 21 61  ( takeJump || !a
24c20 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20 67  lreadyExists ) g
24c30 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
24c40 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
24c50 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 52  /* Opcode: SeekR
24c60 6f 77 69 64 20 50 31 20 50 32 20 50 33 20 2a 20  owid P1 P2 P3 * 
24c70 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
24c80 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a  ntkey=r[P3].**.*
24c90 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65  * P1 is the inde
24ca0 78 20 6f 66 20 61 20 63 75 72 73 6f 72 20 6f 70  x of a cursor op
24cb0 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61 62  en on an SQL tab
24cc0 6c 65 20 62 74 72 65 65 20 28 77 69 74 68 20 69  le btree (with i
24cd0 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29 2e  nteger.** keys).
24ce0 20 20 49 66 20 72 65 67 69 73 74 65 72 20 50 33    If register P3
24cf0 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69   does not contai
24d00 6e 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20  n an integer or 
24d10 69 66 20 50 31 20 64 6f 65 73 20 6e 6f 74 0a 2a  if P1 does not.*
24d20 2a 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f  * contain a reco
24d30 72 64 20 77 69 74 68 20 72 6f 77 69 64 20 50 33  rd with rowid P3
24d40 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64   then jump immed
24d50 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 0a  iately to P2.  .
24d60 2a 2a 20 4f 72 2c 20 69 66 20 50 32 20 69 73 20  ** Or, if P2 is 
24d70 30 2c 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49  0, raise an SQLI
24d80 54 45 5f 43 4f 52 52 55 50 54 20 65 72 72 6f 72  TE_CORRUPT error
24d90 2e 20 49 66 20 50 31 20 64 6f 65 73 20 63 6f 6e  . If P1 does con
24da0 74 61 69 6e 0a 2a 2a 20 61 20 72 65 63 6f 72 64  tain.** a record
24db0 20 77 69 74 68 20 72 6f 77 69 64 20 50 33 20 74   with rowid P3 t
24dc0 68 65 6e 20 0a 2a 2a 20 6c 65 61 76 65 20 74 68  hen .** leave th
24dd0 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e  e cursor pointin
24de0 67 20 61 74 20 74 68 61 74 20 72 65 63 6f 72 64  g at that record
24df0 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67   and fall throug
24e00 68 20 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a 2a  h to the next.**
24e10 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
24e20 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 45 78  .** The OP_NotEx
24e30 69 73 74 73 20 6f 70 63 6f 64 65 20 70 65 72 66  ists opcode perf
24e40 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70  orms the same op
24e50 65 72 61 74 69 6f 6e 2c 20 62 75 74 20 77 69 74  eration, but wit
24e60 68 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 0a 2a  h OP_NotExists.*
24e70 2a 20 74 68 65 20 50 33 20 72 65 67 69 73 74 65  * the P3 registe
24e80 72 20 6d 75 73 74 20 62 65 20 67 75 61 72 61 6e  r must be guaran
24e90 74 65 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20  teed to contain 
24ea0 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
24eb0 2e 20 20 57 69 74 68 20 74 68 69 73 0a 2a 2a 20  .  With this.** 
24ec0 6f 70 63 6f 64 65 2c 20 72 65 67 69 73 74 65 72  opcode, register
24ed0 20 50 33 20 6d 69 67 68 74 20 6e 6f 74 20 63 6f   P3 might not co
24ee0 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72  ntain an integer
24ef0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e  ..**.** The OP_N
24f00 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70  otFound opcode p
24f10 65 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65  erforms the same
24f20 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e   operation on in
24f30 64 65 78 20 62 74 72 65 65 73 0a 2a 2a 20 28 77  dex btrees.** (w
24f40 69 74 68 20 61 72 62 69 74 72 61 72 79 20 6d 75  ith arbitrary mu
24f50 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e  lti-value keys).
24f60 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
24f70 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
24f80 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20  rsor in a state 
24f90 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20  where it cannot 
24fa0 62 65 20 61 64 76 61 6e 63 65 64 0a 2a 2a 20 69  be advanced.** i
24fb0 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74 69  n either directi
24fc0 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  on.  In other wo
24fd0 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e  rds, the Next an
24fe0 64 20 50 72 65 76 20 6f 70 63 6f 64 65 73 20 77  d Prev opcodes w
24ff0 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20  ill.** not work 
25000 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 69 73 20 6f  following this o
25010 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  pcode..**.** See
25020 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
25030 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69  tFound, NoConfli
25040 63 74 2c 20 53 65 65 6b 52 6f 77 69 64 0a 2a 2f  ct, SeekRowid.*/
25050 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45  ./* Opcode: NotE
25060 78 69 73 74 73 20 50 31 20 50 32 20 50 33 20 2a  xists P1 P2 P3 *
25070 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
25080 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a  intkey=r[P3].**.
25090 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64  ** P1 is the ind
250a0 65 78 20 6f 66 20 61 20 63 75 72 73 6f 72 20 6f  ex of a cursor o
250b0 70 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61  pen on an SQL ta
250c0 62 6c 65 20 62 74 72 65 65 20 28 77 69 74 68 20  ble btree (with 
250d0 69 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29  integer.** keys)
250e0 2e 20 20 50 33 20 69 73 20 61 6e 20 69 6e 74 65  .  P3 is an inte
250f0 67 65 72 20 72 6f 77 69 64 2e 20 20 49 66 20 50  ger rowid.  If P
25100 31 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61  1 does not conta
25110 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74 68  in a record with
25120 0a 2a 2a 20 72 6f 77 69 64 20 50 33 20 74 68 65  .** rowid P3 the
25130 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  n jump immediate
25140 6c 79 20 74 6f 20 50 32 2e 20 20 4f 72 2c 20 69  ly to P2.  Or, i
25150 66 20 50 32 20 69 73 20 30 2c 20 72 61 69 73 65  f P2 is 0, raise
25160 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 43 4f   an.** SQLITE_CO
25170 52 52 55 50 54 20 65 72 72 6f 72 2e 20 49 66 20  RRUPT error. If 
25180 50 31 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20  P1 does contain 
25190 61 20 72 65 63 6f 72 64 20 77 69 74 68 20 72 6f  a record with ro
251a0 77 69 64 20 50 33 20 74 68 65 6e 20 0a 2a 2a 20  wid P3 then .** 
251b0 6c 65 61 76 65 20 74 68 65 20 63 75 72 73 6f 72  leave the cursor
251c0 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 61   pointing at tha
251d0 74 20 72 65 63 6f 72 64 20 61 6e 64 20 66 61 6c  t record and fal
251e0 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
251f0 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63   next.** instruc
25200 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  tion..**.** The 
25210 4f 50 5f 53 65 65 6b 52 6f 77 69 64 20 6f 70 63  OP_SeekRowid opc
25220 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65  ode performs the
25230 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20   same operation 
25240 62 75 74 20 61 6c 73 6f 20 61 6c 6c 6f 77 73 20  but also allows 
25250 74 68 65 0a 2a 2a 20 50 33 20 72 65 67 69 73 74  the.** P3 regist
25260 65 72 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61 20  er to contain a 
25270 6e 6f 6e 2d 69 6e 74 65 67 65 72 20 76 61 6c 75  non-integer valu
25280 65 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73 65  e, in which case
25290 20 74 68 65 20 6a 75 6d 70 20 69 73 0a 2a 2a 20   the jump is.** 
252a0 61 6c 77 61 79 73 20 74 61 6b 65 6e 2e 20 20 54  always taken.  T
252b0 68 69 73 20 6f 70 63 6f 64 65 20 72 65 71 75 69  his opcode requi
252c0 72 65 73 20 74 68 61 74 20 50 33 20 61 6c 77 61  res that P3 alwa
252d0 79 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  ys contain an in
252e0 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  teger..**.** The
252f0 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70 63   OP_NotFound opc
25300 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65  ode performs the
25310 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20   same operation 
25320 6f 6e 20 69 6e 64 65 78 20 62 74 72 65 65 73 0a  on index btrees.
25330 2a 2a 20 28 77 69 74 68 20 61 72 62 69 74 72 61  ** (with arbitra
25340 72 79 20 6d 75 6c 74 69 2d 76 61 6c 75 65 20 6b  ry multi-value k
25350 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  eys)..**.** This
25360 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74   opcode leaves t
25370 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73  he cursor in a s
25380 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63 61  tate where it ca
25390 6e 6e 6f 74 20 62 65 20 61 64 76 61 6e 63 65 64  nnot be advanced
253a0 0a 2a 2a 20 69 6e 20 65 69 74 68 65 72 20 64 69  .** in either di
253b0 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68  rection.  In oth
253c0 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65  er words, the Ne
253d0 78 74 20 61 6e 64 20 50 72 65 76 20 6f 70 63 6f  xt and Prev opco
253e0 64 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20  des will.** not 
253f0 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e 67 20 74  work following t
25400 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  his opcode..**.*
25410 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
25420 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43  d, NotFound, NoC
25430 6f 6e 66 6c 69 63 74 2c 20 53 65 65 6b 52 6f 77  onflict, SeekRow
25440 69 64 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  id.*/.case OP_Se
25450 65 6b 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20  ekRowid: {      
25460 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
25470 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
25480 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
25490 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
254a0 3b 0a 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20  ;.  u64 iKey;.. 
254b0 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
254c0 70 2d 3e 70 33 5d 3b 0a 20 20 74 65 73 74 63 61  p->p3];.  testca
254d0 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  se( pIn3->flags 
254e0 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 74  & MEM_Int );.  t
254f0 65 73 74 63 61 73 65 28 20 70 49 6e 33 2d 3e 66  estcase( pIn3->f
25500 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 52 65  lags & MEM_IntRe
25510 61 6c 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  al );.  if( (pIn
25520 33 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  3->flags & (MEM_
25530 49 6e 74 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c 29  Int|MEM_IntReal)
25540 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 4d  )==0 ){.    /* M
25550 61 6b 65 20 73 75 72 65 20 70 49 6e 33 2d 3e 75  ake sure pIn3->u
25560 2e 69 20 63 6f 6e 74 61 69 6e 73 20 61 20 76 61  .i contains a va
25570 6c 69 64 20 69 6e 74 65 67 65 72 20 72 65 70 72  lid integer repr
25580 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 0a 20 20  esentation of.  
25590 20 20 2a 2a 20 74 68 65 20 6b 65 79 20 76 61 6c    ** the key val
255a0 75 65 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 63  ue, but do not c
255b0 68 61 6e 67 65 20 74 68 65 20 64 61 74 61 74 79  hange the dataty
255c0 70 65 20 6f 66 20 74 68 65 20 72 65 67 69 73 74  pe of the regist
255d0 65 72 2c 20 61 73 0a 20 20 20 20 2a 2a 20 6f 74  er, as.    ** ot
255e0 68 65 72 20 70 61 72 74 73 20 6f 66 20 74 68 65  her parts of the
255f0 20 70 65 72 70 61 72 65 64 20 73 74 61 74 65 6d   perpared statem
25600 65 6e 74 20 6d 69 67 68 74 20 62 65 20 64 65 70  ent might be dep
25610 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a 20 20  ending on the.  
25620 20 20 2a 2a 20 63 75 72 72 65 6e 74 20 64 61 74    ** current dat
25630 61 74 79 70 65 2e 20 2a 2f 0a 20 20 20 20 75 31  atype. */.    u1
25640 36 20 6f 72 69 67 46 6c 61 67 73 20 3d 20 70 49  6 origFlags = pI
25650 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 20 20 69  n3->flags;.    i
25660 6e 74 20 69 73 4e 6f 74 49 6e 74 3b 0a 20 20 20  nt isNotInt;.   
25670 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
25680 49 6e 33 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f  In3, SQLITE_AFF_
25690 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e  NUMERIC, encodin
256a0 67 29 3b 0a 20 20 20 20 69 73 4e 6f 74 49 6e 74  g);.    isNotInt
256b0 20 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20   = (pIn3->flags 
256c0 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 3b 0a 20  & MEM_Int)==0;. 
256d0 20 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 3d     pIn3->flags =
256e0 20 6f 72 69 67 46 6c 61 67 73 3b 0a 20 20 20 20   origFlags;.    
256f0 69 66 28 20 69 73 4e 6f 74 49 6e 74 20 29 20 67  if( isNotInt ) g
25700 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
25710 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68    }.  /* Fall th
25720 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 4e 6f  rough into OP_No
25730 74 45 78 69 73 74 73 20 2a 2f 0a 63 61 73 65 20  tExists */.case 
25740 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20 20 20  OP_NotExists:   
25750 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
25760 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20 3d 20  in3 */.  pIn3 = 
25770 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
25780 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 33 2d    assert( (pIn3-
25790 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
257a0 29 21 3d 30 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  )!=0 || pOp->opc
257b0 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 52 6f 77 69  ode==OP_SeekRowi
257c0 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  d );.  assert( p
257d0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
257e0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
257f0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
25800 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
25810 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
25820 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
25830 42 55 47 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f  BUG.  if( pOp->o
25840 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 52 6f  pcode==OP_SeekRo
25850 77 69 64 20 29 20 70 43 2d 3e 73 65 65 6b 4f 70  wid ) pC->seekOp
25860 20 3d 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64 3b   = OP_SeekRowid;
25870 0a 23 65 6e 64 69 66 0a 20 20 61 73 73 65 72 74  .#endif.  assert
25880 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
25890 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
258a0 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
258b0 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72 73  _BTREE );.  pCrs
258c0 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  r = pC->uc.pCurs
258d0 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  or;.  assert( pC
258e0 72 73 72 21 3d 30 20 29 3b 0a 20 20 72 65 73 20  rsr!=0 );.  res 
258f0 3d 20 30 3b 0a 20 20 69 4b 65 79 20 3d 20 70 49  = 0;.  iKey = pI
25900 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72 63 20 3d 20  n3->u.i;.  rc = 
25910 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
25920 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72  toUnpacked(pCrsr
25930 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20 26 72  , 0, iKey, 0, &r
25940 65 73 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72  es);.  assert( r
25950 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
25960 72 65 73 3d 3d 30 20 29 3b 0a 20 20 70 43 2d 3e  res==0 );.  pC->
25970 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 69  movetoTarget = i
25980 4b 65 79 3b 20 20 2f 2a 20 55 73 65 64 20 62 79  Key;  /* Used by
25990 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 20 20   OP_Delete */.  
259a0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b  pC->nullRow = 0;
259b0 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
259c0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
259d0 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64  ;.  pC->deferred
259e0 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 56 64  Moveto = 0;.  Vd
259f0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
25a00 73 21 3d 30 2c 32 29 3b 0a 20 20 70 43 2d 3e 73  s!=0,2);.  pC->s
25a10 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65 73 3b  eekResult = res;
25a20 0a 20 20 69 66 28 20 72 65 73 21 3d 30 20 29 7b  .  if( res!=0 ){
25a30 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d  .    assert( rc=
25a40 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20  =SQLITE_OK );.  
25a50 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30    if( pOp->p2==0
25a60 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
25a70 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
25a80 50 54 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  PT;.    }else{. 
25a90 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74       goto jump_t
25aa0 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  o_p2;.    }.  }.
25ab0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
25ac0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
25ad0 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  or;.  break;.}..
25ae0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75 65  /* Opcode: Seque
25af0 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  nce P1 P2 * * *.
25b00 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
25b10 32 5d 3d 63 75 72 73 6f 72 5b 50 31 5d 2e 63 74  2]=cursor[P1].ct
25b20 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74  r++.**.** Find t
25b30 68 65 20 6e 65 78 74 20 61 76 61 69 6c 61 62 6c  he next availabl
25b40 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65  e sequence numbe
25b50 72 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e  r for cursor P1.
25b60 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 73 65  .** Write the se
25b70 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 69 6e  quence number in
25b80 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
25b90 2a 2a 20 54 68 65 20 73 65 71 75 65 6e 63 65 20  ** The sequence 
25ba0 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65 20 63 75  number on the cu
25bb0 72 73 6f 72 20 69 73 20 69 6e 63 72 65 6d 65 6e  rsor is incremen
25bc0 74 65 64 20 61 66 74 65 72 20 74 68 69 73 0a 2a  ted after this.*
25bd0 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  * instruction.  
25be0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75  .*/.case OP_Sequ
25bf0 65 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20 20  ence: {         
25c00 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61    /* out2 */.  a
25c10 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
25c20 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
25c30 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
25c40 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ert( p->apCsr[pO
25c50 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20 20 61  p->p1]!=0 );.  a
25c60 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b  ssert( p->apCsr[
25c70 70 4f 70 2d 3e 70 31 5d 2d 3e 65 43 75 72 54 79  pOp->p1]->eCurTy
25c80 70 65 21 3d 43 55 52 54 59 50 45 5f 56 54 41 42  pe!=CURTYPE_VTAB
25c90 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74   );.  pOut = out
25ca0 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
25cb0 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  Op);.  pOut->u.i
25cc0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
25cd0 3e 70 31 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b  >p1]->seqCount++
25ce0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  ;.  break;.}.../
25cf0 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 77 52 6f 77  * Opcode: NewRow
25d00 69 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  id P1 P2 P3 * *.
25d10 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
25d20 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 47  2]=rowid.**.** G
25d30 65 74 20 61 20 6e 65 77 20 69 6e 74 65 67 65 72  et a new integer
25d40 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28   record number (
25d50 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22 29 20 75  a.k.a "rowid") u
25d60 73 65 64 20 61 73 20 74 68 65 20 6b 65 79 20 74  sed as the key t
25d70 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68  o a table..** Th
25d80 65 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  e record number 
25d90 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c  is not previousl
25da0 79 20 75 73 65 64 20 61 73 20 61 20 6b 65 79 20  y used as a key 
25db0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  in the database.
25dc0 2a 2a 20 74 61 62 6c 65 20 74 68 61 74 20 63 75  ** table that cu
25dd0 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74  rsor P1 points t
25de0 6f 2e 20 20 54 68 65 20 6e 65 77 20 72 65 63 6f  o.  The new reco
25df0 72 64 20 6e 75 6d 62 65 72 20 69 73 20 77 72 69  rd number is wri
25e00 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74 65 6e 20  tten.** written 
25e10 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
25e20 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30 20 74 68  **.** If P3>0 th
25e30 65 6e 20 50 33 20 69 73 20 61 20 72 65 67 69 73  en P3 is a regis
25e40 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20  ter in the root 
25e50 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56 44  frame of this VD
25e60 42 45 20 74 68 61 74 20 68 6f 6c 64 73 20 0a 2a  BE that holds .*
25e70 2a 20 74 68 65 20 6c 61 72 67 65 73 74 20 70 72  * the largest pr
25e80 65 76 69 6f 75 73 6c 79 20 67 65 6e 65 72 61 74  eviously generat
25e90 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  ed record number
25ea0 2e 20 4e 6f 20 6e 65 77 20 72 65 63 6f 72 64 20  . No new record 
25eb0 6e 75 6d 62 65 72 73 20 61 72 65 0a 2a 2a 20 61  numbers are.** a
25ec0 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c 65 73  llowed to be les
25ed0 73 20 74 68 61 6e 20 74 68 69 73 20 76 61 6c 75  s than this valu
25ee0 65 2e 20 57 68 65 6e 20 74 68 69 73 20 76 61 6c  e. When this val
25ef0 75 65 20 72 65 61 63 68 65 73 20 69 74 73 20 6d  ue reaches its m
25f00 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61 6e 20 53  aximum, .** an S
25f10 51 4c 49 54 45 5f 46 55 4c 4c 20 65 72 72 6f 72  QLITE_FULL error
25f20 20 69 73 20 67 65 6e 65 72 61 74 65 64 2e 20 54   is generated. T
25f30 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20 69  he P3 register i
25f40 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74  s updated with t
25f50 68 65 20 27 0a 2a 2a 20 67 65 6e 65 72 61 74 65  he '.** generate
25f60 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e  d record number.
25f70 20 54 68 69 73 20 50 33 20 6d 65 63 68 61 6e 69   This P3 mechani
25f80 73 6d 20 69 73 20 75 73 65 64 20 74 6f 20 68 65  sm is used to he
25f90 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65  lp implement the
25fa0 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  .** AUTOINCREMEN
25fb0 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61  T feature..*/.ca
25fc0 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64 3a 20  se OP_NewRowid: 
25fd0 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
25fe0 75 74 32 20 2a 2f 0a 20 20 69 36 34 20 76 3b 20  ut2 */.  i64 v; 
25ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26000 2f 2a 20 54 68 65 20 6e 65 77 20 72 6f 77 69 64  /* The new rowid
26010 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
26020 20 2a 70 43 3b 20 20 20 20 20 20 20 20 2f 2a 20   *pC;        /* 
26030 43 75 72 73 6f 72 20 6f 66 20 74 61 62 6c 65 20  Cursor of table 
26040 74 6f 20 67 65 74 20 74 68 65 20 6e 65 77 20 72  to get the new r
26050 6f 77 69 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65  owid */.  int re
26060 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
26070 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 61 6e   /* Result of an
26080 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
26090 74 28 29 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74  t() */.  int cnt
260a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
260b0 2f 2a 20 43 6f 75 6e 74 65 72 20 74 6f 20 6c 69  /* Counter to li
260c0 6d 69 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  mit the number o
260d0 66 20 73 65 61 72 63 68 65 73 20 2a 2f 0a 20 20  f searches */.  
260e0 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20  Mem *pMem;      
260f0 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
26100 65 72 20 68 6f 6c 64 69 6e 67 20 6c 61 72 67 65  er holding large
26110 73 74 20 72 6f 77 69 64 20 66 6f 72 20 41 55 54  st rowid for AUT
26120 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20  OINCREMENT */.  
26130 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
26140 65 3b 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 66  e;     /* Root f
26150 72 61 6d 65 20 6f 66 20 56 44 42 45 20 2a 2f 0a  rame of VDBE */.
26160 0a 20 20 76 20 3d 20 30 3b 0a 20 20 72 65 73 20  .  v = 0;.  res 
26170 3d 20 30 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  = 0;.  pOut = ou
26180 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
26190 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20  pOp);.  assert( 
261a0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
261b0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
261c0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
261d0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
261e0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
261f0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
26200 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65  sTable );.  asse
26210 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
26220 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
26230 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
26240 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29  >uc.pCursor!=0 )
26250 3b 0a 20 20 7b 0a 20 20 20 20 2f 2a 20 54 68 65  ;.  {.    /* The
26260 20 6e 65 78 74 20 72 6f 77 69 64 20 6f 72 20 72   next rowid or r
26270 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 64 69  ecord number (di
26280 66 66 65 72 65 6e 74 20 74 65 72 6d 73 20 66 6f  fferent terms fo
26290 72 20 74 68 65 20 73 61 6d 65 0a 20 20 20 20 2a  r the same.    *
262a0 2a 20 74 68 69 6e 67 29 20 69 73 20 6f 62 74 61  * thing) is obta
262b0 69 6e 65 64 20 69 6e 20 61 20 74 77 6f 2d 73 74  ined in a two-st
262c0 65 70 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20  ep algorithm..  
262d0 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46 69 72 73    **.    ** Firs
262e0 74 20 77 65 20 61 74 74 65 6d 70 74 20 74 6f 20  t we attempt to 
262f0 66 69 6e 64 20 74 68 65 20 6c 61 72 67 65 73 74  find the largest
26300 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20   existing rowid 
26310 61 6e 64 20 61 64 64 20 6f 6e 65 0a 20 20 20 20  and add one.    
26320 2a 2a 20 74 6f 20 74 68 61 74 2e 20 20 42 75 74  ** to that.  But
26330 20 69 66 20 74 68 65 20 6c 61 72 67 65 73 74 20   if the largest 
26340 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20 69  existing rowid i
26350 73 20 61 6c 72 65 61 64 79 20 74 68 65 20 6d 61  s already the ma
26360 78 69 6d 75 6d 0a 20 20 20 20 2a 2a 20 70 6f 73  ximum.    ** pos
26370 69 74 69 76 65 20 69 6e 74 65 67 65 72 2c 20 77  itive integer, w
26380 65 20 68 61 76 65 20 74 6f 20 66 61 6c 6c 20 74  e have to fall t
26390 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 73 65  hrough to the se
263a0 63 6f 6e 64 0a 20 20 20 20 2a 2a 20 70 72 6f 62  cond.    ** prob
263b0 61 62 69 6c 69 73 74 69 63 20 61 6c 67 6f 72 69  abilistic algori
263c0 74 68 6d 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  thm.    **.    *
263d0 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 61 6c 67  * The second alg
263e0 6f 72 69 74 68 6d 20 69 73 20 74 6f 20 73 65 6c  orithm is to sel
263f0 65 63 74 20 61 20 72 6f 77 69 64 20 61 74 20 72  ect a rowid at r
26400 61 6e 64 6f 6d 20 61 6e 64 20 73 65 65 20 69 66  andom and see if
26410 0a 20 20 20 20 2a 2a 20 69 74 20 61 6c 72 65 61  .    ** it alrea
26420 64 79 20 65 78 69 73 74 73 20 69 6e 20 74 68 65  dy exists in the
26430 20 74 61 62 6c 65 2e 20 20 49 66 20 69 74 20 64   table.  If it d
26440 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 77  oes not exist, w
26450 65 20 68 61 76 65 0a 20 20 20 20 2a 2a 20 73 75  e have.    ** su
26460 63 63 65 65 64 65 64 2e 20 20 49 66 20 74 68 65  cceeded.  If the
26470 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 64 6f   random rowid do
26480 65 73 20 65 78 69 73 74 2c 20 77 65 20 73 65 6c  es exist, we sel
26490 65 63 74 20 61 20 6e 65 77 20 6f 6e 65 0a 20 20  ect a new one.  
264a0 20 20 2a 2a 20 61 6e 64 20 74 72 79 20 61 67 61    ** and try aga
264b0 69 6e 2c 20 75 70 20 74 6f 20 31 30 30 20 74 69  in, up to 100 ti
264c0 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  mes..    */.    
264d0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
264e0 62 6c 65 20 29 3b 0a 0a 23 69 66 64 65 66 20 53  ble );..#ifdef S
264f0 51 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f 57 49  QLITE_32BIT_ROWI
26500 44 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58  D.#   define MAX
26510 5f 52 4f 57 49 44 20 30 78 37 66 66 66 66 66 66  _ROWID 0x7ffffff
26520 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53  f.#else.    /* S
26530 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f  ome compilers co
26540 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e  mplain about con
26550 73 74 61 6e 74 73 20 6f 66 20 74 68 65 20 66 6f  stants of the fo
26560 72 6d 20 30 78 37 66 66 66 66 66 66 66 66 66 66  rm 0x7ffffffffff
26570 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74  fffff..    ** Ot
26580 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62  hers complain ab
26590 6f 75 74 20 30 78 37 66 66 66 66 66 66 66 66 66  out 0x7fffffffff
265a0 66 66 66 66 66 66 66 4c 4c 2e 20 20 54 68 65 20  fffffffLL.  The 
265b0 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20  following macro 
265c0 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20  seems.    ** to 
265d0 70 72 6f 76 69 64 65 20 74 68 65 20 63 6f 6e 73  provide the cons
265e0 74 61 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e  tant while makin
265f0 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20  g all compilers 
26600 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20  happy..    */.# 
26610 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57    define MAX_ROW
26620 49 44 20 20 28 69 36 34 29 28 20 28 28 28 75 36  ID  (i64)( (((u6
26630 34 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33  4)0x7fffffff)<<3
26640 32 29 20 7c 20 28 75 36 34 29 30 78 66 66 66 66  2) | (u64)0xffff
26650 66 66 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a 20  ffff ).#endif.. 
26660 20 20 20 69 66 28 20 21 70 43 2d 3e 75 73 65 52     if( !pC->useR
26670 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20  andomRowid ){.  
26680 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
26690 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 75 63  BtreeLast(pC->uc
266a0 2e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b  .pCursor, &res);
266b0 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
266c0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
266d0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
266e0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
266f0 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72     }.      if( r
26700 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20 76 20  es ){.        v 
26710 3d 20 31 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52  = 1;   /* IMP: R
26720 2d 36 31 39 31 34 2d 34 38 30 37 34 20 2a 2f 0a  -61914-48074 */.
26730 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
26740 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
26750 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49  ite3BtreeCursorI
26760 73 56 61 6c 69 64 28 70 43 2d 3e 75 63 2e 70 43  sValid(pC->uc.pC
26770 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
26780 20 20 76 20 3d 20 73 71 6c 69 74 65 33 42 74 72    v = sqlite3Btr
26790 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43 2d  eeIntegerKey(pC-
267a0 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20  >uc.pCursor);.  
267b0 20 20 20 20 20 20 69 66 28 20 76 3e 3d 4d 41 58        if( v>=MAX
267c0 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20 20 20 20  _ROWID ){.      
267d0 20 20 20 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f      pC->useRando
267e0 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20 20  mRowid = 1;.    
267f0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
26800 20 20 20 20 20 76 2b 2b 3b 20 20 20 2f 2a 20 49       v++;   /* I
26810 4d 50 3a 20 52 2d 32 39 35 33 38 2d 33 34 39 38  MP: R-29538-3498
26820 37 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20  7 */.        }. 
26830 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 23 69       }.    }..#i
26840 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
26850 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  T_AUTOINCREMENT.
26860 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20      if( pOp->p3 
26870 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 73 73 65  ){.      /* Asse
26880 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20  rt that P3 is a 
26890 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c  valid memory cel
268a0 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65  l. */.      asse
268b0 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b  rt( pOp->p3>0 );
268c0 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 70 46  .      if( p->pF
268d0 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20 20  rame ){.        
268e0 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46  for(pFrame=p->pF
268f0 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50  rame; pFrame->pP
26900 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46  arent; pFrame=pF
26910 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a  rame->pParent);.
26920 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72          /* Asser
26930 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20 76  t that P3 is a v
26940 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  alid memory cell
26950 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73  . */.        ass
26960 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 46  ert( pOp->p3<=pF
26970 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  rame->nMem );.  
26980 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 70 46        pMem = &pF
26990 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  rame->aMem[pOp->
269a0 70 33 5d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  p3];.      }else
269b0 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73  {.        /* Ass
269c0 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61  ert that P3 is a
269d0 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65   valid memory ce
269e0 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61  ll. */.        a
269f0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
26a00 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
26a10 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
26a20 20 20 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d      pMem = &aMem
26a30 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20  [pOp->p3];.     
26a40 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
26a50 6e 67 65 28 70 2c 20 70 4d 65 6d 29 3b 0a 20 20  nge(p, pMem);.  
26a60 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65      }.      asse
26a70 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
26a80 4d 65 6d 29 20 29 3b 0a 0a 20 20 20 20 20 20 52  Mem) );..      R
26a90 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
26aa0 70 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20  p->p3, pMem);.  
26ab0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
26ac0 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 4d 65  emIntegerify(pMe
26ad0 6d 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  m);.      assert
26ae0 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
26af0 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20   MEM_Int)!=0 ); 
26b00 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64   /* mem(P3) hold
26b10 73 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a  s an integer */.
26b20 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e        if( pMem->
26b30 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c  u.i==MAX_ROWID |
26b40 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52  | pC->useRandomR
26b50 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 20 20  owid ){.        
26b60 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c  rc = SQLITE_FULL
26b70 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 31 37  ;   /* IMP: R-17
26b80 38 31 37 2d 30 30 36 33 30 20 2a 2f 0a 20 20 20  817-00630 */.   
26b90 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
26ba0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
26bb0 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
26bc0 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b  v<pMem->u.i+1 ){
26bd0 0a 20 20 20 20 20 20 20 20 76 20 3d 20 70 4d 65  .        v = pMe
26be0 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20  m->u.i + 1;.    
26bf0 20 20 7d 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e    }.      pMem->
26c00 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 7d 0a 23  u.i = v;.    }.#
26c10 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70 43  endif.    if( pC
26c20 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64  ->useRandomRowid
26c30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50   ){.      /* IMP
26c40 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20  LEMENTATION-OF: 
26c50 52 2d 30 37 36 37 37 2d 34 31 38 38 31 20 49 66  R-07677-41881 If
26c60 20 74 68 65 20 6c 61 72 67 65 73 74 20 52 4f 57   the largest ROW
26c70 49 44 20 69 73 20 65 71 75 61 6c 20 74 6f 20 74  ID is equal to t
26c80 68 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72 67  he.      ** larg
26c90 65 73 74 20 70 6f 73 73 69 62 6c 65 20 69 6e 74  est possible int
26ca0 65 67 65 72 20 28 39 32 32 33 33 37 32 30 33 36  eger (9223372036
26cb0 38 35 34 37 37 35 38 30 37 29 20 74 68 65 6e 20  854775807) then 
26cc0 74 68 65 20 64 61 74 61 62 61 73 65 0a 20 20 20  the database.   
26cd0 20 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61     ** engine sta
26ce0 72 74 73 20 70 69 63 6b 69 6e 67 20 70 6f 73 69  rts picking posi
26cf0 74 69 76 65 20 63 61 6e 64 69 64 61 74 65 20 52  tive candidate R
26d00 4f 57 49 44 73 20 61 74 20 72 61 6e 64 6f 6d 20  OWIDs at random 
26d10 75 6e 74 69 6c 0a 20 20 20 20 20 20 2a 2a 20 69  until.      ** i
26d20 74 20 66 69 6e 64 73 20 6f 6e 65 20 74 68 61 74  t finds one that
26d30 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73   is not previous
26d40 6c 79 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20  ly used. */.    
26d50 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
26d60 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20 63  3==0 );  /* We c
26d70 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e 64  annot be in rand
26d80 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65 20 69 66  om rowid mode if
26d90 20 74 68 69 73 20 69 73 0a 20 20 20 20 20 20 20   this is.       
26da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26db0 20 20 20 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f        ** an AUTO
26dc0 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e  INCREMENT table.
26dd0 20 2a 2f 0a 20 20 20 20 20 20 63 6e 74 20 3d 20   */.      cnt = 
26de0 30 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20  0;.      do{.   
26df0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 61 6e       sqlite3_ran
26e00 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28 76  domness(sizeof(v
26e10 29 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20  ), &v);.        
26e20 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49 44 3e  v &= (MAX_ROWID>
26e30 3e 31 29 3b 20 76 2b 2b 3b 20 20 2f 2a 20 45 6e  >1); v++;  /* En
26e40 73 75 72 65 20 74 68 61 74 20 76 20 69 73 20 67  sure that v is g
26e50 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f  reater than zero
26e60 20 2a 2f 0a 20 20 20 20 20 20 7d 77 68 69 6c 65   */.      }while
26e70 28 20 20 28 28 72 63 20 3d 20 73 71 6c 69 74 65  (  ((rc = sqlite
26e80 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
26e90 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72  cked(pC->uc.pCur
26ea0 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 76 2c 0a  sor, 0, (u64)v,.
26eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ee0 20 30 2c 20 26 72 65 73 29 29 3d 3d 53 51 4c 49   0, &res))==SQLI
26ef0 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20 20 20 20  TE_OK).         
26f00 20 20 20 26 26 20 28 72 65 73 3d 3d 30 29 0a 20     && (res==0). 
26f10 20 20 20 20 20 20 20 20 20 20 20 26 26 20 28 2b             && (+
26f20 2b 63 6e 74 3c 31 30 30 29 29 3b 0a 20 20 20 20  +cnt<100));.    
26f30 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
26f40 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
26f50 6f 72 3b 0a 20 20 20 20 20 20 69 66 28 20 72 65  or;.      if( re
26f60 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  s==0 ){.        
26f70 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c  rc = SQLITE_FULL
26f80 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 38  ;   /* IMP: R-38
26f90 32 31 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20 20  219-53002 */.   
26fa0 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
26fb0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
26fc0 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65      }.      asse
26fd0 72 74 28 20 76 3e 30 20 29 3b 20 20 2f 2a 20 45  rt( v>0 );  /* E
26fe0 56 3a 20 52 2d 34 30 38 31 32 2d 30 33 35 37 30  V: R-40812-03570
26ff0 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 70 43   */.    }.    pC
27000 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
27010 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61   = 0;.    pC->ca
27020 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
27030 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 70  E_STALE;.  }.  p
27040 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20  Out->u.i = v;.  
27050 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
27060 6f 64 65 3a 20 49 6e 73 65 72 74 20 50 31 20 50  ode: Insert P1 P
27070 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
27080 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72  nopsis: intkey=r
27090 5b 50 33 5d 20 64 61 74 61 3d 72 5b 50 32 5d 0a  [P3] data=r[P2].
270a0 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e 20 65  **.** Write an e
270b0 6e 74 72 79 20 69 6e 74 6f 20 74 68 65 20 74 61  ntry into the ta
270c0 62 6c 65 20 6f 66 20 63 75 72 73 6f 72 20 50 31  ble of cursor P1
270d0 2e 20 20 41 20 6e 65 77 20 65 6e 74 72 79 20 69  .  A new entry i
270e0 73 0a 2a 2a 20 63 72 65 61 74 65 64 20 69 66 20  s.** created if 
270f0 69 74 20 64 6f 65 73 6e 27 74 20 61 6c 72 65 61  it doesn't alrea
27100 64 79 20 65 78 69 73 74 20 6f 72 20 74 68 65 20  dy exist or the 
27110 64 61 74 61 20 66 6f 72 20 61 6e 20 65 78 69 73  data for an exis
27120 74 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20 69 73  ting.** entry is
27130 20 6f 76 65 72 77 72 69 74 74 65 6e 2e 20 20 54   overwritten.  T
27140 68 65 20 64 61 74 61 20 69 73 20 74 68 65 20 76  he data is the v
27150 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f 62 20 73 74  alue MEM_Blob st
27160 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
27170 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 32 2e 20 54  .** number P2. T
27180 68 65 20 6b 65 79 20 69 73 20 73 74 6f 72 65 64  he key is stored
27190 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
271a0 20 54 68 65 20 6b 65 79 20 6d 75 73 74 0a 2a 2a   The key must.**
271b0 20 62 65 20 61 20 4d 45 4d 5f 49 6e 74 2e 0a 2a   be a MEM_Int..*
271c0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
271d0 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20  AG_NCHANGE flag 
271e0 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20 74 68  of P5 is set, th
271f0 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67  en the row chang
27200 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e  e count is.** in
27210 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72  cremented (other
27220 77 69 73 65 20 6e 6f 74 29 2e 20 20 49 66 20 74  wise not).  If t
27230 68 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f  he OPFLAG_LASTRO
27240 57 49 44 20 66 6c 61 67 20 6f 66 20 50 35 20 69  WID flag of P5 i
27250 73 20 73 65 74 2c 0a 2a 2a 20 74 68 65 6e 20 72  s set,.** then r
27260 6f 77 69 64 20 69 73 20 73 74 6f 72 65 64 20 66  owid is stored f
27270 6f 72 20 73 75 62 73 65 71 75 65 6e 74 20 72 65  or subsequent re
27280 74 75 72 6e 20 62 79 20 74 68 65 0a 2a 2a 20 73  turn by the.** s
27290 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65  qlite3_last_inse
272a0 72 74 5f 72 6f 77 69 64 28 29 20 66 75 6e 63 74  rt_rowid() funct
272b0 69 6f 6e 20 28 6f 74 68 65 72 77 69 73 65 20 69  ion (otherwise i
272c0 74 20 69 73 20 75 6e 6d 6f 64 69 66 69 65 64 29  t is unmodified)
272d0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
272e0 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
272f0 55 4c 54 20 66 6c 61 67 20 6f 66 20 50 35 20 69  ULT flag of P5 i
27300 73 20 73 65 74 2c 20 74 68 65 20 69 6d 70 6c 65  s set, the imple
27310 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68 74 0a  mentation might.
27320 2a 2a 20 72 75 6e 20 66 61 73 74 65 72 20 62 79  ** run faster by
27330 20 61 76 6f 69 64 69 6e 67 20 61 6e 20 75 6e 6e   avoiding an unn
27340 65 63 65 73 73 61 72 79 20 73 65 65 6b 20 6f 6e  ecessary seek on
27350 20 63 75 72 73 6f 72 20 50 31 2e 20 20 48 6f 77   cursor P1.  How
27360 65 76 65 72 2c 0a 2a 2a 20 74 68 65 20 4f 50 46  ever,.** the OPF
27370 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
27380 54 20 66 6c 61 67 20 6d 75 73 74 20 6f 6e 6c 79  T flag must only
27390 20 62 65 20 73 65 74 20 69 66 20 74 68 65 72 65   be set if there
273a0 20 68 61 76 65 20 62 65 65 6e 20 6e 6f 20 70 72   have been no pr
273b0 69 6f 72 0a 2a 2a 20 73 65 65 6b 73 20 6f 6e 20  ior.** seeks on 
273c0 74 68 65 20 63 75 72 73 6f 72 20 6f 72 20 69 66  the cursor or if
273d0 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
273e0 20 73 65 65 6b 20 75 73 65 64 20 61 20 6b 65 79   seek used a key
273f0 20 65 71 75 61 6c 20 74 6f 20 50 33 2e 0a 2a 2a   equal to P3..**
27400 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
27410 47 5f 49 53 55 50 44 41 54 45 20 66 6c 61 67 20  G_ISUPDATE flag 
27420 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 69  is set, then thi
27430 73 20 6f 70 63 6f 64 65 20 69 73 20 70 61 72 74  s opcode is part
27440 20 6f 66 20 61 6e 0a 2a 2a 20 55 50 44 41 54 45   of an.** UPDATE
27450 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 4f 74 68   operation.  Oth
27460 65 72 77 69 73 65 20 28 69 66 20 74 68 65 20 66  erwise (if the f
27470 6c 61 67 20 69 73 20 63 6c 65 61 72 29 20 74 68  lag is clear) th
27480 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 0a 2a  en this opcode.*
27490 2a 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 20  * is part of an 
274a0 49 4e 53 45 52 54 20 6f 70 65 72 61 74 69 6f 6e  INSERT operation
274b0 2e 20 20 54 68 65 20 64 69 66 66 65 72 65 6e 63  .  The differenc
274c0 65 20 69 73 20 6f 6e 6c 79 20 69 6d 70 6f 72 74  e is only import
274d0 61 6e 74 20 74 6f 0a 2a 2a 20 74 68 65 20 75 70  ant to.** the up
274e0 64 61 74 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a  date hook..**.**
274f0 20 50 61 72 61 6d 65 74 65 72 20 50 34 20 6d 61   Parameter P4 ma
27500 79 20 70 6f 69 6e 74 20 74 6f 20 61 20 54 61 62  y point to a Tab
27510 6c 65 20 73 74 72 75 63 74 75 72 65 2c 20 6f 72  le structure, or
27520 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66   may be NULL. If
27530 20 69 74 20 69 73 20 0a 2a 2a 20 6e 6f 74 20 4e   it is .** not N
27540 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 75 70  ULL, then the up
27550 64 61 74 65 2d 68 6f 6f 6b 20 28 73 71 6c 69 74  date-hook (sqlit
27560 65 33 2e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  e3.xUpdateCallba
27570 63 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 0a  ck) is invoked .
27580 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73  ** following a s
27590 75 63 63 65 73 73 66 75 6c 20 69 6e 73 65 72 74  uccessful insert
275a0 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e 47  ..**.** (WARNING
275b0 2f 54 4f 44 4f 3a 20 49 66 20 50 31 20 69 73 20  /TODO: If P1 is 
275c0 61 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 20  a pseudo-cursor 
275d0 61 6e 64 20 50 32 20 69 73 20 64 79 6e 61 6d 69  and P2 is dynami
275e0 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74  cally.** allocat
275f0 65 64 2c 20 74 68 65 6e 20 6f 77 6e 65 72 73 68  ed, then ownersh
27600 69 70 20 6f 66 20 50 32 20 69 73 20 74 72 61 6e  ip of P2 is tran
27610 73 66 65 72 72 65 64 20 74 6f 20 74 68 65 20 70  sferred to the p
27620 73 65 75 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20  seudo-cursor.** 
27630 61 6e 64 20 72 65 67 69 73 74 65 72 20 50 32 20  and register P2 
27640 62 65 63 6f 6d 65 73 20 65 70 68 65 6d 65 72 61  becomes ephemera
27650 6c 2e 20 20 49 66 20 74 68 65 20 63 75 72 73 6f  l.  If the curso
27660 72 20 69 73 20 63 68 61 6e 67 65 64 2c 20 74 68  r is changed, th
27670 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 72 65  e.** value of re
27680 67 69 73 74 65 72 20 50 32 20 77 69 6c 6c 20 74  gister P2 will t
27690 68 65 6e 20 63 68 61 6e 67 65 2e 20 20 4d 61 6b  hen change.  Mak
276a0 65 20 73 75 72 65 20 74 68 69 73 20 64 6f 65 73  e sure this does
276b0 20 6e 6f 74 0a 2a 2a 20 63 61 75 73 65 20 61 6e   not.** cause an
276c0 79 20 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a  y problems.).**.
276d0 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
276e0 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f  ion only works o
276f0 6e 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 65  n tables.  The e
27700 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75  quivalent instru
27710 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64  ction.** for ind
27720 69 63 65 73 20 69 73 20 4f 50 5f 49 64 78 49 6e  ices is OP_IdxIn
27730 73 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  sert..*/.case OP
27740 5f 49 6e 73 65 72 74 3a 20 7b 0a 20 20 4d 65 6d  _Insert: {.  Mem
27750 20 2a 70 44 61 74 61 3b 20 20 20 20 20 20 20 2f   *pData;       /
27760 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69  * MEM cell holdi
27770 6e 67 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  ng data for the 
27780 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73  record to be ins
27790 65 72 74 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  erted */.  Mem *
277a0 70 4b 65 79 3b 20 20 20 20 20 20 20 20 2f 2a 20  pKey;        /* 
277b0 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67  MEM cell holding
277c0 20 6b 65 79 20 20 66 6f 72 20 74 68 65 20 72 65   key  for the re
277d0 63 6f 72 64 20 2a 2f 0a 20 20 56 64 62 65 43 75  cord */.  VdbeCu
277e0 72 73 6f 72 20 2a 70 43 3b 20 20 20 2f 2a 20 43  rsor *pC;   /* C
277f0 75 72 73 6f 72 20 74 6f 20 74 61 62 6c 65 20 69  ursor to table i
27800 6e 74 6f 20 77 68 69 63 68 20 69 6e 73 65 72 74  nto which insert
27810 20 69 73 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20   is written */. 
27820 20 69 6e 74 20 73 65 65 6b 52 65 73 75 6c 74 3b   int seekResult;
27830 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20     /* Result of 
27840 70 72 69 6f 72 20 73 65 65 6b 20 6f 72 20 30 20  prior seek or 0 
27850 69 66 20 6e 6f 20 55 53 45 53 45 45 4b 52 45 53  if no USESEEKRES
27860 55 4c 54 20 66 6c 61 67 20 2a 2f 0a 20 20 63 6f  ULT flag */.  co
27870 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20  nst char *zDb;  
27880 2f 2a 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  /* database name
27890 20 2d 20 75 73 65 64 20 62 79 20 74 68 65 20 75   - used by the u
278a0 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20  pdate hook */.  
278b0 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
278c0 20 20 2f 2a 20 54 61 62 6c 65 20 73 74 72 75 63    /* Table struc
278d0 74 75 72 65 20 2d 20 75 73 65 64 20 62 79 20 75  ture - used by u
278e0 70 64 61 74 65 20 61 6e 64 20 70 72 65 2d 75 70  pdate and pre-up
278f0 64 61 74 65 20 68 6f 6f 6b 73 20 2a 2f 0a 20 20  date hooks */.  
27900 42 74 72 65 65 50 61 79 6c 6f 61 64 20 78 3b 20  BtreePayload x; 
27910 20 20 2f 2a 20 50 61 79 6c 6f 61 64 20 74 6f 20    /* Payload to 
27920 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 0a  be inserted */..
27930 20 20 70 44 61 74 61 20 3d 20 26 61 4d 65 6d 5b    pData = &aMem[
27940 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
27950 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
27960 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
27970 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
27980 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 44 61  ( memIsValid(pDa
27990 74 61 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  ta) );.  pC = p-
279a0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
279b0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
279c0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
279d0 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
279e0 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61  YPE_BTREE );.  a
279f0 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
27a00 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73  ursor!=0 );.  as
27a10 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26  sert( (pOp->p5 &
27a20 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 29 20   OPFLAG_ISNOOP) 
27a30 7c 7c 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  || pC->isTable )
27a40 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
27a50 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c  >p4type==P4_TABL
27a60 45 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65  E || pOp->p4type
27a70 3e 3d 50 34 5f 53 54 41 54 49 43 20 29 3b 0a 20  >=P4_STATIC );. 
27a80 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
27a90 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61 29 3b  pOp->p2, pData);
27aa0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e  .  sqlite3VdbeIn
27ab0 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70  crWriteCounter(p
27ac0 2c 20 70 43 29 3b 0a 0a 20 20 70 4b 65 79 20 3d  , pC);..  pKey =
27ad0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
27ae0 0a 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 2d  .  assert( pKey-
27af0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
27b00 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65   );.  assert( me
27b10 6d 49 73 56 61 6c 69 64 28 70 4b 65 79 29 20 29  mIsValid(pKey) )
27b20 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
27b30 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4b 65 79  CE(pOp->p3, pKey
27b40 29 3b 0a 20 20 78 2e 6e 4b 65 79 20 3d 20 70 4b  );.  x.nKey = pK
27b50 65 79 2d 3e 75 2e 69 3b 0a 0a 20 20 69 66 28 20  ey->u.i;..  if( 
27b60 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
27b70 54 41 42 4c 45 20 26 26 20 48 41 53 5f 55 50 44  TABLE && HAS_UPD
27b80 41 54 45 5f 48 4f 4f 4b 28 64 62 29 20 29 7b 0a  ATE_HOOK(db) ){.
27b90 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
27ba0 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20 7a 44  iDb>=0 );.    zD
27bb0 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e  b = db->aDb[pC->
27bc0 69 44 62 5d 2e 7a 44 62 53 4e 61 6d 65 3b 0a 20  iDb].zDbSName;. 
27bd0 20 20 20 70 54 61 62 20 3d 20 70 4f 70 2d 3e 70     pTab = pOp->p
27be0 34 2e 70 54 61 62 3b 0a 20 20 20 20 61 73 73 65  4.pTab;.    asse
27bf0 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f  rt( (pOp->p5 & O
27c00 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 29 20 7c 7c  PFLAG_ISNOOP) ||
27c10 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20   HasRowid(pTab) 
27c20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
27c30 70 54 61 62 20 3d 20 30 3b 0a 20 20 20 20 7a 44  pTab = 0;.    zD
27c40 62 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e  b = 0;  /* Not n
27c50 65 65 64 65 64 2e 20 20 53 69 6c 65 6e 63 65 20  eeded.  Silence 
27c60 61 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69  a compiler warni
27c70 6e 67 2e 20 2a 2f 0a 20 20 7d 0a 0a 23 69 66 64  ng. */.  }..#ifd
27c80 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
27c90 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a  _PREUPDATE_HOOK.
27ca0 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
27cb0 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 2c  pre-update hook,
27cc0 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20 69 66 28   if any */.  if(
27cd0 20 70 54 61 62 20 29 7b 0a 20 20 20 20 69 66 28   pTab ){.    if(
27ce0 20 64 62 2d 3e 78 50 72 65 55 70 64 61 74 65 43   db->xPreUpdateC
27cf0 61 6c 6c 62 61 63 6b 20 26 26 20 21 28 70 4f 70  allback && !(pOp
27d00 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53  ->p5 & OPFLAG_IS
27d10 55 50 44 41 54 45 29 20 29 7b 0a 20 20 20 20 20  UPDATE) ){.     
27d20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 65 55   sqlite3VdbePreU
27d30 70 64 61 74 65 48 6f 6f 6b 28 70 2c 20 70 43 2c  pdateHook(p, pC,
27d40 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 2c 20   SQLITE_INSERT, 
27d50 7a 44 62 2c 20 70 54 61 62 2c 20 78 2e 6e 4b 65  zDb, pTab, x.nKe
27d60 79 2c 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20  y,pOp->p2);.    
27d70 7d 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78 55  }.    if( db->xU
27d80 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 3d 3d 30  pdateCallback==0
27d90 20 7c 7c 20 70 54 61 62 2d 3e 61 43 6f 6c 3d 3d   || pTab->aCol==
27da0 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 50 72  0 ){.      /* Pr
27db0 65 76 65 6e 74 20 70 6f 73 74 2d 75 70 64 61 74  event post-updat
27dc0 65 20 68 6f 6f 6b 20 66 72 6f 6d 20 72 75 6e 6e  e hook from runn
27dd0 69 6e 67 20 69 6e 20 63 61 73 65 73 20 77 68 65  ing in cases whe
27de0 6e 20 69 74 20 73 68 6f 75 6c 64 20 6e 6f 74 20  n it should not 
27df0 2a 2f 0a 20 20 20 20 20 20 70 54 61 62 20 3d 20  */.      pTab = 
27e00 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  0;.    }.  }.  i
27e10 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
27e20 4c 41 47 5f 49 53 4e 4f 4f 50 20 29 20 62 72 65  LAG_ISNOOP ) bre
27e30 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66  ak;.#endif..  if
27e40 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ( pOp->p5 & OPFL
27e50 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e  AG_NCHANGE ) p->
27e60 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28  nChange++;.  if(
27e70 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41   pOp->p5 & OPFLA
27e80 47 5f 4c 41 53 54 52 4f 57 49 44 20 29 20 64 62  G_LASTROWID ) db
27e90 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 78 2e  ->lastRowid = x.
27ea0 6e 4b 65 79 3b 0a 20 20 61 73 73 65 72 74 28 20  nKey;.  assert( 
27eb0 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 28  pData->flags & (
27ec0 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72  MEM_Blob|MEM_Str
27ed0 29 20 29 3b 0a 20 20 78 2e 70 44 61 74 61 20 3d  ) );.  x.pData =
27ee0 20 70 44 61 74 61 2d 3e 7a 3b 0a 20 20 78 2e 6e   pData->z;.  x.n
27ef0 44 61 74 61 20 3d 20 70 44 61 74 61 2d 3e 6e 3b  Data = pData->n;
27f00 0a 20 20 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  .  seekResult = 
27f10 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ((pOp->p5 & OPFL
27f20 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
27f30 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75  ) ? pC->seekResu
27f40 6c 74 20 3a 20 30 29 3b 0a 20 20 69 66 28 20 70  lt : 0);.  if( p
27f50 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45  Data->flags & ME
27f60 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 78 2e  M_Zero ){.    x.
27f70 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e 75  nZero = pData->u
27f80 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73 65 7b  .nZero;.  }else{
27f90 0a 20 20 20 20 78 2e 6e 5a 65 72 6f 20 3d 20 30  .    x.nZero = 0
27fa0 3b 0a 20 20 7d 0a 20 20 78 2e 70 4b 65 79 20 3d  ;.  }.  x.pKey =
27fb0 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   0;.  rc = sqlit
27fc0 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43  e3BtreeInsert(pC
27fd0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 78  ->uc.pCursor, &x
27fe0 2c 0a 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35  ,.      (pOp->p5
27ff0 20 26 20 28 4f 50 46 4c 41 47 5f 41 50 50 45 4e   & (OPFLAG_APPEN
28000 44 7c 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53  D|OPFLAG_SAVEPOS
28010 49 54 49 4f 4e 29 29 2c 20 73 65 65 6b 52 65 73  ITION)), seekRes
28020 75 6c 74 0a 20 20 29 3b 0a 20 20 70 43 2d 3e 64  ult.  );.  pC->d
28030 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
28040 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  0;.  pC->cacheSt
28050 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
28060 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65  LE;..  /* Invoke
28070 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   the update-hook
28080 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f   if required. */
28090 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
280a0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
280b0 72 6f 72 3b 0a 20 20 69 66 28 20 70 54 61 62 20  ror;.  if( pTab 
280c0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64  ){.    assert( d
280d0 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
280e0 63 6b 21 3d 30 20 29 3b 0a 20 20 20 20 61 73 73  ck!=0 );.    ass
280f0 65 72 74 28 20 70 54 61 62 2d 3e 61 43 6f 6c 21  ert( pTab->aCol!
28100 3d 30 20 29 3b 0a 20 20 20 20 64 62 2d 3e 78 55  =0 );.    db->xU
28110 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62  pdateCallback(db
28120 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 0a 20 20  ->pUpdateArg,.  
28130 20 20 20 20 20 20 20 20 20 28 70 4f 70 2d 3e 70           (pOp->p
28140 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  5 & OPFLAG_ISUPD
28150 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f 55 50  ATE) ? SQLITE_UP
28160 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f 49 4e  DATE : SQLITE_IN
28170 53 45 52 54 2c 0a 20 20 20 20 20 20 20 20 20 20  SERT,.          
28180 20 7a 44 62 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d   zDb, pTab->zNam
28190 65 2c 20 78 2e 6e 4b 65 79 29 3b 0a 20 20 7d 0a  e, x.nKey);.  }.
281a0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
281b0 70 63 6f 64 65 3a 20 44 65 6c 65 74 65 20 50 31  pcode: Delete P1
281c0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
281d0 2a 2a 20 44 65 6c 65 74 65 20 74 68 65 20 72 65  ** Delete the re
281e0 63 6f 72 64 20 61 74 20 77 68 69 63 68 20 74 68  cord at which th
281f0 65 20 50 31 20 63 75 72 73 6f 72 20 69 73 20 63  e P1 cursor is c
28200 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
28210 67 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  g..**.** If the 
28220 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54  OPFLAG_SAVEPOSIT
28230 49 4f 4e 20 62 69 74 20 6f 66 20 74 68 65 20 50  ION bit of the P
28240 35 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 73  5 parameter is s
28250 65 74 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20  et, then.** the 
28260 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 20 6c  cursor will be l
28270 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  eft pointing at 
28280 20 65 69 74 68 65 72 20 74 68 65 20 6e 65 78 74   either the next
28290 20 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75 73   or the previous
282a0 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20 74 68  .** record in th
282b0 65 20 74 61 62 6c 65 2e 20 49 66 20 69 74 20 69  e table. If it i
282c0 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20  s left pointing 
282d0 61 74 20 74 68 65 20 6e 65 78 74 20 72 65 63 6f  at the next reco
282e0 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20  rd, then.** the 
282f0 6e 65 78 74 20 4e 65 78 74 20 69 6e 73 74 72 75  next Next instru
28300 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61 20  ction will be a 
28310 6e 6f 2d 6f 70 2e 20 41 73 20 61 20 72 65 73 75  no-op. As a resu
28320 6c 74 2c 20 69 6e 20 74 68 69 73 20 63 61 73 65  lt, in this case
28330 0a 2a 2a 20 69 74 20 69 73 20 6f 6b 20 74 6f 20  .** it is ok to 
28340 64 65 6c 65 74 65 20 61 20 72 65 63 6f 72 64 20  delete a record 
28350 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 4e 65  from within a Ne
28360 78 74 20 6c 6f 6f 70 2e 20 49 66 20 0a 2a 2a 20  xt loop. If .** 
28370 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54  OPFLAG_SAVEPOSIT
28380 49 4f 4e 20 62 69 74 20 6f 66 20 50 35 20 69 73  ION bit of P5 is
28390 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 74 68 65   clear, then the
283a0 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 0a   cursor will be.
283b0 2a 2a 20 6c 65 66 74 20 69 6e 20 61 6e 20 75 6e  ** left in an un
283c0 64 65 66 69 6e 65 64 20 73 74 61 74 65 2e 0a 2a  defined state..*
283d0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
283e0 41 47 5f 41 55 58 44 45 4c 45 54 45 20 62 69 74  AG_AUXDELETE bit
283f0 20 69 73 20 73 65 74 20 6f 6e 20 50 35 2c 20 74   is set on P5, t
28400 68 61 74 20 69 6e 64 69 63 61 74 65 73 20 74 68  hat indicates th
28410 61 74 20 74 68 69 73 0a 2a 2a 20 64 65 6c 65 74  at this.** delet
28420 65 20 6f 6e 65 20 6f 66 20 73 65 76 65 72 61 6c  e one of several
28430 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
28440 20 64 65 6c 65 74 69 6e 67 20 61 20 74 61 62 6c   deleting a tabl
28450 65 20 72 6f 77 20 61 6e 64 20 61 6c 6c 20 69 74  e row and all it
28460 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20  s.** associated 
28470 69 6e 64 65 78 20 65 6e 74 72 69 65 73 2e 20 20  index entries.  
28480 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66 20 74  Exactly one of t
28490 68 6f 73 65 20 64 65 6c 65 74 65 73 20 69 73 20  hose deletes is 
284a0 74 68 65 20 22 70 72 69 6d 61 72 79 22 0a 2a 2a  the "primary".**
284b0 20 64 65 6c 65 74 65 2e 20 20 54 68 65 20 6f 74   delete.  The ot
284c0 68 65 72 73 20 61 72 65 20 61 6c 6c 20 6f 6e 20  hers are all on 
284d0 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45  OPFLAG_FORDELETE
284e0 20 63 75 72 73 6f 72 73 20 6f 72 20 65 6c 73 65   cursors or else
284f0 20 61 72 65 0a 2a 2a 20 6d 61 72 6b 65 64 20 77   are.** marked w
28500 69 74 68 20 74 68 65 20 41 55 58 44 45 4c 45 54  ith the AUXDELET
28510 45 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 49 66  E flag..**.** If
28520 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41   the OPFLAG_NCHA
28530 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 32 20 28  NGE flag of P2 (
28540 4e 42 3a 20 50 32 20 6e 6f 74 20 50 35 29 20 69  NB: P2 not P5) i
28550 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20  s set, then the 
28560 72 6f 77 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f  row.** change co
28570 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  unt is increment
28580 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f  ed (otherwise no
28590 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73  t)..**.** P1 mus
285a0 74 20 6e 6f 74 20 62 65 20 70 73 65 75 64 6f 2d  t not be pseudo-
285b0 74 61 62 6c 65 2e 20 20 49 74 20 68 61 73 20 74  table.  It has t
285c0 6f 20 62 65 20 61 20 72 65 61 6c 20 74 61 62 6c  o be a real tabl
285d0 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69 70  e with.** multip
285e0 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49  le rows..**.** I
285f0 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  f P4 is not NULL
28600 20 74 68 65 6e 20 69 74 20 70 6f 69 6e 74 73 20   then it points 
28610 74 6f 20 61 20 54 61 62 6c 65 20 6f 62 6a 65 63  to a Table objec
28620 74 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  t. In this case 
28630 65 69 74 68 65 72 20 0a 2a 2a 20 74 68 65 20 75  either .** the u
28640 70 64 61 74 65 20 6f 72 20 70 72 65 2d 75 70 64  pdate or pre-upd
28650 61 74 65 20 68 6f 6f 6b 2c 20 6f 72 20 62 6f 74  ate hook, or bot
28660 68 2c 20 6d 61 79 20 62 65 20 69 6e 76 6f 6b 65  h, may be invoke
28670 64 2e 20 54 68 65 20 50 31 20 63 75 72 73 6f 72  d. The P1 cursor
28680 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20 62 65   must.** have be
28690 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64 20 75 73  en positioned us
286a0 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20  ing OP_NotFound 
286b0 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e  prior to invokin
286c0 67 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 6e  g this opcode in
286d0 20 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 2e 20   .** this case. 
286e0 53 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 69 66  Specifically, if
286f0 20 6f 6e 65 20 69 73 20 63 6f 6e 66 69 67 75 72   one is configur
28700 65 64 2c 20 74 68 65 20 70 72 65 2d 75 70 64 61  ed, the pre-upda
28710 74 65 20 68 6f 6f 6b 20 69 73 20 0a 2a 2a 20 69  te hook is .** i
28720 6e 76 6f 6b 65 64 20 69 66 20 50 34 20 69 73 20  nvoked if P4 is 
28730 6e 6f 74 20 4e 55 4c 4c 2e 20 54 68 65 20 75 70  not NULL. The up
28740 64 61 74 65 2d 68 6f 6f 6b 20 69 73 20 69 6e 76  date-hook is inv
28750 6f 6b 65 64 20 69 66 20 6f 6e 65 20 69 73 20 63  oked if one is c
28760 6f 6e 66 69 67 75 72 65 64 2c 20 0a 2a 2a 20 50  onfigured, .** P
28770 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 61  4 is not NULL, a
28780 6e 64 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  nd the OPFLAG_NC
28790 48 41 4e 47 45 20 66 6c 61 67 20 69 73 20 73 65  HANGE flag is se
287a0 74 20 69 6e 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49  t in P2..**.** I
287b0 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55  f the OPFLAG_ISU
287c0 50 44 41 54 45 20 66 6c 61 67 20 69 73 20 73 65  PDATE flag is se
287d0 74 20 69 6e 20 50 32 2c 20 74 68 65 6e 20 50 33  t in P2, then P3
287e0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64   contains the ad
287f0 64 72 65 73 73 0a 2a 2a 20 6f 66 20 74 68 65 20  dress.** of the 
28800 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74  memory cell that
28810 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 76 61   contains the va
28820 6c 75 65 20 74 68 61 74 20 74 68 65 20 72 6f 77  lue that the row
28830 69 64 20 6f 66 20 74 68 65 20 72 6f 77 20 77 69  id of the row wi
28840 6c 6c 0a 2a 2a 20 62 65 20 73 65 74 20 74 6f 20  ll.** be set to 
28850 62 79 20 74 68 65 20 75 70 64 61 74 65 2e 0a 2a  by the update..*
28860 2f 0a 63 61 73 65 20 4f 50 5f 44 65 6c 65 74 65  /.case OP_Delete
28870 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
28880 20 2a 70 43 3b 0a 20 20 63 6f 6e 73 74 20 63 68   *pC;.  const ch
28890 61 72 20 2a 7a 44 62 3b 0a 20 20 54 61 62 6c 65  ar *zDb;.  Table
288a0 20 2a 70 54 61 62 3b 0a 20 20 69 6e 74 20 6f 70   *pTab;.  int op
288b0 66 6c 61 67 73 3b 0a 0a 20 20 6f 70 66 6c 61 67  flags;..  opflag
288c0 73 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  s = pOp->p2;.  a
288d0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
288e0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
288f0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
28900 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
28910 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
28920 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
28930 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
28940 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
28950 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75  .  assert( pC->u
28960 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  c.pCursor!=0 );.
28970 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
28980 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
28990 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
289a0 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72  IncrWriteCounter
289b0 28 70 2c 20 70 43 29 3b 0a 0a 23 69 66 64 65 66  (p, pC);..#ifdef
289c0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
289d0 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
289e0 3d 50 34 5f 54 41 42 4c 45 20 26 26 20 48 61 73  =P4_TABLE && Has
289f0 52 6f 77 69 64 28 70 4f 70 2d 3e 70 34 2e 70 54  Rowid(pOp->p4.pT
28a00 61 62 29 20 26 26 20 70 4f 70 2d 3e 70 35 3d 3d  ab) && pOp->p5==
28a10 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 70  0 ){.    /* If p
28a20 35 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 73  5 is zero, the s
28a30 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 74 68  eek operation th
28a40 61 74 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68  at positioned th
28a50 65 20 63 75 72 73 6f 72 20 70 72 69 6f 72 20 74  e cursor prior t
28a60 6f 0a 20 20 20 20 2a 2a 20 4f 50 5f 44 65 6c 65  o.    ** OP_Dele
28a70 74 65 20 77 69 6c 6c 20 68 61 76 65 20 61 6c 73  te will have als
28a80 6f 20 73 65 74 20 74 68 65 20 70 43 2d 3e 6d 6f  o set the pC->mo
28a90 76 65 74 6f 54 61 72 67 65 74 20 66 69 65 6c 64  vetoTarget field
28aa0 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20 6f 66   to the rowid of
28ab0 0a 20 20 20 20 2a 2a 20 74 68 65 20 72 6f 77 20  .    ** the row 
28ac0 74 68 61 74 20 69 73 20 62 65 69 6e 67 20 64 65  that is being de
28ad0 6c 65 74 65 64 20 2a 2f 0a 20 20 20 20 69 36 34  leted */.    i64
28ae0 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 42   iKey = sqlite3B
28af0 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70  treeIntegerKey(p
28b00 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a  C->uc.pCursor);.
28b10 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
28b20 6d 6f 76 65 74 6f 54 61 72 67 65 74 3d 3d 69 4b  movetoTarget==iK
28b30 65 79 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  ey );.  }.#endif
28b40 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 75 70  ..  /* If the up
28b50 64 61 74 65 2d 68 6f 6f 6b 20 6f 72 20 70 72 65  date-hook or pre
28b60 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 77 69 6c  -update-hook wil
28b70 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 73 65  l be invoked, se
28b80 74 20 7a 44 62 20 74 6f 0a 20 20 2a 2a 20 74 68  t zDb to.  ** th
28b90 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 62  e name of the db
28ba0 20 74 6f 20 70 61 73 73 20 61 73 20 74 6f 20 69   to pass as to i
28bb0 74 2e 20 41 6c 73 6f 20 73 65 74 20 6c 6f 63 61  t. Also set loca
28bc0 6c 20 70 54 61 62 20 74 6f 20 61 20 63 6f 70 79  l pTab to a copy
28bd0 0a 20 20 2a 2a 20 6f 66 20 70 34 2e 70 54 61 62  .  ** of p4.pTab
28be0 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 70 35  . Finally, if p5
28bf0 20 69 73 20 74 72 75 65 2c 20 69 6e 64 69 63 61   is true, indica
28c00 74 69 6e 67 20 74 68 61 74 20 74 68 69 73 20 63  ting that this c
28c10 75 72 73 6f 72 20 77 61 73 0a 20 20 2a 2a 20 6c  ursor was.  ** l
28c20 61 73 74 20 6d 6f 76 65 64 20 77 69 74 68 20 4f  ast moved with O
28c30 50 5f 4e 65 78 74 20 6f 72 20 4f 50 5f 50 72 65  P_Next or OP_Pre
28c40 76 2c 20 6e 6f 74 20 53 65 65 6b 20 6f 72 20 4e  v, not Seek or N
28c50 6f 74 46 6f 75 6e 64 2c 20 73 65 74 20 0a 20 20  otFound, set .  
28c60 2a 2a 20 56 64 62 65 43 75 72 73 6f 72 2e 6d 6f  ** VdbeCursor.mo
28c70 76 65 74 6f 54 61 72 67 65 74 20 74 6f 20 74 68  vetoTarget to th
28c80 65 20 63 75 72 72 65 6e 74 20 72 6f 77 69 64 2e  e current rowid.
28c90 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e    */.  if( pOp->
28ca0 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45  p4type==P4_TABLE
28cb0 20 26 26 20 48 41 53 5f 55 50 44 41 54 45 5f 48   && HAS_UPDATE_H
28cc0 4f 4f 4b 28 64 62 29 20 29 7b 0a 20 20 20 20 61  OOK(db) ){.    a
28cd0 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d  ssert( pC->iDb>=
28ce0 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
28cf0 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 21 3d 30   pOp->p4.pTab!=0
28d00 20 29 3b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62   );.    zDb = db
28d10 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a  ->aDb[pC->iDb].z
28d20 44 62 53 4e 61 6d 65 3b 0a 20 20 20 20 70 54 61  DbSName;.    pTa
28d30 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62  b = pOp->p4.pTab
28d40 3b 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e  ;.    if( (pOp->
28d50 70 35 20 26 20 4f 50 46 4c 41 47 5f 53 41 56 45  p5 & OPFLAG_SAVE
28d60 50 4f 53 49 54 49 4f 4e 29 21 3d 30 20 26 26 20  POSITION)!=0 && 
28d70 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20  pC->isTable ){. 
28d80 20 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54       pC->movetoT
28d90 61 72 67 65 74 20 3d 20 73 71 6c 69 74 65 33 42  arget = sqlite3B
28da0 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70  treeIntegerKey(p
28db0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a  C->uc.pCursor);.
28dc0 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
28dd0 20 20 20 7a 44 62 20 3d 20 30 3b 20 20 20 2f 2a     zDb = 0;   /*
28de0 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69   Not needed.  Si
28df0 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65 72  lence a compiler
28e00 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20   warning. */.   
28e10 20 70 54 61 62 20 3d 20 30 3b 20 20 2f 2a 20 4e   pTab = 0;  /* N
28e20 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69 6c 65  ot needed.  Sile
28e30 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65 72 20 77  nce a compiler w
28e40 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 7d 0a 0a  arning. */.  }..
28e50 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
28e60 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48  ABLE_PREUPDATE_H
28e70 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  OOK.  /* Invoke 
28e80 74 68 65 20 70 72 65 2d 75 70 64 61 74 65 2d 68  the pre-update-h
28e90 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e  ook if required.
28ea0 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50   */.  if( db->xP
28eb0 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  reUpdateCallback
28ec0 20 26 26 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62   && pOp->p4.pTab
28ed0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
28ee0 21 28 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c  !(opflags & OPFL
28ef0 41 47 5f 49 53 55 50 44 41 54 45 29 20 0a 20 20  AG_ISUPDATE) .  
28f00 20 20 20 20 20 20 20 7c 7c 20 48 61 73 52 6f 77         || HasRow
28f10 69 64 28 70 54 61 62 29 3d 3d 30 20 0a 20 20 20  id(pTab)==0 .   
28f20 20 20 20 20 20 20 7c 7c 20 28 61 4d 65 6d 5b 70        || (aMem[p
28f30 4f 70 2d 3e 70 33 5d 2e 66 6c 61 67 73 20 26 20  Op->p3].flags & 
28f40 4d 45 4d 5f 49 6e 74 29 20 0a 20 20 20 20 29 3b  MEM_Int) .    );
28f50 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
28f60 50 72 65 55 70 64 61 74 65 48 6f 6f 6b 28 70 2c  PreUpdateHook(p,
28f70 20 70 43 2c 0a 20 20 20 20 20 20 20 20 28 6f 70   pC,.        (op
28f80 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 49  flags & OPFLAG_I
28f90 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54  SUPDATE) ? SQLIT
28fa0 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54  E_UPDATE : SQLIT
28fb0 45 5f 44 45 4c 45 54 45 2c 20 0a 20 20 20 20 20  E_DELETE, .     
28fc0 20 20 20 7a 44 62 2c 20 70 54 61 62 2c 20 70 43     zDb, pTab, pC
28fd0 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 2c 0a  ->movetoTarget,.
28fe0 20 20 20 20 20 20 20 20 70 4f 70 2d 3e 70 33 0a          pOp->p3.
28ff0 20 20 20 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28      );.  }.  if(
29000 20 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41   opflags & OPFLA
29010 47 5f 49 53 4e 4f 4f 50 20 29 20 62 72 65 61 6b  G_ISNOOP ) break
29020 3b 0a 23 65 6e 64 69 66 0a 20 0a 20 20 2f 2a 20  ;.#endif. .  /* 
29030 4f 6e 6c 79 20 66 6c 61 67 73 20 74 68 61 74 20  Only flags that 
29040 63 61 6e 20 62 65 20 73 65 74 20 61 72 65 20 53  can be set are S
29050 41 56 45 50 4f 49 53 54 49 4f 4e 20 61 6e 64 20  AVEPOISTION and 
29060 41 55 58 44 45 4c 45 54 45 20 2a 2f 20 0a 20 20  AUXDELETE */ .  
29070 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35  assert( (pOp->p5
29080 20 26 20 7e 28 4f 50 46 4c 41 47 5f 53 41 56 45   & ~(OPFLAG_SAVE
29090 50 4f 53 49 54 49 4f 4e 7c 4f 50 46 4c 41 47 5f  POSITION|OPFLAG_
290a0 41 55 58 44 45 4c 45 54 45 29 29 3d 3d 30 20 29  AUXDELETE))==0 )
290b0 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c  ;.  assert( OPFL
290c0 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 3d  AG_SAVEPOSITION=
290d0 3d 42 54 52 45 45 5f 53 41 56 45 50 4f 53 49 54  =BTREE_SAVEPOSIT
290e0 49 4f 4e 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ION );.  assert(
290f0 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54   OPFLAG_AUXDELET
29100 45 3d 3d 42 54 52 45 45 5f 41 55 58 44 45 4c 45  E==BTREE_AUXDELE
29110 54 45 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  TE );..#ifdef SQ
29120 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28  LITE_DEBUG.  if(
29130 20 70 2d 3e 70 46 72 61 6d 65 3d 3d 30 20 29 7b   p->pFrame==0 ){
29140 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73 45  .    if( pC->isE
29150 70 68 65 6d 65 72 61 6c 3d 3d 30 0a 20 20 20 20  phemeral==0.    
29160 20 20 20 20 26 26 20 28 70 4f 70 2d 3e 70 35 20      && (pOp->p5 
29170 26 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45  & OPFLAG_AUXDELE
29180 54 45 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 26  TE)==0.        &
29190 26 20 28 70 43 2d 3e 77 72 46 6c 61 67 20 26 20  & (pC->wrFlag & 
291a0 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45  OPFLAG_FORDELETE
291b0 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20 20  )==0.      ){.  
291c0 20 20 20 20 6e 45 78 74 72 61 44 65 6c 65 74 65      nExtraDelete
291d0 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ++;.    }.    if
291e0 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c  ( pOp->p2 & OPFL
291f0 41 47 5f 4e 43 48 41 4e 47 45 20 29 7b 0a 20 20  AG_NCHANGE ){.  
29200 20 20 20 20 6e 45 78 74 72 61 44 65 6c 65 74 65      nExtraDelete
29210 2d 2d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  --;.    }.  }.#e
29220 6e 64 69 66 0a 0a 20 20 72 63 20 3d 20 73 71 6c  ndif..  rc = sql
29230 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28  ite3BtreeDelete(
29240 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
29250 70 4f 70 2d 3e 70 35 29 3b 0a 20 20 70 43 2d 3e  pOp->p5);.  pC->
29260 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
29270 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d  CHE_STALE;.  pC-
29280 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b  >seekResult = 0;
29290 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
292a0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
292b0 72 6f 72 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  ror;..  /* Invok
292c0 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  e the update-hoo
292d0 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a  k if required. *
292e0 2f 0a 20 20 69 66 28 20 6f 70 66 6c 61 67 73 20  /.  if( opflags 
292f0 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  & OPFLAG_NCHANGE
29300 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e   ){.    p->nChan
29310 67 65 2b 2b 3b 0a 20 20 20 20 69 66 28 20 64 62  ge++;.    if( db
29320 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
29330 6b 20 26 26 20 48 61 73 52 6f 77 69 64 28 70 54  k && HasRowid(pT
29340 61 62 29 20 29 7b 0a 20 20 20 20 20 20 64 62 2d  ab) ){.      db-
29350 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
29360 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c  (db->pUpdateArg,
29370 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20   SQLITE_DELETE, 
29380 7a 44 62 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65  zDb, pTab->zName
29390 2c 0a 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e  ,.          pC->
293a0 6d 6f 76 65 74 6f 54 61 72 67 65 74 29 3b 0a 20  movetoTarget);. 
293b0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d       assert( pC-
293c0 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20 7d  >iDb>=0 );.    }
293d0 0a 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d  .  }..  break;.}
293e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65  ./* Opcode: Rese
293f0 74 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a  tCount * * * * *
29400 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  .**.** The value
29410 20 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20 63   of the change c
29420 6f 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65 64  ounter is copied
29430 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
29440 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67   handle.** chang
29450 65 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75 72  e counter (retur
29460 6e 65 64 20 62 79 20 73 75 62 73 65 71 75 65 6e  ned by subsequen
29470 74 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74  t calls to sqlit
29480 65 33 5f 63 68 61 6e 67 65 73 28 29 29 2e 0a 2a  e3_changes())..*
29490 2a 20 54 68 65 6e 20 74 68 65 20 56 4d 73 20 69  * Then the VMs i
294a0 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67 65 20 63  nternal change c
294b0 6f 75 6e 74 65 72 20 72 65 73 65 74 73 20 74 6f  ounter resets to
294c0 20 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 75   0..** This is u
294d0 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70  sed by trigger p
294e0 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65  rograms..*/.case
294f0 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20   OP_ResetCount: 
29500 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53  {.  sqlite3VdbeS
29510 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d  etChanges(db, p-
29520 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70 2d 3e  >nChange);.  p->
29530 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62  nChange = 0;.  b
29540 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
29550 64 65 3a 20 53 6f 72 74 65 72 43 6f 6d 70 61 72  de: SorterCompar
29560 65 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a  e P1 P2 P3 P4.**
29570 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 6b 65   Synopsis: if ke
29580 79 28 50 31 29 21 3d 74 72 69 6d 28 72 5b 50 33  y(P1)!=trim(r[P3
29590 5d 2c 50 34 29 20 67 6f 74 6f 20 50 32 0a 2a 2a  ],P4) goto P2.**
295a0 0a 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72 74  .** P1 is a sort
295b0 65 72 20 63 75 72 73 6f 72 2e 20 54 68 69 73 20  er cursor. This 
295c0 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 6d 70  instruction comp
295d0 61 72 65 73 20 61 20 70 72 65 66 69 78 20 6f 66  ares a prefix of
295e0 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20 62   the.** record b
295f0 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72 20  lob in register 
29600 50 33 20 61 67 61 69 6e 73 74 20 61 20 70 72 65  P3 against a pre
29610 66 69 78 20 6f 66 20 74 68 65 20 65 6e 74 72 79  fix of the entry
29620 20 74 68 61 74 20 0a 2a 2a 20 74 68 65 20 73 6f   that .** the so
29630 72 74 65 72 20 63 75 72 73 6f 72 20 63 75 72 72  rter cursor curr
29640 65 6e 74 6c 79 20 70 6f 69 6e 74 73 20 74 6f 2e  ently points to.
29650 20 20 4f 6e 6c 79 20 74 68 65 20 66 69 72 73 74    Only the first
29660 20 50 34 20 66 69 65 6c 64 73 0a 2a 2a 20 6f 66   P4 fields.** of
29670 20 72 5b 50 33 5d 20 61 6e 64 20 74 68 65 20 73   r[P3] and the s
29680 6f 72 74 65 72 20 72 65 63 6f 72 64 20 61 72 65  orter record are
29690 20 63 6f 6d 70 61 72 65 64 2e 0a 2a 2a 0a 2a 2a   compared..**.**
296a0 20 49 66 20 65 69 74 68 65 72 20 50 33 20 6f 72   If either P3 or
296b0 20 74 68 65 20 73 6f 72 74 65 72 20 63 6f 6e 74   the sorter cont
296c0 61 69 6e 73 20 61 20 4e 55 4c 4c 20 69 6e 20 6f  ains a NULL in o
296d0 6e 65 20 6f 66 20 74 68 65 69 72 20 73 69 67 6e  ne of their sign
296e0 69 66 69 63 61 6e 74 0a 2a 2a 20 66 69 65 6c 64  ificant.** field
296f0 73 20 28 6e 6f 74 20 63 6f 75 6e 74 69 6e 67 20  s (not counting 
29700 74 68 65 20 50 34 20 66 69 65 6c 64 73 20 61 74  the P4 fields at
29710 20 74 68 65 20 65 6e 64 20 77 68 69 63 68 20 61   the end which a
29720 72 65 20 69 67 6e 6f 72 65 64 29 20 74 68 65 6e  re ignored) then
29730 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73  .** the comparis
29740 6f 6e 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f  on is assumed to
29750 20 62 65 20 65 71 75 61 6c 2e 0a 2a 2a 0a 2a 2a   be equal..**.**
29760 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   Fall through to
29770 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
29780 6e 20 69 66 20 74 68 65 20 74 77 6f 20 72 65 63  n if the two rec
29790 6f 72 64 73 20 63 6f 6d 70 61 72 65 20 65 71 75  ords compare equ
297a0 61 6c 20 74 6f 0a 2a 2a 20 65 61 63 68 20 6f 74  al to.** each ot
297b0 68 65 72 2e 20 20 4a 75 6d 70 20 74 6f 20 50 32  her.  Jump to P2
297c0 20 69 66 20 74 68 65 79 20 61 72 65 20 64 69 66   if they are dif
297d0 66 65 72 65 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20  ferent..*/.case 
297e0 4f 50 5f 53 6f 72 74 65 72 43 6f 6d 70 61 72 65  OP_SorterCompare
297f0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
29800 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b   *pC;.  int res;
29810 0a 20 20 69 6e 74 20 6e 4b 65 79 43 6f 6c 3b 0a  .  int nKeyCol;.
29820 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
29830 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
29840 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
29850 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
29860 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
29870 4e 54 33 32 20 29 3b 0a 20 20 70 49 6e 33 20 3d  NT32 );.  pIn3 =
29880 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
29890 0a 20 20 6e 4b 65 79 43 6f 6c 20 3d 20 70 4f 70  .  nKeyCol = pOp
298a0 2d 3e 70 34 2e 69 3b 0a 20 20 72 65 73 20 3d 20  ->p4.i;.  res = 
298b0 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  0;.  rc = sqlite
298c0 33 56 64 62 65 53 6f 72 74 65 72 43 6f 6d 70 61  3VdbeSorterCompa
298d0 72 65 28 70 43 2c 20 70 49 6e 33 2c 20 6e 4b 65  re(pC, pIn3, nKe
298e0 79 43 6f 6c 2c 20 26 72 65 73 29 3b 0a 20 20 56  yCol, &res);.  V
298f0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
29900 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20  es!=0,2);.  if( 
29910 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
29920 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
29930 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a  if( res ) goto j
29940 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65  ump_to_p2;.  bre
29950 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.};../* Opcod
29960 65 3a 20 53 6f 72 74 65 72 44 61 74 61 20 50 31  e: SorterData P1
29970 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
29980 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61  nopsis: r[P2]=da
29990 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69  ta.**.** Write i
299a0 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20  nto register P2 
299b0 74 68 65 20 63 75 72 72 65 6e 74 20 73 6f 72 74  the current sort
299c0 65 72 20 64 61 74 61 20 66 6f 72 20 73 6f 72 74  er data for sort
299d0 65 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a  er cursor P1..**
299e0 20 54 68 65 6e 20 63 6c 65 61 72 20 74 68 65 20   Then clear the 
299f0 63 6f 6c 75 6d 6e 20 68 65 61 64 65 72 20 63 61  column header ca
29a00 63 68 65 20 6f 6e 20 63 75 72 73 6f 72 20 50 33  che on cursor P3
29a10 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
29a20 6f 64 65 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20  ode is normally 
29a30 75 73 65 20 74 6f 20 6d 6f 76 65 20 61 20 72 65  use to move a re
29a40 63 6f 72 64 20 6f 75 74 20 6f 66 20 74 68 65 20  cord out of the 
29a50 73 6f 72 74 65 72 20 61 6e 64 20 69 6e 74 6f 0a  sorter and into.
29a60 2a 2a 20 61 20 72 65 67 69 73 74 65 72 20 74 68  ** a register th
29a70 61 74 20 69 73 20 74 68 65 20 73 6f 75 72 63 65  at is the source
29a80 20 66 6f 72 20 61 20 70 73 65 75 64 6f 2d 74 61   for a pseudo-ta
29a90 62 6c 65 20 63 75 72 73 6f 72 20 63 72 65 61 74  ble cursor creat
29aa0 65 64 20 75 73 69 6e 67 0a 2a 2a 20 4f 70 65 6e  ed using.** Open
29ab0 50 73 65 75 64 6f 2e 20 20 54 68 61 74 20 70 73  Pseudo.  That ps
29ac0 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f  eudo-table curso
29ad0 72 20 69 73 20 74 68 65 20 6f 6e 65 20 74 68 61  r is the one tha
29ae0 74 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20  t is identified 
29af0 62 79 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20  by.** parameter 
29b00 50 33 2e 20 20 43 6c 65 61 72 69 6e 67 20 74 68  P3.  Clearing th
29b10 65 20 50 33 20 63 6f 6c 75 6d 6e 20 63 61 63 68  e P3 column cach
29b20 65 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 69  e as part of thi
29b30 73 20 6f 70 63 6f 64 65 20 73 61 76 65 73 0a 2a  s opcode saves.*
29b40 2a 20 75 73 20 66 72 6f 6d 20 68 61 76 69 6e 67  * us from having
29b50 20 74 6f 20 69 73 73 75 65 20 61 20 73 65 70 61   to issue a sepa
29b60 72 61 74 65 20 4e 75 6c 6c 52 6f 77 20 69 6e 73  rate NullRow ins
29b70 74 72 75 63 74 69 6f 6e 20 74 6f 20 63 6c 65 61  truction to clea
29b80 72 20 74 68 61 74 20 63 61 63 68 65 2e 0a 2a 2f  r that cache..*/
29b90 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 44  .case OP_SorterD
29ba0 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ata: {.  VdbeCur
29bb0 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 4f 75 74  sor *pC;..  pOut
29bc0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
29bd0 5d 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  ];.  pC = p->apC
29be0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
29bf0 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
29c00 70 43 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  pC) );.  rc = sq
29c10 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52  lite3VdbeSorterR
29c20 6f 77 6b 65 79 28 70 43 2c 20 70 4f 75 74 29 3b  owkey(pC, pOut);
29c30 0a 20 20 61 73 73 65 72 74 28 20 72 63 21 3d 53  .  assert( rc!=S
29c40 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 4f 75  QLITE_OK || (pOu
29c50 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  t->flags & MEM_B
29c60 6c 6f 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74  lob) );.  assert
29c70 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
29c80 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
29c90 6f 72 20 29 3b 0a 20 20 69 66 28 20 72 63 20 29  or );.  if( rc )
29ca0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
29cb0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 2d 3e 61  to_error;.  p->a
29cc0 70 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 2d 3e 63  pCsr[pOp->p3]->c
29cd0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
29ce0 48 45 5f 53 54 41 4c 45 3b 0a 20 20 62 72 65 61  HE_STALE;.  brea
29cf0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
29d00 20 52 6f 77 44 61 74 61 20 50 31 20 50 32 20 50   RowData P1 P2 P
29d10 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
29d20 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a  s: r[P2]=data.**
29d30 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72  .** Write into r
29d40 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63  egister P2 the c
29d50 6f 6d 70 6c 65 74 65 20 72 6f 77 20 63 6f 6e 74  omplete row cont
29d60 65 6e 74 20 66 6f 72 20 74 68 65 20 72 6f 77 20  ent for the row 
29d70 61 74 20 0a 2a 2a 20 77 68 69 63 68 20 63 75 72  at .** which cur
29d80 73 6f 72 20 50 31 20 69 73 20 63 75 72 72 65 6e  sor P1 is curren
29d90 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a  tly pointing..**
29da0 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74   There is no int
29db0 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74  erpretation of t
29dc0 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74  he data.  .** It
29dd0 20 69 73 20 6a 75 73 74 20 63 6f 70 69 65 64 20   is just copied 
29de0 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67 69  onto the P2 regi
29df0 73 74 65 72 20 65 78 61 63 74 6c 79 20 61 73 20  ster exactly as 
29e00 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20  .** it is found 
29e10 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
29e20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63  file..**.** If c
29e30 75 72 73 6f 72 20 50 31 20 69 73 20 61 6e 20 69  ursor P1 is an i
29e40 6e 64 65 78 2c 20 74 68 65 6e 20 74 68 65 20 63  ndex, then the c
29e50 6f 6e 74 65 6e 74 20 69 73 20 74 68 65 20 6b 65  ontent is the ke
29e60 79 20 6f 66 20 74 68 65 20 72 6f 77 2e 0a 2a 2a  y of the row..**
29e70 20 49 66 20 63 75 72 73 6f 72 20 50 32 20 69 73   If cursor P2 is
29e80 20 61 20 74 61 62 6c 65 2c 20 74 68 65 6e 20 74   a table, then t
29e90 68 65 20 63 6f 6e 74 65 6e 74 20 65 78 74 72 61  he content extra
29ea0 63 74 65 64 20 69 73 20 74 68 65 20 64 61 74 61  cted is the data
29eb0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
29ec0 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
29ed0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76   pointing to a v
29ee0 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20  alid row (not a 
29ef0 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20  NULL row).** of 
29f00 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
29f10 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
29f20 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 21 3d 30  ..**.** If P3!=0
29f30 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64   then this opcod
29f40 65 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f 20  e is allowed to 
29f50 6d 61 6b 65 20 61 6e 20 65 70 68 65 6d 65 72 61  make an ephemera
29f60 6c 20 70 6f 69 6e 74 65 72 0a 2a 2a 20 69 6e 74  l pointer.** int
29f70 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 70  o the database p
29f80 61 67 65 2e 20 20 54 68 61 74 20 6d 65 61 6e 73  age.  That means
29f90 20 74 68 61 74 20 74 68 65 20 63 6f 6e 74 65 6e   that the conten
29fa0 74 20 6f 66 20 74 68 65 20 6f 75 74 70 75 74 0a  t of the output.
29fb0 2a 2a 20 72 65 67 69 73 74 65 72 20 77 69 6c 6c  ** register will
29fc0 20 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64 20   be invalidated 
29fd0 61 73 20 73 6f 6f 6e 20 61 73 20 74 68 65 20 63  as soon as the c
29fe0 75 72 73 6f 72 20 6d 6f 76 65 73 20 2d 20 69 6e  ursor moves - in
29ff0 63 6c 75 64 69 6e 67 0a 2a 2a 20 6d 6f 76 65 73  cluding.** moves
2a000 20 63 61 75 73 65 64 20 62 79 20 6f 74 68 65 72   caused by other
2a010 20 63 75 72 73 6f 72 73 20 74 68 61 74 20 22 73   cursors that "s
2a020 61 76 65 22 20 74 68 65 20 63 75 72 72 65 6e 74  ave" the current
2a030 20 63 75 72 73 6f 72 73 0a 2a 2a 20 70 6f 73 69   cursors.** posi
2a040 74 69 6f 6e 20 69 6e 20 6f 72 64 65 72 20 74 68  tion in order th
2a050 61 74 20 74 68 65 79 20 63 61 6e 20 77 72 69 74  at they can writ
2a060 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20 74 61  e to the same ta
2a070 62 6c 65 2e 20 20 49 66 20 50 33 3d 3d 30 0a 2a  ble.  If P3==0.*
2a080 2a 20 74 68 65 6e 20 61 20 63 6f 70 79 20 6f 66  * then a copy of
2a090 20 74 68 65 20 64 61 74 61 20 69 73 20 6d 61 64   the data is mad
2a0a0 65 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 2e 20 20  e into memory.  
2a0b0 50 33 21 3d 30 20 69 73 20 66 61 73 74 65 72 2c  P3!=0 is faster,
2a0c0 20 62 75 74 0a 2a 2a 20 50 33 3d 3d 30 20 69 73   but.** P3==0 is
2a0d0 20 73 61 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 66   safer..**.** If
2a0e0 20 50 33 21 3d 30 20 74 68 65 6e 20 74 68 65 20   P3!=0 then the 
2a0f0 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 50  content of the P
2a100 32 20 72 65 67 69 73 74 65 72 20 69 73 20 75 6e  2 register is un
2a110 73 75 69 74 61 62 6c 65 20 66 6f 72 20 75 73 65  suitable for use
2a120 0a 2a 2a 20 69 6e 20 4f 50 5f 52 65 73 75 6c 74  .** in OP_Result
2a130 20 61 6e 64 20 61 6e 79 20 4f 50 5f 52 65 73 75   and any OP_Resu
2a140 6c 74 20 77 69 6c 6c 20 69 6e 76 61 6c 69 64 61  lt will invalida
2a150 74 65 20 74 68 65 20 50 32 20 72 65 67 69 73 74  te the P2 regist
2a160 65 72 20 63 6f 6e 74 65 6e 74 2e 0a 2a 2a 20 54  er content..** T
2a170 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20 63  he P2 register c
2a180 6f 6e 74 65 6e 74 20 69 73 20 69 6e 76 61 6c 69  ontent is invali
2a190 64 61 74 65 64 20 62 79 20 6f 70 63 6f 64 65 73  dated by opcodes
2a1a0 20 6c 69 6b 65 20 4f 50 5f 46 75 6e 63 74 69 6f   like OP_Functio
2a1b0 6e 20 6f 72 0a 2a 2a 20 62 79 20 61 6e 79 20 75  n or.** by any u
2a1c0 73 65 20 6f 66 20 61 6e 6f 74 68 65 72 20 63 75  se of another cu
2a1d0 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f  rsor pointing to
2a1e0 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65 2e   the same table.
2a1f0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44  .*/.case OP_RowD
2a200 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ata: {.  VdbeCur
2a210 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
2a220 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 33  sor *pCrsr;.  u3
2a230 32 20 6e 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f  2 n;..  pOut = o
2a240 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
2a250 20 70 4f 70 29 3b 0a 0a 20 20 61 73 73 65 72 74   pOp);..  assert
2a260 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
2a270 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
2a280 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
2a290 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
2a2a0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
2a2b0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
2a2c0 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
2a2d0 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73  PE_BTREE );.  as
2a2e0 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
2a2f0 43 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  C)==0 );.  asser
2a300 74 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d  t( pC->nullRow==
2a310 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
2a320 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30  C->uc.pCursor!=0
2a330 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
2a340 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 0a 20  ->uc.pCursor;.. 
2a350 20 2f 2a 20 54 68 65 20 4f 50 5f 52 6f 77 44 61   /* The OP_RowDa
2a360 74 61 20 6f 70 63 6f 64 65 73 20 61 6c 77 61 79  ta opcodes alway
2a370 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f 74 45  s follow OP_NotE
2a380 78 69 73 74 73 20 6f 72 0a 20 20 2a 2a 20 4f 50  xists or.  ** OP
2a390 5f 53 65 65 6b 52 6f 77 69 64 20 6f 72 20 4f 50  _SeekRowid or OP
2a3a0 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e 65 78 74 20  _Rewind/Op_Next 
2a3b0 77 69 74 68 20 6e 6f 20 69 6e 74 65 72 76 65 6e  with no interven
2a3c0 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 73  ing instructions
2a3d0 0a 20 20 2a 2a 20 74 68 61 74 20 6d 69 67 68 74  .  ** that might
2a3e0 20 69 6e 76 61 6c 69 64 61 74 65 20 74 68 65 20   invalidate the 
2a3f0 63 75 72 73 6f 72 2e 0a 20 20 2a 2a 20 49 66 20  cursor..  ** If 
2a400 74 68 69 73 20 77 68 65 72 65 20 6e 6f 74 20 74  this where not t
2a410 68 65 20 63 61 73 65 2c 20 6f 6e 20 6f 66 20 74  he case, on of t
2a420 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 73 73  he following ass
2a430 65 72 74 28 29 73 0a 20 20 2a 2a 20 77 6f 75 6c  ert()s.  ** woul
2a440 64 20 66 61 69 6c 2e 20 20 53 68 6f 75 6c 64 20  d fail.  Should 
2a450 74 68 69 73 20 65 76 65 72 20 63 68 61 6e 67 65  this ever change
2a460 20 28 62 65 63 61 75 73 65 20 6f 66 20 63 68 61   (because of cha
2a470 6e 67 65 73 20 69 6e 20 74 68 65 20 63 6f 64 65  nges in the code
2a480 0a 20 20 2a 2a 20 67 65 6e 65 72 61 74 6f 72 29  .  ** generator)
2a490 20 74 68 65 6e 20 74 68 65 20 66 69 78 20 77 6f   then the fix wo
2a4a0 75 6c 64 20 62 65 20 74 6f 20 69 6e 73 65 72 74  uld be to insert
2a4b0 20 61 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20   a call to.  ** 
2a4c0 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
2a4d0 72 4d 6f 76 65 74 6f 28 29 2e 0a 20 20 2a 2f 0a  rMoveto()..  */.
2a4e0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
2a4f0 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
2a500 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c  );.  assert( sql
2a510 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49  ite3BtreeCursorI
2a520 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b  sValid(pCrsr) );
2a530 0a 23 69 66 20 30 20 20 2f 2a 20 4e 6f 74 20 72  .#if 0  /* Not r
2a540 65 71 75 69 72 65 64 20 64 75 65 20 74 6f 20 74  equired due to t
2a550 68 65 20 70 72 65 76 69 6f 75 73 20 74 6f 20 61  he previous to a
2a560 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
2a570 74 73 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c  ts */.  rc = sql
2a580 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
2a590 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20  veto(pC);.  if( 
2a5a0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
2a5b0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2a5c0 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a  o_error;.#endif.
2a5d0 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 42 74  .  n = sqlite3Bt
2a5e0 72 65 65 50 61 79 6c 6f 61 64 53 69 7a 65 28 70  reePayloadSize(p
2a5f0 43 72 73 72 29 3b 0a 20 20 69 66 28 20 6e 3e 28  Crsr);.  if( n>(
2a600 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  u32)db->aLimit[S
2a610 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
2a620 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  TH] ){.    goto 
2a630 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 74  too_big;.  }.  t
2a640 65 73 74 63 61 73 65 28 20 6e 3d 3d 30 20 29 3b  estcase( n==0 );
2a650 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
2a660 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28  dbeMemFromBtree(
2a670 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75  pCrsr, 0, n, pOu
2a680 74 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  t);.  if( rc ) g
2a690 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2a6a0 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 21 70  _error;.  if( !p
2a6b0 4f 70 2d 3e 70 33 20 29 20 44 65 65 70 68 65 6d  Op->p3 ) Deephem
2a6c0 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 20  eralize(pOut);. 
2a6d0 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
2a6e0 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 52 45  SIZE(pOut);.  RE
2a6f0 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
2a700 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 62  ->p2, pOut);.  b
2a710 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2a720 64 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32 20  de: Rowid P1 P2 
2a730 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
2a740 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a  s: r[P2]=rowid.*
2a750 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72 65  *.** Store in re
2a760 67 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74  gister P2 an int
2a770 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68  eger which is th
2a780 65 20 6b 65 79 20 6f 66 20 74 68 65 20 74 61 62  e key of the tab
2a790 6c 65 20 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a  le entry that.**
2a7a0 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
2a7b0 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a   point to..**.**
2a7c0 20 50 31 20 63 61 6e 20 62 65 20 65 69 74 68 65   P1 can be eithe
2a7d0 72 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74 61  r an ordinary ta
2a7e0 62 6c 65 20 6f 72 20 61 20 76 69 72 74 75 61 6c  ble or a virtual
2a7f0 20 74 61 62 6c 65 2e 20 20 54 68 65 72 65 20 75   table.  There u
2a800 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 61 20 73  sed to.** be a s
2a810 65 70 61 72 61 74 65 20 4f 50 5f 56 52 6f 77 69  eparate OP_VRowi
2a820 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 75 73 65  d opcode for use
2a830 20 77 69 74 68 20 76 69 72 74 75 61 6c 20 74 61   with virtual ta
2a840 62 6c 65 73 2c 20 62 75 74 20 74 68 69 73 0a 2a  bles, but this.*
2a850 2a 20 6f 6e 65 20 6f 70 63 6f 64 65 20 6e 6f 77  * one opcode now
2a860 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74 68 20   works for both 
2a870 74 61 62 6c 65 20 74 79 70 65 73 2e 0a 2a 2f 0a  table types..*/.
2a880 63 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a 20 7b  case OP_Rowid: {
2a890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a8a0 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64   /* out2 */.  Vd
2a8b0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
2a8c0 69 36 34 20 76 3b 0a 20 20 73 71 6c 69 74 65 33  i64 v;.  sqlite3
2a8d0 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
2a8e0 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
2a8f0 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a  dule *pModule;..
2a900 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
2a910 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
2a920 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2a930 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2a940 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
2a950 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
2a960 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2a970 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
2a980 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
2a990 70 65 21 3d 43 55 52 54 59 50 45 5f 50 53 45 55  pe!=CURTYPE_PSEU
2a9a0 44 4f 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f  DO || pC->nullRo
2a9b0 77 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 6e  w );.  if( pC->n
2a9c0 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 70 4f  ullRow ){.    pO
2a9d0 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
2a9e0 4e 75 6c 6c 3b 0a 20 20 20 20 62 72 65 61 6b 3b  Null;.    break;
2a9f0 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d  .  }else if( pC-
2aa00 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
2aa10 29 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d 3e 6d  ){.    v = pC->m
2aa20 6f 76 65 74 6f 54 61 72 67 65 74 3b 0a 23 69 66  ovetoTarget;.#if
2aa30 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2aa40 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
2aa50 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 65 43  }else if( pC->eC
2aa60 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
2aa70 56 54 41 42 20 29 7b 0a 20 20 20 20 61 73 73 65  VTAB ){.    asse
2aa80 72 74 28 20 70 43 2d 3e 75 63 2e 70 56 43 75 72  rt( pC->uc.pVCur
2aa90 21 3d 30 20 29 3b 0a 20 20 20 20 70 56 74 61 62  !=0 );.    pVtab
2aaa0 20 3d 20 70 43 2d 3e 75 63 2e 70 56 43 75 72 2d   = pC->uc.pVCur-
2aab0 3e 70 56 74 61 62 3b 0a 20 20 20 20 70 4d 6f 64  >pVtab;.    pMod
2aac0 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f  ule = pVtab->pMo
2aad0 64 75 6c 65 3b 0a 20 20 20 20 61 73 73 65 72 74  dule;.    assert
2aae0 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69  ( pModule->xRowi
2aaf0 64 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d  d );.    rc = pM
2ab00 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70 43  odule->xRowid(pC
2ab10 2d 3e 75 63 2e 70 56 43 75 72 2c 20 26 76 29 3b  ->uc.pVCur, &v);
2ab20 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62  .    sqlite3Vtab
2ab30 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
2ab40 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66 28 20  pVtab);.    if( 
2ab50 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
2ab60 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65  due_to_error;.#e
2ab70 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
2ab80 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2ab90 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   */.  }else{.   
2aba0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
2abb0 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
2abc0 54 52 45 45 20 29 3b 0a 20 20 20 20 61 73 73 65  TREE );.    asse
2abd0 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  rt( pC->uc.pCurs
2abe0 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20  or!=0 );.    rc 
2abf0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
2ac00 73 6f 72 52 65 73 74 6f 72 65 28 70 43 29 3b 0a  sorRestore(pC);.
2ac10 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74      if( rc ) got
2ac20 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2ac30 72 72 6f 72 3b 0a 20 20 20 20 69 66 28 20 70 43  rror;.    if( pC
2ac40 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
2ac50 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
2ac60 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20   MEM_Null;.     
2ac70 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
2ac80 20 20 76 20 3d 20 73 71 6c 69 74 65 33 42 74 72    v = sqlite3Btr
2ac90 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43 2d  eeIntegerKey(pC-
2aca0 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20  >uc.pCursor);.  
2acb0 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  }.  pOut->u.i = 
2acc0 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  v;.  break;.}../
2acd0 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f  * Opcode: NullRo
2ace0 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  w P1 * * * *.**.
2acf0 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63 75 72 73  ** Move the curs
2ad00 6f 72 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20  or P1 to a null 
2ad10 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c  row.  Any OP_Col
2ad20 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a  umn operations.*
2ad30 2a 20 74 68 61 74 20 6f 63 63 75 72 20 77 68 69  * that occur whi
2ad40 6c 65 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  le the cursor is
2ad50 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77   on the null row
2ad60 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20   will always.** 
2ad70 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f  write a NULL..*/
2ad80 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77  .case OP_NullRow
2ad90 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
2ada0 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28   *pC;..  assert(
2adb0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2adc0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
2add0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
2ade0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
2adf0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
2ae00 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
2ae10 3d 20 31 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 1;.  pC->cache
2ae20 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
2ae30 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 43 2d 3e  TALE;.  if( pC->
2ae40 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
2ae50 45 5f 42 54 52 45 45 20 29 7b 0a 20 20 20 20 61  E_BTREE ){.    a
2ae60 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
2ae70 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20  ursor!=0 );.    
2ae80 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61  sqlite3BtreeClea
2ae90 72 43 75 72 73 6f 72 28 70 43 2d 3e 75 63 2e 70  rCursor(pC->uc.p
2aea0 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 23 69 66  Cursor);.  }.#if
2aeb0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
2aec0 0a 20 20 69 66 28 20 70 43 2d 3e 73 65 65 6b 4f  .  if( pC->seekO
2aed0 70 3d 3d 30 20 29 20 70 43 2d 3e 73 65 65 6b 4f  p==0 ) pC->seekO
2aee0 70 20 3d 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3b 0a  p = OP_NullRow;.
2aef0 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a  #endif.  break;.
2af00 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
2af10 65 6b 45 6e 64 20 50 31 20 2a 20 2a 20 2a 20 2a  ekEnd P1 * * * *
2af20 0a 2a 2a 0a 2a 2a 20 50 6f 73 69 74 69 6f 6e 20  .**.** Position 
2af30 63 75 72 73 6f 72 20 50 31 20 61 74 20 74 68 65  cursor P1 at the
2af40 20 65 6e 64 20 6f 66 20 74 68 65 20 62 74 72 65   end of the btre
2af50 65 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73  e for the purpos
2af60 65 20 6f 66 0a 2a 2a 20 61 70 70 65 6e 64 69 6e  e of.** appendin
2af70 67 20 61 20 6e 65 77 20 65 6e 74 72 79 20 6f 6e  g a new entry on
2af80 74 6f 20 74 68 65 20 62 74 72 65 65 2e 0a 2a 2a  to the btree..**
2af90 0a 2a 2a 20 49 74 20 69 73 20 61 73 73 75 6d 65  .** It is assume
2afa0 64 20 74 68 61 74 20 74 68 65 20 63 75 72 73 6f  d that the curso
2afb0 72 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 66  r is used only f
2afc0 6f 72 20 61 70 70 65 6e 64 69 6e 67 20 61 6e 64  or appending and
2afd0 20 73 6f 0a 2a 2a 20 69 66 20 74 68 65 20 63 75   so.** if the cu
2afe0 72 73 6f 72 20 69 73 20 76 61 6c 69 64 2c 20 74  rsor is valid, t
2aff0 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6d  hen the cursor m
2b000 75 73 74 20 61 6c 72 65 61 64 79 20 62 65 20 70  ust already be p
2b010 6f 69 6e 74 69 6e 67 0a 2a 2a 20 61 74 20 74 68  ointing.** at th
2b020 65 20 65 6e 64 20 6f 66 20 74 68 65 20 62 74 72  e end of the btr
2b030 65 65 20 61 6e 64 20 73 6f 20 6e 6f 20 63 68 61  ee and so no cha
2b040 6e 67 65 73 20 61 72 65 20 6d 61 64 65 20 74 6f  nges are made to
2b050 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 2e 0a  .** the cursor..
2b060 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 61  */./* Opcode: La
2b070 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  st P1 P2 * * *.*
2b080 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73  *.** The next us
2b090 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f  e of the Rowid o
2b0a0 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 50 72 65 76  r Column or Prev
2b0b0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72   instruction for
2b0c0 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66   P1 .** will ref
2b0d0 65 72 20 74 6f 20 74 68 65 20 6c 61 73 74 20 65  er to the last e
2b0e0 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61 74 61  ntry in the data
2b0f0 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e  base table or in
2b100 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74  dex..** If the t
2b110 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73  able or index is
2b120 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c   empty and P2>0,
2b130 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64   then jump immed
2b140 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a  iately to P2..**
2b150 20 49 66 20 50 32 20 69 73 20 30 20 6f 72 20 69   If P2 is 0 or i
2b160 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
2b170 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74  ndex is not empt
2b180 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a  y, fall through.
2b190 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ** to the follow
2b1a0 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ing instruction.
2b1b0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
2b1c0 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
2b1d0 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20  rsor configured 
2b1e0 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72  to move in rever
2b1f0 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f  se order,.** fro
2b200 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64  m the end toward
2b210 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20   the beginning. 
2b220 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
2b230 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
2b240 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  * configured to 
2b250 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65  use Prev, not Ne
2b260 78 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  xt..*/.case OP_S
2b270 65 65 6b 45 6e 64 3a 0a 63 61 73 65 20 4f 50 5f  eekEnd:.case OP_
2b280 4c 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20 2f  Last: {        /
2b290 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65  * jump */.  Vdbe
2b2a0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
2b2b0 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
2b2c0 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73   int res;..  ass
2b2d0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2b2e0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
2b2f0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
2b300 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
2b310 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
2b320 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2b330 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
2b340 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
2b350 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e   pCrsr = pC->uc.
2b360 70 43 75 72 73 6f 72 3b 0a 20 20 72 65 73 20 3d  pCursor;.  res =
2b370 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   0;.  assert( pC
2b380 72 73 72 21 3d 30 20 29 3b 0a 23 69 66 64 65 66  rsr!=0 );.#ifdef
2b390 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
2b3a0 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70  pC->seekOp = pOp
2b3b0 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66  ->opcode;.#endif
2b3c0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
2b3d0 64 65 3d 3d 4f 50 5f 53 65 65 6b 45 6e 64 20 29  de==OP_SeekEnd )
2b3e0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
2b3f0 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20 20 20 20  p->p2==0 );.    
2b400 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d  pC->seekResult =
2b410 20 2d 31 3b 0a 20 20 20 20 69 66 28 20 73 71 6c   -1;.    if( sql
2b420 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49  ite3BtreeCursorI
2b430 73 56 61 6c 69 64 4e 4e 28 70 43 72 73 72 29 20  sValidNN(pCrsr) 
2b440 29 7b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  ){.      break;.
2b450 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 63 20 3d      }.  }.  rc =
2b460 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
2b470 74 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a  t(pCrsr, &res);.
2b480 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
2b490 28 75 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e 64  (u8)res;.  pC->d
2b4a0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
2b4b0 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  0;.  pC->cacheSt
2b4c0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
2b4d0 4c 45 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  LE;.  if( rc ) g
2b4e0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2b4f0 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 70 4f  _error;.  if( pO
2b500 70 2d 3e 70 32 3e 30 20 29 7b 0a 20 20 20 20 56  p->p2>0 ){.    V
2b510 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
2b520 65 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66  es!=0,2);.    if
2b530 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d  ( res ) goto jum
2b540 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62  p_to_p2;.  }.  b
2b550 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2b560 64 65 3a 20 49 66 53 6d 61 6c 6c 65 72 20 50 31  de: IfSmaller P1
2b570 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
2b580 20 45 73 74 69 6d 61 74 65 20 74 68 65 20 6e 75   Estimate the nu
2b590 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20  mber of rows in 
2b5a0 74 68 65 20 74 61 62 6c 65 20 50 31 2e 20 20 4a  the table P1.  J
2b5b0 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 61  ump to P2 if tha
2b5c0 74 0a 2a 2a 20 65 73 74 69 6d 61 74 65 20 69 73  t.** estimate is
2b5d0 20 6c 65 73 73 20 74 68 61 6e 20 61 70 70 72 6f   less than appro
2b5e0 78 69 6d 61 74 65 6c 79 20 32 2a 2a 28 30 2e 31  ximately 2**(0.1
2b5f0 2a 50 33 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  *P3)..*/.case OP
2b600 5f 49 66 53 6d 61 6c 6c 65 72 3a 20 7b 20 20 20  _IfSmaller: {   
2b610 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
2b620 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
2b630 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
2b640 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
2b650 20 20 69 36 34 20 73 7a 3b 0a 0a 20 20 61 73 73    i64 sz;..  ass
2b660 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2b670 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
2b680 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
2b690 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
2b6a0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
2b6b0 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  =0 );.  pCrsr = 
2b6c0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a  pC->uc.pCursor;.
2b6d0 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20    assert( pCrsr 
2b6e0 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
2b6f0 33 42 74 72 65 65 46 69 72 73 74 28 70 43 72 73  3BtreeFirst(pCrs
2b700 72 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20  r, &res);.  if( 
2b710 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
2b720 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2b730 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20  if( res==0 ){.  
2b740 20 20 73 7a 20 3d 20 73 71 6c 69 74 65 33 42 74    sz = sqlite3Bt
2b750 72 65 65 52 6f 77 43 6f 75 6e 74 45 73 74 28 70  reeRowCountEst(p
2b760 43 72 73 72 29 3b 0a 20 20 20 20 69 66 28 20 41  Crsr);.    if( A
2b770 4c 57 41 59 53 28 73 7a 3e 3d 30 29 20 26 26 20  LWAYS(sz>=0) && 
2b780 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 28 28 75  sqlite3LogEst((u
2b790 36 34 29 73 7a 29 3c 70 4f 70 2d 3e 70 33 20 29  64)sz)<pOp->p3 )
2b7a0 20 72 65 73 20 3d 20 31 3b 0a 20 20 7d 0a 20 20   res = 1;.  }.  
2b7b0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2b7c0 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28  res!=0,2);.  if(
2b7d0 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70   res ) goto jump
2b7e0 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b  _to_p2;.  break;
2b7f0 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .}.../* Opcode: 
2b800 53 6f 72 74 65 72 53 6f 72 74 20 50 31 20 50 32  SorterSort P1 P2
2b810 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 66 74   * * *.**.** Aft
2b820 65 72 20 61 6c 6c 20 72 65 63 6f 72 64 73 20 68  er all records h
2b830 61 76 65 20 62 65 65 6e 20 69 6e 73 65 72 74 65  ave been inserte
2b840 64 20 69 6e 74 6f 20 74 68 65 20 53 6f 72 74 65  d into the Sorte
2b850 72 20 6f 62 6a 65 63 74 0a 2a 2a 20 69 64 65 6e  r object.** iden
2b860 74 69 66 69 65 64 20 62 79 20 50 31 2c 20 69 6e  tified by P1, in
2b870 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65  voke this opcode
2b880 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 64 6f 20   to actually do 
2b890 74 68 65 20 73 6f 72 74 69 6e 67 2e 0a 2a 2a 20  the sorting..** 
2b8a0 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
2b8b0 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
2b8c0 64 73 20 74 6f 20 62 65 20 73 6f 72 74 65 64 2e  ds to be sorted.
2b8d0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
2b8e0 64 65 20 69 73 20 61 6e 20 61 6c 69 61 73 20 66  de is an alias f
2b8f0 6f 72 20 4f 50 5f 53 6f 72 74 20 61 6e 64 20 4f  or OP_Sort and O
2b900 50 5f 52 65 77 69 6e 64 20 74 68 61 74 20 69 73  P_Rewind that is
2b910 20 75 73 65 64 0a 2a 2a 20 66 6f 72 20 53 6f 72   used.** for Sor
2b920 74 65 72 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a  ter objects..*/.
2b930 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20  /* Opcode: Sort 
2b940 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
2b950 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f  * This opcode do
2b960 65 73 20 65 78 61 63 74 6c 79 20 74 68 65 20 73  es exactly the s
2b970 61 6d 65 20 74 68 69 6e 67 20 61 73 20 4f 50 5f  ame thing as OP_
2b980 52 65 77 69 6e 64 20 65 78 63 65 70 74 20 74 68  Rewind except th
2b990 61 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65  at.** it increme
2b9a0 6e 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e  nts an undocumen
2b9b0 74 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  ted global varia
2b9c0 62 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 73  ble used for tes
2b9d0 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74  ting..**.** Sort
2b9e0 69 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c 69 73  ing is accomplis
2b9f0 68 65 64 20 62 79 20 77 72 69 74 69 6e 67 20 72  hed by writing r
2ba00 65 63 6f 72 64 73 20 69 6e 74 6f 20 61 20 73 6f  ecords into a so
2ba10 72 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20  rting index,.** 
2ba20 74 68 65 6e 20 72 65 77 69 6e 64 69 6e 67 20 74  then rewinding t
2ba30 68 61 74 20 69 6e 64 65 78 20 61 6e 64 20 70 6c  hat index and pl
2ba40 61 79 69 6e 67 20 69 74 20 62 61 63 6b 20 66 72  aying it back fr
2ba50 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a  om beginning to.
2ba60 2a 2a 20 65 6e 64 2e 20 20 57 65 20 75 73 65 20  ** end.  We use 
2ba70 74 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f  the OP_Sort opco
2ba80 64 65 20 69 6e 73 74 65 61 64 20 6f 66 20 4f 50  de instead of OP
2ba90 5f 52 65 77 69 6e 64 20 74 6f 20 64 6f 20 74 68  _Rewind to do th
2baa0 65 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20 73  e.** rewinding s
2bab0 6f 20 74 68 61 74 20 74 68 65 20 67 6c 6f 62 61  o that the globa
2bac0 6c 20 76 61 72 69 61 62 6c 65 20 77 69 6c 6c 20  l variable will 
2bad0 62 65 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61  be incremented a
2bae0 6e 64 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e  nd.** regression
2baf0 20 74 65 73 74 73 20 63 61 6e 20 64 65 74 65 72   tests can deter
2bb00 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20  mine whether or 
2bb10 6e 6f 74 20 74 68 65 20 6f 70 74 69 6d 69 7a 65  not the optimize
2bb20 72 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c  r is.** correctl
2bb30 79 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74  y optimizing out
2bb40 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20   sorts..*/.case 
2bb50 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 3a 20 20  OP_SorterSort:  
2bb60 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73    /* jump */.cas
2bb70 65 20 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20  e OP_Sort: {    
2bb80 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23      /* jump */.#
2bb90 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
2bba0 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  T.  sqlite3_sort
2bbb0 5f 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69  _count++;.  sqli
2bbc0 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74  te3_search_count
2bbd0 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e  --;.#endif.  p->
2bbe0 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f  aCounter[SQLITE_
2bbf0 53 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 5d  STMTSTATUS_SORT]
2bc00 2b 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68  ++;.  /* Fall th
2bc10 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65  rough into OP_Re
2bc20 77 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63  wind */.}./* Opc
2bc30 6f 64 65 3a 20 52 65 77 69 6e 64 20 50 31 20 50  ode: Rewind P1 P
2bc40 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
2bc50 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68  e next use of th
2bc60 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d  e Rowid or Colum
2bc70 6e 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75  n or Next instru
2bc80 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a  ction for P1 .**
2bc90 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74   will refer to t
2bca0 68 65 20 66 69 72 73 74 20 65 6e 74 72 79 20 69  he first entry i
2bcb0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  n the database t
2bcc0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a  able or index..*
2bcd0 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f  * If the table o
2bce0 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79  r index is empty
2bcf0 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  , jump immediate
2bd00 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20  ly to P2..** If 
2bd10 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
2bd20 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c  ex is not empty,
2bd30 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
2bd40 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a   the following .
2bd50 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ** instruction..
2bd60 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
2bd70 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  e leaves the cur
2bd80 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74  sor configured t
2bd90 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72  o move in forwar
2bda0 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d  d order,.** from
2bdb0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74   the beginning t
2bdc0 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20  oward the end.  
2bdd0 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
2bde0 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a  the cursor is.**
2bdf0 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75   configured to u
2be00 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65  se Next, not Pre
2be10 76 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  v..*/.case OP_Re
2be20 77 69 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f  wind: {        /
2be30 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65  * jump */.  Vdbe
2be40 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
2be50 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
2be60 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73   int res;..  ass
2be70 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2be80 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
2be90 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
2bea0 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b  t( pOp->p5==0 );
2beb0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
2bec0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2bed0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
2bee0 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72  assert( isSorter
2bef0 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f  (pC)==(pOp->opco
2bf00 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 53 6f 72  de==OP_SorterSor
2bf10 74 29 20 29 3b 0a 20 20 72 65 73 20 3d 20 31 3b  t) );.  res = 1;
2bf20 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
2bf30 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f  EBUG.  pC->seekO
2bf40 70 20 3d 20 4f 50 5f 52 65 77 69 6e 64 3b 0a 23  p = OP_Rewind;.#
2bf50 65 6e 64 69 66 0a 20 20 69 66 28 20 69 73 53 6f  endif.  if( isSo
2bf60 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20  rter(pC) ){.    
2bf70 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
2bf80 53 6f 72 74 65 72 52 65 77 69 6e 64 28 70 43 2c  SorterRewind(pC,
2bf90 20 26 72 65 73 29 3b 0a 20 20 7d 65 6c 73 65 7b   &res);.  }else{
2bfa0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
2bfb0 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
2bfc0 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20  PE_BTREE );.    
2bfd0 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70  pCrsr = pC->uc.p
2bfe0 43 75 72 73 6f 72 3b 0a 20 20 20 20 61 73 73 65  Cursor;.    asse
2bff0 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20  rt( pCrsr );.   
2c000 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2c010 65 65 46 69 72 73 74 28 70 43 72 73 72 2c 20 26  eeFirst(pCrsr, &
2c020 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 64 65  res);.    pC->de
2c030 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
2c040 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
2c050 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
2c060 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72  ALE;.  }.  if( r
2c070 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
2c080 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70  ue_to_error;.  p
2c090 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38  C->nullRow = (u8
2c0a0 29 72 65 73 3b 0a 20 20 61 73 73 65 72 74 28 20  )res;.  assert( 
2c0b0 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70  pOp->p2>0 && pOp
2c0c0 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20  ->p2<p->nOp );. 
2c0d0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2c0e0 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66  (res!=0,2);.  if
2c0f0 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d  ( res ) goto jum
2c100 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b  p_to_p2;.  break
2c110 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2c120 4e 65 78 74 20 50 31 20 50 32 20 50 33 20 50 34  Next P1 P2 P3 P4
2c130 20 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63   P5.**.** Advanc
2c140 65 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  e cursor P1 so t
2c150 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  hat it points to
2c160 20 74 68 65 20 6e 65 78 74 20 6b 65 79 2f 64 61   the next key/da
2c170 74 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a  ta pair in its.*
2c180 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  * table or index
2c190 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20  .  If there are 
2c1a0 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61 6c 75  no more key/valu
2c1b0 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c  e pairs then fal
2c1c0 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20  l through.** to 
2c1d0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
2c1e0 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20  struction.  But 
2c1f0 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 61 64  if the cursor ad
2c200 76 61 6e 63 65 20 77 61 73 20 73 75 63 63 65 73  vance was succes
2c210 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d  sful,.** jump im
2c220 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
2c230 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4e 65 78 74 20  .**.** The Next 
2c240 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76  opcode is only v
2c250 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61  alid following a
2c260 6e 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45  n SeekGT, SeekGE
2c270 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 52 65 77 69 6e  , or.** OP_Rewin
2c280 64 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74 6f  d opcode used to
2c290 20 70 6f 73 69 74 69 6f 6e 20 74 68 65 20 63 75   position the cu
2c2a0 72 73 6f 72 2e 20 20 4e 65 78 74 20 69 73 20 6e  rsor.  Next is n
2c2b0 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f  ot allowed.** to
2c2c0 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 4c 54 2c 20   follow SeekLT, 
2c2d0 53 65 65 6b 4c 45 2c 20 6f 72 20 4f 50 5f 4c 61  SeekLE, or OP_La
2c2e0 73 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31  st..**.** The P1
2c2f0 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
2c300 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65  for a real table
2c310 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74  , not a pseudo-t
2c320 61 62 6c 65 2e 20 20 50 31 20 6d 75 73 74 20 68  able.  P1 must h
2c330 61 76 65 0a 2a 2a 20 62 65 65 6e 20 6f 70 65 6e  ave.** been open
2c340 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73  ed prior to this
2c350 20 6f 70 63 6f 64 65 20 6f 72 20 74 68 65 20 70   opcode or the p
2c360 72 6f 67 72 61 6d 20 77 69 6c 6c 20 73 65 67 66  rogram will segf
2c370 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ault..**.** The 
2c380 50 33 20 76 61 6c 75 65 20 69 73 20 61 20 68 69  P3 value is a hi
2c390 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65 65 20  nt to the btree 
2c3a0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20  implementation. 
2c3b0 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a  If P3==1, that.*
2c3c0 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20 61 6e  * means P1 is an
2c3d0 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64 20 74   SQL index and t
2c3e0 68 61 74 20 74 68 69 73 20 69 6e 73 74 72 75 63  hat this instruc
2c3f0 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65 20  tion could have 
2c400 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20  been.** omitted 
2c410 69 66 20 74 68 61 74 20 69 6e 64 65 78 20 68 61  if that index ha
2c420 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e 20 20  d been unique.  
2c430 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e  P3 is usually 0.
2c440 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79    P3 is.** alway
2c450 73 20 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e  s either 0 or 1.
2c460 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77  .**.** P4 is alw
2c470 61 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41  ays of type P4_A
2c480 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63  DVANCE. The func
2c490 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69  tion pointer poi
2c4a0 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65  nts to.** sqlite
2c4b0 33 42 74 72 65 65 4e 65 78 74 28 29 2e 0a 2a 2a  3BtreeNext()..**
2c4c0 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73  .** If P5 is pos
2c4d0 69 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75  itive and the ju
2c4e0 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65  mp is taken, the
2c4f0 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a  n event counter.
2c500 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69  ** number P5-1 i
2c510 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  n the prepared s
2c520 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72  tatement is incr
2c530 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53  emented..**.** S
2c540 65 65 20 61 6c 73 6f 3a 20 50 72 65 76 0a 2a 2f  ee also: Prev.*/
2c550 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76  ./* Opcode: Prev
2c560 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
2c570 2a 2a 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63 75  **.** Back up cu
2c580 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
2c590 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
2c5a0 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 64 61   previous key/da
2c5b0 74 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a  ta pair in its.*
2c5c0 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  * table or index
2c5d0 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20 6e  .  If there is n
2c5e0 6f 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 76  o previous key/v
2c5f0 61 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20  alue pairs then 
2c600 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20  fall through.** 
2c610 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
2c620 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42   instruction.  B
2c630 75 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72  ut if the cursor
2c640 20 62 61 63 6b 75 70 20 77 61 73 20 73 75 63 63   backup was succ
2c650 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20  essful,.** jump 
2c660 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
2c670 32 2e 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  2..**.**.** The 
2c680 50 72 65 76 20 6f 70 63 6f 64 65 20 69 73 20 6f  Prev opcode is o
2c690 6e 6c 79 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77  nly valid follow
2c6a0 69 6e 67 20 61 6e 20 53 65 65 6b 4c 54 2c 20 53  ing an SeekLT, S
2c6b0 65 65 6b 4c 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f  eekLE, or.** OP_
2c6c0 4c 61 73 74 20 6f 70 63 6f 64 65 20 75 73 65 64  Last opcode used
2c6d0 20 74 6f 20 70 6f 73 69 74 69 6f 6e 20 74 68 65   to position the
2c6e0 20 63 75 72 73 6f 72 2e 20 20 50 72 65 76 20 69   cursor.  Prev i
2c6f0 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a  s not allowed.**
2c700 20 74 6f 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 47   to follow SeekG
2c710 54 2c 20 53 65 65 6b 47 45 2c 20 6f 72 20 4f 50  T, SeekGE, or OP
2c720 5f 52 65 77 69 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54  _Rewind..**.** T
2c730 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
2c740 74 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20  t be for a real 
2c750 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65  table, not a pse
2c760 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49 66 20 50  udo-table.  If P
2c770 31 20 69 73 0a 2a 2a 20 6e 6f 74 20 6f 70 65 6e  1 is.** not open
2c780 20 74 68 65 6e 20 74 68 65 20 62 65 68 61 76 69   then the behavi
2c790 6f 72 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e  or is undefined.
2c7a0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20 76 61  .**.** The P3 va
2c7b0 6c 75 65 20 69 73 20 61 20 68 69 6e 74 20 74 6f  lue is a hint to
2c7c0 20 74 68 65 20 62 74 72 65 65 20 69 6d 70 6c 65   the btree imple
2c7d0 6d 65 6e 74 61 74 69 6f 6e 2e 20 49 66 20 50 33  mentation. If P3
2c7e0 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a 20 6d 65 61  ==1, that.** mea
2c7f0 6e 73 20 50 31 20 69 73 20 61 6e 20 53 51 4c 20  ns P1 is an SQL 
2c800 69 6e 64 65 78 20 61 6e 64 20 74 68 61 74 20 74  index and that t
2c810 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
2c820 63 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 0a  could have been.
2c830 2a 2a 20 6f 6d 69 74 74 65 64 20 69 66 20 74 68  ** omitted if th
2c840 61 74 20 69 6e 64 65 78 20 68 61 64 20 62 65 65  at index had bee
2c850 6e 20 75 6e 69 71 75 65 2e 20 20 50 33 20 69 73  n unique.  P3 is
2c860 20 75 73 75 61 6c 6c 79 20 30 2e 20 20 50 33 20   usually 0.  P3 
2c870 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 65 69 74  is.** always eit
2c880 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a  her 0 or 1..**.*
2c890 2a 20 50 34 20 69 73 20 61 6c 77 61 79 73 20 6f  * P4 is always o
2c8a0 66 20 74 79 70 65 20 50 34 5f 41 44 56 41 4e 43  f type P4_ADVANC
2c8b0 45 2e 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20  E. The function 
2c8c0 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74 73 20 74  pointer points t
2c8d0 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65  o.** sqlite3Btre
2c8e0 65 50 72 65 76 69 6f 75 73 28 29 2e 0a 2a 2a 0a  ePrevious()..**.
2c8f0 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73 69  ** If P5 is posi
2c900 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d  tive and the jum
2c910 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e  p is taken, then
2c920 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a   event counter.*
2c930 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e  * number P5-1 in
2c940 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74   the prepared st
2c950 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65  atement is incre
2c960 6d 65 6e 74 65 64 2e 0a 2a 2f 0a 2f 2a 20 4f 70  mented..*/./* Op
2c970 63 6f 64 65 3a 20 53 6f 72 74 65 72 4e 65 78 74  code: SorterNext
2c980 20 50 31 20 50 32 20 2a 20 2a 20 50 35 0a 2a 2a   P1 P2 * * P5.**
2c990 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
2c9a0 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
2c9b0 4f 50 5f 4e 65 78 74 20 65 78 63 65 70 74 20 74  OP_Next except t
2c9c0 68 61 74 20 50 31 20 6d 75 73 74 20 62 65 20 61  hat P1 must be a
2c9d0 0a 2a 2a 20 73 6f 72 74 65 72 20 6f 62 6a 65 63  .** sorter objec
2c9e0 74 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 20  t for which the 
2c9f0 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 20 6f 70  OP_SorterSort op
2ca00 63 6f 64 65 20 68 61 73 20 62 65 65 6e 0a 2a 2a  code has been.**
2ca10 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68 69 73 20   invoked.  This 
2ca20 6f 70 63 6f 64 65 20 61 64 76 61 6e 63 65 73 20  opcode advances 
2ca30 74 68 65 20 63 75 72 73 6f 72 20 74 6f 20 74 68  the cursor to th
2ca40 65 20 6e 65 78 74 20 73 6f 72 74 65 64 0a 2a 2a  e next sorted.**
2ca50 20 72 65 63 6f 72 64 2c 20 6f 72 20 6a 75 6d 70   record, or jump
2ca60 73 20 74 6f 20 50 32 20 69 66 20 74 68 65 72 65  s to P2 if there
2ca70 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20 73 6f 72   are no more sor
2ca80 74 65 64 20 72 65 63 6f 72 64 73 2e 0a 2a 2f 0a  ted records..*/.
2ca90 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 4e 65  case OP_SorterNe
2caa0 78 74 3a 20 7b 20 20 2f 2a 20 6a 75 6d 70 20 2a  xt: {  /* jump *
2cab0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
2cac0 70 43 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61  pC;..  pC = p->a
2cad0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
2cae0 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65   assert( isSorte
2caf0 72 28 70 43 29 20 29 3b 0a 20 20 72 63 20 3d 20  r(pC) );.  rc = 
2cb00 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
2cb10 72 4e 65 78 74 28 64 62 2c 20 70 43 29 3b 0a 20  rNext(db, pC);. 
2cb20 20 67 6f 74 6f 20 6e 65 78 74 5f 74 61 69 6c 3b   goto next_tail;
2cb30 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 3a 20 20  .case OP_Prev:  
2cb40 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
2cb50 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 3a  */.case OP_Next:
2cb60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
2cb70 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  p */.  assert( p
2cb80 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
2cb90 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
2cba0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
2cbb0 2d 3e 70 35 3c 41 72 72 61 79 53 69 7a 65 28 70  ->p5<ArraySize(p
2cbc0 2d 3e 61 43 6f 75 6e 74 65 72 29 20 29 3b 0a 20  ->aCounter) );. 
2cbd0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
2cbe0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2cbf0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
2cc00 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
2cc10 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
2cc20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
2cc30 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
2cc40 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74  TREE );.  assert
2cc50 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  ( pOp->opcode!=O
2cc60 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 70  P_Next || pOp->p
2cc70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69  4.xAdvance==sqli
2cc80 74 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b 0a  te3BtreeNext );.
2cc90 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
2cca0 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c  pcode!=OP_Prev |
2ccb0 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e  | pOp->p4.xAdvan
2ccc0 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65  ce==sqlite3Btree
2ccd0 50 72 65 76 69 6f 75 73 20 29 3b 0a 0a 20 20 2f  Previous );..  /
2cce0 2a 20 54 68 65 20 4e 65 78 74 20 6f 70 63 6f 64  * The Next opcod
2ccf0 65 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 61  e is only used a
2cd00 66 74 65 72 20 53 65 65 6b 47 54 2c 20 53 65 65  fter SeekGT, See
2cd10 6b 47 45 2c 20 52 65 77 69 6e 64 2c 20 61 6e 64  kGE, Rewind, and
2cd20 20 46 6f 75 6e 64 2e 0a 20 20 2a 2a 20 54 68 65   Found..  ** The
2cd30 20 50 72 65 76 20 6f 70 63 6f 64 65 20 69 73 20   Prev opcode is 
2cd40 6f 6e 6c 79 20 75 73 65 64 20 61 66 74 65 72 20  only used after 
2cd50 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20  SeekLT, SeekLE, 
2cd60 61 6e 64 20 4c 61 73 74 2e 20 2a 2f 0a 20 20 61  and Last. */.  a
2cd70 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
2cd80 64 65 21 3d 4f 50 5f 4e 65 78 74 0a 20 20 20 20  de!=OP_Next.    
2cd90 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70     || pC->seekOp
2cda0 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 70  ==OP_SeekGT || p
2cdb0 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65  C->seekOp==OP_Se
2cdc0 65 6b 47 45 0a 20 20 20 20 20 20 20 7c 7c 20 70  ekGE.       || p
2cdd0 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 52 65  C->seekOp==OP_Re
2cde0 77 69 6e 64 20 7c 7c 20 70 43 2d 3e 73 65 65 6b  wind || pC->seek
2cdf0 4f 70 3d 3d 4f 50 5f 46 6f 75 6e 64 20 0a 20 20  Op==OP_Found .  
2ce00 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b       || pC->seek
2ce10 4f 70 3d 3d 4f 50 5f 4e 75 6c 6c 52 6f 77 7c 7c  Op==OP_NullRow||
2ce20 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f   pC->seekOp==OP_
2ce30 53 65 65 6b 52 6f 77 69 64 29 3b 0a 20 20 61 73  SeekRowid);.  as
2ce40 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
2ce50 65 21 3d 4f 50 5f 50 72 65 76 0a 20 20 20 20 20  e!=OP_Prev.     
2ce60 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d    || pC->seekOp=
2ce70 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 70 43  =OP_SeekLT || pC
2ce80 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65  ->seekOp==OP_See
2ce90 6b 4c 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 43  kLE.       || pC
2cea0 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4c 61 73  ->seekOp==OP_Las
2ceb0 74 20 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d  t .       || pC-
2cec0 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4e 75 6c 6c  >seekOp==OP_Null
2ced0 52 6f 77 29 3b 0a 0a 20 20 72 63 20 3d 20 70 4f  Row);..  rc = pO
2cee0 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 28 70  p->p4.xAdvance(p
2cef0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 70  C->uc.pCursor, p
2cf00 4f 70 2d 3e 70 33 29 3b 0a 6e 65 78 74 5f 74 61  Op->p3);.next_ta
2cf10 69 6c 3a 0a 20 20 70 43 2d 3e 63 61 63 68 65 53  il:.  pC->cacheS
2cf20 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
2cf30 41 4c 45 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  ALE;.  VdbeBranc
2cf40 68 54 61 6b 65 6e 28 72 63 3d 3d 53 51 4c 49 54  hTaken(rc==SQLIT
2cf50 45 5f 4f 4b 2c 32 29 3b 0a 20 20 69 66 28 20 72  E_OK,2);.  if( r
2cf60 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
2cf70 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20      pC->nullRow 
2cf80 3d 20 30 3b 0a 20 20 20 20 70 2d 3e 61 43 6f 75  = 0;.    p->aCou
2cf90 6e 74 65 72 5b 70 4f 70 2d 3e 70 35 5d 2b 2b 3b  nter[pOp->p5]++;
2cfa0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
2cfb0 45 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  EST.    sqlite3_
2cfc0 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a  search_count++;.
2cfd0 23 65 6e 64 69 66 0a 20 20 20 20 67 6f 74 6f 20  #endif.    goto 
2cfe0 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63  jump_to_p2_and_c
2cff0 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
2d000 70 74 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63  pt;.  }.  if( rc
2d010 21 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 20  !=SQLITE_DONE ) 
2d020 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2d030 6f 5f 65 72 72 6f 72 3b 0a 20 20 72 63 20 3d 20  o_error;.  rc = 
2d040 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 70 43 2d  SQLITE_OK;.  pC-
2d050 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
2d060 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69  goto check_for_i
2d070 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20  nterrupt;.}../* 
2d080 4f 70 63 6f 64 65 3a 20 49 64 78 49 6e 73 65 72  Opcode: IdxInser
2d090 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
2d0a0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
2d0b0 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65  y=r[P2].**.** Re
2d0c0 67 69 73 74 65 72 20 50 32 20 68 6f 6c 64 73 20  gister P2 holds 
2d0d0 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79  an SQL index key
2d0e0 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a   made using the.
2d0f0 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e  ** MakeRecord in
2d100 73 74 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69  structions.  Thi
2d110 73 20 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20  s opcode writes 
2d120 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f  that key.** into
2d130 20 74 68 65 20 69 6e 64 65 78 20 50 31 2e 20 20   the index P1.  
2d140 44 61 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74  Data for the ent
2d150 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a  ry is nil..**.**
2d160 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 7a 65   If P4 is not ze
2d170 72 6f 2c 20 74 68 65 6e 20 69 74 20 69 73 20 74  ro, then it is t
2d180 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c  he number of val
2d190 75 65 73 20 69 6e 20 74 68 65 20 75 6e 70 61 63  ues in the unpac
2d1a0 6b 65 64 0a 2a 2a 20 6b 65 79 20 6f 66 20 72 65  ked.** key of re
2d1b0 67 28 50 32 29 2e 20 20 49 6e 20 74 68 61 74 20  g(P2).  In that 
2d1c0 63 61 73 65 2c 20 50 33 20 69 73 20 74 68 65 20  case, P3 is the 
2d1d0 69 6e 64 65 78 20 6f 66 20 74 68 65 20 66 69 72  index of the fir
2d1e0 73 74 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 66  st register.** f
2d1f0 6f 72 20 74 68 65 20 75 6e 70 61 63 6b 65 64 20  or the unpacked 
2d200 6b 65 79 2e 20 20 54 68 65 20 61 76 61 69 6c 61  key.  The availa
2d210 62 69 6c 69 74 79 20 6f 66 20 74 68 65 20 75 6e  bility of the un
2d220 70 61 63 6b 65 64 20 6b 65 79 20 63 61 6e 20 73  packed key can s
2d230 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 62 65 20 61  ometimes.** be a
2d240 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a  n optimization..
2d250 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20  **.** If P5 has 
2d260 74 68 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e  the OPFLAG_APPEN
2d270 44 20 62 69 74 20 73 65 74 2c 20 74 68 61 74 20  D bit set, that 
2d280 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65  is a hint to the
2d290 20 62 2d 74 72 65 65 20 6c 61 79 65 72 0a 2a 2a   b-tree layer.**
2d2a0 20 74 68 61 74 20 74 68 69 73 20 69 6e 73 65 72   that this inser
2d2b0 74 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62  t is likely to b
2d2c0 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a  e an append..**.
2d2d0 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68 65  ** If P5 has the
2d2e0 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
2d2f0 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68  bit set, then th
2d300 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  e change counter
2d310 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74   is.** increment
2d320 65 64 20 62 79 20 74 68 69 73 20 69 6e 73 74 72  ed by this instr
2d330 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 20  uction.  If the 
2d340 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62  OPFLAG_NCHANGE b
2d350 69 74 20 69 73 20 63 6c 65 61 72 2c 0a 2a 2a 20  it is clear,.** 
2d360 74 68 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20  then the change 
2d370 63 6f 75 6e 74 65 72 20 69 73 20 75 6e 63 68 61  counter is uncha
2d380 6e 67 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  nged..**.** If t
2d390 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45  he OPFLAG_USESEE
2d3a0 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6f 66 20  KRESULT flag of 
2d3b0 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 20 69  P5 is set, the i
2d3c0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69  mplementation mi
2d3d0 67 68 74 0a 2a 2a 20 72 75 6e 20 66 61 73 74 65  ght.** run faste
2d3e0 72 20 62 79 20 61 76 6f 69 64 69 6e 67 20 61 6e  r by avoiding an
2d3f0 20 75 6e 6e 65 63 65 73 73 61 72 79 20 73 65 65   unnecessary see
2d400 6b 20 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 20  k on cursor P1. 
2d410 20 48 6f 77 65 76 65 72 2c 0a 2a 2a 20 74 68 65   However,.** the
2d420 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
2d430 45 53 55 4c 54 20 66 6c 61 67 20 6d 75 73 74 20  ESULT flag must 
2d440 6f 6e 6c 79 20 62 65 20 73 65 74 20 69 66 20 74  only be set if t
2d450 68 65 72 65 20 68 61 76 65 20 62 65 65 6e 20 6e  here have been n
2d460 6f 20 70 72 69 6f 72 0a 2a 2a 20 73 65 65 6b 73  o prior.** seeks
2d470 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6f   on the cursor o
2d480 72 20 69 66 20 74 68 65 20 6d 6f 73 74 20 72 65  r if the most re
2d490 63 65 6e 74 20 73 65 65 6b 20 75 73 65 64 20 61  cent seek used a
2d4a0 20 6b 65 79 20 65 71 75 69 76 61 6c 65 6e 74 0a   key equivalent.
2d4b0 2a 2a 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a  ** to P2. .**.**
2d4c0 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
2d4d0 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72  n only works for
2d4e0 20 69 6e 64 69 63 65 73 2e 20 20 54 68 65 20 65   indices.  The e
2d4f0 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75  quivalent instru
2d500 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62  ction.** for tab
2d510 6c 65 73 20 69 73 20 4f 50 5f 49 6e 73 65 72 74  les is OP_Insert
2d520 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
2d530 53 6f 72 74 65 72 49 6e 73 65 72 74 20 50 31 20  SorterInsert P1 
2d540 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
2d550 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a  psis: key=r[P2].
2d560 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  **.** Register P
2d570 32 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20 69  2 holds an SQL i
2d580 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75 73  ndex key made us
2d590 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52  ing the.** MakeR
2d5a0 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f  ecord instructio
2d5b0 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  ns.  This opcode
2d5c0 20 77 72 69 74 65 73 20 74 68 61 74 20 6b 65 79   writes that key
2d5d0 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 73 6f 72  .** into the sor
2d5e0 74 65 72 20 50 31 2e 20 20 44 61 74 61 20 66 6f  ter P1.  Data fo
2d5f0 72 20 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e  r the entry is n
2d600 69 6c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  il..*/.case OP_S
2d610 6f 72 74 65 72 49 6e 73 65 72 74 3a 20 20 20 20  orterInsert:    
2d620 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 63 61 73     /* in2 */.cas
2d630 65 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 3a 20  e OP_IdxInsert: 
2d640 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20  {        /* in2 
2d650 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
2d660 2a 70 43 3b 0a 20 20 42 74 72 65 65 50 61 79 6c  *pC;.  BtreePayl
2d670 6f 61 64 20 78 3b 0a 0a 20 20 61 73 73 65 72 74  oad x;..  assert
2d680 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
2d690 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
2d6a0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
2d6b0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
2d6c0 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63    sqlite3VdbeInc
2d6d0 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c  rWriteCounter(p,
2d6e0 20 70 43 29 3b 0a 20 20 61 73 73 65 72 74 28 20   pC);.  assert( 
2d6f0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
2d700 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d  t( isSorter(pC)=
2d710 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  =(pOp->opcode==O
2d720 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 29 20  P_SorterInsert) 
2d730 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  );.  pIn2 = &aMe
2d740 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
2d750 73 65 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67  sert( pIn2->flag
2d760 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a  s & MEM_Blob );.
2d770 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
2d780 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29  OPFLAG_NCHANGE )
2d790 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20   p->nChange++;. 
2d7a0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
2d7b0 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
2d7c0 54 52 45 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  TREE || pOp->opc
2d7d0 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e  ode==OP_SorterIn
2d7e0 73 65 72 74 20 29 3b 0a 20 20 61 73 73 65 72 74  sert );.  assert
2d7f0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
2d800 20 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e   );.  rc = Expan
2d810 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20 69  dBlob(pIn2);.  i
2d820 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
2d830 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2d840 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
2d850 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73  de==OP_SorterIns
2d860 65 72 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ert ){.    rc = 
2d870 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
2d880 72 57 72 69 74 65 28 70 43 2c 20 70 49 6e 32 29  rWrite(pC, pIn2)
2d890 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 78  ;.  }else{.    x
2d8a0 2e 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b  .nKey = pIn2->n;
2d8b0 0a 20 20 20 20 78 2e 70 4b 65 79 20 3d 20 70 49  .    x.pKey = pI
2d8c0 6e 32 2d 3e 7a 3b 0a 20 20 20 20 78 2e 61 4d 65  n2->z;.    x.aMe
2d8d0 6d 20 3d 20 61 4d 65 6d 20 2b 20 70 4f 70 2d 3e  m = aMem + pOp->
2d8e0 70 33 3b 0a 20 20 20 20 78 2e 6e 4d 65 6d 20 3d  p3;.    x.nMem =
2d8f0 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b   (u16)pOp->p4.i;
2d900 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
2d910 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d  3BtreeInsert(pC-
2d920 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 78 2c  >uc.pCursor, &x,
2d930 0a 20 20 20 20 20 20 20 20 20 28 70 4f 70 2d 3e  .         (pOp->
2d940 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 41 50 50  p5 & (OPFLAG_APP
2d950 45 4e 44 7c 4f 50 46 4c 41 47 5f 53 41 56 45 50  END|OPFLAG_SAVEP
2d960 4f 53 49 54 49 4f 4e 29 29 2c 20 0a 20 20 20 20  OSITION)), .    
2d970 20 20 20 20 28 28 70 4f 70 2d 3e 70 35 20 26 20      ((pOp->p5 & 
2d980 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
2d990 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b  SULT) ? pC->seek
2d9a0 52 65 73 75 6c 74 20 3a 20 30 29 0a 20 20 20 20  Result : 0).    
2d9b0 20 20 20 20 29 3b 0a 20 20 20 20 61 73 73 65 72      );.    asser
2d9c0 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
2d9d0 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20  oveto==0 );.    
2d9e0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
2d9f0 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
2da00 20 7d 0a 20 20 69 66 28 20 72 63 29 20 67 6f 74   }.  if( rc) got
2da10 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2da20 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
2da30 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  ../* Opcode: Idx
2da40 44 65 6c 65 74 65 20 50 31 20 50 32 20 50 33 20  Delete P1 P2 P3 
2da50 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2da60 20 6b 65 79 3d 72 5b 50 32 40 50 33 5d 0a 2a 2a   key=r[P2@P3].**
2da70 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74 20  .** The content 
2da80 6f 66 20 50 33 20 72 65 67 69 73 74 65 72 73 20  of P3 registers 
2da90 73 74 61 72 74 69 6e 67 20 61 74 20 72 65 67 69  starting at regi
2daa0 73 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20  ster P2 form.** 
2dab0 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
2dac0 78 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63 6f  x key. This opco
2dad0 64 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74 20  de removes that 
2dae0 65 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20 0a  entry from the .
2daf0 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64 20  ** index opened 
2db00 62 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f  by cursor P1..*/
2db10 0a 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c 65  .case OP_IdxDele
2db20 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  te: {.  VdbeCurs
2db30 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
2db40 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
2db50 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64   res;.  Unpacked
2db60 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73  Record r;..  ass
2db70 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
2db80 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2db90 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  >p2>0 && pOp->p2
2dba0 2b 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d  +pOp->p3<=(p->nM
2dbb0 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
2dbc0 72 29 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74  r)+1 );.  assert
2dbd0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
2dbe0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
2dbf0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
2dc00 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
2dc10 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
2dc20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
2dc30 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
2dc40 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 73 71  PE_BTREE );.  sq
2dc50 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57 72 69  lite3VdbeIncrWri
2dc60 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 70 43 29  teCounter(p, pC)
2dc70 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
2dc80 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73  uc.pCursor;.  as
2dc90 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29  sert( pCrsr!=0 )
2dca0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2dcb0 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 72 2e 70 4b  >p5==0 );.  r.pK
2dcc0 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65  eyInfo = pC->pKe
2dcd0 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c  yInfo;.  r.nFiel
2dce0 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 33  d = (u16)pOp->p3
2dcf0 3b 0a 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63  ;.  r.default_rc
2dd00 20 3d 20 30 3b 0a 20 20 72 2e 61 4d 65 6d 20 3d   = 0;.  r.aMem =
2dd10 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
2dd20 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
2dd30 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
2dd40 65 64 28 70 43 72 73 72 2c 20 26 72 2c 20 30 2c  ed(pCrsr, &r, 0,
2dd50 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28   0, &res);.  if(
2dd60 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
2dd70 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
2dd80 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20   if( res==0 ){. 
2dd90 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
2dda0 74 72 65 65 44 65 6c 65 74 65 28 70 43 72 73 72  treeDelete(pCrsr
2ddb0 2c 20 42 54 52 45 45 5f 41 55 58 44 45 4c 45 54  , BTREE_AUXDELET
2ddc0 45 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29  E);.    if( rc )
2ddd0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2dde0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20  to_error;.  }.  
2ddf0 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
2de00 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
2de10 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
2de20 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
2de30 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75  ;.  pC->seekResu
2de40 6c 74 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b  lt = 0;.  break;
2de50 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
2de60 65 66 65 72 72 65 64 53 65 65 6b 20 50 31 20 2a  eferredSeek P1 *
2de70 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
2de80 70 73 69 73 3a 20 4d 6f 76 65 20 50 33 20 74 6f  psis: Move P3 to
2de90 20 50 31 2e 72 6f 77 69 64 20 69 66 20 6e 65 65   P1.rowid if nee
2dea0 64 65 64 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  ded.**.** P1 is 
2deb0 61 6e 20 6f 70 65 6e 20 69 6e 64 65 78 20 63 75  an open index cu
2dec0 72 73 6f 72 20 61 6e 64 20 50 33 20 69 73 20 61  rsor and P3 is a
2ded0 20 63 75 72 73 6f 72 20 6f 6e 20 74 68 65 20 63   cursor on the c
2dee0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a 2a 2a 20  orresponding.** 
2def0 74 61 62 6c 65 2e 20 20 54 68 69 73 20 6f 70 63  table.  This opc
2df00 6f 64 65 20 64 6f 65 73 20 61 20 64 65 66 65 72  ode does a defer
2df10 72 65 64 20 73 65 65 6b 20 6f 66 20 74 68 65 20  red seek of the 
2df20 50 33 20 74 61 62 6c 65 20 63 75 72 73 6f 72 0a  P3 table cursor.
2df30 2a 2a 20 74 6f 20 74 68 65 20 72 6f 77 20 74 68  ** to the row th
2df40 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  at corresponds t
2df50 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f  o the current ro
2df60 77 20 6f 66 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54  w of P1..**.** T
2df70 68 69 73 20 69 73 20 61 20 64 65 66 65 72 72 65  his is a deferre
2df80 64 20 73 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67  d seek.  Nothing
2df90 20 61 63 74 75 61 6c 6c 79 20 68 61 70 70 65 6e   actually happen
2dfa0 73 20 75 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63  s until.** the c
2dfb0 75 72 73 6f 72 20 69 73 20 75 73 65 64 20 74 6f  ursor is used to
2dfc0 20 72 65 61 64 20 61 20 72 65 63 6f 72 64 2e 20   read a record. 
2dfd0 20 54 68 61 74 20 77 61 79 2c 20 69 66 20 6e 6f   That way, if no
2dfe0 20 72 65 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c   reads.** occur,
2dff0 20 6e 6f 20 75 6e 6e 65 63 65 73 73 61 72 79 20   no unnecessary 
2e000 49 2f 4f 20 68 61 70 70 65 6e 73 2e 0a 2a 2a 0a  I/O happens..**.
2e010 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 6e 20  ** P4 may be an 
2e020 61 72 72 61 79 20 6f 66 20 69 6e 74 65 67 65 72  array of integer
2e030 73 20 28 74 79 70 65 20 50 34 5f 49 4e 54 41 52  s (type P4_INTAR
2e040 52 41 59 29 20 63 6f 6e 74 61 69 6e 69 6e 67 0a  RAY) containing.
2e050 2a 2a 20 6f 6e 65 20 65 6e 74 72 79 20 66 6f 72  ** one entry for
2e060 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20   each column in 
2e070 74 68 65 20 50 33 20 74 61 62 6c 65 2e 20 20 49  the P3 table.  I
2e080 66 20 61 72 72 61 79 20 65 6e 74 72 79 20 61 28  f array entry a(
2e090 69 29 0a 2a 2a 20 69 73 20 6e 6f 6e 2d 7a 65 72  i).** is non-zer
2e0a0 6f 2c 20 74 68 65 6e 20 72 65 61 64 69 6e 67 20  o, then reading 
2e0b0 63 6f 6c 75 6d 6e 20 61 28 69 29 2d 31 20 66 72  column a(i)-1 fr
2e0c0 6f 6d 20 63 75 72 73 6f 72 20 50 33 20 69 73 20  om cursor P3 is 
2e0d0 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 74  .** equivalent t
2e0e0 6f 20 70 65 72 66 6f 72 6d 69 6e 67 20 74 68 65  o performing the
2e0f0 20 64 65 66 65 72 72 65 64 20 73 65 65 6b 20 61   deferred seek a
2e100 6e 64 20 74 68 65 6e 20 72 65 61 64 69 6e 67 20  nd then reading 
2e110 63 6f 6c 75 6d 6e 20 69 20 0a 2a 2a 20 66 72 6f  column i .** fro
2e120 6d 20 50 31 2e 20 20 54 68 69 73 20 69 6e 66 6f  m P1.  This info
2e130 72 6d 61 74 69 6f 6e 20 69 73 20 73 74 6f 72 65  rmation is store
2e140 64 20 69 6e 20 50 33 20 61 6e 64 20 75 73 65 64  d in P3 and used
2e150 20 74 6f 20 72 65 64 69 72 65 63 74 0a 2a 2a 20   to redirect.** 
2e160 72 65 61 64 73 20 61 67 61 69 6e 73 74 20 50 33  reads against P3
2e170 20 6f 76 65 72 20 74 6f 20 50 31 2c 20 74 68 75   over to P1, thu
2e180 73 20 70 6f 73 73 69 62 6c 79 20 61 76 6f 69 64  s possibly avoid
2e190 69 6e 67 20 74 68 65 20 6e 65 65 64 20 74 6f 0a  ing the need to.
2e1a0 2a 2a 20 73 65 65 6b 20 61 6e 64 20 72 65 61 64  ** seek and read
2e1b0 20 63 75 72 73 6f 72 20 50 33 2e 0a 2a 2f 0a 2f   cursor P3..*/./
2e1c0 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f 77  * Opcode: IdxRow
2e1d0 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  id P1 P2 * * *.*
2e1e0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
2e1f0 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72  ]=rowid.**.** Wr
2e200 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ite into registe
2e210 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20  r P2 an integer 
2e220 77 68 69 63 68 20 69 73 20 74 68 65 20 6c 61 73  which is the las
2e230 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 72  t entry in the r
2e240 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65 20  ecord at.** the 
2e250 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78  end of the index
2e260 20 6b 65 79 20 70 6f 69 6e 74 65 64 20 74 6f 20   key pointed to 
2e270 62 79 20 63 75 72 73 6f 72 20 50 31 2e 20 20 54  by cursor P1.  T
2e280 68 69 73 20 69 6e 74 65 67 65 72 20 73 68 6f 75  his integer shou
2e290 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77  ld be.** the row
2e2a0 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  id of the table 
2e2b0 65 6e 74 72 79 20 74 6f 20 77 68 69 63 68 20 74  entry to which t
2e2c0 68 69 73 20 69 6e 64 65 78 20 65 6e 74 72 79 20  his index entry 
2e2d0 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65  points..**.** Se
2e2e0 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d  e also: Rowid, M
2e2f0 61 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61  akeRecord..*/.ca
2e300 73 65 20 4f 50 5f 44 65 66 65 72 72 65 64 53 65  se OP_DeferredSe
2e310 65 6b 3a 0a 63 61 73 65 20 4f 50 5f 49 64 78 52  ek:.case OP_IdxR
2e320 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20  owid: {         
2e330 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56    /* out2 */.  V
2e340 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20  dbeCursor *pC;  
2e350 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
2e360 65 20 50 31 20 69 6e 64 65 78 20 63 75 72 73 6f  e P1 index curso
2e370 72 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  r */.  VdbeCurso
2e380 72 20 2a 70 54 61 62 43 75 72 3b 20 20 20 20 20  r *pTabCur;     
2e390 20 20 20 2f 2a 20 54 68 65 20 50 32 20 74 61 62     /* The P2 tab
2e3a0 6c 65 20 63 75 72 73 6f 72 20 28 4f 50 5f 44 65  le cursor (OP_De
2e3b0 66 65 72 72 65 64 53 65 65 6b 20 6f 6e 6c 79 29  ferredSeek only)
2e3c0 20 2a 2f 0a 20 20 69 36 34 20 72 6f 77 69 64 3b   */.  i64 rowid;
2e3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e3e0 20 20 2f 2a 20 52 6f 77 69 64 20 74 68 61 74 20    /* Rowid that 
2e3f0 50 31 20 63 75 72 72 65 6e 74 20 70 6f 69 6e 74  P1 current point
2e400 73 20 74 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72  s to */..  asser
2e410 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
2e420 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
2e430 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
2e440 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2e450 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
2e460 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2e470 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
2e480 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61  YPE_BTREE );.  a
2e490 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
2e4a0 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73  ursor!=0 );.  as
2e4b0 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
2e4c0 65 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  e==0 );.  assert
2e4d0 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
2e4e0 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73  veto==0 );.  ass
2e4f0 65 72 74 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f  ert( !pC->nullRo
2e500 77 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  w || pOp->opcode
2e510 3d 3d 4f 50 5f 49 64 78 52 6f 77 69 64 20 29 3b  ==OP_IdxRowid );
2e520 0a 0a 20 20 2f 2a 20 54 68 65 20 49 64 78 52 6f  ..  /* The IdxRo
2e530 77 69 64 20 61 6e 64 20 53 65 65 6b 20 6f 70 63  wid and Seek opc
2e540 6f 64 65 73 20 61 72 65 20 63 6f 6d 62 69 6e 65  odes are combine
2e550 64 20 62 65 63 61 75 73 65 20 6f 66 20 74 68 65  d because of the
2e560 20 63 6f 6d 6d 6f 6e 61 6c 69 74 79 0a 20 20 2a   commonality.  *
2e570 2a 20 6f 66 20 73 71 6c 69 74 65 33 56 64 62 65  * of sqlite3Vdbe
2e580 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 29 20  CursorRestore() 
2e590 61 6e 64 20 73 71 6c 69 74 65 33 56 64 62 65 49  and sqlite3VdbeI
2e5a0 64 78 52 6f 77 69 64 28 29 2e 20 2a 2f 0a 20 20  dxRowid(). */.  
2e5b0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
2e5c0 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43  CursorRestore(pC
2e5d0 29 3b 0a 0a 20 20 2f 2a 20 73 71 6c 69 74 65 33  );..  /* sqlite3
2e5e0 56 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65  VbeCursorRestore
2e5f0 28 29 20 63 61 6e 20 6f 6e 6c 79 20 66 61 69 6c  () can only fail
2e600 20 69 66 20 74 68 65 20 72 65 63 6f 72 64 20 68   if the record h
2e610 61 73 20 62 65 65 6e 20 64 65 6c 65 74 65 64 0a  as been deleted.
2e620 20 20 2a 2a 20 6f 75 74 20 66 72 6f 6d 20 75 6e    ** out from un
2e630 64 65 72 20 74 68 65 20 63 75 72 73 6f 72 2e 20  der the cursor. 
2e640 20 54 68 61 74 20 77 69 6c 6c 20 6e 65 76 65 72   That will never
2e650 20 68 61 70 70 65 6e 73 20 66 6f 72 20 61 6e 20   happens for an 
2e660 49 64 78 52 6f 77 69 64 0a 20 20 2a 2a 20 6f 72  IdxRowid.  ** or
2e670 20 53 65 65 6b 20 6f 70 63 6f 64 65 20 2a 2f 0a   Seek opcode */.
2e680 20 20 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d    if( NEVER(rc!=
2e690 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74  SQLITE_OK) ) got
2e6a0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2e6b0 72 72 6f 72 3b 0a 0a 20 20 69 66 28 20 21 70 43  rror;..  if( !pC
2e6c0 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
2e6d0 20 72 6f 77 69 64 20 3d 20 30 3b 20 20 2f 2a 20   rowid = 0;  /* 
2e6e0 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c  Not needed.  Onl
2e6f0 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63  y used to silenc
2e700 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  e a warning. */.
2e710 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2e720 56 64 62 65 49 64 78 52 6f 77 69 64 28 64 62 2c  VdbeIdxRowid(db,
2e730 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c   pC->uc.pCursor,
2e740 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 69 66   &rowid);.    if
2e750 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
2e760 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  ){.      goto ab
2e770 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2e780 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
2e790 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2e7a0 44 65 66 65 72 72 65 64 53 65 65 6b 20 29 7b 0a  DeferredSeek ){.
2e7b0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
2e7c0 70 2d 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p3>=0 && pOp-
2e7d0 3e 70 33 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p3<p->nCursor )
2e7e0 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75 72 20  ;.      pTabCur 
2e7f0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2e800 70 33 5d 3b 0a 20 20 20 20 20 20 61 73 73 65 72  p3];.      asser
2e810 74 28 20 70 54 61 62 43 75 72 21 3d 30 20 29 3b  t( pTabCur!=0 );
2e820 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
2e830 54 61 62 43 75 72 2d 3e 65 43 75 72 54 79 70 65  TabCur->eCurType
2e840 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
2e850 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
2e860 20 70 54 61 62 43 75 72 2d 3e 75 63 2e 70 43 75   pTabCur->uc.pCu
2e870 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 20  rsor!=0 );.     
2e880 20 61 73 73 65 72 74 28 20 70 54 61 62 43 75 72   assert( pTabCur
2e890 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20  ->isTable );.   
2e8a0 20 20 20 70 54 61 62 43 75 72 2d 3e 6e 75 6c 6c     pTabCur->null
2e8b0 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 70  Row = 0;.      p
2e8c0 54 61 62 43 75 72 2d 3e 6d 6f 76 65 74 6f 54 61  TabCur->movetoTa
2e8d0 72 67 65 74 20 3d 20 72 6f 77 69 64 3b 0a 20 20  rget = rowid;.  
2e8e0 20 20 20 20 70 54 61 62 43 75 72 2d 3e 64 65 66      pTabCur->def
2e8f0 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b  erredMoveto = 1;
2e900 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
2e910 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
2e920 4e 54 41 52 52 41 59 20 7c 7c 20 70 4f 70 2d 3e  NTARRAY || pOp->
2e930 70 34 2e 61 69 3d 3d 30 20 29 3b 0a 20 20 20 20  p4.ai==0 );.    
2e940 20 20 70 54 61 62 43 75 72 2d 3e 61 41 6c 74 4d    pTabCur->aAltM
2e950 61 70 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b  ap = pOp->p4.ai;
2e960 0a 20 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e  .      pTabCur->
2e970 70 41 6c 74 43 75 72 73 6f 72 20 3d 20 70 43 3b  pAltCursor = pC;
2e980 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
2e990 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
2e9a0 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
2e9b0 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  .      pOut->u.i
2e9c0 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a   = rowid;.    }.
2e9d0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
2e9e0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
2e9f0 3d 3d 4f 50 5f 49 64 78 52 6f 77 69 64 20 29 3b  ==OP_IdxRowid );
2ea00 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
2ea10 4d 65 6d 53 65 74 4e 75 6c 6c 28 26 61 4d 65 6d  MemSetNull(&aMem
2ea20 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 7d 0a  [pOp->p2]);.  }.
2ea30 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2ea40 70 63 6f 64 65 3a 20 49 64 78 47 45 20 50 31 20  pcode: IdxGE P1 
2ea50 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
2ea60 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
2ea70 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20  3@P4].**.** The 
2ea80 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75  P4 register valu
2ea90 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  es beginning wit
2eaa0 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70  h P3 form an unp
2eab0 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20  acked index .** 
2eac0 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74  key that omits t
2ead0 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20  he PRIMARY KEY. 
2eae0 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65   Compare this ke
2eaf0 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20  y value against 
2eb00 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68  the index .** th
2eb10 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  at P1 is current
2eb20 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20  ly pointing to, 
2eb30 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49  ignoring the PRI
2eb40 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49  MARY KEY or ROWI
2eb50 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74 20  D .** fields at 
2eb60 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49  the end..**.** I
2eb70 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65  f the P1 index e
2eb80 6e 74 72 79 20 69 73 20 67 72 65 61 74 65 72 20  ntry is greater 
2eb90 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
2eba0 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a   the key value.*
2ebb0 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  * then jump to P
2ebc0 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66 61  2.  Otherwise fa
2ebd0 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
2ebe0 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
2ebf0 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  on..*/./* Opcode
2ec00 3a 20 49 64 78 47 54 20 50 31 20 50 32 20 50 33  : IdxGT P1 P2 P3
2ec10 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
2ec20 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
2ec30 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65  .**.** The P4 re
2ec40 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65  gister values be
2ec50 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20  ginning with P3 
2ec60 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
2ec70 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74   index .** key t
2ec80 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52  hat omits the PR
2ec90 49 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70  IMARY KEY.  Comp
2eca0 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c  are this key val
2ecb0 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20 69  ue against the i
2ecc0 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31  ndex .** that P1
2ecd0 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
2ece0 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72  inting to, ignor
2ecf0 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20  ing the PRIMARY 
2ed00 4b 45 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a  KEY or ROWID .**
2ed10 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20 65   fields at the e
2ed20 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  nd..**.** If the
2ed30 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20   P1 index entry 
2ed40 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
2ed50 74 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a  the key value.**
2ed60 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
2ed70 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c  .  Otherwise fal
2ed80 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
2ed90 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
2eda0 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n..*/./* Opcode:
2edb0 20 49 64 78 4c 54 20 50 31 20 50 32 20 50 33 20   IdxLT P1 P2 P3 
2edc0 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
2edd0 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
2ede0 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67  **.** The P4 reg
2edf0 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67  ister values beg
2ee00 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66  inning with P3 f
2ee10 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20  orm an unpacked 
2ee20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68  index .** key th
2ee30 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49  at omits the PRI
2ee40 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49  MARY KEY or ROWI
2ee50 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73  D.  Compare this
2ee60 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e   key value again
2ee70 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20  st.** the index 
2ee80 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65  that P1 is curre
2ee90 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f  ntly pointing to
2eea0 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50  , ignoring the P
2eeb0 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a  RIMARY KEY or.**
2eec0 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31   ROWID on the P1
2eed0 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66   index..**.** If
2eee0 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e   the P1 index en
2eef0 74 72 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e  try is less than
2ef00 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74   the key value t
2ef10 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
2ef20 2a 2a 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c  ** Otherwise fal
2ef30 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
2ef40 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
2ef50 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n..*/./* Opcode:
2ef60 20 49 64 78 4c 45 20 50 31 20 50 32 20 50 33 20   IdxLE P1 P2 P3 
2ef70 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
2ef80 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
2ef90 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67  **.** The P4 reg
2efa0 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67  ister values beg
2efb0 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66  inning with P3 f
2efc0 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20  orm an unpacked 
2efd0 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68  index .** key th
2efe0 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49  at omits the PRI
2eff0 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49  MARY KEY or ROWI
2f000 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73  D.  Compare this
2f010 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e   key value again
2f020 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20  st.** the index 
2f030 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65  that P1 is curre
2f040 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f  ntly pointing to
2f050 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50  , ignoring the P
2f060 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a  RIMARY KEY or.**
2f070 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31   ROWID on the P1
2f080 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66   index..**.** If
2f090 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e   the P1 index en
2f0a0 74 72 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e  try is less than
2f0b0 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
2f0c0 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20   key value then 
2f0d0 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 4f  jump.** to P2. O
2f0e0 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68  therwise fall th
2f0f0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
2f100 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
2f110 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 45 3a  /.case OP_IdxLE:
2f120 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
2f130 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  p */.case OP_Idx
2f140 47 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  GT:          /* 
2f150 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
2f160 49 64 78 4c 54 3a 20 20 20 20 20 20 20 20 20 20  IdxLT:          
2f170 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
2f180 4f 50 5f 49 64 78 47 45 3a 20 20 7b 20 20 20 20  OP_IdxGE:  {    
2f190 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
2f1a0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
2f1b0 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70    int res;.  Unp
2f1c0 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a  ackedRecord r;..
2f1d0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2f1e0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
2f1f0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
2f200 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
2f210 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2f220 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
2f230 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72  ert( pC->isOrder
2f240 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ed );.  assert( 
2f250 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
2f260 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
2f270 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e   assert( pC->uc.
2f280 70 43 75 72 73 6f 72 21 3d 30 29 3b 0a 20 20 61  pCursor!=0);.  a
2f290 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
2f2a0 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
2f2b0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2f2c0 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  5==0 || pOp->p5=
2f2d0 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =1 );.  assert( 
2f2e0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
2f2f0 49 4e 54 33 32 20 29 3b 0a 20 20 72 2e 70 4b 65  INT32 );.  r.pKe
2f300 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79  yInfo = pC->pKey
2f310 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64  Info;.  r.nField
2f320 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e   = (u16)pOp->p4.
2f330 69 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  i;.  if( pOp->op
2f340 63 6f 64 65 3c 4f 50 5f 49 64 78 4c 54 20 29 7b  code<OP_IdxLT ){
2f350 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
2f360 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
2f370 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  LE || pOp->opcod
2f380 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20  e==OP_IdxGT );. 
2f390 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20     r.default_rc 
2f3a0 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  = -1;.  }else{. 
2f3b0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
2f3c0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45  opcode==OP_IdxGE
2f3d0 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
2f3e0 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20  =OP_IdxLT );.   
2f3f0 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
2f400 30 3b 0a 20 20 7d 0a 20 20 72 2e 61 4d 65 6d 20  0;.  }.  r.aMem 
2f410 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
2f420 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
2f430 44 45 42 55 47 0a 20 20 7b 0a 20 20 20 20 69 6e  DEBUG.  {.    in
2f440 74 20 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  t i;.    for(i=0
2f450 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b  ; i<r.nField; i+
2f460 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  +){.      assert
2f470 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e  ( memIsValid(&r.
2f480 61 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20  aMem[i]) );.    
2f490 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
2f4a0 28 70 4f 70 2d 3e 70 33 2b 69 2c 20 26 61 4d 65  (pOp->p3+i, &aMe
2f4b0 6d 5b 70 4f 70 2d 3e 70 33 2b 69 5d 29 3b 0a 20  m[pOp->p3+i]);. 
2f4c0 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a     }.  }.#endif.
2f4d0 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20 4e    res = 0;  /* N
2f4e0 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79  ot needed.  Only
2f4f0 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65   used to silence
2f500 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20   a warning. */. 
2f510 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
2f520 65 49 64 78 4b 65 79 43 6f 6d 70 61 72 65 28 64  eIdxKeyCompare(d
2f530 62 2c 20 70 43 2c 20 26 72 2c 20 26 72 65 73 29  b, pC, &r, &res)
2f540 3b 0a 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f  ;.  assert( (OP_
2f550 49 64 78 4c 45 26 31 29 3d 3d 28 4f 50 5f 49 64  IdxLE&1)==(OP_Id
2f560 78 4c 54 26 31 29 20 26 26 20 28 4f 50 5f 49 64  xLT&1) && (OP_Id
2f570 78 47 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78 47  xGE&1)==(OP_IdxG
2f580 54 26 31 29 20 29 3b 0a 20 20 69 66 28 20 28 70  T&1) );.  if( (p
2f590 4f 70 2d 3e 6f 70 63 6f 64 65 26 31 29 3d 3d 28  Op->opcode&1)==(
2f5a0 4f 50 5f 49 64 78 4c 54 26 31 29 20 29 7b 0a 20  OP_IdxLT&1) ){. 
2f5b0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
2f5c0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45  opcode==OP_IdxLE
2f5d0 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
2f5e0 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20  =OP_IdxLT );.   
2f5f0 20 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20 7d   res = -res;.  }
2f600 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
2f610 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
2f620 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e  P_IdxGE || pOp->
2f630 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54  opcode==OP_IdxGT
2f640 20 29 3b 0a 20 20 20 20 72 65 73 2b 2b 3b 0a 20   );.    res++;. 
2f650 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54   }.  VdbeBranchT
2f660 61 6b 65 6e 28 72 65 73 3e 30 2c 32 29 3b 0a 20  aken(res>0,2);. 
2f670 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
2f680 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2f690 72 3b 0a 20 20 69 66 28 20 72 65 73 3e 30 20 29  r;.  if( res>0 )
2f6a0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
2f6b0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2f6c0 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72 6f 79   Opcode: Destroy
2f6d0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
2f6e0 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20 65 6e  .** Delete an en
2f6f0 74 69 72 65 20 64 61 74 61 62 61 73 65 20 74 61  tire database ta
2f700 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f  ble or index who
2f710 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20  se root page in 
2f720 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
2f730 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79  file is given by
2f740 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74   P1..**.** The t
2f750 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73 74 72  able being destr
2f760 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65 20 6d  oyed is in the m
2f770 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
2f780 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49 66 0a  e if P3==0.  If.
2f790 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20 74 68  ** P3==1 then th
2f7a0 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c  e table to be cl
2f7b0 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75  ear is in the au
2f7c0 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
2f7d0 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73   file.** that is
2f7e0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
2f7f0 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69  ables create usi
2f800 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52  ng CREATE TEMPOR
2f810 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a  ARY TABLE..**.**
2f820 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69   If AUTOVACUUM i
2f830 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e 20 69  s enabled then i
2f840 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 68  t is possible th
2f850 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74 20  at another root 
2f860 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62 65  page.** might be
2f870 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20   moved into the 
2f880 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20 72 6f  newly deleted ro
2f890 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64 65 72  ot page in order
2f8a0 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20   to keep all.** 
2f8b0 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e 74 69  root pages conti
2f8c0 67 75 6f 75 73 20 61 74 20 74 68 65 20 62 65 67  guous at the beg
2f8d0 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64 61  inning of the da
2f8e0 74 61 62 61 73 65 2e 20 20 54 68 65 20 66 6f 72  tabase.  The for
2f8f0 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20  mer.** value of 
2f900 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 74 68  the root page th
2f910 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73 20 76  at moved - its v
2f920 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68 65 20  alue before the 
2f930 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20 2d 0a  move occurred -.
2f940 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ** is stored in 
2f950 72 65 67 69 73 74 65 72 20 50 32 2e 20 49 66 20  register P2. If 
2f960 6e 6f 20 70 61 67 65 20 6d 6f 76 65 6d 65 6e 74  no page movement
2f970 20 77 61 73 20 72 65 71 75 69 72 65 64 20 28 62   was required (b
2f980 65 63 61 75 73 65 20 74 68 65 0a 2a 2a 20 74 61  ecause the.** ta
2f990 62 6c 65 20 62 65 69 6e 67 20 64 72 6f 70 70 65  ble being droppe
2f9a0 64 20 77 61 73 20 61 6c 72 65 61 64 79 20 74 68  d was already th
2f9b0 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74 68  e last one in th
2f9c0 65 20 64 61 74 61 62 61 73 65 29 20 74 68 65 6e  e database) then
2f9d0 20 61 20 0a 2a 2a 20 7a 65 72 6f 20 69 73 20 73   a .** zero is s
2f9e0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
2f9f0 72 20 50 32 2e 20 20 49 66 20 41 55 54 4f 56 41  r P2.  If AUTOVA
2fa00 43 55 55 4d 20 69 73 20 64 69 73 61 62 6c 65 64  CUUM is disabled
2fa10 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 0a 2a 2a   then a zero .**
2fa20 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
2fa30 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
2fa40 20 54 68 69 73 20 6f 70 63 6f 64 65 20 74 68 72   This opcode thr
2fa50 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20  ows an error if 
2fa60 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 61 63  there are any ac
2fa70 74 69 76 65 20 72 65 61 64 65 72 20 56 4d 73 20  tive reader VMs 
2fa80 77 68 65 6e 0a 2a 2a 20 69 74 20 69 73 20 69 6e  when.** it is in
2fa90 76 6f 6b 65 64 2e 20 54 68 69 73 20 69 73 20 64  voked. This is d
2faa0 6f 6e 65 20 74 6f 20 61 76 6f 69 64 20 74 68 65  one to avoid the
2fab0 20 64 69 66 66 69 63 75 6c 74 79 20 61 73 73 6f   difficulty asso
2fac0 63 69 61 74 65 64 20 77 69 74 68 20 0a 2a 2a 20  ciated with .** 
2fad0 75 70 64 61 74 69 6e 67 20 65 78 69 73 74 69 6e  updating existin
2fae0 67 20 63 75 72 73 6f 72 73 20 77 68 65 6e 20 61  g cursors when a
2faf0 20 72 6f 6f 74 20 70 61 67 65 20 69 73 20 6d 6f   root page is mo
2fb00 76 65 64 20 69 6e 20 61 6e 20 41 55 54 4f 56 41  ved in an AUTOVA
2fb10 43 55 55 4d 20 0a 2a 2a 20 64 61 74 61 62 61 73  CUUM .** databas
2fb20 65 2e 20 54 68 69 73 20 65 72 72 6f 72 20 69 73  e. This error is
2fb30 20 74 68 72 6f 77 6e 20 65 76 65 6e 20 69 66 20   thrown even if 
2fb40 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
2fb50 6e 6f 74 20 61 6e 20 41 55 54 4f 56 41 43 55 55  not an AUTOVACUU
2fb60 4d 20 0a 2a 2a 20 64 62 20 69 6e 20 6f 72 64 65  M .** db in orde
2fb70 72 20 74 6f 20 61 76 6f 69 64 20 69 6e 74 72 6f  r to avoid intro
2fb80 64 75 63 69 6e 67 20 61 6e 20 69 6e 63 6f 6d 70  ducing an incomp
2fb90 61 74 69 62 69 6c 69 74 79 20 62 65 74 77 65 65  atibility betwee
2fba0 6e 20 61 75 74 6f 76 61 63 75 75 6d 20 0a 2a 2a  n autovacuum .**
2fbb0 20 61 6e 64 20 6e 6f 6e 2d 61 75 74 6f 76 61 63   and non-autovac
2fbc0 75 75 6d 20 6d 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a  uum modes..**.**
2fbd0 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61 72   See also: Clear
2fbe0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73 74  .*/.case OP_Dest
2fbf0 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f 75  roy: {     /* ou
2fc00 74 32 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f 76  t2 */.  int iMov
2fc10 65 64 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 0a  ed;.  int iDb;..
2fc20 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63    sqlite3VdbeInc
2fc30 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c  rWriteCounter(p,
2fc40 20 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70   0);.  assert( p
2fc50 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
2fc60 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2fc70 70 31 3e 31 20 29 3b 0a 20 20 70 4f 75 74 20 3d  p1>1 );.  pOut =
2fc80 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
2fc90 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d  p, pOp);.  pOut-
2fca0 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  >flags = MEM_Nul
2fcb0 6c 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6e 56 64  l;.  if( db->nVd
2fcc0 62 65 52 65 61 64 20 3e 20 64 62 2d 3e 6e 56 44  beRead > db->nVD
2fcd0 65 73 74 72 6f 79 2b 31 20 29 7b 0a 20 20 20 20  estroy+1 ){.    
2fce0 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  rc = SQLITE_LOCK
2fcf0 45 44 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72  ED;.    p->error
2fd00 41 63 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72  Action = OE_Abor
2fd10 74 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  t;.    goto abor
2fd20 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2fd30 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 44 62    }else{.    iDb
2fd40 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20   = pOp->p3;.    
2fd50 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
2fd60 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
2fd70 20 69 44 62 29 20 29 3b 0a 20 20 20 20 69 4d 6f   iDb) );.    iMo
2fd80 76 65 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74  ved = 0;  /* Not
2fd90 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 74   needed.  Only t
2fda0 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e  o silence a warn
2fdb0 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d  ing. */.    rc =
2fdc0 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 72 6f   sqlite3BtreeDro
2fdd0 70 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69  pTable(db->aDb[i
2fde0 44 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31  Db].pBt, pOp->p1
2fdf0 2c 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20  , &iMoved);.    
2fe00 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
2fe10 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d  M_Int;.    pOut-
2fe20 3e 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 20  >u.i = iMoved;. 
2fe30 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
2fe40 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2fe50 72 6f 72 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  ror;.#ifndef SQL
2fe60 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43  ITE_OMIT_AUTOVAC
2fe70 55 55 4d 0a 20 20 20 20 69 66 28 20 69 4d 6f 76  UUM.    if( iMov
2fe80 65 64 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 73  ed!=0 ){.      s
2fe90 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f  qlite3RootPageMo
2fea0 76 65 64 28 64 62 2c 20 69 44 62 2c 20 69 4d 6f  ved(db, iDb, iMo
2feb0 76 65 64 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20  ved, pOp->p1);. 
2fec0 20 20 20 20 20 2f 2a 20 41 6c 6c 20 4f 50 5f 44       /* All OP_D
2fed0 65 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e  estroy operation
2fee0 73 20 6f 63 63 75 72 20 6f 6e 20 74 68 65 20 73  s occur on the s
2fef0 61 6d 65 20 62 74 72 65 65 20 2a 2f 0a 20 20 20  ame btree */.   
2ff00 20 20 20 61 73 73 65 72 74 28 20 72 65 73 65 74     assert( reset
2ff10 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 30  SchemaOnFault==0
2ff20 20 7c 7c 20 72 65 73 65 74 53 63 68 65 6d 61 4f   || resetSchemaO
2ff30 6e 46 61 75 6c 74 3d 3d 69 44 62 2b 31 20 29 3b  nFault==iDb+1 );
2ff40 0a 20 20 20 20 20 20 72 65 73 65 74 53 63 68 65  .      resetSche
2ff50 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 69 44 62 2b  maOnFault = iDb+
2ff60 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  1;.    }.#endif.
2ff70 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2ff80 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72  /* Opcode: Clear
2ff90 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20   P1 P2 P3.**.** 
2ffa0 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65  Delete all conte
2ffb0 6e 74 73 20 6f 66 20 74 68 65 20 64 61 74 61 62  nts of the datab
2ffc0 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ase table or ind
2ffd0 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61  ex whose root pa
2ffe0 67 65 0a 2a 2a 20 69 6e 20 74 68 65 20 64 61 74  ge.** in the dat
2fff0 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 67 69  abase file is gi
30000 76 65 6e 20 62 79 20 50 31 2e 20 20 42 75 74 2c  ven by P1.  But,
30010 20 75 6e 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c   unlike Destroy,
30020 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76   do not.** remov
30030 65 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  e the table or i
30040 6e 64 65 78 20 66 72 6f 6d 20 74 68 65 20 64 61  ndex from the da
30050 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a  tabase file..**.
30060 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65 69  ** The table bei
30070 6e 67 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74  ng clear is in t
30080 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
30090 20 66 69 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20   file if P2==0. 
300a0 20 49 66 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65   If.** P2==1 the
300b0 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62  n the table to b
300c0 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68  e clear is in th
300d0 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  e auxiliary data
300e0 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61  base file.** tha
300f0 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  t is used to sto
30100 72 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65  re tables create
30110 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45   using CREATE TE
30120 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a  MPORARY TABLE..*
30130 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 33 20 76  *.** If the P3 v
30140 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  alue is non-zero
30150 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  , then the table
30160 20 72 65 66 65 72 72 65 64 20 74 6f 20 6d 75 73   referred to mus
30170 74 20 62 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65  t be an.** intke
30180 79 20 74 61 62 6c 65 20 28 61 6e 20 53 51 4c 20  y table (an SQL 
30190 74 61 62 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e  table, not an in
301a0 64 65 78 29 2e 20 49 6e 20 74 68 69 73 20 63 61  dex). In this ca
301b0 73 65 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67  se the row chang
301c0 65 20 0a 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69  e .** count is i
301d0 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68  ncremented by th
301e0 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
301f0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65   in the table be
30200 69 6e 67 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a  ing cleared. .**
30210 20 49 66 20 50 33 20 69 73 20 67 72 65 61 74 65   If P3 is greate
30220 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65  r than zero, the
30230 6e 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72  n the value stor
30240 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
30250 33 20 69 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63  3 is.** also inc
30260 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20  remented by the 
30270 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
30280 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  n the table bein
30290 67 20 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a  g cleared..**.**
302a0 20 53 65 65 20 61 6c 73 6f 3a 20 44 65 73 74 72   See also: Destr
302b0 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c  oy.*/.case OP_Cl
302c0 65 61 72 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68  ear: {.  int nCh
302d0 61 6e 67 65 3b 0a 20 0a 20 20 73 71 6c 69 74 65  ange;. .  sqlite
302e0 33 56 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f  3VdbeIncrWriteCo
302f0 75 6e 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 6e  unter(p, 0);.  n
30300 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61 73  Change = 0;.  as
30310 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
30320 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  y==0 );.  assert
30330 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
30340 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e  btreeMask, pOp->
30350 70 32 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  p2) );.  rc = sq
30360 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 54  lite3BtreeClearT
30370 61 62 6c 65 28 0a 20 20 20 20 20 20 64 62 2d 3e  able(.      db->
30380 61 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42 74  aDb[pOp->p2].pBt
30390 2c 20 70 4f 70 2d 3e 70 31 2c 20 28 70 4f 70 2d  , pOp->p1, (pOp-
303a0 3e 70 33 20 3f 20 26 6e 43 68 61 6e 67 65 20 3a  >p3 ? &nChange :
303b0 20 30 29 0a 20 20 29 3b 0a 20 20 69 66 28 20 70   0).  );.  if( p
303c0 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 70 2d  Op->p3 ){.    p-
303d0 3e 6e 43 68 61 6e 67 65 20 2b 3d 20 6e 43 68 61  >nChange += nCha
303e0 6e 67 65 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  nge;.    if( pOp
303f0 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20 20 20  ->p3>0 ){.      
30400 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
30410 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  id(&aMem[pOp->p3
30420 5d 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41  ]) );.      memA
30430 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
30440 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b  &aMem[pOp->p3]);
30450 0a 20 20 20 20 20 20 61 4d 65 6d 5b 70 4f 70 2d  .      aMem[pOp-
30460 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68 61  >p3].u.i += nCha
30470 6e 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  nge;.    }.  }. 
30480 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
30490 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
304a0 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  r;.  break;.}../
304b0 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 53  * Opcode: ResetS
304c0 6f 72 74 65 72 20 50 31 20 2a 20 2a 20 2a 20 2a  orter P1 * * * *
304d0 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c  .**.** Delete al
304e0 6c 20 63 6f 6e 74 65 6e 74 73 20 66 72 6f 6d 20  l contents from 
304f0 74 68 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61  the ephemeral ta
30500 62 6c 65 20 6f 72 20 73 6f 72 74 65 72 0a 2a 2a  ble or sorter.**
30510 20 74 68 61 74 20 69 73 20 6f 70 65 6e 20 6f 6e   that is open on
30520 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 0a 2a   cursor P1..**.*
30530 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f 6e  * This opcode on
30540 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 63 75 72  ly works for cur
30550 73 6f 72 73 20 75 73 65 64 20 66 6f 72 20 73 6f  sors used for so
30560 72 74 69 6e 67 20 61 6e 64 0a 2a 2a 20 6f 70 65  rting and.** ope
30570 6e 65 64 20 77 69 74 68 20 4f 50 5f 4f 70 65 6e  ned with OP_Open
30580 45 70 68 65 6d 65 72 61 6c 20 6f 72 20 4f 50 5f  Ephemeral or OP_
30590 53 6f 72 74 65 72 4f 70 65 6e 2e 0a 2a 2f 0a 63  SorterOpen..*/.c
305a0 61 73 65 20 4f 50 5f 52 65 73 65 74 53 6f 72 74  ase OP_ResetSort
305b0 65 72 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  er: {.  VdbeCurs
305c0 6f 72 20 2a 70 43 3b 0a 20 0a 20 20 61 73 73 65  or *pC;. .  asse
305d0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
305e0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
305f0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
30600 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
30610 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
30620 30 20 29 3b 0a 20 20 69 66 28 20 69 73 53 6f 72  0 );.  if( isSor
30630 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20 73  ter(pC) ){.    s
30640 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
30650 52 65 73 65 74 28 64 62 2c 20 70 43 2d 3e 75 63  Reset(db, pC->uc
30660 2e 70 53 6f 72 74 65 72 29 3b 0a 20 20 7d 65 6c  .pSorter);.  }el
30670 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
30680 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
30690 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
306a0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
306b0 73 45 70 68 65 6d 65 72 61 6c 20 29 3b 0a 20 20  sEphemeral );.  
306c0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
306d0 72 65 65 43 6c 65 61 72 54 61 62 6c 65 4f 66 43  reeClearTableOfC
306e0 75 72 73 6f 72 28 70 43 2d 3e 75 63 2e 70 43 75  ursor(pC->uc.pCu
306f0 72 73 6f 72 29 3b 0a 20 20 20 20 69 66 28 20 72  rsor);.    if( r
30700 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
30710 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
30720 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
30730 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65 42 74  Opcode: CreateBt
30740 72 65 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ree P1 P2 P3 * *
30750 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
30760 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31 20  P2]=root iDb=P1 
30770 66 6c 61 67 73 3d 50 33 0a 2a 2a 0a 2a 2a 20 41  flags=P3.**.** A
30780 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 62 2d  llocate a new b-
30790 74 72 65 65 20 69 6e 20 74 68 65 20 6d 61 69 6e  tree in the main
307a0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
307b0 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68  f P1==0 or in th
307c0 65 0a 2a 2a 20 54 45 4d 50 20 64 61 74 61 62 61  e.** TEMP databa
307d0 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31  se file if P1==1
307e0 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68   or in an attach
307f0 65 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a  ed database if.*
30800 2a 20 50 31 3e 31 2e 20 20 54 68 65 20 50 33 20  * P1>1.  The P3 
30810 61 72 67 75 6d 65 6e 74 20 6d 75 73 74 20 62 65  argument must be
30820 20 31 20 28 42 54 52 45 45 5f 49 4e 54 4b 45 59   1 (BTREE_INTKEY
30830 29 20 66 6f 72 20 61 20 72 6f 77 69 64 20 74 61  ) for a rowid ta
30840 62 6c 65 0a 2a 2a 20 69 74 20 6d 75 73 74 20 62  ble.** it must b
30850 65 20 32 20 28 42 54 52 45 45 5f 42 4c 4f 42 4b  e 2 (BTREE_BLOBK
30860 45 59 29 20 66 6f 72 20 61 6e 20 69 6e 64 65 78  EY) for an index
30870 20 6f 72 20 57 49 54 48 4f 55 54 20 52 4f 57 49   or WITHOUT ROWI
30880 44 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20  D table..** The 
30890 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
308a0 20 6f 66 20 74 68 65 20 6e 65 77 20 62 2d 74 72   of the new b-tr
308b0 65 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ee is stored in 
308c0 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
308d0 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65 42 74  case OP_CreateBt
308e0 72 65 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ree: {          
308f0 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74  /* out2 */.  int
30900 20 70 67 6e 6f 3b 0a 20 20 44 62 20 2a 70 44 62   pgno;.  Db *pDb
30910 3b 0a 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  ;..  sqlite3Vdbe
30920 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72  IncrWriteCounter
30930 28 70 2c 20 30 29 3b 0a 20 20 70 4f 75 74 20 3d  (p, 0);.  pOut =
30940 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
30950 70 2c 20 70 4f 70 29 3b 0a 20 20 70 67 6e 6f 20  p, pOp);.  pgno 
30960 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 0;.  assert( p
30970 4f 70 2d 3e 70 33 3d 3d 42 54 52 45 45 5f 49 4e  Op->p3==BTREE_IN
30980 54 4b 45 59 20 7c 7c 20 70 4f 70 2d 3e 70 33 3d  TKEY || pOp->p3=
30990 3d 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 29  =BTREE_BLOBKEY )
309a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
309b0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
309c0 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
309d0 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
309e0 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
309f0 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73  pOp->p1) );.  as
30a00 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
30a10 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20  y==0 );.  pDb = 
30a20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31  &db->aDb[pOp->p1
30a30 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 62  ];.  assert( pDb
30a40 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 72 63  ->pBt!=0 );.  rc
30a50 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
30a60 72 65 61 74 65 54 61 62 6c 65 28 70 44 62 2d 3e  reateTable(pDb->
30a70 70 42 74 2c 20 26 70 67 6e 6f 2c 20 70 4f 70 2d  pBt, &pgno, pOp-
30a80 3e 70 33 29 3b 0a 20 20 69 66 28 20 72 63 20 29  >p3);.  if( rc )
30a90 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
30aa0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 4f 75 74  to_error;.  pOut
30ab0 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20 20  ->u.i = pgno;.  
30ac0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
30ad0 6f 64 65 3a 20 53 71 6c 45 78 65 63 20 2a 20 2a  ode: SqlExec * *
30ae0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 75   * P4 *.**.** Ru
30af0 6e 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  n the SQL statem
30b00 65 6e 74 20 6f 72 20 73 74 61 74 65 6d 65 6e 74  ent or statement
30b10 73 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 74  s specified in t
30b20 68 65 20 50 34 20 73 74 72 69 6e 67 2e 0a 2a 2f  he P4 string..*/
30b30 0a 63 61 73 65 20 4f 50 5f 53 71 6c 45 78 65 63  .case OP_SqlExec
30b40 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  : {.  sqlite3Vdb
30b50 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65  eIncrWriteCounte
30b60 72 28 70 2c 20 30 29 3b 0a 20 20 64 62 2d 3e 6e  r(p, 0);.  db->n
30b70 53 71 6c 45 78 65 63 2b 2b 3b 0a 20 20 72 63 20  SqlExec++;.  rc 
30b80 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64  = sqlite3_exec(d
30b90 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 30 2c  b, pOp->p4.z, 0,
30ba0 20 30 2c 20 30 29 3b 0a 20 20 64 62 2d 3e 6e 53   0, 0);.  db->nS
30bb0 71 6c 45 78 65 63 2d 2d 3b 0a 20 20 69 66 28 20  qlExec--;.  if( 
30bc0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
30bd0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
30be0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
30bf0 6f 64 65 3a 20 50 61 72 73 65 53 63 68 65 6d 61  ode: ParseSchema
30c00 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
30c10 2a 2a 20 52 65 61 64 20 61 6e 64 20 70 61 72 73  ** Read and pars
30c20 65 20 61 6c 6c 20 65 6e 74 72 69 65 73 20 66 72  e all entries fr
30c30 6f 6d 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41  om the SQLITE_MA
30c40 53 54 45 52 20 74 61 62 6c 65 20 6f 66 20 64 61  STER table of da
30c50 74 61 62 61 73 65 20 50 31 0a 2a 2a 20 74 68 61  tabase P1.** tha
30c60 74 20 6d 61 74 63 68 20 74 68 65 20 57 48 45 52  t match the WHER
30c70 45 20 63 6c 61 75 73 65 20 50 34 2e 20 20 49 66  E clause P4.  If
30c80 20 50 34 20 69 73 20 61 20 4e 55 4c 4c 20 70 6f   P4 is a NULL po
30c90 69 6e 74 65 72 2c 20 74 68 65 6e 20 74 68 65 0a  inter, then the.
30ca0 2a 2a 20 65 6e 74 69 72 65 20 73 63 68 65 6d 61  ** entire schema
30cb0 20 66 6f 72 20 50 31 20 69 73 20 72 65 70 61 72   for P1 is repar
30cc0 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  sed..**.** This 
30cd0 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74  opcode invokes t
30ce0 68 65 20 70 61 72 73 65 72 20 74 6f 20 63 72 65  he parser to cre
30cf0 61 74 65 20 61 20 6e 65 77 20 76 69 72 74 75 61  ate a new virtua
30d00 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68  l machine,.** th
30d10 65 6e 20 72 75 6e 73 20 74 68 65 20 6e 65 77 20  en runs the new 
30d20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e  virtual machine.
30d30 20 20 49 74 20 69 73 20 74 68 75 73 20 61 20 72    It is thus a r
30d40 65 2d 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65  e-entrant opcode
30d50 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72  ..*/.case OP_Par
30d60 73 65 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e  seSchema: {.  in
30d70 74 20 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63  t iDb;.  const c
30d80 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20  har *zMaster;.  
30d90 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e  char *zSql;.  In
30da0 69 74 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b  itData initData;
30db0 0a 0a 20 20 2f 2a 20 41 6e 79 20 70 72 65 70 61  ..  /* Any prepa
30dc0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 74 68  red statement th
30dd0 61 74 20 69 6e 76 6f 6b 65 73 20 74 68 69 73 20  at invokes this 
30de0 6f 70 63 6f 64 65 20 77 69 6c 6c 20 68 6f 6c 64  opcode will hold
30df0 20 6d 75 74 65 78 65 73 0a 20 20 2a 2a 20 6f 6e   mutexes.  ** on
30e00 20 65 76 65 72 79 20 62 74 72 65 65 2e 20 20 54   every btree.  T
30e10 68 69 73 20 69 73 20 61 20 70 72 65 72 65 71 75  his is a prerequ
30e20 69 73 69 74 65 20 66 6f 72 20 69 6e 76 6f 6b 69  isite for invoki
30e30 6e 67 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33  ng .  ** sqlite3
30e40 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 29 2e 0a  InitCallback()..
30e50 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49    */.#ifdef SQLI
30e60 54 45 5f 44 45 42 55 47 0a 20 20 66 6f 72 28 69  TE_DEBUG.  for(i
30e70 44 62 3d 30 3b 20 69 44 62 3c 64 62 2d 3e 6e 44  Db=0; iDb<db->nD
30e80 62 3b 20 69 44 62 2b 2b 29 7b 0a 20 20 20 20 61  b; iDb++){.    a
30e90 73 73 65 72 74 28 20 69 44 62 3d 3d 31 20 7c 7c  ssert( iDb==1 ||
30ea0 20 73 71 6c 69 74 65 33 42 74 72 65 65 48 6f 6c   sqlite3BtreeHol
30eb0 64 73 4d 75 74 65 78 28 64 62 2d 3e 61 44 62 5b  dsMutex(db->aDb[
30ec0 69 44 62 5d 2e 70 42 74 29 20 29 3b 0a 20 20 7d  iDb].pBt) );.  }
30ed0 0a 23 65 6e 64 69 66 0a 0a 20 20 69 44 62 20 3d  .#endif..  iDb =
30ee0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65   pOp->p1;.  asse
30ef0 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44  rt( iDb>=0 && iD
30f00 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  b<db->nDb );.  a
30f10 73 73 65 72 74 28 20 44 62 48 61 73 50 72 6f 70  ssert( DbHasProp
30f20 65 72 74 79 28 64 62 2c 20 69 44 62 2c 20 44 42  erty(db, iDb, DB
30f30 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 20 29  _SchemaLoaded) )
30f40 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
30f50 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c  E_OMIT_ALTERTABL
30f60 45 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e  E.  if( pOp->p4.
30f70 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  z==0 ){.    sqli
30f80 74 65 33 53 63 68 65 6d 61 43 6c 65 61 72 28 64  te3SchemaClear(d
30f90 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 53 63 68  b->aDb[iDb].pSch
30fa0 65 6d 61 29 3b 0a 20 20 20 20 64 62 2d 3e 6d 44  ema);.    db->mD
30fb0 62 46 6c 61 67 73 20 26 3d 20 7e 44 42 46 4c 41  bFlags &= ~DBFLA
30fc0 47 5f 53 63 68 65 6d 61 4b 6e 6f 77 6e 4f 6b 3b  G_SchemaKnownOk;
30fd0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
30fe0 33 49 6e 69 74 4f 6e 65 28 64 62 2c 20 69 44 62  3InitOne(db, iDb
30ff0 2c 20 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 49  , &p->zErrMsg, I
31000 4e 49 54 46 4c 41 47 5f 41 6c 74 65 72 54 61 62  NITFLAG_AlterTab
31010 6c 65 29 3b 0a 20 20 20 20 64 62 2d 3e 6d 44 62  le);.    db->mDb
31020 46 6c 61 67 73 20 7c 3d 20 44 42 46 4c 41 47 5f  Flags |= DBFLAG_
31030 53 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20 20  SchemaChange;.  
31040 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30    p->expired = 0
31050 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66  ;.  }else.#endif
31060 0a 20 20 7b 0a 20 20 20 20 7a 4d 61 73 74 65 72  .  {.    zMaster
31070 20 3d 20 4d 41 53 54 45 52 5f 4e 41 4d 45 3b 0a   = MASTER_NAME;.
31080 20 20 20 20 69 6e 69 74 44 61 74 61 2e 64 62 20      initData.db 
31090 3d 20 64 62 3b 0a 20 20 20 20 69 6e 69 74 44 61  = db;.    initDa
310a0 74 61 2e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20  ta.iDb = iDb;.  
310b0 20 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72 72    initData.pzErr
310c0 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73  Msg = &p->zErrMs
310d0 67 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e  g;.    initData.
310e0 6d 49 6e 69 74 46 6c 61 67 73 20 3d 20 30 3b 0a  mInitFlags = 0;.
310f0 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74      zSql = sqlit
31100 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20 20  e3MPrintf(db,.  
31110 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d       "SELECT nam
31120 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c  e, rootpage, sql
31130 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 20 57 48   FROM '%q'.%s WH
31140 45 52 45 20 25 73 20 4f 52 44 45 52 20 42 59 20  ERE %s ORDER BY 
31150 72 6f 77 69 64 22 2c 0a 20 20 20 20 20 20 20 64  rowid",.       d
31160 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 44 62 53  b->aDb[iDb].zDbS
31170 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70  Name, zMaster, p
31180 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69  Op->p4.z);.    i
31190 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20  f( zSql==0 ){.  
311a0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
311b0 4e 4f 4d 45 4d 5f 42 4b 50 54 3b 0a 20 20 20 20  NOMEM_BKPT;.    
311c0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73  }else{.      ass
311d0 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75  ert( db->init.bu
311e0 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 64  sy==0 );.      d
311f0 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 31  b->init.busy = 1
31200 3b 0a 20 20 20 20 20 20 69 6e 69 74 44 61 74 61  ;.      initData
31210 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b  .rc = SQLITE_OK;
31220 0a 20 20 20 20 20 20 69 6e 69 74 44 61 74 61 2e  .      initData.
31230 6e 49 6e 69 74 52 6f 77 20 3d 20 30 3b 0a 20 20  nInitRow = 0;.  
31240 20 20 20 20 61 73 73 65 72 74 28 20 21 64 62 2d      assert( !db-
31250 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b  >mallocFailed );
31260 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
31270 74 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71  te3_exec(db, zSq
31280 6c 2c 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61  l, sqlite3InitCa
31290 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44 61 74  llback, &initDat
312a0 61 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28  a, 0);.      if(
312b0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
312c0 20 72 63 20 3d 20 69 6e 69 74 44 61 74 61 2e 72   rc = initData.r
312d0 63 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d  c;.      if( rc=
312e0 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69 6e  =SQLITE_OK && in
312f0 69 74 44 61 74 61 2e 6e 49 6e 69 74 52 6f 77 3d  itData.nInitRow=
31300 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  =0 ){.        /*
31310 20 54 68 65 20 4f 50 5f 50 61 72 73 65 53 63 68   The OP_ParseSch
31320 65 6d 61 20 6f 70 63 6f 64 65 20 77 69 74 68 20  ema opcode with 
31330 61 20 6e 6f 6e 2d 4e 55 4c 4c 20 50 34 20 61 72  a non-NULL P4 ar
31340 67 75 6d 65 6e 74 20 73 68 6f 75 6c 64 20 70 61  gument should pa
31350 72 73 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 61  rse.        ** a
31360 74 20 6c 65 61 73 74 20 6f 6e 65 20 53 51 4c 20  t least one SQL 
31370 73 74 61 74 65 6d 65 6e 74 2e 20 41 6e 79 20 6c  statement. Any l
31380 65 73 73 20 74 68 61 6e 20 74 68 61 74 20 69 6e  ess than that in
31390 64 69 63 61 74 65 73 20 74 68 61 74 0a 20 20 20  dicates that.   
313a0 20 20 20 20 20 2a 2a 20 74 68 65 20 73 71 6c 69       ** the sqli
313b0 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20  te_master table 
313c0 69 73 20 63 6f 72 72 75 70 74 2e 20 2a 2f 0a 20  is corrupt. */. 
313d0 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
313e0 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b  TE_CORRUPT_BKPT;
313f0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
31400 71 6c 69 74 65 33 44 62 46 72 65 65 4e 4e 28 64  qlite3DbFreeNN(d
31410 62 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20  b, zSql);.      
31420 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20  db->init.busy = 
31430 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  0;.    }.  }.  i
31440 66 28 20 72 63 20 29 7b 0a 20 20 20 20 73 71 6c  f( rc ){.    sql
31450 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65  ite3ResetAllSche
31460 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28  masOfConnection(
31470 64 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  db);.    if( rc=
31480 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b  =SQLITE_NOMEM ){
31490 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  .      goto no_m
314a0 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f  em;.    }.    go
314b0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
314c0 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65  error;.  }.  bre
314d0 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20 21 64 65  ak;  .}..#if !de
314e0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
314f0 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20 4f 70  T_ANALYZE)./* Op
31500 63 6f 64 65 3a 20 4c 6f 61 64 41 6e 61 6c 79 73  code: LoadAnalys
31510 69 73 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  is P1 * * * *.**
31520 0a 2a 2a 20 52 65 61 64 20 74 68 65 20 73 71 6c  .** Read the sql
31530 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20  ite_stat1 table 
31540 66 6f 72 20 64 61 74 61 62 61 73 65 20 50 31 20  for database P1 
31550 61 6e 64 20 6c 6f 61 64 20 74 68 65 20 63 6f 6e  and load the con
31560 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68 61 74 20  tent.** of that 
31570 74 61 62 6c 65 20 69 6e 74 6f 20 74 68 65 20 69  table into the i
31580 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 20 68 61  nternal index ha
31590 73 68 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20  sh table.  This 
315a0 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a 20 74 68  will cause.** th
315b0 65 20 61 6e 61 6c 79 73 69 73 20 74 6f 20 62 65  e analysis to be
315c0 20 75 73 65 64 20 77 68 65 6e 20 70 72 65 70 61   used when prepa
315d0 72 69 6e 67 20 61 6c 6c 20 73 75 62 73 65 71 75  ring all subsequ
315e0 65 6e 74 20 71 75 65 72 69 65 73 2e 0a 2a 2f 0a  ent queries..*/.
315f0 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c  case OP_LoadAnal
31600 79 73 69 73 3a 20 7b 0a 20 20 61 73 73 65 72 74  ysis: {.  assert
31610 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
31620 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
31630 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
31640 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 64 62  3AnalysisLoad(db
31650 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 69 66  , pOp->p1);.  if
31660 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
31670 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
31680 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e    break;  .}.#en
31690 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28  dif /* !defined(
316a0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c  SQLITE_OMIT_ANAL
316b0 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  YZE) */../* Opco
316c0 64 65 3a 20 44 72 6f 70 54 61 62 6c 65 20 50 31  de: DropTable P1
316d0 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
316e0 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72  Remove the inter
316f0 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20  nal (in-memory) 
31700 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20  data structures 
31710 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a  that describe.**
31720 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64   the table named
31730 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20   P4 in database 
31740 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c  P1.  This is cal
31750 6c 65 64 20 61 66 74 65 72 20 61 20 74 61 62 6c  led after a tabl
31760 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20  e.** is dropped 
31770 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67  from disk (using
31780 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63   the Destroy opc
31790 6f 64 65 29 20 69 6e 20 6f 72 64 65 72 20 74 6f  ode) in order to
317a0 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e   keep .** the in
317b0 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74  ternal represent
317c0 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
317d0 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e  schema consisten
317e0 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f  t with what is o
317f0 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20  n disk..*/.case 
31800 4f 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a  OP_DropTable: {.
31810 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63    sqlite3VdbeInc
31820 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c  rWriteCounter(p,
31830 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 55 6e   0);.  sqlite3Un
31840 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62  linkAndDeleteTab
31850 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  le(db, pOp->p1, 
31860 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72  pOp->p4.z);.  br
31870 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
31880 65 3a 20 44 72 6f 70 49 6e 64 65 78 20 50 31 20  e: DropIndex P1 
31890 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
318a0 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e  emove the intern
318b0 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64  al (in-memory) d
318c0 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74  ata structures t
318d0 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20  hat describe.** 
318e0 74 68 65 20 69 6e 64 65 78 20 6e 61 6d 65 64 20  the index named 
318f0 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  P4 in database P
31900 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c  1.  This is call
31910 65 64 20 61 66 74 65 72 20 61 6e 20 69 6e 64 65  ed after an inde
31920 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20  x.** is dropped 
31930 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67  from disk (using
31940 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63   the Destroy opc
31950 6f 64 65 29 0a 2a 2a 20 69 6e 20 6f 72 64 65 72  ode).** in order
31960 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74   to keep the int
31970 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
31980 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
31990 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74  chema consistent
319a0 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e   with what is on
319b0 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f   disk..*/.case O
319c0 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20  P_DropIndex: {. 
319d0 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72   sqlite3VdbeIncr
319e0 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20  WriteCounter(p, 
319f0 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c  0);.  sqlite3Unl
31a00 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65  inkAndDeleteInde
31a10 78 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  x(db, pOp->p1, p
31a20 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65  Op->p4.z);.  bre
31a30 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
31a40 3a 20 44 72 6f 70 54 72 69 67 67 65 72 20 50 31  : DropTrigger P1
31a50 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
31a60 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72  Remove the inter
31a70 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20  nal (in-memory) 
31a80 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20  data structures 
31a90 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a  that describe.**
31aa0 20 74 68 65 20 74 72 69 67 67 65 72 20 6e 61 6d   the trigger nam
31ab0 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73  ed P4 in databas
31ac0 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63  e P1.  This is c
31ad0 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 72  alled after a tr
31ae0 69 67 67 65 72 0a 2a 2a 20 69 73 20 64 72 6f 70  igger.** is drop
31af0 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75  ped from disk (u
31b00 73 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79  sing the Destroy
31b10 20 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72 64 65   opcode) in orde
31b20 72 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68  r to keep .** th
31b30 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65  e internal repre
31b40 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
31b50 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69  .** schema consi
31b60 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20  stent with what 
31b70 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63  is on disk..*/.c
31b80 61 73 65 20 4f 50 5f 44 72 6f 70 54 72 69 67 67  ase OP_DropTrigg
31b90 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56  er: {.  sqlite3V
31ba0 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e  dbeIncrWriteCoun
31bb0 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 73 71 6c  ter(p, 0);.  sql
31bc0 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
31bd0 65 74 65 54 72 69 67 67 65 72 28 64 62 2c 20 70  eteTrigger(db, p
31be0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
31bf0 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  z);.  break;.}..
31c00 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
31c10 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43  OMIT_INTEGRITY_C
31c20 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  HECK./* Opcode: 
31c30 49 6e 74 65 67 72 69 74 79 43 6b 20 50 31 20 50  IntegrityCk P1 P
31c40 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
31c50 20 44 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73 20   Do an analysis 
31c60 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79  of the currently
31c70 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65 2e 20   open database. 
31c80 20 53 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67   Store in.** reg
31c90 69 73 74 65 72 20 50 31 20 74 68 65 20 74 65 78  ister P1 the tex
31ca0 74 20 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d 65  t of an error me
31cb0 73 73 61 67 65 20 64 65 73 63 72 69 62 69 6e 67  ssage describing
31cc0 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a   any problems..*
31cd0 2a 20 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73  * If no problems
31ce0 20 61 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72   are found, stor
31cf0 65 20 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69  e a NULL in regi
31d00 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54  ster P1..**.** T
31d10 68 65 20 72 65 67 69 73 74 65 72 20 50 33 20 63  he register P3 c
31d20 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6c 65 73 73  ontains one less
31d30 20 74 68 61 6e 20 74 68 65 20 6d 61 78 69 6d 75   than the maximu
31d40 6d 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f  m number of allo
31d50 77 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41  wed errors..** A
31d60 74 20 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65  t most reg(P3) e
31d70 72 72 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65  rrors will be re
31d80 70 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74  ported..** In ot
31d90 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61  her words, the a
31da0 6e 61 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73  nalysis stops as
31db0 20 73 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29   soon as reg(P1)
31dc0 20 65 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20   errors are .** 
31dd0 73 65 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69  seen.  Reg(P1) i
31de0 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74  s updated with t
31df0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72  he number of err
31e00 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a  ors remaining..*
31e10 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61  *.** The root pa
31e20 67 65 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c  ge numbers of al
31e30 6c 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20  l tables in the 
31e40 64 61 74 61 62 61 73 65 20 61 72 65 20 69 6e 74  database are int
31e50 65 67 65 72 73 0a 2a 2a 20 73 74 6f 72 65 64 20  egers.** stored 
31e60 69 6e 20 50 34 5f 49 4e 54 41 52 52 41 59 20 61  in P4_INTARRAY a
31e70 72 67 75 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49  rgument..**.** I
31e80 66 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f  f P5 is not zero
31e90 2c 20 74 68 65 20 63 68 65 63 6b 20 69 73 20 64  , the check is d
31ea0 6f 6e 65 20 6f 6e 20 74 68 65 20 61 75 78 69 6c  one on the auxil
31eb0 69 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a  iary database.**
31ec0 20 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65 20 6d   file, not the m
31ed0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
31ee0 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  e..**.** This op
31ef0 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20  code is used to 
31f00 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 69 6e  implement the in
31f10 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20 70 72  tegrity_check pr
31f20 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  agma..*/.case OP
31f30 5f 49 6e 74 65 67 72 69 74 79 43 6b 3a 20 7b 0a  _IntegrityCk: {.
31f40 20 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20 20 20    int nRoot;    
31f50 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
31f60 61 62 6c 65 73 20 74 6f 20 63 68 65 63 6b 2e 20  ables to check. 
31f70 20 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f 6f 74   (Number of root
31f80 20 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20 69 6e   pages.) */.  in
31f90 74 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20 2f 2a  t *aRoot;     /*
31fa0 20 41 72 72 61 79 20 6f 66 20 72 6f 6f 74 70 61   Array of rootpa
31fb0 67 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 74  ge numbers for t
31fc0 61 62 6c 65 73 20 74 6f 20 62 65 20 63 68 65 63  ables to be chec
31fd0 6b 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72  ked */.  int nEr
31fe0 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  r;       /* Numb
31ff0 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 70  er of errors rep
32000 6f 72 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  orted */.  char 
32010 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 65  *z;        /* Te
32020 78 74 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20  xt of the error 
32030 72 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20  report */.  Mem 
32040 2a 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20 52  *pnErr;     /* R
32050 65 67 69 73 74 65 72 20 6b 65 65 70 69 6e 67 20  egister keeping 
32060 74 72 61 63 6b 20 6f 66 20 65 72 72 6f 72 73 20  track of errors 
32070 72 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a 20 20  remaining */..  
32080 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
32090 61 64 65 72 20 29 3b 0a 20 20 6e 52 6f 6f 74 20  ader );.  nRoot 
320a0 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 52 6f  = pOp->p2;.  aRo
320b0 6f 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b  ot = pOp->p4.ai;
320c0 0a 20 20 61 73 73 65 72 74 28 20 6e 52 6f 6f 74  .  assert( nRoot
320d0 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
320e0 61 52 6f 6f 74 5b 30 5d 3d 3d 6e 52 6f 6f 74 20  aRoot[0]==nRoot 
320f0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
32100 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
32110 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  3<=(p->nMem+1 - 
32120 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
32130 20 70 6e 45 72 72 20 3d 20 26 61 4d 65 6d 5b 70   pnErr = &aMem[p
32140 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
32150 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73  t( (pnErr->flags
32160 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
32170 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45  ;.  assert( (pnE
32180 72 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  rr->flags & (MEM
32190 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d  _Str|MEM_Blob))=
321a0 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26  =0 );.  pIn1 = &
321b0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
321c0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
321d0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
321e0 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
321f0 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
32200 4f 70 2d 3e 70 35 29 20 29 3b 0a 20 20 7a 20 3d  Op->p5) );.  z =
32210 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74   sqlite3BtreeInt
32220 65 67 72 69 74 79 43 68 65 63 6b 28 64 62 2d 3e  egrityCheck(db->
32230 61 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42 74  aDb[pOp->p5].pBt
32240 2c 20 26 61 52 6f 6f 74 5b 31 5d 2c 20 6e 52 6f  , &aRoot[1], nRo
32250 6f 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ot,.            
32260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32270 20 20 20 20 20 28 69 6e 74 29 70 6e 45 72 72 2d       (int)pnErr-
32280 3e 75 2e 69 2b 31 2c 20 26 6e 45 72 72 29 3b 0a  >u.i+1, &nErr);.
32290 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
322a0 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20  SetNull(pIn1);. 
322b0 20 69 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a   if( nErr==0 ){.
322c0 20 20 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30      assert( z==0
322d0 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20   );.  }else if( 
322e0 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f  z==0 ){.    goto
322f0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65   no_mem;.  }else
32300 7b 0a 20 20 20 20 70 6e 45 72 72 2d 3e 75 2e 69  {.    pnErr->u.i
32310 20 2d 3d 20 6e 45 72 72 2d 31 3b 0a 20 20 20 20   -= nErr-1;.    
32320 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
32330 74 53 74 72 28 70 49 6e 31 2c 20 7a 2c 20 2d 31  tStr(pIn1, z, -1
32340 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 73  , SQLITE_UTF8, s
32350 71 6c 69 74 65 33 5f 66 72 65 65 29 3b 0a 20 20  qlite3_free);.  
32360 7d 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  }.  UPDATE_MAX_B
32370 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20  LOBSIZE(pIn1);. 
32380 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
32390 67 65 45 6e 63 6f 64 69 6e 67 28 70 49 6e 31 2c  geEncoding(pIn1,
323a0 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72   encoding);.  br
323b0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
323c0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54   SQLITE_OMIT_INT
323d0 45 47 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a  EGRITY_CHECK */.
323e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53  ./* Opcode: RowS
323f0 65 74 41 64 64 20 50 31 20 50 32 20 2a 20 2a 20  etAdd P1 P2 * * 
32400 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
32410 6f 77 73 65 74 28 50 31 29 3d 72 5b 50 32 5d 0a  owset(P1)=r[P2].
32420 2a 2a 0a 2a 2a 20 49 6e 73 65 72 74 20 74 68 65  **.** Insert the
32430 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 68   integer value h
32440 65 6c 64 20 62 79 20 72 65 67 69 73 74 65 72 20  eld by register 
32450 50 32 20 69 6e 74 6f 20 61 20 52 6f 77 53 65 74  P2 into a RowSet
32460 20 6f 62 6a 65 63 74 0a 2a 2a 20 68 65 6c 64 20   object.** held 
32470 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
32480 2a 2a 0a 2a 2a 20 41 6e 20 61 73 73 65 72 74 69  **.** An asserti
32490 6f 6e 20 66 61 69 6c 73 20 69 66 20 50 32 20 69  on fails if P2 i
324a0 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72  s not an integer
324b0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
324c0 53 65 74 41 64 64 3a 20 7b 20 20 20 20 20 20 20  SetAdd: {       
324d0 2f 2a 20 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20  /* in1, in2 */. 
324e0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
324f0 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d  p->p1];.  pIn2 =
32500 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
32510 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 32  .  assert( (pIn2
32520 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
32530 74 29 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28  t)!=0 );.  if( (
32540 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
32550 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a 20 20  M_Blob)==0 ){.  
32560 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
32570 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49  eMemSetRowSet(pI
32580 6e 31 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  n1) ) goto no_me
32590 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  m;.  }.  assert(
325a0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
325b0 73 52 6f 77 53 65 74 28 70 49 6e 31 29 20 29 3b  sRowSet(pIn1) );
325c0 0a 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  .  sqlite3RowSet
325d0 49 6e 73 65 72 74 28 28 52 6f 77 53 65 74 2a 29  Insert((RowSet*)
325e0 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 75  pIn1->z, pIn2->u
325f0 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .i);.  break;.}.
32600 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53  ./* Opcode: RowS
32610 65 74 52 65 61 64 20 50 31 20 50 32 20 50 33 20  etRead P1 P2 P3 
32620 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
32630 20 72 5b 50 33 5d 3d 72 6f 77 73 65 74 28 50 31   r[P3]=rowset(P1
32640 29 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61 63 74 20  ).**.** Extract 
32650 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c  the smallest val
32660 75 65 20 66 72 6f 6d 20 74 68 65 20 52 6f 77 53  ue from the RowS
32670 65 74 20 6f 62 6a 65 63 74 20 69 6e 20 50 31 0a  et object in P1.
32680 2a 2a 20 61 6e 64 20 70 75 74 20 74 68 61 74 20  ** and put that 
32690 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73  value into regis
326a0 74 65 72 20 50 33 2e 0a 2a 2a 20 4f 72 2c 20 69  ter P3..** Or, i
326b0 66 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  f RowSet object 
326c0 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20  P1 is initially 
326d0 65 6d 70 74 79 2c 20 6c 65 61 76 65 20 50 33 0a  empty, leave P3.
326e0 2a 2a 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64  ** unchanged and
326f0 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
32700 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  tion P2..*/.case
32710 20 4f 50 5f 52 6f 77 53 65 74 52 65 61 64 3a 20   OP_RowSetRead: 
32720 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c  {       /* jump,
32730 20 69 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in1, out3 */.  
32740 69 36 34 20 76 61 6c 3b 0a 0a 20 20 70 49 6e 31  i64 val;..  pIn1
32750 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
32760 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 49  ];.  assert( (pI
32770 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
32780 42 6c 6f 62 29 3d 3d 30 20 7c 7c 20 73 71 6c 69  Blob)==0 || sqli
32790 74 65 33 56 64 62 65 4d 65 6d 49 73 52 6f 77 53  te3VdbeMemIsRowS
327a0 65 74 28 70 49 6e 31 29 20 29 3b 0a 20 20 69 66  et(pIn1) );.  if
327b0 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
327c0 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 0a 20   MEM_Blob)==0 . 
327d0 20 20 7c 7c 20 73 71 6c 69 74 65 33 52 6f 77 53    || sqlite3RowS
327e0 65 74 4e 65 78 74 28 28 52 6f 77 53 65 74 2a 29  etNext((RowSet*)
327f0 70 49 6e 31 2d 3e 7a 2c 20 26 76 61 6c 29 3d 3d  pIn1->z, &val)==
32800 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  0.  ){.    /* Th
32810 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20  e boolean index 
32820 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20  is empty */.    
32830 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
32840 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 20  tNull(pIn1);.   
32850 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
32860 28 31 2c 32 29 3b 0a 20 20 20 20 67 6f 74 6f 20  (1,2);.    goto 
32870 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63  jump_to_p2_and_c
32880 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
32890 70 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  pt;.  }else{.   
328a0 20 2f 2a 20 41 20 76 61 6c 75 65 20 77 61 73 20   /* A value was 
328b0 70 75 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65 20  pulled from the 
328c0 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 56 64 62  index */.    Vdb
328d0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 32  eBranchTaken(0,2
328e0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
328f0 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61  beMemSetInt64(&a
32900 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61  Mem[pOp->p3], va
32910 6c 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63  l);.  }.  goto c
32920 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
32930 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  pt;.}../* Opcode
32940 3a 20 52 6f 77 53 65 74 54 65 73 74 20 50 31 20  : RowSetTest P1 
32950 50 32 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f  P2 P3 P4.** Syno
32960 70 73 69 73 3a 20 69 66 20 72 5b 50 33 5d 20 69  psis: if r[P3] i
32970 6e 20 72 6f 77 73 65 74 28 50 31 29 20 67 6f 74  n rowset(P1) got
32980 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  o P2.**.** Regis
32990 74 65 72 20 50 33 20 69 73 20 61 73 73 75 6d 65  ter P3 is assume
329a0 64 20 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62  d to hold a 64-b
329b0 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  it integer value
329c0 2e 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31  . If register P1
329d0 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20 52  .** contains a R
329e0 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 61 6e 64  owSet object and
329f0 20 74 68 61 74 20 52 6f 77 53 65 74 20 6f 62 6a   that RowSet obj
32a00 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20  ect contains.** 
32a10 74 68 65 20 76 61 6c 75 65 20 68 65 6c 64 20 69  the value held i
32a20 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65  n P3, jump to re
32a30 67 69 73 74 65 72 20 50 32 2e 20 4f 74 68 65 72  gister P2. Other
32a40 77 69 73 65 2c 20 69 6e 73 65 72 74 20 74 68 65  wise, insert the
32a50 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e 20 50  .** integer in P
32a60 33 20 69 6e 74 6f 20 74 68 65 20 52 6f 77 53 65  3 into the RowSe
32a70 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f  t and continue o
32a80 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74  n to the.** next
32a90 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54   opcode..**.** T
32aa0 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74  he RowSet object
32ab0 20 69 73 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f   is optimized fo
32ac0 72 20 74 68 65 20 63 61 73 65 20 77 68 65 72 65  r the case where
32ad0 20 73 65 74 73 20 6f 66 20 69 6e 74 65 67 65 72   sets of integer
32ae0 73 0a 2a 2a 20 61 72 65 20 69 6e 73 65 72 74 65  s.** are inserte
32af0 64 20 69 6e 20 64 69 73 74 69 6e 63 74 20 70 68  d in distinct ph
32b00 61 73 65 73 2c 20 77 68 69 63 68 20 65 61 63 68  ases, which each
32b10 20 73 65 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f   set contains no
32b20 20 64 75 70 6c 69 63 61 74 65 73 2e 0a 2a 2a 20   duplicates..** 
32b30 45 61 63 68 20 73 65 74 20 69 73 20 69 64 65 6e  Each set is iden
32b40 74 69 66 69 65 64 20 62 79 20 61 20 75 6e 69 71  tified by a uniq
32b50 75 65 20 50 34 20 76 61 6c 75 65 2e 20 54 68 65  ue P4 value. The
32b60 20 66 69 72 73 74 20 73 65 74 0a 2a 2a 20 6d 75   first set.** mu
32b70 73 74 20 68 61 76 65 20 50 34 3d 3d 30 2c 20 74  st have P4==0, t
32b80 68 65 20 66 69 6e 61 6c 20 73 65 74 20 6d 75 73  he final set mus
32b90 74 20 68 61 76 65 20 50 34 3d 3d 2d 31 2c 20 61  t have P4==-1, a
32ba0 6e 64 20 66 6f 72 20 61 6c 6c 20 6f 74 68 65 72  nd for all other
32bb0 20 73 65 74 73 0a 2a 2a 20 6d 75 73 74 20 68 61   sets.** must ha
32bc0 76 65 20 50 34 3e 30 2e 0a 2a 2a 0a 2a 2a 20 54  ve P4>0..**.** T
32bd0 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d  his allows optim
32be0 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20 77 68  izations: (a) wh
32bf0 65 6e 20 50 34 3d 3d 30 20 74 68 65 72 65 20 69  en P4==0 there i
32c00 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65 73  s no need to tes
32c10 74 0a 2a 2a 20 74 68 65 20 52 6f 77 53 65 74 20  t.** the RowSet 
32c20 6f 62 6a 65 63 74 20 66 6f 72 20 50 33 2c 20 61  object for P3, a
32c30 73 20 69 74 20 69 73 20 67 75 61 72 61 6e 74 65  s it is guarante
32c40 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61 69  ed not to contai
32c50 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68 65  n it,.** (b) whe
32c60 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72 65 20 69  n P4==-1 there i
32c70 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e 73  s no need to ins
32c80 65 72 74 20 74 68 65 20 76 61 6c 75 65 2c 20 61  ert the value, a
32c90 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76  s it will.** nev
32ca0 65 72 20 62 65 20 74 65 73 74 65 64 20 66 6f 72  er be tested for
32cb0 2c 20 61 6e 64 20 28 63 29 20 77 68 65 6e 20 61  , and (c) when a
32cc0 20 76 61 6c 75 65 20 74 68 61 74 20 69 73 20 70   value that is p
32cd0 61 72 74 20 6f 66 20 73 65 74 20 58 20 69 73 0a  art of set X is.
32ce0 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20 74 68 65  ** inserted, the
32cf0 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f  re is no need to
32d00 20 73 65 61 72 63 68 20 74 6f 20 73 65 65 20 69   search to see i
32d10 66 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65  f the same value
32d20 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73   was.** previous
32d30 6c 79 20 69 6e 73 65 72 74 65 64 20 61 73 20 70  ly inserted as p
32d40 61 72 74 20 6f 66 20 73 65 74 20 58 20 28 6f 6e  art of set X (on
32d50 6c 79 20 69 66 20 69 74 20 77 61 73 20 70 72 65  ly if it was pre
32d60 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65 72  viously.** inser
32d70 74 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 73  ted as part of s
32d80 6f 6d 65 20 6f 74 68 65 72 20 73 65 74 29 2e 0a  ome other set)..
32d90 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65  */.case OP_RowSe
32da0 74 54 65 73 74 3a 20 7b 20 20 20 20 20 20 20 20  tTest: {        
32db0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
32dc0 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
32dd0 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a 20 20  /.  int iSet;.  
32de0 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20 20 70  int exists;..  p
32df0 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
32e00 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26  >p1];.  pIn3 = &
32e10 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
32e20 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e   iSet = pOp->p4.
32e30 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  i;.  assert( pIn
32e40 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  3->flags&MEM_Int
32e50 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65   );..  /* If the
32e60 72 65 20 69 73 20 61 6e 79 74 68 69 6e 67 20 6f  re is anything o
32e70 74 68 65 72 20 74 68 61 6e 20 61 20 72 6f 77 73  ther than a rows
32e80 65 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d  et object in mem
32e90 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a  ory cell P1,.  *
32ea0 2a 20 64 65 6c 65 74 65 20 69 74 20 6e 6f 77 20  * delete it now 
32eb0 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 50  and initialize P
32ec0 31 20 77 69 74 68 20 61 6e 20 65 6d 70 74 79 20  1 with an empty 
32ed0 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66  rowset.  */.  if
32ee0 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
32ef0 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b   MEM_Blob)==0 ){
32f00 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
32f10 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74  VdbeMemSetRowSet
32f20 28 70 49 6e 31 29 20 29 20 67 6f 74 6f 20 6e 6f  (pIn1) ) goto no
32f30 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65  _mem;.  }.  asse
32f40 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  rt( sqlite3VdbeM
32f50 65 6d 49 73 52 6f 77 53 65 74 28 70 49 6e 31 29  emIsRowSet(pIn1)
32f60 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
32f70 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
32f80 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28  T32 );.  assert(
32f90 20 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65   iSet==-1 || iSe
32fa0 74 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 53  t>=0 );.  if( iS
32fb0 65 74 20 29 7b 0a 20 20 20 20 65 78 69 73 74 73  et ){.    exists
32fc0 20 3d 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74   = sqlite3RowSet
32fd0 54 65 73 74 28 28 52 6f 77 53 65 74 2a 29 70 49  Test((RowSet*)pI
32fe0 6e 31 2d 3e 7a 2c 20 69 53 65 74 2c 20 70 49 6e  n1->z, iSet, pIn
32ff0 33 2d 3e 75 2e 69 29 3b 0a 20 20 20 20 56 64 62  3->u.i);.    Vdb
33000 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 65 78 69  eBranchTaken(exi
33010 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69  sts!=0,2);.    i
33020 66 28 20 65 78 69 73 74 73 20 29 20 67 6f 74 6f  f( exists ) goto
33030 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
33040 0a 20 20 69 66 28 20 69 53 65 74 3e 3d 30 20 29  .  if( iSet>=0 )
33050 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 6f 77  {.    sqlite3Row
33060 53 65 74 49 6e 73 65 72 74 28 28 52 6f 77 53 65  SetInsert((RowSe
33070 74 2a 29 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 33  t*)pIn1->z, pIn3
33080 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72  ->u.i);.  }.  br
33090 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66  eak;.}...#ifndef
330a0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49   SQLITE_OMIT_TRI
330b0 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  GGER../* Opcode:
330c0 20 50 72 6f 67 72 61 6d 20 50 31 20 50 32 20 50   Program P1 P2 P
330d0 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78  3 P4 P5.**.** Ex
330e0 65 63 75 74 65 20 74 68 65 20 74 72 69 67 67 65  ecute the trigge
330f0 72 20 70 72 6f 67 72 61 6d 20 70 61 73 73 65 64  r program passed
33100 20 61 73 20 50 34 20 28 74 79 70 65 20 50 34 5f   as P4 (type P4_
33110 53 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a  SUBPROGRAM). .**
33120 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73 20  .** P1 contains 
33130 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74  the address of t
33140 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74  he memory cell t
33150 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
33160 20 66 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a   first memory .*
33170 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72  * cell in an arr
33180 61 79 20 6f 66 20 76 61 6c 75 65 73 20 75 73 65  ay of values use
33190 64 20 61 73 20 61 72 67 75 6d 65 6e 74 73 20 74  d as arguments t
331a0 6f 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61  o the sub-progra
331b0 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69  m. P2 .** contai
331c0 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20 74  ns the address t
331d0 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20 74 68 65  o jump to if the
331e0 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 72   sub-program thr
331f0 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a  ows an IGNORE .*
33200 2a 20 65 78 63 65 70 74 69 6f 6e 20 75 73 69 6e  * exception usin
33210 67 20 74 68 65 20 52 41 49 53 45 28 29 20 66 75  g the RAISE() fu
33220 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73 74 65 72  nction. Register
33230 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P3 contains the
33240 20 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20   address .** of 
33250 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e  a memory cell in
33260 20 74 68 69 73 20 28 74 68 65 20 70 61 72 65 6e   this (the paren
33270 74 29 20 56 4d 20 74 68 61 74 20 69 73 20 75 73  t) VM that is us
33280 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74  ed to allocate t
33290 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65  he .** memory re
332a0 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73 75  quired by the su
332b0 62 2d 76 64 62 65 20 61 74 20 72 75 6e 74 69 6d  b-vdbe at runtim
332c0 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  e..**.** P4 is a
332d0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
332e0 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  VM containing th
332f0 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
33300 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  m..**.** If P5 i
33310 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
33320 20 72 65 63 75 72 73 69 76 65 20 70 72 6f 67 72   recursive progr
33330 61 6d 20 69 6e 76 6f 63 61 74 69 6f 6e 20 69 73  am invocation is
33340 20 65 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 63 61 73   enabled..*/.cas
33350 65 20 4f 50 5f 50 72 6f 67 72 61 6d 3a 20 7b 20  e OP_Program: { 
33360 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
33370 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20  /.  int nMem;   
33380 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
33390 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
333a0 72 65 67 69 73 74 65 72 73 20 66 6f 72 20 73 75  registers for su
333b0 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69  b-program */.  i
333c0 6e 74 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20  nt nByte;       
333d0 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20         /* Bytes 
333e0 6f 66 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65  of runtime space
333f0 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 73 75   required for su
33400 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d  b-program */.  M
33410 65 6d 20 2a 70 52 74 3b 20 20 20 20 20 20 20 20  em *pRt;        
33420 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
33430 65 72 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 72  er to allocate r
33440 75 6e 74 69 6d 65 20 73 70 61 63 65 20 2a 2f 0a  untime space */.
33450 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20    Mem *pMem;    
33460 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
33470 64 20 74 6f 20 69 74 65 72 61 74 65 20 74 68 72  d to iterate thr
33480 6f 75 67 68 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  ough memory cell
33490 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e 64  s */.  Mem *pEnd
334a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
334b0 2a 20 4c 61 73 74 20 6d 65 6d 6f 72 79 20 63 65  * Last memory ce
334c0 6c 6c 20 69 6e 20 6e 65 77 20 61 72 72 61 79 20  ll in new array 
334d0 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a  */.  VdbeFrame *
334e0 70 46 72 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20  pFrame;      /* 
334f0 4e 65 77 20 76 64 62 65 20 66 72 61 6d 65 20 74  New vdbe frame t
33500 6f 20 65 78 65 63 75 74 65 20 69 6e 20 2a 2f 0a  o execute in */.
33510 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50    SubProgram *pP
33520 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 53 75 62  rogram;   /* Sub
33530 2d 70 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63  -program to exec
33540 75 74 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 74  ute */.  void *t
33550 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
33560 20 2f 2a 20 54 6f 6b 65 6e 20 69 64 65 6e 74 69   /* Token identi
33570 66 79 69 6e 67 20 74 72 69 67 67 65 72 20 2a 2f  fying trigger */
33580 0a 0a 20 20 70 50 72 6f 67 72 61 6d 20 3d 20 70  ..  pProgram = p
33590 4f 70 2d 3e 70 34 2e 70 50 72 6f 67 72 61 6d 3b  Op->p4.pProgram;
335a0 0a 20 20 70 52 74 20 3d 20 26 61 4d 65 6d 5b 70  .  pRt = &aMem[p
335b0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
335c0 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70  t( pProgram->nOp
335d0 3e 30 20 29 3b 0a 20 20 0a 20 20 2f 2a 20 49 66  >0 );.  .  /* If
335e0 20 74 68 65 20 70 35 20 66 6c 61 67 20 69 73 20   the p5 flag is 
335f0 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 63 75  clear, then recu
33600 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e  rsive invocation
33610 20 6f 66 20 74 72 69 67 67 65 72 73 20 69 73 20   of triggers is 
33620 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 20 66  .  ** disabled f
33630 6f 72 20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d  or backwards com
33640 70 61 74 69 62 69 6c 69 74 79 20 28 70 35 20 69  patibility (p5 i
33650 73 20 73 65 74 20 69 66 20 74 68 69 73 20 73 75  s set if this su
33660 62 2d 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 69  b-program.  ** i
33670 73 20 72 65 61 6c 6c 79 20 61 20 74 72 69 67 67  s really a trigg
33680 65 72 2c 20 6e 6f 74 20 61 20 66 6f 72 65 69 67  er, not a foreig
33690 6e 20 6b 65 79 20 61 63 74 69 6f 6e 2c 20 61 6e  n key action, an
336a0 64 20 74 68 65 20 66 6c 61 67 20 73 65 74 0a 20  d the flag set. 
336b0 20 2a 2a 20 61 6e 64 20 63 6c 65 61 72 65 64 20   ** and cleared 
336c0 62 79 20 74 68 65 20 22 50 52 41 47 4d 41 20 72  by the "PRAGMA r
336d0 65 63 75 72 73 69 76 65 5f 74 72 69 67 67 65 72  ecursive_trigger
336e0 73 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 63 6c  s" command is cl
336f0 65 61 72 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a  ear)..  ** .  **
33700 20 49 74 20 69 73 20 72 65 63 75 72 73 69 76 65   It is recursive
33710 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74   invocation of t
33720 72 69 67 67 65 72 73 2c 20 61 74 20 74 68 65 20  riggers, at the 
33730 53 51 4c 20 6c 65 76 65 6c 2c 20 74 68 61 74 20  SQL level, that 
33740 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65  is .  ** disable
33750 64 2e 20 49 6e 20 73 6f 6d 65 20 63 61 73 65 73  d. In some cases
33760 20 61 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65   a single trigge
33770 72 20 6d 61 79 20 67 65 6e 65 72 61 74 65 20 6d  r may generate m
33780 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 0a 20 20  ore than one .  
33790 2a 2a 20 53 75 62 50 72 6f 67 72 61 6d 20 28 69  ** SubProgram (i
337a0 66 20 74 68 65 20 74 72 69 67 67 65 72 20 6d 61  f the trigger ma
337b0 79 20 62 65 20 65 78 65 63 75 74 65 64 20 77 69  y be executed wi
337c0 74 68 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  th more than one
337d0 20 64 69 66 66 65 72 65 6e 74 20 0a 20 20 2a 2a   different .  **
337e0 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67   ON CONFLICT alg
337f0 6f 72 69 74 68 6d 29 2e 20 53 75 62 50 72 6f 67  orithm). SubProg
33800 72 61 6d 20 73 74 72 75 63 74 75 72 65 73 20 61  ram structures a
33810 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
33820 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20 74 72 69  .  ** single tri
33830 67 67 65 72 20 61 6c 6c 20 68 61 76 65 20 74 68  gger all have th
33840 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72  e same value for
33850 20 74 68 65 20 53 75 62 50 72 6f 67 72 61 6d 2e   the SubProgram.
33860 74 6f 6b 65 6e 20 0a 20 20 2a 2a 20 76 61 72 69  token .  ** vari
33870 61 62 6c 65 2e 20 20 2a 2f 0a 20 20 69 66 28 20  able.  */.  if( 
33880 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 74  pOp->p5 ){.    t
33890 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b   = pProgram->tok
338a0 65 6e 3b 0a 20 20 20 20 66 6f 72 28 70 46 72 61  en;.    for(pFra
338b0 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46  me=p->pFrame; pF
338c0 72 61 6d 65 20 26 26 20 70 46 72 61 6d 65 2d 3e  rame && pFrame->
338d0 74 6f 6b 65 6e 21 3d 74 3b 20 70 46 72 61 6d 65  token!=t; pFrame
338e0 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74  =pFrame->pParent
338f0 29 3b 0a 20 20 20 20 69 66 28 20 70 46 72 61 6d  );.    if( pFram
33900 65 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a  e ) break;.  }..
33910 20 20 69 66 28 20 70 2d 3e 6e 46 72 61 6d 65 3e    if( p->nFrame>
33920 3d 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  =db->aLimit[SQLI
33930 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45 52  TE_LIMIT_TRIGGER
33940 5f 44 45 50 54 48 5d 20 29 7b 0a 20 20 20 20 72  _DEPTH] ){.    r
33950 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
33960 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
33970 65 45 72 72 6f 72 28 70 2c 20 22 74 6f 6f 20 6d  eError(p, "too m
33980 61 6e 79 20 6c 65 76 65 6c 73 20 6f 66 20 74 72  any levels of tr
33990 69 67 67 65 72 20 72 65 63 75 72 73 69 6f 6e 22  igger recursion"
339a0 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  );.    goto abor
339b0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
339c0 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74    }..  /* Regist
339d0 65 72 20 70 52 74 20 69 73 20 75 73 65 64 20 74  er pRt is used t
339e0 6f 20 73 74 6f 72 65 20 74 68 65 20 6d 65 6d 6f  o store the memo
339f0 72 79 20 72 65 71 75 69 72 65 64 20 74 6f 20 73  ry required to s
33a00 61 76 65 20 74 68 65 20 73 74 61 74 65 0a 20 20  ave the state.  
33a10 2a 2a 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  ** of the curren
33a20 74 20 70 72 6f 67 72 61 6d 2c 20 61 6e 64 20 74  t program, and t
33a30 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  he memory requir
33a40 65 64 20 61 74 20 72 75 6e 74 69 6d 65 20 74 6f  ed at runtime to
33a50 20 65 78 65 63 75 74 65 0a 20 20 2a 2a 20 74 68   execute.  ** th
33a60 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
33a70 6d 2e 20 49 66 20 74 68 69 73 20 74 72 69 67 67  m. If this trigg
33a80 65 72 20 68 61 73 20 62 65 65 6e 20 66 69 72 65  er has been fire
33a90 64 20 62 65 66 6f 72 65 2c 20 74 68 65 6e 20 70  d before, then p
33aa0 52 74 20 0a 20 20 2a 2a 20 69 73 20 61 6c 72 65  Rt .  ** is alre
33ab0 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4f  ady allocated. O
33ac0 74 68 65 72 77 69 73 65 2c 20 69 74 20 6d 75 73  therwise, it mus
33ad0 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64  t be initialized
33ae0 2e 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 52 74  .  */.  if( (pRt
33af0 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 42 6c 6f 62  ->flags&MEM_Blob
33b00 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 53  )==0 ){.    /* S
33b10 75 62 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69  ubProgram.nMem i
33b20 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d  s set to the num
33b30 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65  ber of memory ce
33b40 6c 6c 73 20 75 73 65 64 20 62 79 20 74 68 65 20  lls used by the 
33b50 0a 20 20 20 20 2a 2a 20 70 72 6f 67 72 61 6d 20  .    ** program 
33b60 73 74 6f 72 65 64 20 69 6e 20 53 75 62 50 72 6f  stored in SubPro
33b70 67 72 61 6d 2e 61 4f 70 2e 20 41 73 20 77 65 6c  gram.aOp. As wel
33b80 6c 20 61 73 20 74 68 65 73 65 2c 20 6f 6e 65 20  l as these, one 
33b90 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 63 65  memory.    ** ce
33ba0 6c 6c 20 69 73 20 72 65 71 75 69 72 65 64 20 66  ll is required f
33bb0 6f 72 20 65 61 63 68 20 63 75 72 73 6f 72 20 75  or each cursor u
33bc0 73 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72  sed by the progr
33bd0 61 6d 2e 20 53 65 74 20 6c 6f 63 61 6c 0a 20 20  am. Set local.  
33be0 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 4d    ** variable nM
33bf0 65 6d 20 28 61 6e 64 20 6c 61 74 65 72 2c 20 56  em (and later, V
33c00 64 62 65 46 72 61 6d 65 2e 6e 43 68 69 6c 64 4d  dbeFrame.nChildM
33c10 65 6d 29 20 74 6f 20 74 68 69 73 20 76 61 6c 75  em) to this valu
33c20 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6e 4d  e..    */.    nM
33c30 65 6d 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  em = pProgram->n
33c40 4d 65 6d 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e  Mem + pProgram->
33c50 6e 43 73 72 3b 0a 20 20 20 20 61 73 73 65 72 74  nCsr;.    assert
33c60 28 20 6e 4d 65 6d 3e 30 20 29 3b 0a 20 20 20 20  ( nMem>0 );.    
33c70 69 66 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  if( pProgram->nC
33c80 73 72 3d 3d 30 20 29 20 6e 4d 65 6d 2b 2b 3b 0a  sr==0 ) nMem++;.
33c90 20 20 20 20 6e 42 79 74 65 20 3d 20 52 4f 55 4e      nByte = ROUN
33ca0 44 38 28 73 69 7a 65 6f 66 28 56 64 62 65 46 72  D8(sizeof(VdbeFr
33cb0 61 6d 65 29 29 0a 20 20 20 20 20 20 20 20 20 20  ame)).          
33cc0 20 20 20 20 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a      + nMem * siz
33cd0 65 6f 66 28 4d 65 6d 29 0a 20 20 20 20 20 20 20  eof(Mem).       
33ce0 20 20 20 20 20 20 20 2b 20 70 50 72 6f 67 72 61         + pProgra
33cf0 6d 2d 3e 6e 43 73 72 20 2a 20 73 69 7a 65 6f 66  m->nCsr * sizeof
33d00 28 56 64 62 65 43 75 72 73 6f 72 2a 29 0a 20 20  (VdbeCursor*).  
33d10 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 28 70              + (p
33d20 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 20 2b 20 37  Program->nOp + 7
33d30 29 2f 38 3b 0a 20 20 20 20 70 46 72 61 6d 65 20  )/8;.    pFrame 
33d40 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  = sqlite3DbMallo
33d50 63 5a 65 72 6f 28 64 62 2c 20 6e 42 79 74 65 29  cZero(db, nByte)
33d60 3b 0a 20 20 20 20 69 66 28 20 21 70 46 72 61 6d  ;.    if( !pFram
33d70 65 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  e ){.      goto 
33d80 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20  no_mem;.    }.  
33d90 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
33da0 52 65 6c 65 61 73 65 28 70 52 74 29 3b 0a 20 20  Release(pRt);.  
33db0 20 20 70 52 74 2d 3e 66 6c 61 67 73 20 3d 20 4d    pRt->flags = M
33dc0 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 44 79 6e 3b  EM_Blob|MEM_Dyn;
33dd0 0a 20 20 20 20 70 52 74 2d 3e 7a 20 3d 20 28 63  .    pRt->z = (c
33de0 68 61 72 2a 29 70 46 72 61 6d 65 3b 0a 20 20 20  har*)pFrame;.   
33df0 20 70 52 74 2d 3e 6e 20 3d 20 6e 42 79 74 65 3b   pRt->n = nByte;
33e00 0a 20 20 20 20 70 52 74 2d 3e 78 44 65 6c 20 3d  .    pRt->xDel =
33e10 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 61 6d   sqlite3VdbeFram
33e20 65 4d 65 6d 44 65 6c 3b 0a 0a 20 20 20 20 70 46  eMemDel;..    pF
33e30 72 61 6d 65 2d 3e 76 20 3d 20 70 3b 0a 20 20 20  rame->v = p;.   
33e40 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d   pFrame->nChildM
33e50 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20 20 20 20 70  em = nMem;.    p
33e60 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72  Frame->nChildCsr
33e70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73   = pProgram->nCs
33e80 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 70  r;.    pFrame->p
33e90 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  c = (int)(pOp - 
33ea0 61 4f 70 29 3b 0a 20 20 20 20 70 46 72 61 6d 65  aOp);.    pFrame
33eb0 2d 3e 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d  ->aMem = p->aMem
33ec0 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4d  ;.    pFrame->nM
33ed0 65 6d 20 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20  em = p->nMem;.  
33ee0 20 20 70 46 72 61 6d 65 2d 3e 61 70 43 73 72 20    pFrame->apCsr 
33ef0 3d 20 70 2d 3e 61 70 43 73 72 3b 0a 20 20 20 20  = p->apCsr;.    
33f00 70 46 72 61 6d 65 2d 3e 6e 43 75 72 73 6f 72 20  pFrame->nCursor 
33f10 3d 20 70 2d 3e 6e 43 75 72 73 6f 72 3b 0a 20 20  = p->nCursor;.  
33f20 20 20 70 46 72 61 6d 65 2d 3e 61 4f 70 20 3d 20    pFrame->aOp = 
33f30 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 70 46 72 61  p->aOp;.    pFra
33f40 6d 65 2d 3e 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70  me->nOp = p->nOp
33f50 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 74 6f  ;.    pFrame->to
33f60 6b 65 6e 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  ken = pProgram->
33f70 74 6f 6b 65 6e 3b 0a 23 69 66 64 65 66 20 53 51  token;.#ifdef SQ
33f80 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54  LITE_ENABLE_STMT
33f90 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20 20 20  _SCANSTATUS.    
33fa0 70 46 72 61 6d 65 2d 3e 61 6e 45 78 65 63 20 3d  pFrame->anExec =
33fb0 20 70 2d 3e 61 6e 45 78 65 63 3b 0a 23 65 6e 64   p->anExec;.#end
33fc0 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
33fd0 5f 44 45 42 55 47 0a 20 20 20 20 70 46 72 61 6d  _DEBUG.    pFram
33fe0 65 2d 3e 69 46 72 61 6d 65 4d 61 67 69 63 20 3d  e->iFrameMagic =
33ff0 20 53 51 4c 49 54 45 5f 46 52 41 4d 45 5f 4d 41   SQLITE_FRAME_MA
34000 47 49 43 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20  GIC;.#endif..   
34010 20 70 45 6e 64 20 3d 20 26 56 64 62 65 46 72 61   pEnd = &VdbeFra
34020 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70 46  meMem(pFrame)[pF
34030 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d  rame->nChildMem]
34040 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56  ;.    for(pMem=V
34050 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61  dbeFrameMem(pFra
34060 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b  me); pMem!=pEnd;
34070 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20   pMem++){.      
34080 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pMem->flags = ME
34090 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 20  M_Undefined;.   
340a0 20 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62     pMem->db = db
340b0 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
340c0 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 28 56  .    pFrame = (V
340d0 64 62 65 46 72 61 6d 65 2a 29 70 52 74 2d 3e 7a  dbeFrame*)pRt->z
340e0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 52  ;.    assert( pR
340f0 74 2d 3e 78 44 65 6c 3d 3d 73 71 6c 69 74 65 33  t->xDel==sqlite3
34100 56 64 62 65 46 72 61 6d 65 4d 65 6d 44 65 6c 20  VdbeFrameMemDel 
34110 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
34120 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 70 50  Program->nMem+pP
34130 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46  rogram->nCsr==pF
34140 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20  rame->nChildMem 
34150 0a 20 20 20 20 20 20 20 20 7c 7c 20 28 70 50 72  .        || (pPr
34160 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 30 20 26  ogram->nCsr==0 &
34170 26 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d  & pProgram->nMem
34180 2b 31 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69  +1==pFrame->nChi
34190 6c 64 4d 65 6d 29 20 29 3b 0a 20 20 20 20 61 73  ldMem) );.    as
341a0 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e  sert( pProgram->
341b0 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43  nCsr==pFrame->nC
341c0 68 69 6c 64 43 73 72 20 29 3b 0a 20 20 20 20 61  hildCsr );.    a
341d0 73 73 65 72 74 28 20 28 69 6e 74 29 28 70 4f 70  ssert( (int)(pOp
341e0 20 2d 20 61 4f 70 29 3d 3d 70 46 72 61 6d 65 2d   - aOp)==pFrame-
341f0 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d  >pc );.  }..  p-
34200 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46 72  >nFrame++;.  pFr
34210 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20 70  ame->pParent = p
34220 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46 72 61  ->pFrame;.  pFra
34230 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  me->lastRowid = 
34240 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20  db->lastRowid;. 
34250 20 70 46 72 61 6d 65 2d 3e 6e 43 68 61 6e 67 65   pFrame->nChange
34260 20 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20   = p->nChange;. 
34270 20 70 46 72 61 6d 65 2d 3e 6e 44 62 43 68 61 6e   pFrame->nDbChan
34280 67 65 20 3d 20 70 2d 3e 64 62 2d 3e 6e 43 68 61  ge = p->db->nCha
34290 6e 67 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70  nge;.  assert( p
342a0 46 72 61 6d 65 2d 3e 70 41 75 78 44 61 74 61 3d  Frame->pAuxData=
342b0 3d 30 20 29 3b 0a 20 20 70 46 72 61 6d 65 2d 3e  =0 );.  pFrame->
342c0 70 41 75 78 44 61 74 61 20 3d 20 70 2d 3e 70 41  pAuxData = p->pA
342d0 75 78 44 61 74 61 3b 0a 20 20 70 2d 3e 70 41 75  uxData;.  p->pAu
342e0 78 44 61 74 61 20 3d 20 30 3b 0a 20 20 70 2d 3e  xData = 0;.  p->
342f0 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 70  nChange = 0;.  p
34300 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d  ->pFrame = pFram
34310 65 3b 0a 20 20 70 2d 3e 61 4d 65 6d 20 3d 20 61  e;.  p->aMem = a
34320 4d 65 6d 20 3d 20 56 64 62 65 46 72 61 6d 65 4d  Mem = VdbeFrameM
34330 65 6d 28 70 46 72 61 6d 65 29 3b 0a 20 20 70 2d  em(pFrame);.  p-
34340 3e 6e 4d 65 6d 20 3d 20 70 46 72 61 6d 65 2d 3e  >nMem = pFrame->
34350 6e 43 68 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e  nChildMem;.  p->
34360 6e 43 75 72 73 6f 72 20 3d 20 28 75 31 36 29 70  nCursor = (u16)p
34370 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72  Frame->nChildCsr
34380 3b 0a 20 20 70 2d 3e 61 70 43 73 72 20 3d 20 28  ;.  p->apCsr = (
34390 56 64 62 65 43 75 72 73 6f 72 20 2a 2a 29 26 61  VdbeCursor **)&a
343a0 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 3b 0a 20 20  Mem[p->nMem];.  
343b0 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 20 3d 20  pFrame->aOnce = 
343c0 28 75 38 2a 29 26 70 2d 3e 61 70 43 73 72 5b 70  (u8*)&p->apCsr[p
343d0 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 5d 3b 0a  Program->nCsr];.
343e0 20 20 6d 65 6d 73 65 74 28 70 46 72 61 6d 65 2d    memset(pFrame-
343f0 3e 61 4f 6e 63 65 2c 20 30 2c 20 28 70 50 72 6f  >aOnce, 0, (pPro
34400 67 72 61 6d 2d 3e 6e 4f 70 20 2b 20 37 29 2f 38  gram->nOp + 7)/8
34410 29 3b 0a 20 20 70 2d 3e 61 4f 70 20 3d 20 61 4f  );.  p->aOp = aO
34420 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 61 4f  p = pProgram->aO
34430 70 3b 0a 20 20 70 2d 3e 6e 4f 70 20 3d 20 70 50  p;.  p->nOp = pP
34440 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3b 0a 23 69 66  rogram->nOp;.#if
34450 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
34460 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55  E_STMT_SCANSTATU
34470 53 0a 20 20 70 2d 3e 61 6e 45 78 65 63 20 3d 20  S.  p->anExec = 
34480 30 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  0;.#endif.#ifdef
34490 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
344a0 2f 2a 20 56 65 72 69 66 79 20 74 68 61 74 20 73  /* Verify that s
344b0 65 63 6f 6e 64 20 61 6e 64 20 73 75 62 73 65 71  econd and subseq
344c0 75 65 6e 74 20 65 78 65 63 75 74 69 6f 6e 73 20  uent executions 
344d0 6f 66 20 74 68 65 20 73 61 6d 65 20 74 72 69 67  of the same trig
344e0 67 65 72 20 64 6f 20 6e 6f 74 0a 20 20 2a 2a 20  ger do not.  ** 
344f0 74 72 79 20 74 6f 20 72 65 75 73 65 20 72 65 67  try to reuse reg
34500 69 73 74 65 72 20 76 61 6c 75 65 73 20 66 72 6f  ister values fro
34510 6d 20 74 68 65 20 66 69 72 73 74 20 75 73 65 2e  m the first use.
34520 20 2a 2f 0a 20 20 7b 0a 20 20 20 20 69 6e 74 20   */.  {.    int 
34530 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  i;.    for(i=0; 
34540 69 3c 70 2d 3e 6e 4d 65 6d 3b 20 69 2b 2b 29 7b  i<p->nMem; i++){
34550 0a 20 20 20 20 20 20 61 4d 65 6d 5b 69 5d 2e 70  .      aMem[i].p
34560 53 63 6f 70 79 46 72 6f 6d 20 3d 20 30 3b 20 20  ScopyFrom = 0;  
34570 2f 2a 20 50 72 65 76 65 6e 74 20 66 61 6c 73 65  /* Prevent false
34580 2d 70 6f 73 69 74 69 76 65 20 41 62 6f 75 74 54  -positive AboutT
34590 6f 43 68 61 6e 67 65 28 29 20 65 72 72 73 20 2a  oChange() errs *
345a0 2f 0a 20 20 20 20 20 20 61 4d 65 6d 5b 69 5d 2e  /.      aMem[i].
345b0 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 55 6e 64  flags |= MEM_Und
345c0 65 66 69 6e 65 64 3b 20 2f 2a 20 43 61 75 73 65  efined; /* Cause
345d0 20 61 20 66 61 75 6c 74 20 69 66 20 74 68 69 73   a fault if this
345e0 20 72 65 67 20 69 73 20 72 65 75 73 65 64 20 2a   reg is reused *
345f0 2f 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64  /.    }.  }.#end
34600 69 66 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b  if.  pOp = &aOp[
34610 2d 31 5d 3b 0a 20 20 67 6f 74 6f 20 63 68 65 63  -1];.  goto chec
34620 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b  k_for_interrupt;
34630 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .}../* Opcode: P
34640 61 72 61 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a  aram P1 P2 * * *
34650 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
34660 64 65 20 69 73 20 6f 6e 6c 79 20 65 76 65 72 20  de is only ever 
34670 70 72 65 73 65 6e 74 20 69 6e 20 73 75 62 2d 70  present in sub-p
34680 72 6f 67 72 61 6d 73 20 63 61 6c 6c 65 64 20 76  rograms called v
34690 69 61 20 74 68 65 20 0a 2a 2a 20 4f 50 5f 50 72  ia the .** OP_Pr
346a0 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f  ogram instructio
346b0 6e 2e 20 43 6f 70 79 20 61 20 76 61 6c 75 65 20  n. Copy a value 
346c0 63 75 72 72 65 6e 74 6c 79 20 73 74 6f 72 65 64  currently stored
346d0 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a   in a memory .**
346e0 20 63 65 6c 6c 20 6f 66 20 74 68 65 20 63 61 6c   cell of the cal
346f0 6c 69 6e 67 20 28 70 61 72 65 6e 74 29 20 66 72  ling (parent) fr
34700 61 6d 65 20 74 6f 20 63 65 6c 6c 20 50 32 20 69  ame to cell P2 i
34710 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72  n the current fr
34720 61 6d 65 73 20 0a 2a 2a 20 61 64 64 72 65 73 73  ames .** address
34730 20 73 70 61 63 65 2e 20 54 68 69 73 20 69 73 20   space. This is 
34740 75 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20  used by trigger 
34750 70 72 6f 67 72 61 6d 73 20 74 6f 20 61 63 63 65  programs to acce
34760 73 73 20 74 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a  ss the new.* .**
34770 20 61 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c 75 65   and old.* value
34780 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 64 64  s..**.** The add
34790 72 65 73 73 20 6f 66 20 74 68 65 20 63 65 6c 6c  ress of the cell
347a0 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 66   in the parent f
347b0 72 61 6d 65 20 69 73 20 64 65 74 65 72 6d 69 6e  rame is determin
347c0 65 64 20 62 79 20 61 64 64 69 6e 67 0a 2a 2a 20  ed by adding.** 
347d0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
347e0 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20   P1 argument to 
347f0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
34800 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20   P1 argument to 
34810 74 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f  the.** calling O
34820 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75  P_Program instru
34830 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
34840 50 5f 50 61 72 61 6d 3a 20 7b 20 20 20 20 20 20  P_Param: {      
34850 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
34860 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
34870 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b  ame;.  Mem *pIn;
34880 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
34890 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
348a0 3b 0a 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e  ;.  pFrame = p->
348b0 70 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20 3d 20  pFrame;.  pIn = 
348c0 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f  &pFrame->aMem[pO
348d0 70 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65 2d 3e  p->p1 + pFrame->
348e0 61 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63 5d 2e  aOp[pFrame->pc].
348f0 70 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69 74 65  p1];   .  sqlite
34900 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
34910 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c 20 4d  opy(pOut, pIn, M
34920 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62 72 65  EM_Ephem);.  bre
34930 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a  ak;.}..#endif /*
34940 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f   #ifndef SQLITE_
34950 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a  OMIT_TRIGGER */.
34960 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
34970 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
34980 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 43 6f  ./* Opcode: FkCo
34990 75 6e 74 65 72 20 50 31 20 50 32 20 2a 20 2a 20  unter P1 P2 * * 
349a0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 66  *.** Synopsis: f
349b0 6b 63 74 72 5b 50 31 5d 2b 3d 50 32 0a 2a 2a 0a  kctr[P1]+=P2.**.
349c0 2a 2a 20 49 6e 63 72 65 6d 65 6e 74 20 61 20 22  ** Increment a "
349d0 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74  constraint count
349e0 65 72 22 20 62 79 20 50 32 20 28 50 32 20 6d 61  er" by P2 (P2 ma
349f0 79 20 62 65 20 6e 65 67 61 74 69 76 65 20 6f 72  y be negative or
34a00 20 70 6f 73 69 74 69 76 65 29 2e 0a 2a 2a 20 49   positive)..** I
34a10 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P1 is non-zero
34a20 2c 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  , the database c
34a30 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65  onstraint counte
34a40 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  r is incremented
34a50 20 0a 2a 2a 20 28 64 65 66 65 72 72 65 64 20 66   .** (deferred f
34a60 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
34a70 72 61 69 6e 74 73 29 2e 20 4f 74 68 65 72 77 69  raints). Otherwi
34a80 73 65 2c 20 69 66 20 50 31 20 69 73 20 7a 65 72  se, if P1 is zer
34a90 6f 2c 20 74 68 65 20 0a 2a 2a 20 73 74 61 74 65  o, the .** state
34aa0 6d 65 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20  ment counter is 
34ab0 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 69 6d 6d  incremented (imm
34ac0 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b  ediate foreign k
34ad0 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e  ey constraints).
34ae0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 43 6f  .*/.case OP_FkCo
34af0 75 6e 74 65 72 3a 20 7b 0a 20 20 69 66 28 20 64  unter: {.  if( d
34b00 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
34b10 45 5f 44 65 66 65 72 46 4b 73 20 29 7b 0a 20 20  E_DeferFKs ){.  
34b20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49    db->nDeferredI
34b30 6d 6d 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70  mmCons += pOp->p
34b40 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  2;.  }else if( p
34b50 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 64 62  Op->p1 ){.    db
34b60 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20  ->nDeferredCons 
34b70 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65  += pOp->p2;.  }e
34b80 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b 43  lse{.    p->nFkC
34b90 6f 6e 73 74 72 61 69 6e 74 20 2b 3d 20 70 4f 70  onstraint += pOp
34ba0 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  ->p2;.  }.  brea
34bb0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
34bc0 20 46 6b 49 66 5a 65 72 6f 20 50 31 20 50 32 20   FkIfZero P1 P2 
34bd0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
34be0 73 3a 20 69 66 20 66 6b 63 74 72 5b 50 31 5d 3d  s: if fkctr[P1]=
34bf0 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  =0 goto P2.**.**
34c00 20 54 68 69 73 20 6f 70 63 6f 64 65 20 74 65 73   This opcode tes
34c10 74 73 20 69 66 20 61 20 66 6f 72 65 69 67 6e 20  ts if a foreign 
34c20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63  key constraint-c
34c30 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e  ounter is curren
34c40 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20  tly zero..** If 
34c50 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74  so, jump to inst
34c60 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65  ruction P2. Othe
34c70 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f  rwise, fall thro
34c80 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
34c90 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  .** instruction.
34ca0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  .**.** If P1 is 
34cb0 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74  non-zero, then t
34cc0 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
34cd0 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65   if the database
34ce0 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e   constraint-coun
34cf0 74 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f 20 28  ter.** is zero (
34d00 74 68 65 20 6f 6e 65 20 74 68 61 74 20 63 6f 75  the one that cou
34d10 6e 74 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e  nts deferred con
34d20 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
34d30 6e 73 29 2e 20 49 66 20 50 31 20 69 73 0a 2a 2a  ns). If P1 is.**
34d40 20 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d 70 20   zero, the jump 
34d50 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
34d60 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73 74 72  statement constr
34d70 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20  aint-counter is 
34d80 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69 61  zero.** (immedia
34d90 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
34da0 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
34db0 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ions)..*/.case O
34dc0 50 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20 20 20  P_FkIfZero: {   
34dd0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
34de0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29  .  if( pOp->p1 )
34df0 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  {.    VdbeBranch
34e00 54 61 6b 65 6e 28 64 62 2d 3e 6e 44 65 66 65 72  Taken(db->nDefer
34e10 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62  redCons==0 && db
34e20 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
34e30 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69  ns==0, 2);.    i
34e40 66 28 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  f( db->nDeferred
34e50 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e  Cons==0 && db->n
34e60 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d  DeferredImmCons=
34e70 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  =0 ) goto jump_t
34e80 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  o_p2;.  }else{. 
34e90 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
34ea0 65 6e 28 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61  en(p->nFkConstra
34eb0 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44  int==0 && db->nD
34ec0 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d  eferredImmCons==
34ed0 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20 70  0, 2);.    if( p
34ee0 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d  ->nFkConstraint=
34ef0 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72  =0 && db->nDefer
34f00 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20  redImmCons==0 ) 
34f10 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
34f20 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
34f30 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65  #endif /* #ifnde
34f40 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
34f50 52 45 49 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69  REIGN_KEY */..#i
34f60 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
34f70 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  T_AUTOINCREMENT.
34f80 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61  /* Opcode: MemMa
34f90 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  x P1 P2 * * *.**
34fa0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d   Synopsis: r[P1]
34fb0 3d 6d 61 78 28 72 5b 50 31 5d 2c 72 5b 50 32 5d  =max(r[P1],r[P2]
34fc0 29 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  ).**.** P1 is a 
34fd0 72 65 67 69 73 74 65 72 20 69 6e 20 74 68 65 20  register in the 
34fe0 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68  root frame of th
34ff0 69 73 20 56 4d 20 28 74 68 65 20 72 6f 6f 74 20  is VM (the root 
35000 66 72 61 6d 65 20 69 73 0a 2a 2a 20 64 69 66 66  frame is.** diff
35010 65 72 65 6e 74 20 66 72 6f 6d 20 74 68 65 20 63  erent from the c
35020 75 72 72 65 6e 74 20 66 72 61 6d 65 20 69 66 20  urrent frame if 
35030 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
35040 20 69 73 20 62 65 69 6e 67 20 65 78 65 63 75 74   is being execut
35050 65 64 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 73  ed.** within a s
35060 75 62 2d 70 72 6f 67 72 61 6d 29 2e 20 53 65 74  ub-program). Set
35070 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65   the value of re
35080 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68 65  gister P1 to the
35090 20 6d 61 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20   maximum of .** 
350a0 69 74 73 20 63 75 72 72 65 6e 74 20 76 61 6c 75  its current valu
350b0 65 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20  e and the value 
350c0 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
350d0 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
350e0 75 63 74 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e  uction throws an
350f0 20 65 72 72 6f 72 20 69 66 20 74 68 65 20 6d 65   error if the me
35100 6d 6f 72 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74  mory cell is not
35110 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e   initially.** an
35120 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73   integer..*/.cas
35130 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20  e OP_MemMax: {  
35140 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a        /* in2 */.
35150 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
35160 61 6d 65 3b 0a 20 20 69 66 28 20 70 2d 3e 70 46  ame;.  if( p->pF
35170 72 61 6d 65 20 29 7b 0a 20 20 20 20 66 6f 72 28  rame ){.    for(
35180 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65  pFrame=p->pFrame
35190 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  ; pFrame->pParen
351a0 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65  t; pFrame=pFrame
351b0 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20  ->pParent);.    
351c0 70 49 6e 31 20 3d 20 26 70 46 72 61 6d 65 2d 3e  pIn1 = &pFrame->
351d0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
351e0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31   }else{.    pIn1
351f0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
35200 5d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  ];.  }.  assert(
35210 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31   memIsValid(pIn1
35220 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  ) );.  sqlite3Vd
35230 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
35240 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20  pIn1);.  pIn2 = 
35250 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
35260 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
35270 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32 29  Integerify(pIn2)
35280 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e  ;.  if( pIn1->u.
35290 69 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20  i<pIn2->u.i){.  
352a0 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 49    pIn1->u.i = pI
352b0 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 62  n2->u.i;.  }.  b
352c0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
352d0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  * SQLITE_OMIT_AU
352e0 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a  TOINCREMENT */..
352f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 50 6f 73  /* Opcode: IfPos
35300 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
35310 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
35320 50 31 5d 3e 30 20 74 68 65 6e 20 72 5b 50 31 5d  P1]>0 then r[P1]
35330 2d 3d 50 33 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a  -=P3, goto P2.**
35340 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31 20  .** Register P1 
35350 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20  must contain an 
35360 69 6e 74 65 67 65 72 2e 0a 2a 2a 20 49 66 20 74  integer..** If t
35370 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  he value of regi
35380 73 74 65 72 20 50 31 20 69 73 20 31 20 6f 72 20  ster P1 is 1 or 
35390 67 72 65 61 74 65 72 2c 20 73 75 62 74 72 61 63  greater, subtrac
353a0 74 20 50 33 20 66 72 6f 6d 20 74 68 65 0a 2a 2a  t P3 from the.**
353b0 20 76 61 6c 75 65 20 69 6e 20 50 31 20 61 6e 64   value in P1 and
353c0 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
353d0 2a 2a 20 49 66 20 74 68 65 20 69 6e 69 74 69 61  ** If the initia
353e0 6c 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  l value of regis
353f0 74 65 72 20 50 31 20 69 73 20 6c 65 73 73 20 74  ter P1 is less t
35400 68 61 6e 20 31 2c 20 74 68 65 6e 20 74 68 65 0a  han 1, then the.
35410 2a 2a 20 76 61 6c 75 65 20 69 73 20 75 6e 63 68  ** value is unch
35420 61 6e 67 65 64 20 61 6e 64 20 63 6f 6e 74 72 6f  anged and contro
35430 6c 20 70 61 73 73 65 73 20 74 68 72 6f 75 67 68  l passes through
35440 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
35450 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
35460 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20  e OP_IfPos: {   
35470 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
35480 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
35490 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
354a0 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
354b0 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  ags&MEM_Int );. 
354c0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
354d0 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 2c 20 32  ( pIn1->u.i>0, 2
354e0 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75  );.  if( pIn1->u
354f0 2e 69 3e 30 20 29 7b 0a 20 20 20 20 70 49 6e 31  .i>0 ){.    pIn1
35500 2d 3e 75 2e 69 20 2d 3d 20 70 4f 70 2d 3e 70 33  ->u.i -= pOp->p3
35510 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f  ;.    goto jump_
35520 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
35530 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
35540 3a 20 4f 66 66 73 65 74 4c 69 6d 69 74 20 50 31  : OffsetLimit P1
35550 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
35560 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
35570 3e 30 20 74 68 65 6e 20 72 5b 50 32 5d 3d 72 5b  >0 then r[P2]=r[
35580 50 31 5d 2b 6d 61 78 28 30 2c 72 5b 50 33 5d 29  P1]+max(0,r[P3])
35590 20 65 6c 73 65 20 72 5b 50 32 5d 3d 28 2d 31 29   else r[P2]=(-1)
355a0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
355b0 64 65 20 70 65 72 66 6f 72 6d 73 20 61 20 63 6f  de performs a co
355c0 6d 6d 6f 6e 6c 79 20 75 73 65 64 20 63 6f 6d 70  mmonly used comp
355d0 75 74 61 74 69 6f 6e 20 61 73 73 6f 63 69 61 74  utation associat
355e0 65 64 20 77 69 74 68 0a 2a 2a 20 4c 49 4d 49 54  ed with.** LIMIT
355f0 20 61 6e 64 20 4f 46 46 53 45 54 20 70 72 6f 63   and OFFSET proc
35600 65 73 73 2e 20 20 72 5b 50 31 5d 20 68 6f 6c 64  ess.  r[P1] hold
35610 73 20 74 68 65 20 6c 69 6d 69 74 20 63 6f 75 6e  s the limit coun
35620 74 65 72 2e 20 20 72 5b 50 33 5d 0a 2a 2a 20 68  ter.  r[P3].** h
35630 6f 6c 64 73 20 74 68 65 20 6f 66 66 73 65 74 20  olds the offset 
35640 63 6f 75 6e 74 65 72 2e 20 20 54 68 65 20 6f 70  counter.  The op
35650 63 6f 64 65 20 63 6f 6d 70 75 74 65 73 20 74 68  code computes th
35660 65 20 63 6f 6d 62 69 6e 65 64 20 76 61 6c 75 65  e combined value
35670 0a 2a 2a 20 6f 66 20 74 68 65 20 4c 49 4d 49 54  .** of the LIMIT
35680 20 61 6e 64 20 4f 46 46 53 45 54 20 61 6e 64 20   and OFFSET and 
35690 73 74 6f 72 65 73 20 74 68 61 74 20 76 61 6c 75  stores that valu
356a0 65 20 69 6e 20 72 5b 50 32 5d 2e 20 20 54 68 65  e in r[P2].  The
356b0 20 72 5b 50 32 5d 0a 2a 2a 20 76 61 6c 75 65 20   r[P2].** value 
356c0 63 6f 6d 70 75 74 65 64 20 69 73 20 74 68 65 20  computed is the 
356d0 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
356e0 72 6f 77 73 20 74 68 61 74 20 77 69 6c 6c 20 6e  rows that will n
356f0 65 65 64 20 74 6f 20 62 65 0a 2a 2a 20 76 69 73  eed to be.** vis
35700 69 74 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f  ited in order to
35710 20 63 6f 6d 70 6c 65 74 65 20 74 68 65 20 71 75   complete the qu
35720 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 72 5b  ery..**.** If r[
35730 50 33 5d 20 69 73 20 7a 65 72 6f 20 6f 72 20 6e  P3] is zero or n
35740 65 67 61 74 69 76 65 2c 20 74 68 61 74 20 6d 65  egative, that me
35750 61 6e 73 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ans there is no 
35760 4f 46 46 53 45 54 0a 2a 2a 20 61 6e 64 20 72 5b  OFFSET.** and r[
35770 50 32 5d 20 69 73 20 73 65 74 20 74 6f 20 62 65  P2] is set to be
35780 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
35790 65 20 4c 49 4d 49 54 2c 20 72 5b 50 31 5d 2e 0a  e LIMIT, r[P1]..
357a0 2a 2a 0a 2a 2a 20 69 66 20 72 5b 50 31 5d 20 69  **.** if r[P1] i
357b0 73 20 7a 65 72 6f 20 6f 72 20 6e 65 67 61 74 69  s zero or negati
357c0 76 65 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  ve, that means t
357d0 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54  here is no LIMIT
357e0 0a 2a 2a 20 61 6e 64 20 72 5b 50 32 5d 20 69 73  .** and r[P2] is
357f0 20 73 65 74 20 74 6f 20 2d 31 2e 20 0a 2a 2a 0a   set to -1. .**.
35800 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 72 5b  ** Otherwise, r[
35810 50 32 5d 20 69 73 20 73 65 74 20 74 6f 20 74 68  P2] is set to th
35820 65 20 73 75 6d 20 6f 66 20 72 5b 50 31 5d 20 61  e sum of r[P1] a
35830 6e 64 20 72 5b 50 33 5d 2e 0a 2a 2f 0a 63 61 73  nd r[P3]..*/.cas
35840 65 20 4f 50 5f 4f 66 66 73 65 74 4c 69 6d 69 74  e OP_OffsetLimit
35850 3a 20 7b 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6f  : {    /* in1, o
35860 75 74 32 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 36  ut2, in3 */.  i6
35870 34 20 78 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  4 x;.  pIn1 = &a
35880 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
35890 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
358a0 2d 3e 70 33 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p3];.  pOut = 
358b0 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
358c0 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74  , pOp);.  assert
358d0 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
358e0 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73  MEM_Int );.  ass
358f0 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73  ert( pIn3->flags
35900 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
35910 78 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20  x = pIn1->u.i;. 
35920 20 69 66 28 20 78 3c 3d 30 20 7c 7c 20 73 71 6c   if( x<=0 || sql
35930 69 74 65 33 41 64 64 49 6e 74 36 34 28 26 78 2c  ite3AddInt64(&x,
35940 20 70 49 6e 33 2d 3e 75 2e 69 3e 30 3f 70 49 6e   pIn3->u.i>0?pIn
35950 33 2d 3e 75 2e 69 3a 30 29 20 29 7b 0a 20 20 20  3->u.i:0) ){.   
35960 20 2f 2a 20 49 66 20 74 68 65 20 4c 49 4d 49 54   /* If the LIMIT
35970 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72   is less than or
35980 20 65 71 75 61 6c 20 74 6f 20 7a 65 72 6f 2c 20   equal to zero, 
35990 6c 6f 6f 70 20 66 6f 72 65 76 65 72 2e 20 20 54  loop forever.  T
359a0 68 69 73 0a 20 20 20 20 2a 2a 20 69 73 20 64 6f  his.    ** is do
359b0 63 75 6d 65 6e 74 65 64 2e 20 20 42 75 74 20 61  cumented.  But a
359c0 6c 73 6f 2c 20 69 66 20 74 68 65 20 4c 49 4d 49  lso, if the LIMI
359d0 54 2b 4f 46 46 53 45 54 20 65 78 63 65 65 64 73  T+OFFSET exceeds
359e0 20 32 5e 36 33 20 74 68 65 6e 0a 20 20 20 20 2a   2^63 then.    *
359f0 2a 20 61 6c 73 6f 20 6c 6f 6f 70 20 66 6f 72 65  * also loop fore
35a00 76 65 72 2e 20 20 54 68 69 73 20 69 73 20 75 6e  ver.  This is un
35a10 64 6f 63 75 6d 65 6e 74 65 64 2e 20 20 49 6e 20  documented.  In 
35a20 66 61 63 74 2c 20 6f 6e 65 20 63 6f 75 6c 64 20  fact, one could 
35a30 61 72 67 75 65 0a 20 20 20 20 2a 2a 20 74 68 61  argue.    ** tha
35a40 74 20 74 68 65 20 6c 6f 6f 70 20 73 68 6f 75 6c  t the loop shoul
35a50 64 20 74 65 72 6d 69 6e 61 74 65 2e 20 20 42 75  d terminate.  Bu
35a60 74 20 61 73 73 75 6d 69 6e 67 20 31 20 62 69 6c  t assuming 1 bil
35a70 6c 69 6f 6e 20 69 74 65 72 61 74 69 6f 6e 73 0a  lion iterations.
35a80 20 20 20 20 2a 2a 20 70 65 72 20 73 65 63 6f 6e      ** per secon
35a90 64 20 28 66 61 72 20 65 78 63 65 65 64 69 6e 67  d (far exceeding
35aa0 20 74 68 65 20 63 61 70 61 62 69 6c 69 74 69 65   the capabilitie
35ab0 73 20 6f 66 20 61 6e 79 20 63 75 72 72 65 6e 74  s of any current
35ac0 20 68 61 72 64 77 61 72 65 29 0a 20 20 20 20 2a   hardware).    *
35ad0 2a 20 69 74 20 77 6f 75 6c 64 20 74 61 6b 65 20  * it would take 
35ae0 6e 65 61 72 6c 79 20 33 30 30 20 79 65 61 72 73  nearly 300 years
35af0 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 72 65 61   to actually rea
35b00 63 68 20 74 68 65 20 6c 69 6d 69 74 2e 20 20 53  ch the limit.  S
35b10 6f 0a 20 20 20 20 2a 2a 20 6c 6f 6f 70 69 6e 67  o.    ** looping
35b20 20 66 6f 72 65 76 65 72 20 69 73 20 61 20 72 65   forever is a re
35b30 61 73 6f 6e 61 62 6c 65 20 61 70 70 72 6f 78 69  asonable approxi
35b40 6d 61 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 70  mation. */.    p
35b50 4f 75 74 2d 3e 75 2e 69 20 3d 20 2d 31 3b 0a 20  Out->u.i = -1;. 
35b60 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74   }else{.    pOut
35b70 2d 3e 75 2e 69 20 3d 20 78 3b 0a 20 20 7d 0a 20  ->u.i = x;.  }. 
35b80 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
35b90 63 6f 64 65 3a 20 49 66 4e 6f 74 5a 65 72 6f 20  code: IfNotZero 
35ba0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
35bb0 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
35bc0 5d 21 3d 30 20 74 68 65 6e 20 72 5b 50 31 5d 2d  ]!=0 then r[P1]-
35bd0 2d 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  -, goto P2.**.**
35be0 20 52 65 67 69 73 74 65 72 20 50 31 20 6d 75 73   Register P1 mus
35bf0 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
35c00 65 67 65 72 2e 20 20 49 66 20 74 68 65 20 63 6f  eger.  If the co
35c10 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
35c20 72 20 50 31 20 69 73 0a 2a 2a 20 69 6e 69 74 69  r P1 is.** initi
35c30 61 6c 6c 79 20 67 72 65 61 74 65 72 20 74 68 61  ally greater tha
35c40 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 64 65 63  n zero, then dec
35c50 72 65 6d 65 6e 74 20 74 68 65 20 76 61 6c 75 65  rement the value
35c60 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
35c70 0a 2a 2a 20 49 66 20 69 74 20 69 73 20 6e 6f 6e  .** If it is non
35c80 2d 7a 65 72 6f 20 28 6e 65 67 61 74 69 76 65 20  -zero (negative 
35c90 6f 72 20 70 6f 73 69 74 69 76 65 29 20 61 6e 64  or positive) and
35ca0 20 74 68 65 6e 20 61 6c 73 6f 20 6a 75 6d 70 20   then also jump 
35cb0 74 6f 20 50 32 2e 20 20 0a 2a 2a 20 49 66 20 72  to P2.  .** If r
35cc0 65 67 69 73 74 65 72 20 50 31 20 69 73 20 69 6e  egister P1 is in
35cd0 69 74 69 61 6c 6c 79 20 7a 65 72 6f 2c 20 6c 65  itially zero, le
35ce0 61 76 65 20 69 74 20 75 6e 63 68 61 6e 67 65 64  ave it unchanged
35cf0 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67   and fall throug
35d00 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  h..*/.case OP_If
35d10 4e 6f 74 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20  NotZero: {      
35d20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
35d30 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
35d40 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
35d50 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
35d60 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64  &MEM_Int );.  Vd
35d70 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49  beBranchTaken(pI
35d80 6e 31 2d 3e 75 2e 69 3c 30 2c 20 32 29 3b 0a 20  n1->u.i<0, 2);. 
35d90 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 20 29   if( pIn1->u.i )
35da0 7b 0a 20 20 20 20 20 69 66 28 20 70 49 6e 31 2d  {.     if( pIn1-
35db0 3e 75 2e 69 3e 30 20 29 20 70 49 6e 31 2d 3e 75  >u.i>0 ) pIn1->u
35dc0 2e 69 2d 2d 3b 0a 20 20 20 20 20 67 6f 74 6f 20  .i--;.     goto 
35dd0 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
35de0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
35df0 70 63 6f 64 65 3a 20 44 65 63 72 4a 75 6d 70 5a  pcode: DecrJumpZ
35e00 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ero P1 P2 * * *.
35e10 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
35e20 28 2d 2d 72 5b 50 31 5d 29 3d 3d 30 20 67 6f 74  (--r[P1])==0 got
35e30 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  o P2.**.** Regis
35e40 74 65 72 20 50 31 20 6d 75 73 74 20 68 6f 6c 64  ter P1 must hold
35e50 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 44 65   an integer.  De
35e60 63 72 65 6d 65 6e 74 20 74 68 65 20 76 61 6c 75  crement the valu
35e70 65 20 69 6e 20 50 31 0a 2a 2a 20 61 6e 64 20 6a  e in P1.** and j
35e80 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
35e90 20 6e 65 77 20 76 61 6c 75 65 20 69 73 20 65 78   new value is ex
35ea0 61 63 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2f 0a 63  actly zero..*/.c
35eb0 61 73 65 20 4f 50 5f 44 65 63 72 4a 75 6d 70 5a  ase OP_DecrJumpZ
35ec0 65 72 6f 3a 20 7b 20 20 20 20 20 20 2f 2a 20 6a  ero: {      /* j
35ed0 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
35ee0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
35ef0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
35f00 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
35f10 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  nt );.  if( pIn1
35f20 2d 3e 75 2e 69 3e 53 4d 41 4c 4c 45 53 54 5f 49  ->u.i>SMALLEST_I
35f30 4e 54 36 34 20 29 20 70 49 6e 31 2d 3e 75 2e 69  NT64 ) pIn1->u.i
35f40 2d 2d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  --;.  VdbeBranch
35f50 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d  Taken(pIn1->u.i=
35f60 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49  =0, 2);.  if( pI
35f70 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 20 67 6f 74  n1->u.i==0 ) got
35f80 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
35f90 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
35fa0 63 6f 64 65 3a 20 41 67 67 53 74 65 70 20 2a 20  code: AggStep * 
35fb0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
35fc0 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72  ynopsis: accum=r
35fd0 5b 50 33 5d 20 73 74 65 70 28 72 5b 50 32 40 50  [P3] step(r[P2@P
35fe0 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74  5]).**.** Execut
35ff0 65 20 74 68 65 20 78 53 74 65 70 20 66 75 6e 63  e the xStep func
36000 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72  tion for an aggr
36010 65 67 61 74 65 2e 0a 2a 2a 20 54 68 65 20 66 75  egate..** The fu
36020 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61 72  nction has P5 ar
36030 67 75 6d 65 6e 74 73 2e 20 20 50 34 20 69 73 20  guments.  P4 is 
36040 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
36050 20 0a 2a 2a 20 46 75 6e 63 44 65 66 20 73 74 72   .** FuncDef str
36060 75 63 74 75 72 65 20 74 68 61 74 20 73 70 65 63  ucture that spec
36070 69 66 69 65 73 20 74 68 65 20 66 75 6e 63 74 69  ifies the functi
36080 6f 6e 2e 20 20 52 65 67 69 73 74 65 72 20 50 33  on.  Register P3
36090 20 69 73 20 74 68 65 0a 2a 2a 20 61 63 63 75 6d   is the.** accum
360a0 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68  ulator..**.** Th
360b0 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61  e P5 arguments a
360c0 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65  re taken from re
360d0 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 69 74  gister P2 and it
360e0 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e  s.** successors.
360f0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .*/./* Opcode: A
36100 67 67 49 6e 76 65 72 73 65 20 2a 20 50 32 20 50  ggInverse * P2 P
36110 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
36120 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d  sis: accum=r[P3]
36130 20 69 6e 76 65 72 73 65 28 72 5b 50 32 40 50 35   inverse(r[P2@P5
36140 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65  ]).**.** Execute
36150 20 74 68 65 20 78 49 6e 76 65 72 73 65 20 66 75   the xInverse fu
36160 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67  nction for an ag
36170 67 72 65 67 61 74 65 2e 0a 2a 2a 20 54 68 65 20  gregate..** The 
36180 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20  function has P5 
36190 61 72 67 75 6d 65 6e 74 73 2e 20 20 50 34 20 69  arguments.  P4 i
361a0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
361b0 68 65 20 0a 2a 2a 20 46 75 6e 63 44 65 66 20 73  he .** FuncDef s
361c0 74 72 75 63 74 75 72 65 20 74 68 61 74 20 73 70  tructure that sp
361d0 65 63 69 66 69 65 73 20 74 68 65 20 66 75 6e 63  ecifies the func
361e0 74 69 6f 6e 2e 20 20 52 65 67 69 73 74 65 72 20  tion.  Register 
361f0 50 33 20 69 73 20 74 68 65 0a 2a 2a 20 61 63 63  P3 is the.** acc
36200 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20  umulator..**.** 
36210 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73  The P5 arguments
36220 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20   are taken from 
36230 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20  register P2 and 
36240 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72  its.** successor
36250 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  s..*/./* Opcode:
36260 20 41 67 67 53 74 65 70 31 20 50 31 20 50 32 20   AggStep1 P1 P2 
36270 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
36280 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33  psis: accum=r[P3
36290 5d 20 73 74 65 70 28 72 5b 50 32 40 50 35 5d 29  ] step(r[P2@P5])
362a0 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74  .**.** Execute t
362b0 68 65 20 78 53 74 65 70 20 28 69 66 20 50 31 3d  he xStep (if P1=
362c0 3d 30 29 20 6f 72 20 78 49 6e 76 65 72 73 65 20  =0) or xInverse 
362d0 28 69 66 20 50 31 21 3d 30 29 20 66 75 6e 63 74  (if P1!=0) funct
362e0 69 6f 6e 20 66 6f 72 20 61 6e 0a 2a 2a 20 61 67  ion for an.** ag
362f0 67 72 65 67 61 74 65 2e 20 20 54 68 65 20 66 75  gregate.  The fu
36300 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61 72  nction has P5 ar
36310 67 75 6d 65 6e 74 73 2e 20 20 50 34 20 69 73 20  guments.  P4 is 
36320 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
36330 20 0a 2a 2a 20 46 75 6e 63 44 65 66 20 73 74 72   .** FuncDef str
36340 75 63 74 75 72 65 20 74 68 61 74 20 73 70 65 63  ucture that spec
36350 69 66 69 65 73 20 74 68 65 20 66 75 6e 63 74 69  ifies the functi
36360 6f 6e 2e 20 20 52 65 67 69 73 74 65 72 20 50 33  on.  Register P3
36370 20 69 73 20 74 68 65 0a 2a 2a 20 61 63 63 75 6d   is the.** accum
36380 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68  ulator..**.** Th
36390 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61  e P5 arguments a
363a0 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65  re taken from re
363b0 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 69 74  gister P2 and it
363c0 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e  s.** successors.
363d0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
363e0 64 65 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20  de is initially 
363f0 63 6f 64 65 64 20 61 73 20 4f 50 5f 41 67 67 53  coded as OP_AggS
36400 74 65 70 30 2e 20 20 4f 6e 20 66 69 72 73 74 20  tep0.  On first 
36410 65 76 61 6c 75 61 74 69 6f 6e 2c 0a 2a 2a 20 74  evaluation,.** t
36420 68 65 20 46 75 6e 63 44 65 66 20 73 74 6f 72 65  he FuncDef store
36430 64 20 69 6e 20 50 34 20 69 73 20 63 6f 6e 76 65  d in P4 is conve
36440 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 73 71 6c  rted into an sql
36450 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 61 6e 64  ite3_context and
36460 0a 2a 2a 20 74 68 65 20 6f 70 63 6f 64 65 20 69  .** the opcode i
36470 73 20 63 68 61 6e 67 65 64 2e 20 20 49 6e 20 74  s changed.  In t
36480 68 69 73 20 77 61 79 2c 20 74 68 65 20 69 6e 69  his way, the ini
36490 74 69 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 20 74  tialization of t
364a0 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f  he.** sqlite3_co
364b0 6e 74 65 78 74 20 6f 6e 6c 79 20 68 61 70 70 65  ntext only happe
364c0 6e 73 20 6f 6e 63 65 2c 20 69 6e 73 74 65 61 64  ns once, instead
364d0 20 6f 66 20 6f 6e 20 65 61 63 68 20 63 61 6c 6c   of on each call
364e0 20 74 6f 20 74 68 65 0a 2a 2a 20 73 74 65 70 20   to the.** step 
364f0 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  function..*/.cas
36500 65 20 4f 50 5f 41 67 67 49 6e 76 65 72 73 65 3a  e OP_AggInverse:
36510 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65 70  .case OP_AggStep
36520 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 73  : {.  int n;.  s
36530 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
36540 70 43 74 78 3b 0a 0a 20 20 61 73 73 65 72 74 28  pCtx;..  assert(
36550 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
36560 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20 20 6e 20  _FUNCDEF );.  n 
36570 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73  = pOp->p5;.  ass
36580 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
36590 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  & pOp->p3<=(p->n
365a0 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
365b0 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  or) );.  assert(
365c0 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70   n==0 || (pOp->p
365d0 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e  2>0 && pOp->p2+n
365e0 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
365f0 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 29 20 29 3b  ->nCursor)+1) );
36600 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
36610 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f  p3<pOp->p2 || pO
36620 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e  p->p3>=pOp->p2+n
36630 20 29 3b 0a 20 20 70 43 74 78 20 3d 20 73 71 6c   );.  pCtx = sql
36640 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e  ite3DbMallocRawN
36650 4e 28 64 62 2c 20 6e 2a 73 69 7a 65 6f 66 28 73  N(db, n*sizeof(s
36660 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 20 2b  qlite3_value*) +
36670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36680 28 73 69 7a 65 6f 66 28 70 43 74 78 5b 30 5d 29  (sizeof(pCtx[0])
36690 20 2b 20 73 69 7a 65 6f 66 28 4d 65 6d 29 20 2d   + sizeof(Mem) -
366a0 20 73 69 7a 65 6f 66 28 73 71 6c 69 74 65 33 5f   sizeof(sqlite3_
366b0 76 61 6c 75 65 2a 29 29 29 3b 0a 20 20 69 66 28  value*)));.  if(
366c0 20 70 43 74 78 3d 3d 30 20 29 20 67 6f 74 6f 20   pCtx==0 ) goto 
366d0 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 74 78 2d 3e  no_mem;.  pCtx->
366e0 70 4d 65 6d 20 3d 20 30 3b 0a 20 20 70 43 74 78  pMem = 0;.  pCtx
366f0 2d 3e 70 4f 75 74 20 3d 20 28 4d 65 6d 2a 29 26  ->pOut = (Mem*)&
36700 28 70 43 74 78 2d 3e 61 72 67 76 5b 6e 5d 29 3b  (pCtx->argv[n]);
36710 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
36720 6d 49 6e 69 74 28 70 43 74 78 2d 3e 70 4f 75 74  mInit(pCtx->pOut
36730 2c 20 64 62 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  , db, MEM_Null);
36740 0a 20 20 70 43 74 78 2d 3e 70 46 75 6e 63 20 3d  .  pCtx->pFunc =
36750 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a   pOp->p4.pFunc;.
36760 20 20 70 43 74 78 2d 3e 69 4f 70 20 3d 20 28 69    pCtx->iOp = (i
36770 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a  nt)(pOp - aOp);.
36780 20 20 70 43 74 78 2d 3e 70 56 64 62 65 20 3d 20    pCtx->pVdbe = 
36790 70 3b 0a 20 20 70 43 74 78 2d 3e 73 6b 69 70 46  p;.  pCtx->skipF
367a0 6c 61 67 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d  lag = 0;.  pCtx-
367b0 3e 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20  >isError = 0;.  
367c0 70 43 74 78 2d 3e 61 72 67 63 20 3d 20 6e 3b 0a  pCtx->argc = n;.
367d0 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20    pOp->p4type = 
367e0 50 34 5f 46 55 4e 43 43 54 58 3b 0a 20 20 70 4f  P4_FUNCCTX;.  pO
367f0 70 2d 3e 70 34 2e 70 43 74 78 20 3d 20 70 43 74  p->p4.pCtx = pCt
36800 78 3b 0a 0a 20 20 2f 2a 20 4f 50 5f 41 67 67 49  x;..  /* OP_AggI
36810 6e 76 65 72 73 65 20 6d 75 73 74 20 68 61 76 65  nverse must have
36820 20 50 31 3d 3d 31 20 61 6e 64 20 4f 50 5f 41 67   P1==1 and OP_Ag
36830 67 53 74 65 70 20 6d 75 73 74 20 68 61 76 65 20  gStep must have 
36840 50 31 3d 3d 30 20 2a 2f 0a 20 20 61 73 73 65 72  P1==0 */.  asser
36850 74 28 20 70 4f 70 2d 3e 70 31 3d 3d 28 70 4f 70  t( pOp->p1==(pOp
36860 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 67 67  ->opcode==OP_Agg
36870 49 6e 76 65 72 73 65 29 20 29 3b 0a 0a 20 20 70  Inverse) );..  p
36880 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f  Op->opcode = OP_
36890 41 67 67 53 74 65 70 31 3b 0a 20 20 2f 2a 20 46  AggStep1;.  /* F
368a0 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f  all through into
368b0 20 4f 50 5f 41 67 67 53 74 65 70 20 2a 2f 0a 7d   OP_AggStep */.}
368c0 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65 70  .case OP_AggStep
368d0 31 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  1: {.  int i;.  
368e0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
368f0 2a 70 43 74 78 3b 0a 20 20 4d 65 6d 20 2a 70 4d  *pCtx;.  Mem *pM
36900 65 6d 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  em;..  assert( p
36910 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46  Op->p4type==P4_F
36920 55 4e 43 43 54 58 20 29 3b 0a 20 20 70 43 74 78  UNCCTX );.  pCtx
36930 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78 3b   = pOp->p4.pCtx;
36940 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b  .  pMem = &aMem[
36950 70 4f 70 2d 3e 70 33 5d 3b 0a 0a 23 69 66 64 65  pOp->p3];..#ifde
36960 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
36970 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a   if( pOp->p1 ){.
36980 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 61      /* This is a
36990 6e 20 4f 50 5f 41 67 67 49 6e 76 65 72 73 65 20  n OP_AggInverse 
369a0 63 61 6c 6c 2e 20 20 56 65 72 69 66 79 20 74 68  call.  Verify th
369b0 61 74 20 78 53 74 65 70 20 68 61 73 20 61 6c 77  at xStep has alw
369c0 61 79 73 0a 20 20 20 20 2a 2a 20 62 65 65 6e 20  ays.    ** been 
369d0 63 61 6c 6c 65 64 20 61 74 20 6c 65 61 73 74 20  called at least 
369e0 6f 6e 63 65 20 70 72 69 6f 72 20 74 6f 20 61 6e  once prior to an
369f0 79 20 78 49 6e 76 65 72 73 65 20 63 61 6c 6c 2e  y xInverse call.
36a00 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20   */.    assert( 
36a10 70 4d 65 6d 2d 3e 75 54 65 6d 70 3d 3d 30 78 31  pMem->uTemp==0x1
36a20 31 32 32 65 30 65 33 20 29 3b 0a 20 20 7d 65 6c  122e0e3 );.  }el
36a30 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20  se{.    /* This 
36a40 69 73 20 61 6e 20 4f 50 5f 41 67 67 53 74 65 70  is an OP_AggStep
36a50 20 63 61 6c 6c 2e 20 20 4d 61 72 6b 20 69 74 20   call.  Mark it 
36a60 61 73 20 73 75 63 68 2e 20 2a 2f 0a 20 20 20 20  as such. */.    
36a70 70 4d 65 6d 2d 3e 75 54 65 6d 70 20 3d 20 30 78  pMem->uTemp = 0x
36a80 31 31 32 32 65 30 65 33 3b 0a 20 20 7d 0a 23 65  1122e0e3;.  }.#e
36a90 6e 64 69 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68  ndif..  /* If th
36aa0 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69  is function is i
36ab0 6e 73 69 64 65 20 6f 66 20 61 20 74 72 69 67 67  nside of a trigg
36ac0 65 72 2c 20 74 68 65 20 72 65 67 69 73 74 65 72  er, the register
36ad0 20 61 72 72 61 79 20 69 6e 20 61 4d 65 6d 5b 5d   array in aMem[]
36ae0 0a 20 20 2a 2a 20 6d 69 67 68 74 20 63 68 61 6e  .  ** might chan
36af0 67 65 20 66 72 6f 6d 20 6f 6e 65 20 65 76 61 6c  ge from one eval
36b00 75 61 74 69 6f 6e 20 74 6f 20 74 68 65 20 6e 65  uation to the ne
36b10 78 74 2e 20 20 54 68 65 20 6e 65 78 74 20 62 6c  xt.  The next bl
36b20 6f 63 6b 20 6f 66 20 63 6f 64 65 0a 20 20 2a 2a  ock of code.  **
36b30 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69   checks to see i
36b40 66 20 74 68 65 20 72 65 67 69 73 74 65 72 20 61  f the register a
36b50 72 72 61 79 20 68 61 73 20 63 68 61 6e 67 65 64  rray has changed
36b60 2c 20 61 6e 64 20 69 66 20 73 6f 20 69 74 0a 20  , and if so it. 
36b70 20 2a 2a 20 72 65 69 6e 69 74 69 61 6c 69 7a 65   ** reinitialize
36b80 73 20 74 68 65 20 72 65 6c 61 76 61 6e 74 20 70  s the relavant p
36b90 61 72 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69  arts of the sqli
36ba0 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65  te3_context obje
36bb0 63 74 20 2a 2f 0a 20 20 69 66 28 20 70 43 74 78  ct */.  if( pCtx
36bc0 2d 3e 70 4d 65 6d 20 21 3d 20 70 4d 65 6d 20 29  ->pMem != pMem )
36bd0 7b 0a 20 20 20 20 70 43 74 78 2d 3e 70 4d 65 6d  {.    pCtx->pMem
36be0 20 3d 20 70 4d 65 6d 3b 0a 20 20 20 20 66 6f 72   = pMem;.    for
36bf0 28 69 3d 70 43 74 78 2d 3e 61 72 67 63 2d 31 3b  (i=pCtx->argc-1;
36c00 20 69 3e 3d 30 3b 20 69 2d 2d 29 20 70 43 74 78   i>=0; i--) pCtx
36c10 2d 3e 61 72 67 76 5b 69 5d 20 3d 20 26 61 4d 65  ->argv[i] = &aMe
36c20 6d 5b 70 4f 70 2d 3e 70 32 2b 69 5d 3b 0a 20 20  m[pOp->p2+i];.  
36c30 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
36c40 5f 44 45 42 55 47 0a 20 20 66 6f 72 28 69 3d 30  _DEBUG.  for(i=0
36c50 3b 20 69 3c 70 43 74 78 2d 3e 61 72 67 63 3b 20  ; i<pCtx->argc; 
36c60 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  i++){.    assert
36c70 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 43 74  ( memIsValid(pCt
36c80 78 2d 3e 61 72 67 76 5b 69 5d 29 20 29 3b 0a 20  x->argv[i]) );. 
36c90 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
36ca0 45 28 70 4f 70 2d 3e 70 32 2b 69 2c 20 70 43 74  E(pOp->p2+i, pCt
36cb0 78 2d 3e 61 72 67 76 5b 69 5d 29 3b 0a 20 20 7d  x->argv[i]);.  }
36cc0 0a 23 65 6e 64 69 66 0a 0a 20 20 70 4d 65 6d 2d  .#endif..  pMem-
36cd0 3e 6e 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20  >n++;.  assert( 
36ce0 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 66 6c 61 67  pCtx->pOut->flag
36cf0 73 3d 3d 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20  s==MEM_Null );. 
36d00 20 61 73 73 65 72 74 28 20 70 43 74 78 2d 3e 69   assert( pCtx->i
36d10 73 45 72 72 6f 72 3d 3d 30 20 29 3b 0a 20 20 61  sError==0 );.  a
36d20 73 73 65 72 74 28 20 70 43 74 78 2d 3e 73 6b 69  ssert( pCtx->ski
36d30 70 46 6c 61 67 3d 3d 30 20 29 3b 0a 23 69 66 6e  pFlag==0 );.#ifn
36d40 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
36d50 57 49 4e 44 4f 57 46 55 4e 43 0a 20 20 69 66 28  WINDOWFUNC.  if(
36d60 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20   pOp->p1 ){.    
36d70 28 70 43 74 78 2d 3e 70 46 75 6e 63 2d 3e 78 49  (pCtx->pFunc->xI
36d80 6e 76 65 72 73 65 29 28 70 43 74 78 2c 70 43 74  nverse)(pCtx,pCt
36d90 78 2d 3e 61 72 67 63 2c 70 43 74 78 2d 3e 61 72  x->argc,pCtx->ar
36da0 67 76 29 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e  gv);.  }else.#en
36db0 64 69 66 0a 20 20 28 70 43 74 78 2d 3e 70 46 75  dif.  (pCtx->pFu
36dc0 6e 63 2d 3e 78 53 46 75 6e 63 29 28 70 43 74 78  nc->xSFunc)(pCtx
36dd0 2c 70 43 74 78 2d 3e 61 72 67 63 2c 70 43 74 78  ,pCtx->argc,pCtx
36de0 2d 3e 61 72 67 76 29 3b 20 2f 2a 20 49 4d 50 3a  ->argv); /* IMP:
36df0 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a   R-24505-23230 *
36e00 2f 0a 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 69  /..  if( pCtx->i
36e10 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 69 66  sError ){.    if
36e20 28 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 3e  ( pCtx->isError>
36e30 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
36e40 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
36e50 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  %s", sqlite3_val
36e60 75 65 5f 74 65 78 74 28 70 43 74 78 2d 3e 70 4f  ue_text(pCtx->pO
36e70 75 74 29 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  ut));.      rc =
36e80 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 3b 0a   pCtx->isError;.
36e90 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 43      }.    if( pC
36ea0 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20 29 7b 0a  tx->skipFlag ){.
36eb0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
36ec0 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  p[-1].opcode==OP
36ed0 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20  _CollSeq );.    
36ee0 20 20 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 31    i = pOp[-1].p1
36ef0 3b 0a 20 20 20 20 20 20 69 66 28 20 69 20 29 20  ;.      if( i ) 
36f00 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
36f10 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 69 5d 2c  tInt64(&aMem[i],
36f20 20 31 29 3b 0a 20 20 20 20 20 20 70 43 74 78 2d   1);.      pCtx-
36f30 3e 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a 20  >skipFlag = 0;. 
36f40 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
36f50 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70  VdbeMemRelease(p
36f60 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 20 20 20 20  Ctx->pOut);.    
36f70 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 66 6c 61 67  pCtx->pOut->flag
36f80 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
36f90 20 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 20    pCtx->isError 
36fa0 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 72 63 20  = 0;.    if( rc 
36fb0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
36fc0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20  _to_error;.  }. 
36fd0 20 61 73 73 65 72 74 28 20 70 43 74 78 2d 3e 70   assert( pCtx->p
36fe0 4f 75 74 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f  Out->flags==MEM_
36ff0 4e 75 6c 6c 20 29 3b 0a 20 20 61 73 73 65 72 74  Null );.  assert
37000 28 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67  ( pCtx->skipFlag
37010 3d 3d 30 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  ==0 );.  break;.
37020 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67  }../* Opcode: Ag
37030 67 46 69 6e 61 6c 20 50 31 20 50 32 20 2a 20 50  gFinal P1 P2 * P
37040 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
37050 20 61 63 63 75 6d 3d 72 5b 50 31 5d 20 4e 3d 50   accum=r[P1] N=P
37060 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68  2.**.** P1 is th
37070 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  e memory locatio
37080 6e 20 74 68 61 74 20 69 73 20 74 68 65 20 61 63  n that is the ac
37090 63 75 6d 75 6c 61 74 6f 72 20 66 6f 72 20 61 6e  cumulator for an
370a0 20 61 67 67 72 65 67 61 74 65 0a 2a 2a 20 6f 72   aggregate.** or
370b0 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e   window function
370c0 2e 20 20 45 78 65 63 75 74 65 20 74 68 65 20 66  .  Execute the f
370d0 69 6e 61 6c 69 7a 65 72 20 66 75 6e 63 74 69 6f  inalizer functio
370e0 6e 20 0a 2a 2a 20 66 6f 72 20 61 6e 20 61 67 67  n .** for an agg
370f0 72 65 67 61 74 65 20 61 6e 64 20 73 74 6f 72 65  regate and store
37100 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 50   the result in P
37110 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74  1..**.** P2 is t
37120 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67  he number of arg
37130 75 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65 20  uments that the 
37140 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74 61  step function ta
37150 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73  kes and.** P4 is
37160 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
37170 65 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74 68  e FuncDef for th
37180 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68  is function.  Th
37190 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  e P2.** argument
371a0 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20   is not used by 
371b0 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49 74  this opcode.  It
371c0 20 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20 74   is only there t
371d0 6f 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a 2a  o disambiguate.*
371e0 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74  * functions that
371f0 20 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69 6e   can take varyin
37200 67 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72 67  g numbers of arg
37210 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20  uments.  The.** 
37220 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f  P4 argument is o
37230 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20 74  nly needed for t
37240 68 65 20 63 61 73 65 20 77 68 65 72 65 0a 2a 2a  he case where.**
37250 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69   the step functi
37260 6f 6e 20 77 61 73 20 6e 6f 74 20 70 72 65 76 69  on was not previ
37270 6f 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f  ously called..*/
37280 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 56  ./* Opcode: AggV
37290 61 6c 75 65 20 2a 20 50 32 20 50 33 20 50 34 20  alue * P2 P3 P4 
372a0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
372b0 5b 50 33 5d 3d 76 61 6c 75 65 20 4e 3d 50 32 0a  [P3]=value N=P2.
372c0 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65  **.** Invoke the
372d0 20 78 56 61 6c 75 65 28 29 20 66 75 6e 63 74 69   xValue() functi
372e0 6f 6e 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  on and store the
372f0 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
37300 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 50 32  ter P3..**.** P2
37310 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
37320 66 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74  f arguments that
37330 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69   the step functi
37340 6f 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20  on takes and.** 
37350 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
37360 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66 20 66  to the FuncDef f
37370 6f 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e  or this function
37380 2e 20 20 54 68 65 20 50 32 0a 2a 2a 20 61 72 67  .  The P2.** arg
37390 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75 73 65  ument is not use
373a0 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65  d by this opcode
373b0 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 74 68  .  It is only th
373c0 65 72 65 20 74 6f 20 64 69 73 61 6d 62 69 67 75  ere to disambigu
373d0 61 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  ate.** functions
373e0 20 74 68 61 74 20 63 61 6e 20 74 61 6b 65 20 76   that can take v
373f0 61 72 79 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f  arying numbers o
37400 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 54 68  f arguments.  Th
37410 65 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e 74  e.** P4 argument
37420 20 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20   is only needed 
37430 66 6f 72 20 74 68 65 20 63 61 73 65 20 77 68 65  for the case whe
37440 72 65 0a 2a 2a 20 74 68 65 20 73 74 65 70 20 66  re.** the step f
37450 75 6e 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20  unction was not 
37460 70 72 65 76 69 6f 75 73 6c 79 20 63 61 6c 6c 65  previously calle
37470 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67  d..*/.case OP_Ag
37480 67 56 61 6c 75 65 3a 0a 63 61 73 65 20 4f 50 5f  gValue:.case OP_
37490 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65  AggFinal: {.  Me
374a0 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72  m *pMem;.  asser
374b0 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20  t( pOp->p1>0 && 
374c0 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p1<=(p->nMe
374d0 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
374e0 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
374f0 4f 70 2d 3e 70 33 3d 3d 30 20 7c 7c 20 70 4f 70  Op->p3==0 || pOp
37500 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 67 67  ->opcode==OP_Agg
37510 56 61 6c 75 65 20 29 3b 0a 20 20 70 4d 65 6d 20  Value );.  pMem 
37520 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
37530 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65  ;.  assert( (pMe
37540 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d  m->flags & ~(MEM
37550 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d  _Null|MEM_Agg))=
37560 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  =0 );.#ifndef SQ
37570 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57  LITE_OMIT_WINDOW
37580 46 55 4e 43 0a 20 20 69 66 28 20 70 4f 70 2d 3e  FUNC.  if( pOp->
37590 70 33 20 29 7b 0a 20 20 20 20 6d 65 6d 41 62 6f  p3 ){.    memAbo
375a0 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61  utToChange(p, &a
375b0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20  Mem[pOp->p3]);. 
375c0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
375d0 64 62 65 4d 65 6d 41 67 67 56 61 6c 75 65 28 70  dbeMemAggValue(p
375e0 4d 65 6d 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  Mem, &aMem[pOp->
375f0 70 33 5d 2c 20 70 4f 70 2d 3e 70 34 2e 70 46 75  p3], pOp->p4.pFu
37600 6e 63 29 3b 0a 20 20 20 20 70 4d 65 6d 20 3d 20  nc);.    pMem = 
37610 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
37620 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 20    }else.#endif. 
37630 20 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69   {.    rc = sqli
37640 74 65 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69  te3VdbeMemFinali
37650 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34  ze(pMem, pOp->p4
37660 2e 70 46 75 6e 63 29 3b 0a 20 20 7d 0a 20 20 0a  .pFunc);.  }.  .
37670 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
37680 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
37690 28 70 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65  (p, "%s", sqlite
376a0 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 4d 65  3_value_text(pMe
376b0 6d 29 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62  m));.    goto ab
376c0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
376d0 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56  ;.  }.  sqlite3V
376e0 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
376f0 67 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e 67  g(pMem, encoding
37700 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
37710 42 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29 3b 0a  BLOBSIZE(pMem);.
37720 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
37730 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65 6d 29  eMemTooBig(pMem)
37740 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
37750 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61  _big;.  }.  brea
37760 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
37770 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 2f 2a  LITE_OMIT_WAL./*
37780 20 4f 70 63 6f 64 65 3a 20 43 68 65 63 6b 70 6f   Opcode: Checkpo
37790 69 6e 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  int P1 P2 P3 * *
377a0 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 70 6f 69 6e  .**.** Checkpoin
377b0 74 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 54  t database P1. T
377c0 68 69 73 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69  his is a no-op i
377d0 66 20 50 31 20 69 73 20 6e 6f 74 20 63 75 72 72  f P1 is not curr
377e0 65 6e 74 6c 79 20 69 6e 0a 2a 2a 20 57 41 4c 20  ently in.** WAL 
377f0 6d 6f 64 65 2e 20 50 61 72 61 6d 65 74 65 72 20  mode. Parameter 
37800 50 32 20 69 73 20 6f 6e 65 20 6f 66 20 53 51 4c  P2 is one of SQL
37810 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50  ITE_CHECKPOINT_P
37820 41 53 53 49 56 45 2c 20 46 55 4c 4c 2c 0a 2a 2a  ASSIVE, FULL,.**
37830 20 52 45 53 54 41 52 54 2c 20 6f 72 20 54 52 55   RESTART, or TRU
37840 4e 43 41 54 45 2e 20 20 57 72 69 74 65 20 31 20  NCATE.  Write 1 
37850 6f 72 20 30 20 69 6e 74 6f 20 6d 65 6d 5b 50 33  or 0 into mem[P3
37860 5d 20 69 66 20 74 68 65 20 63 68 65 63 6b 70 6f  ] if the checkpo
37870 69 6e 74 20 72 65 74 75 72 6e 73 0a 2a 2a 20 53  int returns.** S
37880 51 4c 49 54 45 5f 42 55 53 59 20 6f 72 20 6e 6f  QLITE_BUSY or no
37890 74 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  t, respectively.
378a0 20 20 57 72 69 74 65 20 74 68 65 20 6e 75 6d 62    Write the numb
378b0 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74  er of pages in t
378c0 68 65 0a 2a 2a 20 57 41 4c 20 61 66 74 65 72 20  he.** WAL after 
378d0 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 69  the checkpoint i
378e0 6e 74 6f 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e  nto mem[P3+1] an
378f0 64 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  d the number of 
37900 70 61 67 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20  pages.** in the 
37910 57 41 4c 20 74 68 61 74 20 68 61 76 65 20 62 65  WAL that have be
37920 65 6e 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20  en checkpointed 
37930 61 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70  after the checkp
37940 6f 69 6e 74 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65  oint.** complete
37950 73 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 32 5d  s into mem[P3+2]
37960 2e 20 20 48 6f 77 65 76 65 72 20 6f 6e 20 61 6e  .  However on an
37970 20 65 72 72 6f 72 2c 20 6d 65 6d 5b 50 33 2b 31   error, mem[P3+1
37980 5d 20 61 6e 64 0a 2a 2a 20 6d 65 6d 5b 50 33 2b  ] and.** mem[P3+
37990 32 5d 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a  2] are initializ
379a0 65 64 20 74 6f 20 2d 31 2e 0a 2a 2f 0a 63 61 73  ed to -1..*/.cas
379b0 65 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 3a  e OP_Checkpoint:
379c0 20 7b 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20   {.  int i;     
379d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
379e0 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
379f0 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 61 52  nter */.  int aR
37a00 65 73 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20  es[3];          
37a10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
37a20 75 6c 74 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ults */.  Mem *p
37a30 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
37a40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 72 69            /* Wri
37a50 74 65 20 72 65 73 75 6c 74 73 20 68 65 72 65 20  te results here 
37a60 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  */..  assert( p-
37a70 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
37a80 20 20 61 52 65 73 5b 30 5d 20 3d 20 30 3b 0a 20    aRes[0] = 0;. 
37a90 20 61 52 65 73 5b 31 5d 20 3d 20 61 52 65 73 5b   aRes[1] = aRes[
37aa0 32 5d 20 3d 20 2d 31 3b 0a 20 20 61 73 73 65 72  2] = -1;.  asser
37ab0 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  t( pOp->p2==SQLI
37ac0 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41  TE_CHECKPOINT_PA
37ad0 53 53 49 56 45 0a 20 20 20 20 20 20 20 7c 7c 20  SSIVE.       || 
37ae0 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
37af0 43 48 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 0a  CHECKPOINT_FULL.
37b00 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70         || pOp->p
37b10 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  2==SQLITE_CHECKP
37b20 4f 49 4e 54 5f 52 45 53 54 41 52 54 0a 20 20 20  OINT_RESTART.   
37b30 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d      || pOp->p2==
37b40 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
37b50 54 5f 54 52 55 4e 43 41 54 45 0a 20 20 29 3b 0a  T_TRUNCATE.  );.
37b60 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 43 68    rc = sqlite3Ch
37b70 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20 70 4f 70  eckpoint(db, pOp
37b80 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 26  ->p1, pOp->p2, &
37b90 61 52 65 73 5b 31 5d 2c 20 26 61 52 65 73 5b 32  aRes[1], &aRes[2
37ba0 5d 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a  ]);.  if( rc ){.
37bb0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
37bc0 54 45 5f 42 55 53 59 20 29 20 67 6f 74 6f 20 61  TE_BUSY ) goto a
37bd0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
37be0 72 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  r;.    rc = SQLI
37bf0 54 45 5f 4f 4b 3b 0a 20 20 20 20 61 52 65 73 5b  TE_OK;.    aRes[
37c00 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 66 6f  0] = 1;.  }.  fo
37c10 72 28 69 3d 30 2c 20 70 4d 65 6d 20 3d 20 26 61  r(i=0, pMem = &a
37c20 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 20 69 3c  Mem[pOp->p3]; i<
37c30 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b 2b 29 7b  3; i++, pMem++){
37c40 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
37c50 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4d 65 6d  MemSetInt64(pMem
37c60 2c 20 28 69 36 34 29 61 52 65 73 5b 69 5d 29 3b  , (i64)aRes[i]);
37c70 0a 20 20 7d 20 20 20 20 0a 20 20 62 72 65 61 6b  .  }    .  break
37c80 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69 66 0a 0a 23  ;.};  .#endif..#
37c90 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
37ca0 49 54 5f 50 52 41 47 4d 41 0a 2f 2a 20 4f 70 63  IT_PRAGMA./* Opc
37cb0 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d 6f 64 65  ode: JournalMode
37cc0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
37cd0 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68 65 20 6a  .** Change the j
37ce0 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 64  ournal mode of d
37cf0 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 50 33  atabase P1 to P3
37d00 2e 20 50 33 20 6d 75 73 74 20 62 65 20 6f 6e 65  . P3 must be one
37d10 20 6f 66 20 74 68 65 0a 2a 2a 20 50 41 47 45 52   of the.** PAGER
37d20 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58  _JOURNALMODE_XXX
37d30 20 76 61 6c 75 65 73 2e 20 49 66 20 63 68 61 6e   values. If chan
37d40 67 69 6e 67 20 62 65 74 77 65 65 6e 20 74 68 65  ging between the
37d50 20 76 61 72 69 6f 75 73 20 72 6f 6c 6c 62 61 63   various rollbac
37d60 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28 64 65 6c 65  k.** modes (dele
37d70 74 65 2c 20 74 72 75 6e 63 61 74 65 2c 20 70 65  te, truncate, pe
37d80 72 73 69 73 74 2c 20 6f 66 66 20 61 6e 64 20 6d  rsist, off and m
37d90 65 6d 6f 72 79 29 2c 20 74 68 69 73 20 69 73 20  emory), this is 
37da0 61 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f 70 65 72  a simple.** oper
37db0 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20 69 73 20  ation. No IO is 
37dc0 72 65 71 75 69 72 65 64 2e 0a 2a 2a 0a 2a 2a 20  required..**.** 
37dd0 49 66 20 63 68 61 6e 67 69 6e 67 20 69 6e 74 6f  If changing into
37de0 20 6f 72 20 6f 75 74 20 6f 66 20 57 41 4c 20 6d   or out of WAL m
37df0 6f 64 65 20 74 68 65 20 70 72 6f 63 65 64 75 72  ode the procedur
37e00 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c 69  e is more compli
37e10 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 57 72 69  cated..**.** Wri
37e20 74 65 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74  te a string cont
37e30 61 69 6e 69 6e 67 20 74 68 65 20 66 69 6e 61 6c  aining the final
37e40 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 74 6f   journal-mode to
37e50 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
37e60 0a 63 61 73 65 20 4f 50 5f 4a 6f 75 72 6e 61 6c  .case OP_Journal
37e70 4d 6f 64 65 3a 20 7b 20 20 20 20 2f 2a 20 6f 75  Mode: {    /* ou
37e80 74 32 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70  t2 */.  Btree *p
37e90 42 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Bt;             
37ea0 20 20 20 20 20 20 20 20 2f 2a 20 42 74 72 65 65          /* Btree
37eb0 20 74 6f 20 63 68 61 6e 67 65 20 6a 6f 75 72 6e   to change journ
37ec0 61 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f 0a 20 20  al mode of */.  
37ed0 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b 20 20  Pager *pPager;  
37ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ef0 2f 2a 20 50 61 67 65 72 20 61 73 73 6f 63 69 61  /* Pager associa
37f00 74 65 64 20 77 69 74 68 20 70 42 74 20 2a 2f 0a  ted with pBt */.
37f10 20 20 69 6e 74 20 65 4e 65 77 3b 20 20 20 20 20    int eNew;     
37f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37f30 20 20 2f 2a 20 4e 65 77 20 6a 6f 75 72 6e 61 6c    /* New journal
37f40 20 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 65   mode */.  int e
37f50 4f 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  Old;            
37f60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
37f70 65 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f  e old journal mo
37f80 64 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  de */.#ifndef SQ
37f90 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
37fa0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c  const char *zFil
37fb0 65 6e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  ename;          
37fc0 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62  /* Name of datab
37fd0 61 73 65 20 66 69 6c 65 20 66 6f 72 20 70 50 61  ase file for pPa
37fe0 67 65 72 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20  ger */.#endif.. 
37ff0 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
38000 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
38010 20 20 65 4e 65 77 20 3d 20 70 4f 70 2d 3e 70 33    eNew = pOp->p3
38020 3b 0a 20 20 61 73 73 65 72 74 28 20 65 4e 65 77  ;.  assert( eNew
38030 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
38040 4f 44 45 5f 44 45 4c 45 54 45 20 0a 20 20 20 20  ODE_DELETE .    
38050 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
38060 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52  R_JOURNALMODE_TR
38070 55 4e 43 41 54 45 20 0a 20 20 20 20 20 20 20 7c  UNCATE .       |
38080 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
38090 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53  URNALMODE_PERSIS
380a0 54 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  T .       || eNe
380b0 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
380c0 4d 4f 44 45 5f 4f 46 46 0a 20 20 20 20 20 20 20  MODE_OFF.       
380d0 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
380e0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52  OURNALMODE_MEMOR
380f0 59 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77  Y.       || eNew
38100 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
38110 4f 44 45 5f 57 41 4c 0a 20 20 20 20 20 20 20 7c  ODE_WAL.       |
38120 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
38130 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 0a  URNALMODE_QUERY.
38140 20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70    );.  assert( p
38150 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
38160 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
38170 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
38180 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 70  dOnly==0 );..  p
38190 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  Bt = db->aDb[pOp
381a0 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 70 50 61  ->p1].pBt;.  pPa
381b0 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72  ger = sqlite3Btr
381c0 65 65 50 61 67 65 72 28 70 42 74 29 3b 0a 20 20  eePager(pBt);.  
381d0 65 4f 6c 64 20 3d 20 73 71 6c 69 74 65 33 50 61  eOld = sqlite3Pa
381e0 67 65 72 47 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64  gerGetJournalMod
381f0 65 28 70 50 61 67 65 72 29 3b 0a 20 20 69 66 28  e(pPager);.  if(
38200 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
38210 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20 29  RNALMODE_QUERY )
38220 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20   eNew = eOld;.  
38230 69 66 28 20 21 73 71 6c 69 74 65 33 50 61 67 65  if( !sqlite3Page
38240 72 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f 75 72 6e  rOkToChangeJourn
38250 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 20 29  alMode(pPager) )
38260 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23   eNew = eOld;..#
38270 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
38280 49 54 5f 57 41 4c 0a 20 20 7a 46 69 6c 65 6e 61  IT_WAL.  zFilena
38290 6d 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  me = sqlite3Page
382a0 72 46 69 6c 65 6e 61 6d 65 28 70 50 61 67 65 72  rFilename(pPager
382b0 2c 20 31 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e  , 1