Yes, it's for System.Data.SQLite. I'm trying to build it with the latest
engine code. I've commented out that one else-if that won't compile and so
far no errors, but that's a really bad way to proceed. The SQLiteKeyReader
c# class is trying to get a row id for a cursor.
declspec(dllexport) int WINAPI sqlite3_cursor_rowid(sqlite3_stmt *pstmt,
int cursor, sqlite_int64 *prowid)
{
Vdbe *p = (Vdbe *)pstmt;
sqlite3 *db = (p == NULL) ? NULL : p->db;
int rc = 0;
VdbeCursor *pC;
int ret = 0;
sqlite3_mutex_enter(db->mutex);
while (1)
{
if (cursor < 0 || cursor >= p->nCursor)
{
ret = SQLITE_ERROR;
break;
}
if (p->apCsr[cursor] == NULL)
{
ret = SQLITE_ERROR;
break;
}
pC = p->apCsr[cursor];
ret = sqlite3VdbeCursorMoveto(pC);
if(ret)
break;
if(pC->rowidIsValid)
{
*prowid = pC->lastRowid;
}
else if(pC->pseudoTableReg>0)
{
}
//else if(pC->pseudoTable)
//{
// *prowid = pC->iKey;
//}
else if(pC->nullRow || pC->pCursor==0)
{
ret = SQLITE_ERROR;
break;
}
else
{
if (pC->pCursor == NULL)
{
ret = SQLITE_ERROR;
break;
}
sqlite3BtreeKeySize(pC->pCursor, prowid);
*prowid = *prowid;
}
break;
}
sqlite3_mutex_leave(db->mutex);
return ret;
}
> I think, without to be 100% sure, that it is for the wrapper .NET
> System.Data.SQLite.
> I was myself in front of this code (to have this wrapper using the latest
> sqlite version).
> I ended up by removing all this code, meaning that if you don't call
> dispose() in your code, it will not be garbage collected.
> It is a risk I took, and it works so far.
>
> Best regards,
> Sylvain
>
> On Sat, Apr 17, 2010 at 8:07 PM, D. Richard Hipp <drh at hwaci.com> wrote:
>
>>
>> On Apr 17, 2010, at 1:02 PM, Paul Shaffer wrote:
>>
>> > Due to changes in VdbeCursor structure, this code for 3.6.16 won't
>> > compile
>> > anymore:
>> >
>> > else if(pC->pseudoTable)
>> > {
>> > *prowid = pC->iKey;
>> > }
>> >
>>
>> Your application should not be messing with internal data structures
>> of SQLite, all of which are subject to change without notice (as you
>> have discovered.)
>>
>> Perhaps if you explain to us what you are trying to accomplish we will
>> be better able to help you.
>>
>>
>> > and for 3.6.23 would have to be replaced by something like this:
>> >
>> > else if(pC->pseudoTableReg>0)
>> > {
>> > //*prowid = ????
>> > }
>> >
>> > My problem is that after about an hour of reverse engineering I can't
>> > figure out a way to get the row id with the new code. Any help
>> > appreciated.
>> >
>> >
>> > _______________________________________________
>> > sqlite-users mailing list
>> > sqlite-users at sqlite.org
>> > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>>
>> D. Richard Hipp
>> drh at hwaci.com
>>
>>
>>
>> _______________________________________________
>> sqlite-users mailing list
>> sqlite-users at sqlite.org
>> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>>
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users