>
> If you can capture a malfunctioning trace, and send in the database
> file and the SQL statement that is running, that should allow us to
> localize the problem.
>

Trace for the failing UPDATE:

cv_s=1
cv_o=b8b9f4...
cv_t=28 -> 29

SQL: [update cv set cv_t=? where cv_s=? and cv_o=?]
VDBE Program Listing:
   0 Init             0   25    0               00 Start at 25
   1 Null             0    1    2               00 r[1..2]=NULL
   2 OpenWrite        0   74    0 3             00 root=74 iDb=0; cv
   3 OpenWrite        1   75    0 k(2,nil,nil)  02 root=75 iDb=0;
sqlite_autoindex_cv_1
   4 Explain          0    0    0 SEARCH TABLE cv USING INDEX
sqlite_autoindex_cv_1 (cv_s=? AND cv_o=?) 00
   5 Variable         2    6    0               00 r[6]=parameter(2,)
   6 IsNull           6   15    0               00 if r[6]==NULL goto 15
   7 Variable         3    7    0               00 r[7]=parameter(3,)
   8 IsNull           7   15    0               00 if r[7]==NULL goto 15
   9 Affinity         6    1    0 D             00 affinity(r[6])
  10 SeekGE           1   15    6 2             00 key=r[6..7]
  11 IdxGT            1   15    6 2             00 key=r[6..7]
  12 IdxRowid         1    8    0               00 r[8]=rowid
  13 Seek             0    8    0               00 intkey=r[8]
  14 IdxRowid         1    2    0               00 r[2]=rowid
  15 IsNull           2   24    0               00 if r[2]==NULL goto 24
  16 Column           0    0    3               00 r[3]=cv.cv_s
  17 Column           0    1    4               00 r[4]=cv.cv_o
  18 Variable         1    5    0               00 r[5]=parameter(1,)
  19 HaltIfNull    1299    2    3 cv.cv_s       01 if r[3]=null halt
  20 HaltIfNull    1299    2    4 cv.cv_o       01 if r[4]=null halt
  21 HaltIfNull    1299    2    5 cv.cv_t       01 if r[5]=null halt
  22 MakeRecord       3    3    9 DAD           00 r[9]=mkrec(r[3..5])
  23 Insert           0    9    2 cv            05 intkey=r[2] data=r[9]
  24 Halt             0    0    0               00
  25 Transaction      0    1   56 0             01
  26 TableLock        0   74    1 cv            00 iDb=0 root=74 write=1
  27 Goto             0    1    0               00
VDBE Trace:
   0 Init             0   25    0               00 Start at 25
SQL-trace: update cv set cv_t=? where cv_s=? and cv_o=?
  25 Transaction      0    1   56 0             01
  26 TableLock        0   74    1 cv            00 iDb=0 root=74 write=1
  27 Goto             0    1    0               00
   1 Null             0    1    2               00 r[1..2]=NULL
REG[1] =  NULL
   2 OpenWrite        0   74    0 3             00 root=74 iDb=0; cv
   3 OpenWrite        1   75    0 k(2,nil,nil)  02 root=75 iDb=0;
sqlite_autoindex_cv_1
   4 Explain          0    0    0 SEARCH TABLE cv USING INDEX
sqlite_autoindex_cv_1 (cv_s=? AND cv_o=?) 00
   5 Variable         2    6    0               00 r[6]=parameter(2,)
REG[6] =  i:0
   6 IsNull           6   15    0               00 if r[6]==NULL goto 15
REG[6] =  i:0
   7 Variable         3    7    0               00 r[7]=parameter(3,)
REG[7] =  t16[B8B9F4D5F3E8432E86E248C2EBE14D5D......C...H...M]](8)
   8 IsNull           7   15    0               00 if r[7]==NULL goto 15
REG[7] =  t16[B8B9F4D5F3E8432E86E248C2EBE14D5D......C...H...M]](8)
   9 Affinity         6    1    0 D             00 affinity(r[6])
  10 SeekGE           1   15    6 2             00 key=r[6..7]
REG[6] =  i:0
  11 IdxGT            1   15    6 2             00 key=r[6..7]
  15 IsNull           2   24    0               00 if r[2]==NULL goto 24
REG[2] =  NULL
  24 Halt             0    0    0               00


Followed by a failing insert for the same row:

sqlite:1555: abort at 16 in [insert into cv (cv_s,cv_o,cv_t)
VALUES(?,?,?)]: UNIQUE constraint failed: cv.cv_s, cv.cv_o


Trace for the previous successful UPDATE to the same row:

cv_s=1
cv_o=b8b9f4...
cv_t=27 -> 28

SQL: [update cv set cv_t=? where cv_s=? and cv_o=?]
VDBE Program Listing:
   0 Init             0   25    0               00 Start at 25
   1 Null             0    1    2               00 r[1..2]=NULL
   2 OpenWrite        0   74    0 3             00 root=74 iDb=0; cv
   3 OpenWrite        1   75    0 k(2,nil,nil)  02 root=75 iDb=0;
sqlite_autoindex_cv_1
   4 Explain          0    0    0 SEARCH TABLE cv USING INDEX
sqlite_autoindex_cv_1 (cv_s=? AND cv_o=?) 00
   5 Variable         2    6    0               00 r[6]=parameter(2,)
   6 IsNull           6   15    0               00 if r[6]==NULL goto 15
   7 Variable         3    7    0               00 r[7]=parameter(3,)
   8 IsNull           7   15    0               00 if r[7]==NULL goto 15
   9 Affinity         6    1    0 D             00 affinity(r[6])
  10 SeekGE           1   15    6 2             00 key=r[6..7]
  11 IdxGT            1   15    6 2             00 key=r[6..7]
  12 IdxRowid         1    8    0               00 r[8]=rowid
  13 Seek             0    8    0               00 intkey=r[8]
  14 IdxRowid         1    2    0               00 r[2]=rowid
  15 IsNull           2   24    0               00 if r[2]==NULL goto 24
  16 Column           0    0    3               00 r[3]=cv.cv_s
  17 Column           0    1    4               00 r[4]=cv.cv_o
  18 Variable         1    5    0               00 r[5]=parameter(1,)
  19 HaltIfNull    1299    2    3 cv.cv_s       01 if r[3]=null halt
  20 HaltIfNull    1299    2    4 cv.cv_o       01 if r[4]=null halt
  21 HaltIfNull    1299    2    5 cv.cv_t       01 if r[5]=null halt
  22 MakeRecord       3    3    9 DAD           00 r[9]=mkrec(r[3..5])
  23 Insert           0    9    2 cv            05 intkey=r[2] data=r[9]
  24 Halt             0    0    0               00
  25 Transaction      0    1   56 0             01
  26 TableLock        0   74    1 cv            00 iDb=0 root=74 write=1
  27 Goto             0    1    0               00
VDBE Trace:
   0 Init             0   25    0               00 Start at 25
SQL-trace: update cv set cv_t=? where cv_s=? and cv_o=?
  25 Transaction      0    1   56 0             01
  26 TableLock        0   74    1 cv            00 iDb=0 root=74 write=1
  27 Goto             0    1    0               00
   1 Null             0    1    2               00 r[1..2]=NULL
REG[1] =  NULL
   2 OpenWrite        0   74    0 3             00 root=74 iDb=0; cv
   3 OpenWrite        1   75    0 k(2,nil,nil)  02 root=75 iDb=0;
sqlite_autoindex_cv_1
   4 Explain          0    0    0 SEARCH TABLE cv USING INDEX
sqlite_autoindex_cv_1 (cv_s=? AND cv_o=?) 00
   5 Variable         2    6    0               00 r[6]=parameter(2,)
REG[6] =  i:1
   6 IsNull           6   15    0               00 if r[6]==NULL goto 15
REG[6] =  i:1
   7 Variable         3    7    0               00 r[7]=parameter(3,)
REG[7] =  t16[B8B9F4D5F3E8432E86E248C2EBE14D5D......C...H...M]](8)
   8 IsNull           7   15    0               00 if r[7]==NULL goto 15
REG[7] =  t16[B8B9F4D5F3E8432E86E248C2EBE14D5D......C...H...M]](8)
   9 Affinity         6    1    0 D             00 affinity(r[6])
  10 SeekGE           1   15    6 2             00 key=r[6..7]
REG[6] =  i:1
  11 IdxGT            1   15    6 2             00 key=r[6..7]
  12 IdxRowid         1    8    0               00 r[8]=rowid
REG[8] =  i:1007
  13 Seek             0    8    0               00 intkey=r[8]
REG[8] =  i:1007
  14 IdxRowid         1    2    0               00 r[2]=rowid
REG[2] =  i:1007
  15 IsNull           2   24    0               00 if r[2]==NULL goto 24
REG[2] =  i:1007
  16 Column           0    0    3               00 r[3]=cv.cv_s
REG[3] =  i:1
  17 Column           0    1    4               00 r[4]=cv.cv_o
REG[4] =  s16[B8B9F4D5F3E8432E86E248C2EBE14D5D......C...H...M]](8)
  18 Variable         1    5    0               00 r[5]=parameter(1,)
REG[5] =  i:28
  19 HaltIfNull    1299    2    3 cv.cv_s       01 if r[3]=null halt
REG[3] =  i:1
  20 HaltIfNull    1299    2    4 cv.cv_o       01 if r[4]=null halt
REG[4] =  s16[B8B9F4D5F3E8432E86E248C2EBE14D5D......C...H...M]](8)
  21 HaltIfNull    1299    2    5 cv.cv_t       01 if r[5]=null halt
REG[5] =  i:28
  22 MakeRecord       3    3    9 DAD           00 r[9]=mkrec(r[3..5])
REG[9] =  s21[04092C01B8B9F4D5F3E8432E86E248C2..,.......C...H.](8)
  23 Insert           0    9    2 cv            05 intkey=r[2] data=r[9]
REG[9] =  s21[04092C01B8B9F4D5F3E8432E86E248C2..,.......C...H.](8)
REG[2] =  i:1007
  24 Halt             0    0    0               00


Trace for the next successful update of the same row:

SQL: [update cv set cv_t=? where cv_s=? and cv_o=?]
VDBE Program Listing:
   0 Init             0   25    0               00 Start at 25
   1 Null             0    1    2               00 r[1..2]=NULL
   2 OpenWrite        0   74    0 3             00 root=74 iDb=0; cv
   3 OpenWrite        1   75    0 k(2,nil,nil)  02 root=75 iDb=0;
sqlite_autoindex_cv_1
   4 Explain          0    0    0 SEARCH TABLE cv USING INDEX
sqlite_autoindex_cv_1 (cv_s=? AND cv_o=?) 00
   5 Variable         2    6    0               00 r[6]=parameter(2,)
   6 IsNull           6   15    0               00 if r[6]==NULL goto 15
   7 Variable         3    7    0               00 r[7]=parameter(3,)
   8 IsNull           7   15    0               00 if r[7]==NULL goto 15
   9 Affinity         6    1    0 D             00 affinity(r[6])
  10 SeekGE           1   15    6 2             00 key=r[6..7]
  11 IdxGT            1   15    6 2             00 key=r[6..7]
  12 IdxRowid         1    8    0               00 r[8]=rowid
  13 Seek             0    8    0               00 intkey=r[8]
  14 IdxRowid         1    2    0               00 r[2]=rowid
  15 IsNull           2   24    0               00 if r[2]==NULL goto 24
  16 Column           0    0    3               00 r[3]=cv.cv_s
  17 Column           0    1    4               00 r[4]=cv.cv_o
  18 Variable         1    5    0               00 r[5]=parameter(1,)
  19 HaltIfNull    1299    2    3 cv.cv_s       01 if r[3]=null halt
  20 HaltIfNull    1299    2    4 cv.cv_o       01 if r[4]=null halt
  21 HaltIfNull    1299    2    5 cv.cv_t       01 if r[5]=null halt
  22 MakeRecord       3    3    9 DAD           00 r[9]=mkrec(r[3..5])
  23 Insert           0    9    2 cv            05 intkey=r[2] data=r[9]
  24 Halt             0    0    0               00
  25 Transaction      0    1   56 0             01
  26 TableLock        0   74    1 cv            00 iDb=0 root=74 write=1
  27 Goto             0    1    0               00
VDBE Trace:
   0 Init             0   25    0               00 Start at 25
SQL-trace: update cv set cv_t=? where cv_s=? and cv_o=?
  25 Transaction      0    1   56 0             01
  26 TableLock        0   74    1 cv            00 iDb=0 root=74 write=1
  27 Goto             0    1    0               00
   1 Null             0    1    2               00 r[1..2]=NULL
REG[1] =  NULL
   2 OpenWrite        0   74    0 3             00 root=74 iDb=0; cv
   3 OpenWrite        1   75    0 k(2,nil,nil)  02 root=75 iDb=0;
sqlite_autoindex_cv_1
   4 Explain          0    0    0 SEARCH TABLE cv USING INDEX
sqlite_autoindex_cv_1 (cv_s=? AND cv_o=?) 00
   5 Variable         2    6    0               00 r[6]=parameter(2,)
REG[6] =  i:1
   6 IsNull           6   15    0               00 if r[6]==NULL goto 15
REG[6] =  i:1
   7 Variable         3    7    0               00 r[7]=parameter(3,)
REG[7] =  t16[B8B9F4D5F3E8432E86E248C2EBE14D5D......C...H...M]](8)
   8 IsNull           7   15    0               00 if r[7]==NULL goto 15
REG[7] =  t16[B8B9F4D5F3E8432E86E248C2EBE14D5D......C...H...M]](8)
   9 Affinity         6    1    0 D             00 affinity(r[6])
  10 SeekGE           1   15    6 2             00 key=r[6..7]
REG[6] =  i:1
  11 IdxGT            1   15    6 2             00 key=r[6..7]
  12 IdxRowid         1    8    0               00 r[8]=rowid
REG[8] =  i:1007
  13 Seek             0    8    0               00 intkey=r[8]
REG[8] =  i:1007
  14 IdxRowid         1    2    0               00 r[2]=rowid
REG[2] =  i:1007
  15 IsNull           2   24    0               00 if r[2]==NULL goto 24
REG[2] =  i:1007
  16 Column           0    0    3               00 r[3]=cv.cv_s
REG[3] =  i:1
  17 Column           0    1    4               00 r[4]=cv.cv_o
REG[4] =  s16[B8B9F4D5F3E8432E86E248C2EBE14D5D......C...H...M]](8)
  18 Variable         1    5    0               00 r[5]=parameter(1,)
REG[5] =  i:29
  19 HaltIfNull    1299    2    3 cv.cv_s       01 if r[3]=null halt
REG[3] =  i:1
  20 HaltIfNull    1299    2    4 cv.cv_o       01 if r[4]=null halt
REG[4] =  s16[B8B9F4D5F3E8432E86E248C2EBE14D5D......C...H...M]](8)
  21 HaltIfNull    1299    2    5 cv.cv_t       01 if r[5]=null halt
REG[5] =  i:29
  22 MakeRecord       3    3    9 DAD           00 r[9]=mkrec(r[3..5])
REG[9] =  s21[04092C01B8B9F4D5F3E8432E86E248C2..,.......C...H.](8)
  23 Insert           0    9    2 cv            05 intkey=r[2] data=r[9]
REG[9] =  s21[04092C01B8B9F4D5F3E8432E86E248C2..,.......C...H.](8)
REG[2] =  i:1007
  24 Halt             0    0    0               00


Hope this helps. Let me know if there is anything I can do to gather more
data.

NB: I originally mentioned OS X being the only affected platform but this
trace was actually obtained on Linux.
uname: 3.2.0-23-generic #36-Ubuntu SMP Tue Apr 10 20:39:51 UTC 2012 x86_64
x86_64 x86_64 GNU/Linux

Reply via email to