Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Add a few casts required by 64-bit VS2010 to the sessions code. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | sessions |
Files: | files | file ages | folders |
SHA1: |
5ac4a06111b5fad5f58c20ef5d2b65ae |
User & Date: | dan 2011-07-15 19:11:32.763 |
Context
2011-07-16
| ||
18:05 | Note in the documentation that when iterating through a changeset, all changes to a single table are grouped together. Also add the sqlite3session_isempty() function. (check-in: 364f3b820a user: dan tags: sessions) | |
2011-07-15
| ||
19:11 | Add a few casts required by 64-bit VS2010 to the sessions code. (check-in: 5ac4a06111 user: dan tags: sessions) | |
2011-07-13
| ||
15:21 | Add the xFilter callback to the sqlite3changeset_apply() function. This callback allows the application to accept or reject changes on a per-table basis when applying a changeset. (check-in: 282474c42f user: dan tags: sessions) | |
Changes
Changes to ext/session/sqlite3session.c.
︙ | ︙ | |||
1633 1634 1635 1636 1637 1638 1639 | SessionTable *pTab, int *pRc ){ /* Write a table header */ sessionAppendByte(pBuf, 'T', pRc); sessionAppendVarint(pBuf, pTab->nCol, pRc); sessionAppendBlob(pBuf, pTab->abPK, pTab->nCol, pRc); | | | 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 | SessionTable *pTab, int *pRc ){ /* Write a table header */ sessionAppendByte(pBuf, 'T', pRc); sessionAppendVarint(pBuf, pTab->nCol, pRc); sessionAppendBlob(pBuf, pTab->abPK, pTab->nCol, pRc); sessionAppendBlob(pBuf, (u8 *)pTab->zName, (int)strlen(pTab->zName)+1, pRc); } /* ** Obtain a changeset object containing all changes recorded by the ** session object passed as the first argument. ** ** It is the responsibility of the caller to eventually free the buffer |
︙ | ︙ | |||
1947 1948 1949 1950 1951 1952 1953 | /* If this is an INSERT or UPDATE, read the new.* record. */ if( p->op!=SQLITE_DELETE ){ p->rc = sessionReadRecord(&aChange, p->nCol, paRec?0:&p->apValue[p->nCol]); if( p->rc!=SQLITE_OK ) return p->rc; } | | | 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 | /* If this is an INSERT or UPDATE, read the new.* record. */ if( p->op!=SQLITE_DELETE ){ p->rc = sessionReadRecord(&aChange, p->nCol, paRec?0:&p->apValue[p->nCol]); if( p->rc!=SQLITE_OK ) return p->rc; } if( pnRec ){ *pnRec = (int)(aChange - *paRec); } p->pNext = aChange; return SQLITE_ROW; } /* ** Advance an iterator created by sqlite3changeset_start() to the next ** change in the changeset. This function may return SQLITE_ROW, SQLITE_DONE |
︙ | ︙ | |||
2802 2803 2804 2805 2806 2807 2808 | /* If an xFilter() callback was specified, invoke it now. If the ** xFilter callback returns zero, skip this table. If it returns ** non-zero, proceed. */ schemaMismatch = (xFilter && (0==xFilter(pCtx, zNew))); if( schemaMismatch ){ zTab = sqlite3_mprintf("%s", zNew); | | | 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 | /* If an xFilter() callback was specified, invoke it now. If the ** xFilter callback returns zero, skip this table. If it returns ** non-zero, proceed. */ schemaMismatch = (xFilter && (0==xFilter(pCtx, zNew))); if( schemaMismatch ){ zTab = sqlite3_mprintf("%s", zNew); nTab = (int)strlen(zTab); sApply.azCol = (const char **)zTab; }else{ sqlite3changeset_pk(pIter, &abPK, 0); rc = sessionTableInfo( db, "main", zNew, &sApply.nCol, &zTab, &sApply.azCol, &sApply.abPK ); if( rc!=SQLITE_OK ) break; |
︙ | ︙ | |||
2991 2992 2993 2994 2995 2996 2997 | }else{ /* UPDATE + DELETE */ assert( op1==SQLITE_UPDATE && op2==SQLITE_DELETE ); pNew->op = SQLITE_DELETE; sessionMergeRecord(&aCsr, pTab->nCol, aRec, pExist->aRecord); } if( pNew ){ | | | 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 | }else{ /* UPDATE + DELETE */ assert( op1==SQLITE_UPDATE && op2==SQLITE_DELETE ); pNew->op = SQLITE_DELETE; sessionMergeRecord(&aCsr, pTab->nCol, aRec, pExist->aRecord); } if( pNew ){ pNew->nRecord = (int)(aCsr - pNew->aRecord); } sqlite3_free(pExist); } } *ppNew = pNew; return SQLITE_OK; |
︙ | ︙ | |||
3038 3039 3040 3041 3042 3043 3044 | assert( zNew>=(char *)pChangeset && zNew-nChangeset<((char *)pChangeset) ); assert( !pTab || pTab->zName-nChangeset<(char *)pChangeset ); assert( !pTab || zNew>=pTab->zName ); if( !pTab || zNew!=pTab->zName ){ /* Search the list for a matching table */ | | | 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 | assert( zNew>=(char *)pChangeset && zNew-nChangeset<((char *)pChangeset) ); assert( !pTab || pTab->zName-nChangeset<(char *)pChangeset ); assert( !pTab || zNew>=pTab->zName ); if( !pTab || zNew!=pTab->zName ){ /* Search the list for a matching table */ int nNew = (int)strlen(zNew); u8 *abPK; sqlite3changeset_pk(pIter, &abPK, 0); for(pTab = *ppTabList; pTab; pTab=pTab->pNext){ if( 0==sqlite3_strnicmp(pTab->zName, zNew, nNew+1) ) break; } if( !pTab ){ |
︙ | ︙ |