diff --git a/Userland/Libraries/LibSQL/Database.cpp b/Userland/Libraries/LibSQL/Database.cpp index f2762607c5..cb98e39b26 100644 --- a/Userland/Libraries/LibSQL/Database.cpp +++ b/Userland/Libraries/LibSQL/Database.cpp @@ -199,25 +199,25 @@ ErrorOr> Database::match(TableDef const& table, Key const& key) ErrorOr Database::insert(Row& row) { - VERIFY(m_table_cache.get(row.table()->key().hash()).has_value()); + VERIFY(m_table_cache.get(row.table().key().hash()).has_value()); // TODO Check constraints row.set_pointer(m_heap->new_record_pointer()); - row.set_next_pointer(row.table()->pointer()); + row.set_next_pointer(row.table().pointer()); TRY(update(row)); // TODO update indexes defined on table. - auto table_key = row.table()->key(); + auto table_key = row.table().key(); table_key.set_pointer(row.pointer()); VERIFY(m_tables->update_key_pointer(table_key)); - row.table()->set_pointer(row.pointer()); + row.table().set_pointer(row.pointer()); return {}; } ErrorOr Database::update(Row& tuple) { - VERIFY(m_table_cache.get(tuple.table()->key().hash()).has_value()); + VERIFY(m_table_cache.get(tuple.table().key().hash()).has_value()); // TODO Check constraints m_serializer.reset(); m_serializer.serialize_and_write(tuple); diff --git a/Userland/Libraries/LibSQL/Row.cpp b/Userland/Libraries/LibSQL/Row.cpp index f448e805eb..ec92df2d95 100644 --- a/Userland/Libraries/LibSQL/Row.cpp +++ b/Userland/Libraries/LibSQL/Row.cpp @@ -9,9 +9,9 @@ namespace SQL { -Row::Row(RefPtr table, u32 pointer) +Row::Row(NonnullRefPtr table, u32 pointer) : Tuple(table->to_tuple_descriptor()) - , m_table(table) + , m_table(move(table)) { set_pointer(pointer); } diff --git a/Userland/Libraries/LibSQL/Row.h b/Userland/Libraries/LibSQL/Row.h index c63bd7e11d..61b3feb3b4 100644 --- a/Userland/Libraries/LibSQL/Row.h +++ b/Userland/Libraries/LibSQL/Row.h @@ -6,8 +6,7 @@ #pragma once -#include -#include +#include #include #include #include @@ -26,19 +25,21 @@ namespace SQL { */ class Row : public Tuple { public: - explicit Row(RefPtr, u32 pointer = 0); + explicit Row(NonnullRefPtr, u32 pointer = 0); virtual ~Row() override = default; [[nodiscard]] u32 next_pointer() const { return m_next_pointer; } void set_next_pointer(u32 ptr) { m_next_pointer = ptr; } - RefPtr table() const { return m_table; } + TableDef const& table() const { return *m_table; } + TableDef& table() { return *m_table; } + [[nodiscard]] virtual size_t length() const override { return Tuple::length() + sizeof(u32); } virtual void serialize(Serializer&) const override; virtual void deserialize(Serializer&) override; private: - RefPtr m_table; + NonnullRefPtr m_table; u32 m_next_pointer { 0 }; };