From 85bd2c1f3750a8a918b93815e3550b462b113de5 Mon Sep 17 00:00:00 2001 From: Adam Chlipala Date: Sun, 3 Jan 2010 17:13:45 -0500 Subject: Database quotas --- src/sqlite.sml | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'src/sqlite.sml') 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;", -- cgit v1.2.3