From 9d89b64d59c94651922ec97a671eff347f2f64de Mon Sep 17 00:00:00 2001 From: Ben Wiederhake Date: Thu, 30 Sep 2021 22:57:35 +0200 Subject: [PATCH] LibSQL: Resolve cyclic dependency Previously, class SQL::Key depends on def class SQL::IndexDef (because inline def index()) depends on def class SQL::KeyPartDef (inline def key_definition()) depends on def class SQL::ColumnDef (because base class) depends on def class SQL::Relation (because base class) depends on def class SQL::Key (because inline def hash()). This hasn't caused any problems so far because Meta.h happened to be always included after Key.h (in part due to alphabetical ordering). However, a compilation that for example only contains #include would fail to compile. This patch resolves this issue by pushing the inline definition of SQL::Relation::hash() into a different file. Yes, this might reduce performance marginally, but this gets it to compile again. --- Userland/Libraries/LibSQL/Key.h | 1 + Userland/Libraries/LibSQL/Meta.cpp | 5 +++++ Userland/Libraries/LibSQL/Meta.h | 4 ++-- Userland/Libraries/LibSQL/Row.h | 1 + 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/Userland/Libraries/LibSQL/Key.h b/Userland/Libraries/LibSQL/Key.h index e05b017631..e9a3eb1a74 100644 --- a/Userland/Libraries/LibSQL/Key.h +++ b/Userland/Libraries/LibSQL/Key.h @@ -8,6 +8,7 @@ #include #include +#include #include namespace SQL { diff --git a/Userland/Libraries/LibSQL/Meta.cpp b/Userland/Libraries/LibSQL/Meta.cpp index 09fafad9c8..65859f0e76 100644 --- a/Userland/Libraries/LibSQL/Meta.cpp +++ b/Userland/Libraries/LibSQL/Meta.cpp @@ -10,6 +10,11 @@ namespace SQL { +u32 Relation::hash() const +{ + return key().hash(); +} + SchemaDef::SchemaDef(String name) : Relation(move(name)) { diff --git a/Userland/Libraries/LibSQL/Meta.h b/Userland/Libraries/LibSQL/Meta.h index 77fdfe0bd3..ec8cd367f7 100644 --- a/Userland/Libraries/LibSQL/Meta.h +++ b/Userland/Libraries/LibSQL/Meta.h @@ -14,8 +14,8 @@ #include #include #include -#include #include +#include namespace SQL { @@ -28,7 +28,7 @@ class Relation : public Core::Object { C_OBJECT_ABSTRACT(Relation); public: - u32 hash() const { return key().hash(); } + u32 hash() const; u32 pointer() const { return m_pointer; } void set_pointer(u32 pointer) { m_pointer = pointer; } ~Relation() override = default; diff --git a/Userland/Libraries/LibSQL/Row.h b/Userland/Libraries/LibSQL/Row.h index 25c6a8cab7..117c7ed613 100644 --- a/Userland/Libraries/LibSQL/Row.h +++ b/Userland/Libraries/LibSQL/Row.h @@ -10,6 +10,7 @@ #include #include #include +#include #include namespace SQL {