...especially given that the results of sqlite3SchemaClear are being passed
as a parameter and from the declaration, sqlite3SchemaClear doesn't return
anything.

On Wed, Jan 25, 2012 at 7:53 AM, John Elrick <john.elr...@fenestra.com>wrote:

> I started with the place where iGeneration was being changed and found
> nothing out of the ordinary.  I started an examination and noticed the
> following.  My "huh?" surrounds the question, why is sqlite3SchemaClear
> being called if pBt is assigned?
>
> SQLITE_PRIVATE Schema *sqlite3SchemaGet(sqlite3 *db, Btree *pBt){
>   Schema * p;
>   if( pBt ){
>     p = (Schema *)sqlite3BtreeSchema(pBt, sizeof(Schema),
> sqlite3SchemaClear);
>   }else{
>     p = (Schema *)sqlite3DbMallocZero(0, sizeof(Schema));
>   }
>   if( !p ){
>     db->mallocFailed = 1;
>   }else if ( 0==p->file_format ){
>     sqlite3HashInit(&p->tblHash);
>     sqlite3HashInit(&p->idxHash);
>     sqlite3HashInit(&p->trigHash);
>     sqlite3HashInit(&p->fkeyHash);
>     p->enc = SQLITE_UTF8;
>   }
>   return p;
> }
>
>
> On Tue, Jan 24, 2012 at 7:46 PM, Richard Hipp <d...@sqlite.org> wrote:
>
>> On Tue, Jan 24, 2012 at 7:37 PM, John Elrick <john.elr...@fenestra.com
>> >wrote:
>>
>> >
>> > It appears that the value is set here:
>> >
>> >  u.av.pBt = db->aDb[pOp->p1].pBt;
>> >  if( u.av.pBt ){
>> >    sqlite3BtreeGetMeta(u.av.pBt, BTREE_SCHEMA_VERSION, (u32
>> *)&u.av.iMeta);
>> >    u.av.iGen = db->aDb[pOp->p1].pSchema->iGeneration;
>> >  }else{
>> >    u.av.iGen = u.av.iMeta = 0;
>> >  }
>> >
>> >
>> > I added a log trace to the else condition and it never fired off, so
>> > something is causing db->aDb[pOp->p1].pSchema->iGeneration to change
>> > relative to pOp->p3.  Give me some guidance as to where to dig and I'll
>> be
>> > glad to do so
>> >
>>
>> iGeneration changes in only one place in the code:
>> http://www.sqlite.org/src/artifact/5069f2248?ln=431
>>
>> May I recommend that you put a printf() before this line
>>
>>   http://www.sqlite.org/src/artifact/fc1b97fa6816?ln=3022
>>
>> And have that printf display the following values:
>>
>>   db  (rendered using %p)
>>   pOp->p1  (using %d)
>>   db->aDb[pOp->p1].pSchema  (using %p)
>>   db->aDb[pOp->p1].pSchema->schema_cookie  (using %d)
>>   db->aDb[pOp->p1].pSchema->iGeneration (using %d)
>>   iMeta  (using %d)
>>   pOp->p2  (using %d)
>>   pOp->p3  (using %d)
>>   p->zSql  (using %s)
>>
>> And then also add a printf on the line above where iGeneration changes and
>> display its new value every time it changes.
>>
>>
>>
>>
>> --
>> D. Richard Hipp
>> d...@sqlite.org
>> _______________________________________________
>> sqlite-users mailing list
>> sqlite-users@sqlite.org
>> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>>
>
>
>
> --
> John Elrick
> Fenestra Technologies
> 540-868-1377
>
>


-- 
John Elrick
Fenestra Technologies
540-868-1377
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to