summaryrefslogtreecommitdiff
path: root/modules/database/sql.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'modules/database/sql.cpp')
-rw-r--r--modules/database/sql.cpp30
1 files changed, 23 insertions, 7 deletions
diff --git a/modules/database/sql.cpp b/modules/database/sql.cpp
index f88fc35d7..50447c005 100644
--- a/modules/database/sql.cpp
+++ b/modules/database/sql.cpp
@@ -344,16 +344,32 @@ class DBSQL : public Module, public Pipe
EventReturn OnSerializeHasField(Serialize::Object *object, Serialize::FieldBase *field) override
{
- SQL::Result::Value v;
+ if (field->object)
+ {
+ Anope::string type;
+ Serialize::ID id;
- if (!GetValue(object, field, v))
- return EVENT_CONTINUE;
+ EventReturn er = OnSerializeGetSerializable(object, field, type, id);
- if (v.null)
- return EVENT_CONTINUE;
+ if (er != EVENT_ALLOW)
+ return EVENT_CONTINUE;
- field->UnserializeFromString(object, v.value);
- return EVENT_STOP;
+ field->UnserializeFromString(object, type + ":" + stringify(id));
+ return EVENT_STOP;
+ }
+ else
+ {
+ SQL::Result::Value v;
+
+ if (!GetValue(object, field, v))
+ return EVENT_CONTINUE;
+
+ if (v.null)
+ return EVENT_CONTINUE;
+
+ field->UnserializeFromString(object, v.value);
+ return EVENT_STOP;
+ }
}
EventReturn OnSerializableGetId(Serialize::ID &id) override