/* * Copyright (c) 2021, Jan de Visser * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include 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: ~Database() override = default; void commit() { m_heap->flush(); } void add_schema(SchemaDef const&); static Key get_schema_key(String const&); RefPtr get_schema(String const&); void add_table(TableDef& table); static Key get_table_key(String const&, String const&); RefPtr get_table(String const&, String const&); Vector select_all(TableDef const&); Vector match(TableDef const&, Key const&); bool insert(Row&); bool update(Row&); private: explicit Database(String); NonnullRefPtr m_heap; Serializer m_serializer; RefPtr m_schemas; RefPtr m_tables; RefPtr m_table_columns; HashMap> m_schema_cache; HashMap> m_table_cache; }; }