Fossil SCM
When updating a schema from 1.x to 2.x, temporarily disable defensive mode so that we can remove the length constraint on the BLOB.UUID column.
Commit
d4041437b6f40d0cc62f22d2973498d596af325b1d18fed2dd7584aef733df7a
Parent
198af5374f31eb6…
1 file changed
+3
+3
| --- src/rebuild.c | ||
| +++ src/rebuild.c | ||
| @@ -156,17 +156,20 @@ | ||
| 156 | 156 | /* Search for: length(uuid)==40 |
| 157 | 157 | ** 0123456789 12345 */ |
| 158 | 158 | int i; |
| 159 | 159 | for(i=10; z[i]; i++){ |
| 160 | 160 | if( z[i]=='=' && strncmp(&z[i-6],"(uuid)==40",10)==0 ){ |
| 161 | + int rc = 0; | |
| 161 | 162 | z[i] = '>'; |
| 163 | + sqlite3_db_config(g.db, SQLITE_DBCONFIG_DEFENSIVE, 0, &rc); | |
| 162 | 164 | db_multi_exec( |
| 163 | 165 | "PRAGMA writable_schema=ON;" |
| 164 | 166 | "UPDATE repository.sqlite_schema SET sql=%Q WHERE name LIKE 'blob';" |
| 165 | 167 | "PRAGMA writable_schema=OFF;", |
| 166 | 168 | z |
| 167 | 169 | ); |
| 170 | + sqlite3_db_config(g.db, SQLITE_DBCONFIG_DEFENSIVE, 1, &rc); | |
| 168 | 171 | break; |
| 169 | 172 | } |
| 170 | 173 | } |
| 171 | 174 | fossil_free(z); |
| 172 | 175 | } |
| 173 | 176 |
| --- src/rebuild.c | |
| +++ src/rebuild.c | |
| @@ -156,17 +156,20 @@ | |
| 156 | /* Search for: length(uuid)==40 |
| 157 | ** 0123456789 12345 */ |
| 158 | int i; |
| 159 | for(i=10; z[i]; i++){ |
| 160 | if( z[i]=='=' && strncmp(&z[i-6],"(uuid)==40",10)==0 ){ |
| 161 | z[i] = '>'; |
| 162 | db_multi_exec( |
| 163 | "PRAGMA writable_schema=ON;" |
| 164 | "UPDATE repository.sqlite_schema SET sql=%Q WHERE name LIKE 'blob';" |
| 165 | "PRAGMA writable_schema=OFF;", |
| 166 | z |
| 167 | ); |
| 168 | break; |
| 169 | } |
| 170 | } |
| 171 | fossil_free(z); |
| 172 | } |
| 173 |
| --- src/rebuild.c | |
| +++ src/rebuild.c | |
| @@ -156,17 +156,20 @@ | |
| 156 | /* Search for: length(uuid)==40 |
| 157 | ** 0123456789 12345 */ |
| 158 | int i; |
| 159 | for(i=10; z[i]; i++){ |
| 160 | if( z[i]=='=' && strncmp(&z[i-6],"(uuid)==40",10)==0 ){ |
| 161 | int rc = 0; |
| 162 | z[i] = '>'; |
| 163 | sqlite3_db_config(g.db, SQLITE_DBCONFIG_DEFENSIVE, 0, &rc); |
| 164 | db_multi_exec( |
| 165 | "PRAGMA writable_schema=ON;" |
| 166 | "UPDATE repository.sqlite_schema SET sql=%Q WHERE name LIKE 'blob';" |
| 167 | "PRAGMA writable_schema=OFF;", |
| 168 | z |
| 169 | ); |
| 170 | sqlite3_db_config(g.db, SQLITE_DBCONFIG_DEFENSIVE, 1, &rc); |
| 171 | break; |
| 172 | } |
| 173 | } |
| 174 | fossil_free(z); |
| 175 | } |
| 176 |