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 }