1 /**
2 * Copyright © DiamondMVC 2018
3 * License: MIT (https://github.com/DiamondMVC/Diamond/blob/master/LICENSE)
4 * Author: Jacob Jensen (bausshf)
5 */
6 module diamond.data.mapping.engines.mysql.generators.deletegenerator;
7 
8 import std..string : format;
9 import std.traits : hasUDA, FieldNameTuple;
10 
11 import diamond.core.traits;
12 import diamond.data.mapping.attributes;
13 import diamond.data.mapping.engines.mysql.model : IMySqlModel;
14 
15 package(diamond.data):
16 /**
17 * Generates the delete function for a database model.
18 * Returns:
19 *   The delete function string to use with mixin.
20 */
21 string generateDelete(T : IMySqlModel)()
22 {
23   import models;
24 
25   string s = q{
26     {
27       static const sql = "DELETE FROM `%s` WHERE `%s` = ?";
28       auto params = getParams(1);
29 
30       %s
31 
32       MySql.executeRaw(sql, params);
33     }
34   };
35 
36   string idName;
37   string idParams;
38 
39   {
40     mixin HandleFields!(T, q{{
41       enum hasId = hasUDA!({{fullName}}, DbId);
42 
43       static if (hasId)
44       {
45         idName = "{{fieldName}}";
46         idParams = "params[0] = model.{{fieldName}};";
47       }
48     }});
49     mixin(handleThem());
50 
51     if (!idName)
52     {
53       return "";
54     }
55   }
56 
57   return s.format(T.table, idName, idParams);
58 }