summaryrefslogtreecommitdiff
path: root/src/sqlite.sml
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adamc@hcoop.net>2010-01-03 17:13:45 -0500
committerGravatar Adam Chlipala <adamc@hcoop.net>2010-01-03 17:13:45 -0500
commit85bd2c1f3750a8a918b93815e3550b462b113de5 (patch)
treec64216bacfaaad2793c146651100f3c289e5daf9 /src/sqlite.sml
parent86bf1a00aacd96b4d32a1e1e88822a2201594926 (diff)
Database quotas
Diffstat (limited to 'src/sqlite.sml')
-rw-r--r--src/sqlite.sml40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/sqlite.sml b/src/sqlite.sml
index 485e43b4..593db22e 100644
--- a/src/sqlite.sml
+++ b/src/sqlite.sml
@@ -260,6 +260,8 @@ fun init {dbstring, prepared = ss, tables, views, sequences} =
newline,
string "sqlite3 *sqlite;",
newline,
+ string "sqlite3_stmt *stmt;",
+ newline,
string "uw_conn *conn;",
newline,
newline,
@@ -269,6 +271,44 @@ fun init {dbstring, prepared = ss, tables, views, sequences} =
string "\"Can't open SQLite database.\");",
newline,
newline,
+ string "if (uw_database_max < SIZE_MAX) {",
+ newline,
+ box [string "char buf[100];",
+ newline,
+ newline,
+
+ string "sprintf(buf, \"PRAGMA max_page_count = %llu\", (unsigned long long)(uw_database_max / 1024));",
+ newline,
+ newline,
+
+ string "if (sqlite3_prepare_v2(sqlite, buf, -1, &stmt, NULL) != SQLITE_OK) {",
+ newline,
+ box [string "sqlite3_close(sqlite);",
+ newline,
+ string "uw_error(ctx, FATAL, \"Can't prepare max_page_count query for SQLite database\");",
+ newline],
+ string "}",
+ newline,
+ newline,
+
+ string "if (sqlite3_step(stmt) != SQLITE_ROW) {",
+ newline,
+ box [string "sqlite3_finalize(stmt);",
+ newline,
+ string "sqlite3_close(sqlite);",
+ newline,
+ string "uw_error(ctx, FATAL, \"Can't set max_page_count parameter for SQLite database\");",
+ newline],
+ string "}",
+ newline,
+ newline,
+
+ string "sqlite3_finalize(stmt);",
+ newline],
+ string "}",
+ newline,
+ newline,
+
string "conn = calloc(1, sizeof(uw_conn));",
newline,
string "conn->conn = sqlite;",