/ Check-in [c43dd23f]
Login
SQLite training in Houston TX on 2019-11-05 (details)
Part of the 2019 Tcl Conference

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Update the recipe for resetting a database using SQLITE_DBCONFIG_RESET_DATABASE.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: c43dd23fb00f7e0b6274de435d8e31f6a4cb74c3e86e8313a5098ff089e27574
User & Date: dan 2018-07-05 20:33:06
Context
2018-07-05
21:22
Use separate opcodes, OP_AggValue and OP_AggInverse, for the new callbacks associated with Window Functions, for improved readability of EXPLAIN output. check-in: fa653805 user: drh tags: trunk
20:33
Update the recipe for resetting a database using SQLITE_DBCONFIG_RESET_DATABASE. check-in: c43dd23f user: dan tags: trunk
20:05
Get the json_group_array() and json_group_object() SQL functions working as window functions. check-in: 916cdc83 user: drh tags: trunk
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to src/sqlite.h.in.

2118
2119
2120
2121
2122
2123
2124






2125
2126
2127
2128
2129
2130
2131
**
** <dt>SQLITE_DBCONFIG_RESET_DATABASE</dt>
** <dd> Set the SQLITE_DBCONFIG_RESET_DATABASE flag and then run
** [VACUUM] in order to reset a database back to an empty database
** with no schema and no content. The following process works even for
** a badly corrupted database file:
** <ol>






** <li> sqlite3_db_config(db, SQLITE_DBCONFIG_RESET_DATABASE, 1, 0);
** <li> [sqlite3_exec](db, "[VACUUM]", 0, 0, 0);
** <li> sqlite3_db_config(db, SQLITE_DBCONFIG_RESET_DATABASE, 0, 0);
** </ol>
** Because resetting a database is destructive and irreversible, the
** process requires the use of this obscure API and multiple steps to help
** ensure that it does not happen by accident.







>
>
>
>
>
>







2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
**
** <dt>SQLITE_DBCONFIG_RESET_DATABASE</dt>
** <dd> Set the SQLITE_DBCONFIG_RESET_DATABASE flag and then run
** [VACUUM] in order to reset a database back to an empty database
** with no schema and no content. The following process works even for
** a badly corrupted database file:
** <ol>
** <li> If the database connection is newly opened, make sure it has read the
**      database schema by preparing then discarding some query against the
**      database, or calling sqlite3_table_column_metadata(), ignoring any
**      errors.  This step is only necessary if the application desires to keep
**      the database in WAL mode after the reset if it was in WAL mode before
**      the reset.  
** <li> sqlite3_db_config(db, SQLITE_DBCONFIG_RESET_DATABASE, 1, 0);
** <li> [sqlite3_exec](db, "[VACUUM]", 0, 0, 0);
** <li> sqlite3_db_config(db, SQLITE_DBCONFIG_RESET_DATABASE, 0, 0);
** </ol>
** Because resetting a database is destructive and irreversible, the
** process requires the use of this obscure API and multiple steps to help
** ensure that it does not happen by accident.

Changes to test/resetdb.test.

150
151
152
153
154
155
156


157



















158

     PRAGMA page_size;
     PRAGMA journal_mode;
     PRAGMA quick_check;
  } db2
} {0 {1 8192 wal ok}}
db2 close























finish_test








>
>
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>

>
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
     PRAGMA page_size;
     PRAGMA journal_mode;
     PRAGMA quick_check;
  } db2
} {0 {1 8192 wal ok}}
db2 close

# Reset the database yet again. This time immediately after it is closed
# and reopened. So that the VACUUM is the first statement run.
#
db close
sqlite3 db test.db
do_test 500 {
  sqlite3_finalize [
    sqlite3_prepare db "SELECT 1 FROM sqlite_master LIMIT 1" -1 tail
  ]
  sqlite3_db_config db RESET_DB 1
  db eval VACUUM
  sqlite3_db_config db RESET_DB 0
  sqlite3 db2 test.db
  catchsql {
     PRAGMA page_count;
     PRAGMA page_size;
     PRAGMA journal_mode;
     PRAGMA quick_check;
  } db2
} {0 {1 8192 wal ok}}
db2 close

finish_test