aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/utils/sqlite3
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/utils/sqlite3')
-rw-r--r--src/lib/utils/sqlite3/info.txt10
-rw-r--r--src/lib/utils/sqlite3/sqlite3.cpp143
-rw-r--r--src/lib/utils/sqlite3/sqlite3.h56
3 files changed, 0 insertions, 209 deletions
diff --git a/src/lib/utils/sqlite3/info.txt b/src/lib/utils/sqlite3/info.txt
deleted file mode 100644
index 6370f4b2b..000000000
--- a/src/lib/utils/sqlite3/info.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-
-load_on request
-
-<libs>
-all -> sqlite3
-</libs>
-
-<header:public>
-sqlite3.h
-</header:public>
diff --git a/src/lib/utils/sqlite3/sqlite3.cpp b/src/lib/utils/sqlite3/sqlite3.cpp
deleted file mode 100644
index 61c7f15bc..000000000
--- a/src/lib/utils/sqlite3/sqlite3.cpp
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
-* SQLite wrapper
-* (C) 2012 Jack Lloyd
-*
-* Botan is released under the Simplified BSD License (see license.txt)
-*/
-
-#include <botan/sqlite3.h>
-#include <stdexcept>
-#include <sqlite3.h>
-
-namespace Botan {
-
-Sqlite3_Database::Sqlite3_Database(const std::string& db_filename)
- {
- int rc = ::sqlite3_open(db_filename.c_str(), &m_db);
-
- if(rc)
- {
- const std::string err_msg = ::sqlite3_errmsg(m_db);
- ::sqlite3_close(m_db);
- m_db = nullptr;
- throw std::runtime_error("sqlite3_open failed - " + err_msg);
- }
- }
-
-Sqlite3_Database::~Sqlite3_Database()
- {
- if(m_db)
- ::sqlite3_close(m_db);
- m_db = nullptr;
- }
-
-std::shared_ptr<SQL_Database::Statement> Sqlite3_Database::new_statement(const std::string& base_sql) const
- {
- return std::make_shared<Sqlite3_Statement>(m_db, base_sql);
- }
-
-size_t Sqlite3_Database::row_count(const std::string& table_name)
- {
- auto stmt = new_statement("select count(*) from " + table_name);
-
- if(stmt->step())
- return stmt->get_size_t(0);
- else
- throw std::runtime_error("Querying size of table " + table_name + " failed");
- }
-
-void Sqlite3_Database::create_table(const std::string& table_schema)
- {
- char* errmsg = nullptr;
- int rc = ::sqlite3_exec(m_db, table_schema.c_str(), nullptr, nullptr, &errmsg);
-
- if(rc != SQLITE_OK)
- {
- const std::string err_msg = errmsg;
- ::sqlite3_free(errmsg);
- ::sqlite3_close(m_db);
- m_db = nullptr;
- throw std::runtime_error("sqlite3_exec for table failed - " + err_msg);
- }
- }
-
-Sqlite3_Database::Sqlite3_Statement::Sqlite3_Statement(sqlite3* db, const std::string& base_sql)
- {
- int rc = ::sqlite3_prepare_v2(db, base_sql.c_str(), -1, &m_stmt, nullptr);
-
- if(rc != SQLITE_OK)
- throw std::runtime_error("sqlite3_prepare failed " + base_sql +
- ", code " + std::to_string(rc));
- }
-
-void Sqlite3_Database::Sqlite3_Statement::bind(int column, const std::string& val)
- {
- int rc = ::sqlite3_bind_text(m_stmt, column, val.c_str(), -1, SQLITE_TRANSIENT);
- if(rc != SQLITE_OK)
- throw std::runtime_error("sqlite3_bind_text failed, code " + std::to_string(rc));
- }
-
-void Sqlite3_Database::Sqlite3_Statement::bind(int column, size_t val)
- {
- if(val != static_cast<size_t>(static_cast<int>(val))) // is this legit?
- throw std::runtime_error("sqlite3 cannot store " + std::to_string(val) + " without truncation");
- int rc = ::sqlite3_bind_int(m_stmt, column, val);
- if(rc != SQLITE_OK)
- throw std::runtime_error("sqlite3_bind_int failed, code " + std::to_string(rc));
- }
-
-void Sqlite3_Database::Sqlite3_Statement::bind(int column, std::chrono::system_clock::time_point time)
- {
- const int timeval = std::chrono::duration_cast<std::chrono::seconds>(time.time_since_epoch()).count();
- bind(column, timeval);
- }
-
-void Sqlite3_Database::Sqlite3_Statement::bind(int column, const std::vector<byte>& val)
- {
- int rc = ::sqlite3_bind_blob(m_stmt, column, &val[0], val.size(), SQLITE_TRANSIENT);
- if(rc != SQLITE_OK)
- throw std::runtime_error("sqlite3_bind_text failed, code " + std::to_string(rc));
- }
-
-std::pair<const byte*, size_t> Sqlite3_Database::Sqlite3_Statement::get_blob(int column)
- {
- BOTAN_ASSERT(::sqlite3_column_type(m_stmt, 0) == SQLITE_BLOB,
- "Return value is a blob");
-
- const void* session_blob = ::sqlite3_column_blob(m_stmt, column);
- const int session_blob_size = ::sqlite3_column_bytes(m_stmt, column);
-
- BOTAN_ASSERT(session_blob_size >= 0, "Blob size is non-negative");
-
- return std::make_pair(static_cast<const byte*>(session_blob),
- static_cast<size_t>(session_blob_size));
- }
-
-size_t Sqlite3_Database::Sqlite3_Statement::get_size_t(int column)
- {
- BOTAN_ASSERT(::sqlite3_column_type(m_stmt, column) == SQLITE_INTEGER,
- "Return count is an integer");
-
- const int sessions_int = ::sqlite3_column_int(m_stmt, column);
-
- BOTAN_ASSERT(sessions_int >= 0, "Expected size_t is non-negative");
-
- return static_cast<size_t>(sessions_int);
- }
-
-void Sqlite3_Database::Sqlite3_Statement::spin()
- {
- while(step()) {}
- }
-
-bool Sqlite3_Database::Sqlite3_Statement::step()
- {
- return (::sqlite3_step(m_stmt) == SQLITE_ROW);
- }
-
-Sqlite3_Database::Sqlite3_Statement::~Sqlite3_Statement()
- {
- ::sqlite3_finalize(m_stmt);
- }
-
-}
diff --git a/src/lib/utils/sqlite3/sqlite3.h b/src/lib/utils/sqlite3/sqlite3.h
deleted file mode 100644
index 8495a1d1b..000000000
--- a/src/lib/utils/sqlite3/sqlite3.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
-* SQLite3 wrapper
-* (C) 2012,2014 Jack Lloyd
-*
-* Botan is released under the Simplified BSD License (see license.txt)
-*/
-
-#ifndef BOTAN_UTILS_SQLITE3_H__
-#define BOTAN_UTILS_SQLITE3_H__
-
-#include <botan/database.h>
-
-class sqlite3;
-class sqlite3_stmt;
-
-namespace Botan {
-
-class BOTAN_DLL Sqlite3_Database : public SQL_Database
- {
- public:
- Sqlite3_Database(const std::string& file);
-
- ~Sqlite3_Database();
-
- size_t row_count(const std::string& table_name) override;
-
- void create_table(const std::string& table_schema) override;
-
- std::shared_ptr<Statement> new_statement(const std::string& sql) const override;
- private:
- class Sqlite3_Statement : public Statement
- {
- public:
- void bind(int column, const std::string& val) override;
- void bind(int column, size_t val) override;
- void bind(int column, std::chrono::system_clock::time_point time) override;
- void bind(int column, const std::vector<byte>& val) override;
-
- std::pair<const byte*, size_t> get_blob(int column) override;
- size_t get_size_t(int column) override;
-
- void spin() override;
- bool step() override;
-
- Sqlite3_Statement(sqlite3* db, const std::string& base_sql);
- ~Sqlite3_Statement();
- private:
- sqlite3_stmt* m_stmt;
- };
-
- sqlite3* m_db;
- };
-
-}
-
-#endif