From a2047d559972df3e3a1e423827c449accbe1ddd1 Mon Sep 17 00:00:00 2001 From: Adam Date: Fri, 25 Nov 2016 18:03:38 -0500 Subject: sqlite: reference id of referenced type if available instead of objects --- include/serialize.h | 10 ++++++++++ modules/sqlite.cpp | 3 ++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/include/serialize.h b/include/serialize.h index f10563507..cec6d225d 100644 --- a/include/serialize.h +++ b/include/serialize.h @@ -98,6 +98,8 @@ class CoreExport Serialize::Object : public Extensible, public virtual Base std::vector GetEdges(TypeBase *); public: + static constexpr const char *NAME = "object"; + Object(TypeBase *type); Object(TypeBase *type, ID); @@ -393,6 +395,8 @@ class Serialize::FieldBase : public Service /** Unset this field on the given object */ virtual void UnsetS(Object *) anope_abstract; + + virtual Anope::string GetTypeName() { return ""; } }; template @@ -805,6 +809,12 @@ class Serialize::ObjectField : public CommonFieldBase return anope_dynamic_static_cast(t->Require(id)); } + + Anope::string GetTypeName() override + { + const char* const name = std::remove_pointer::type::NAME; + return name; + } }; template diff --git a/modules/sqlite.cpp b/modules/sqlite.cpp index b1b462357..e4893b1ce 100644 --- a/modules/sqlite.cpp +++ b/modules/sqlite.cpp @@ -303,7 +303,8 @@ std::vector SQLiteService::CreateTable(const Anope::string &prefix, Seria if (field->object) { - query += " REFERENCES " + prefix + "objects(id) ON DELETE "; + Anope::string refname = field->GetTypeName() == Serialize::Object::NAME ? "objects" : field->GetTypeName(); + query += " REFERENCES " + prefix + refname + "(id) ON DELETE "; if (field->depends) { -- cgit