summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/serialize.h10
-rw-r--r--modules/sqlite.cpp3
2 files changed, 12 insertions, 1 deletions
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<Edge> 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<typename T>
@@ -805,6 +809,12 @@ class Serialize::ObjectField : public CommonFieldBase<TypeImpl, T>
return anope_dynamic_static_cast<T>(t->Require(id));
}
+
+ Anope::string GetTypeName() override
+ {
+ const char* const name = std::remove_pointer<T>::type::NAME;
+ return name;
+ }
};
template<typename T>
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<Query> 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)
{