diff options
author | Jan de Visser <jan@de-visser.net> | 2021-06-17 14:12:46 -0400 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2021-06-19 22:06:45 +0200 |
commit | 87bd69559fd5c63564fee853a5d93d4acc0023c8 (patch) | |
tree | 0940041ddbd930a6f6464eed3f32dea22a44f868 /Userland/Libraries/LibSQL/Database.h | |
parent | 267eb3b329e730d38261128f06a0823f50a7567e (diff) | |
download | serenity-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.h | 54 |
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; +}; + +} |