8
8
** Change 2: Remove local variable 'int nRes'
9
9
** Change 3: Remove initialization 'nRes = sqlite3BtreeGetOptimalReserve(pMain)'
10
10
**
11
- ** Code generated by script/rekeyvacuum.sh from SQLite v3.27.2 amalgamation.
11
+ ** Code generated by script/rekeyvacuum.sh from SQLite v3.28.0 amalgamation.
12
12
*/
13
- SQLITE_PRIVATE int sqlite3RekeyVacuum (
13
+ SQLITE_PRIVATE SQLITE_NOINLINE int sqlite3RekeyVacuum (
14
14
char * * pzErrMsg , /* Write error message here */
15
15
sqlite3 * db , /* Database connection */
16
16
int iDb , /* Which attached DB to vacuum */
17
- sqlite3_value * pOut /* Write results here, if not NULL */
17
+ sqlite3_value * pOut /* Write results here, if not NULL. VACUUM INTO */
18
18
, int nRes ){
19
19
int rc = SQLITE_OK ; /* Return code from service routines */
20
20
Btree * pMain ; /* The database being vacuumed */
@@ -23,6 +23,7 @@ SQLITE_PRIVATE int sqlite3RekeyVacuum(
23
23
u64 saved_flags ; /* Saved value of db->flags */
24
24
int saved_nChange ; /* Saved value of db->nChange */
25
25
int saved_nTotalChange ; /* Saved value of db->nTotalChange */
26
+ u32 saved_openFlags ; /* Saved value of db->openFlags */
26
27
u8 saved_mTrace ; /* Saved trace settings */
27
28
Db * pDb = 0 ; /* Database to detach at end of vacuum */
28
29
int isMemDb ; /* True if vacuuming a :memory: database */
@@ -32,18 +33,21 @@ SQLITE_PRIVATE int sqlite3RekeyVacuum(
32
33
33
34
if ( !db -> autoCommit ){
34
35
sqlite3SetString (pzErrMsg , db , "cannot VACUUM from within a transaction" );
35
- return SQLITE_ERROR ;
36
+ return SQLITE_ERROR ; /* IMP: R-12218-18073 */
36
37
}
37
38
if ( db -> nVdbeActive > 1 ){
38
39
sqlite3SetString (pzErrMsg , db ,"cannot VACUUM - SQL statements in progress" );
39
- return SQLITE_ERROR ;
40
+ return SQLITE_ERROR ; /* IMP: R-15610-35227 */
40
41
}
42
+ saved_openFlags = db -> openFlags ;
41
43
if ( pOut ){
42
44
if ( sqlite3_value_type (pOut )!= SQLITE_TEXT ){
43
45
sqlite3SetString (pzErrMsg , db , "non-text filename" );
44
46
return SQLITE_ERROR ;
45
47
}
46
48
zOut = (const char * )sqlite3_value_text (pOut );
49
+ db -> openFlags &= ~SQLITE_OPEN_READONLY ;
50
+ db -> openFlags |= SQLITE_OPEN_CREATE |SQLITE_OPEN_READWRITE ;
47
51
}else {
48
52
zOut = "" ;
49
53
}
@@ -82,6 +86,7 @@ SQLITE_PRIVATE int sqlite3RekeyVacuum(
82
86
*/
83
87
nDb = db -> nDb ;
84
88
rc = execSqlF (db , pzErrMsg , "ATTACH %Q AS vacuum_db" , zOut );
89
+ db -> openFlags = saved_openFlags ;
85
90
if ( rc != SQLITE_OK ) goto end_of_vacuum ;
86
91
assert ( (db -> nDb - 1 )== nDb );
87
92
pDb = & db -> aDb [nDb ];
@@ -95,6 +100,7 @@ SQLITE_PRIVATE int sqlite3RekeyVacuum(
95
100
sqlite3SetString (pzErrMsg , db , "output file already exists" );
96
101
goto end_of_vacuum ;
97
102
}
103
+ db -> mDbFlags |= DBFLAG_VacuumInto ;
98
104
}
99
105
100
106
/* A VACUUM cannot change the pagesize of an encrypted database. */
0 commit comments