1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-07-27 20:41:58 +03:00

Have sqlite3changeset_concat() return SQLITE_SCHEMA if an attempt is made to concatenate changesets based on incompatible database schemas.

FossilOrigin-Name: 343b64517d244b75097e38342dc273eb5a52915b
This commit is contained in:
dan
2011-04-15 15:04:31 +00:00
parent 29e03e977c
commit f29123b572
4 changed files with 75 additions and 12 deletions

View File

@ -2862,19 +2862,28 @@ int sessionConcatChangeset(
if( !pTab || zNew!=pTab->zName ){
/* Search the list for a matching table */
int nNew = 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 ){
pTab = sqlite3_malloc(sizeof(SessionTable));
if( !pTab ) break;
if( !pTab ){
rc = SQLITE_NOMEM;
break;
}
memset(pTab, 0, sizeof(SessionTable));
pTab->pNext = *ppTabList;
pTab->abPK = abPK;
pTab->nCol = nCol;
*ppTabList = pTab;
}else if( pTab->nCol!=nCol || memcmp(pTab->abPK, abPK, nCol) ){
rc = SQLITE_SCHEMA;
break;
}
pTab->zName = (char *)zNew;
pTab->nCol = nCol;
sqlite3changeset_pk(pIter, &pTab->abPK, 0);
}
if( sessionGrowHash(pTab) ) break;