1 /** 2 Copyright: © 2015 Chris Barnes 3 License: The MIT License, see license file 4 Authors: Chris Barnes 5 */ 6 module quill.variant_mapper; 7 8 import ddbc.all; 9 import std.datetime; 10 import std.variant; 11 import quill.mapper_base; 12 13 /** 14 Maps Variant parameters to a PreparedStatement 15 16 See_also: 17 quill.database 18 */ 19 class VariantMapper : MapperBase 20 { 21 this(PreparedStatement statement) 22 { 23 super(statement); 24 } 25 26 /** 27 Maps an array of Variants into a PreparedStatement 28 29 Params: 30 parameters = an array of variants where the index matches the index of the parameter 31 */ 32 void map(Variant[] parameters) 33 { 34 foreach(int i, parameter;parameters) 35 { 36 this.mapType(i + 1, parameter); 37 } 38 } 39 40 private: 41 /** 42 Sets a parameter on the PreparedStatement if it is supported 43 */ 44 void mapType(int parameterIndex, Variant value) 45 { 46 if(value.convertsTo!(float)) 47 { 48 this.statement.setFloat(parameterIndex, value.get!(float)); 49 } 50 else if(value.convertsTo!(double)) 51 { 52 this.statement.setDouble(parameterIndex, value.get!(double)); 53 } 54 else if(value.convertsTo!(bool)) 55 { 56 this.statement.setBoolean(parameterIndex, value.get!(bool)); 57 } 58 else if(value.convertsTo!(long)) 59 { 60 this.statement.setLong(parameterIndex, value.get!(long)); 61 } 62 else if(value.convertsTo!(ulong)) 63 { 64 this.statement.setUlong(parameterIndex, value.get!(ulong)); 65 } 66 else if(value.convertsTo!(int)) 67 { 68 this.statement.setInt(parameterIndex, value.get!(int)); 69 } 70 else if(value.convertsTo!(uint)) 71 { 72 this.statement.setUint(parameterIndex, value.get!(uint)); 73 } 74 else if(value.convertsTo!(short)) 75 { 76 this.statement.setShort(parameterIndex, value.get!(short)); 77 } 78 else if(value.convertsTo!(ushort)) 79 { 80 this.statement.setUshort(parameterIndex, value.get!(ushort)); 81 } 82 else if(value.convertsTo!(byte)) 83 { 84 this.statement.setByte(parameterIndex, value.get!(byte)); 85 } 86 else if(value.convertsTo!(ubyte)) 87 { 88 this.statement.setUbyte(parameterIndex, value.get!(ubyte)); 89 } 90 else if(value.convertsTo!(byte[])) 91 { 92 this.statement.setBytes(parameterIndex, value.get!(byte[])); 93 } 94 else if(value.convertsTo!(ubyte[])) 95 { 96 this.statement.setUbytes(parameterIndex, value.get!(ubyte[])); 97 } 98 else if(value.convertsTo!(string)) 99 { 100 this.statement.setString(parameterIndex, value.get!(string)); 101 } 102 else if(value.convertsTo!(DateTime)) 103 { 104 this.statement.setDateTime(parameterIndex, value.get!(DateTime)); 105 } 106 else 107 { 108 this.statement.setNull(parameterIndex); 109 } 110 } 111 }