diff options
author | Adam <Adam@anope.org> | 2017-02-07 17:20:07 -0500 |
---|---|---|
committer | Adam <Adam@anope.org> | 2017-02-07 17:20:07 -0500 |
commit | 09dca29c8898916772c2a2a6b86b625c812007ed (patch) | |
tree | 1b28f4751feec3ea2b46fa0afb061da7926f3a47 /modules/database/sql.cpp | |
parent | 8b694bc392c36551e428b84454efb81cdbc8bcd3 (diff) |
Normalize databases by not allowing generic Object references
Remove redis database support
Diffstat (limited to 'modules/database/sql.cpp')
-rw-r--r-- | modules/database/sql.cpp | 32 |
1 files changed, 14 insertions, 18 deletions
diff --git a/modules/database/sql.cpp b/modules/database/sql.cpp index 00c45a4bc..bd5a96b90 100644 --- a/modules/database/sql.cpp +++ b/modules/database/sql.cpp @@ -157,14 +157,12 @@ class DBSQL : public Module, public Pipe { for (Serialize::FieldBase *field : type->GetFields()) { - if (field->is_object) + if (field->is_object && object->GetSerializableType()->GetName() == field->GetTypeName()) { Anope::string table = prefix + type->GetName(); - Query query = "SELECT " + table + ".id FROM " + table + - " INNER JOIN " + prefix + "objects AS o ON " + - table + "." + field->serialize_name + " = o.id " - "WHERE o.id = @id@"; + Query query = "SELECT id FROM " + table + + " WHERE " + field->serialize_name + " = @id@"; query.SetValue("id", object->id, false); @@ -234,16 +232,15 @@ class DBSQL : public Module, public Pipe { StartTransaction(); - Query query = "SELECT `" + field->serialize_name + "`,j1.type AS " + field->serialize_name + "_type FROM `" + prefix + object->GetSerializableType()->GetName() + "` " - "JOIN `" + prefix + "objects` AS j1 ON " + prefix + object->GetSerializableType()->GetName() + "." + field->serialize_name + " = j1.id " - "WHERE " + prefix + object->GetSerializableType()->GetName() + ".id = @id@"; + Query query = "SELECT `" + field->serialize_name + "` FROM `" + prefix + object->GetSerializableType()->GetName() + "` " + "WHERE id = @id@"; query.SetValue("id", object->id, false); Result res = Run(query); if (res.Rows() == 0) return EVENT_CONTINUE; - type = res.Get(0, field->serialize_name + "_type"); + type = field->GetTypeName(); try { value = convertTo<Serialize::ID>(res.Get(0, field->serialize_name)); @@ -350,32 +347,31 @@ class DBSQL : public Module, public Pipe } } - EventReturn OnSerializableGetId(Serialize::ID &id) override + EventReturn OnSerializableGetId(Serialize::TypeBase *type, Serialize::ID &id) override { if (!SQL) return EVENT_CONTINUE; StartTransaction(); - id = SQL->GetID(prefix); + for (Query &q : SQL->CreateTable(prefix, type)) + Run(q); + + id = SQL->GetID(prefix, type->GetName()); return EVENT_ALLOW; } void OnSerializableCreate(Serialize::Object *object) override { - StartTransaction(); - - Query q = Query("INSERT INTO `" + prefix + "objects` (`id`,`type`) VALUES (@id@, @type@)"); - q.SetValue("id", object->id, false); - q.SetValue("type", object->GetSerializableType()->GetName()); - Run(q); } void OnSerializableDelete(Serialize::Object *object) override { StartTransaction(); - Query query("DELETE FROM `" + prefix + "objects` WHERE `id` = " + stringify(object->id)); + Serialize::TypeBase *type = object->GetSerializableType(); + + Query query("DELETE FROM `" + prefix + type->GetName() + "` WHERE `id` = " + stringify(object->id)); Run(query); } }; |