summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibSQL/Database.h
diff options
context:
space:
mode:
authorJan de Visser <jan@de-visser.net>2021-06-17 14:12:46 -0400
committerAndreas Kling <kling@serenityos.org>2021-06-19 22:06:45 +0200
commit87bd69559fd5c63564fee853a5d93d4acc0023c8 (patch)
tree0940041ddbd930a6f6464eed3f32dea22a44f868 /Userland/Libraries/LibSQL/Database.h
parent267eb3b329e730d38261128f06a0823f50a7567e (diff)
downloadserenity-87bd69559fd5c63564fee853a5d93d4acc0023c8.zip
LibSQL: Database layer
This patch implements the beginnings of a database API allowing for the creation of tables, inserting rows in those tables, and retrieving those rows.
Diffstat (limited to 'Userland/Libraries/LibSQL/Database.h')
-rw-r--r--Userland/Libraries/LibSQL/Database.h54
1 files changed, 54 insertions, 0 deletions
diff --git a/Userland/Libraries/LibSQL/Database.h b/Userland/Libraries/LibSQL/Database.h
new file mode 100644
index 0000000000..5603dcc2e1
--- /dev/null
+++ b/Userland/Libraries/LibSQL/Database.h
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2021, Jan de Visser <jan@de-visser.net>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#pragma once
+
+#include <AK/RefPtr.h>
+#include <AK/String.h>
+#include <LibCore/Object.h>
+#include <LibSQL/Forward.h>
+#include <LibSQL/Heap.h>
+
+namespace SQL {
+
+/**
+ * A Database object logically connects a Heap with the SQL data we want
+ * to store in it. It has BTree pointers for B-Trees holding the definitions
+ * of tables, columns, indexes, and other SQL objects.
+ */
+class Database : public Core::Object {
+ C_OBJECT(Database);
+
+public:
+ explicit Database(String);
+ ~Database() override = default;
+
+ void commit() { m_heap->flush(); }
+
+ void add_schema(SchemaDef const&);
+ static Key get_schema_key(String const&);
+ RefPtr<SchemaDef> get_schema(String const&);
+
+ void add_table(TableDef& table);
+ static Key get_table_key(String const&, String const&);
+ RefPtr<TableDef> get_table(String const&, String const&);
+
+ Vector<Row> select_all(TableDef const&);
+ Vector<Row> match(TableDef const&, Key const&);
+ bool insert(Row&);
+ bool update(Row&);
+
+private:
+ RefPtr<Heap> m_heap;
+ RefPtr<BTree> m_schemas;
+ RefPtr<BTree> m_tables;
+ RefPtr<BTree> m_table_columns;
+
+ HashMap<u32, RefPtr<SchemaDef>> m_schema_cache;
+ HashMap<u32, RefPtr<TableDef>> m_table_cache;
+};
+
+}