diff options
Diffstat (limited to 'modules/database/sql.cpp')
-rw-r--r-- | modules/database/sql.cpp | 30 |
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 |