1
1
using System ;
2
2
using System . Collections . Generic ;
3
- using System . Data ;
3
+ using System . Data ;
4
4
using System . Text ;
5
- using MySql . Data . MySqlClient ;
6
- using ServiceStack . Common . Extensions ;
7
- using ServiceStack . OrmLite . MySql . DataAnnotations ;
8
-
5
+ using MySql . Data . MySqlClient ;
6
+ using ServiceStack . Common . Extensions ;
7
+ using ServiceStack . OrmLite . MySql . DataAnnotations ;
8
+
9
9
namespace ServiceStack . OrmLite . MySql
10
- {
10
+ {
11
11
public class MySqlDialectProvider : OrmLiteDialectProviderBase < MySqlDialectProvider >
12
12
{
13
- public static MySqlDialectProvider Instance = new MySqlDialectProvider ( ) ;
14
-
15
- private const string TextColumnDefinition = "TEXT" ;
16
-
13
+ public static MySqlDialectProvider Instance = new MySqlDialectProvider ( ) ;
14
+
15
+ private const string TextColumnDefinition = "TEXT" ;
16
+
17
17
private MySqlDialectProvider ( )
18
18
{
19
19
base . AutoIncrementDefinition = "AUTO_INCREMENT" ;
20
20
base . IntColumnDefinition = "int(11)" ;
21
21
base . BoolColumnDefinition = "tinyint(1)" ;
22
22
base . TimeColumnDefinition = "time" ;
23
23
base . DecimalColumnDefinition = "decimal(38,6)" ;
24
- base . GuidColumnDefinition = "char(32)" ;
24
+ base . GuidColumnDefinition = "char(32)" ;
25
25
base . DefaultStringLength = 255 ;
26
- base . InitColumnTypeMap ( ) ;
27
- base . DefaultValueFormat = " DEFAULT '{0}'" ;
26
+ base . InitColumnTypeMap ( ) ;
27
+ base . DefaultValueFormat = " DEFAULT '{0}'" ;
28
28
}
29
-
30
- public override string GetQuotedParam ( string paramValue )
31
- {
32
- return "'" + paramValue . Replace ( "\\ " , "\\ \\ " ) . Replace ( "'" , @"\'" ) + "'" ;
29
+
30
+ public override string GetQuotedParam ( string paramValue )
31
+ {
32
+ return "'" + paramValue . Replace ( "\\ " , "\\ \\ " ) . Replace ( "'" , @"\'" ) + "'" ;
33
33
}
34
34
35
35
public override IDbConnection CreateConnection ( string connectionString , Dictionary < string , string > options )
@@ -43,12 +43,12 @@ public override string GetQuotedValue(object value, Type fieldType)
43
43
44
44
if ( fieldType == typeof ( DateTime ) )
45
45
{
46
- var dateValue = ( DateTime ) value ;
46
+ var dateValue = ( DateTime ) value ;
47
47
/*
48
48
* ms not contained in format. MySql ignores ms part anyway
49
49
*
50
50
* for more details see: http://dev.mysql.com/doc/refman/5.1/en/datetime.html
51
- */
51
+ */
52
52
const string dateTimeFormat = "yyyy-MM-dd HH:mm:ss" ;
53
53
54
54
return base . GetQuotedValue ( dateValue . ToString ( dateTimeFormat ) , typeof ( string ) ) ;
@@ -59,41 +59,49 @@ public override string GetQuotedValue(object value, Type fieldType)
59
59
return base . GetQuotedValue ( guidValue . ToString ( "N" ) , typeof ( string ) ) ;
60
60
}
61
61
62
+ if ( fieldType == typeof ( byte [ ] ) )
63
+ {
64
+ return "0x" + BitConverter . ToString ( ( byte [ ] ) value ) . Replace ( "-" , "" ) ;
65
+ }
66
+
62
67
return base . GetQuotedValue ( value , fieldType ) ;
63
68
}
64
69
65
70
public override object ConvertDbValue ( object value , Type type )
66
71
{
67
72
if ( value == null || value is DBNull ) return null ;
68
73
69
- if ( type == typeof ( bool ) )
70
- {
71
- return
72
- value is bool
73
- ? value
74
+ if ( type == typeof ( bool ) )
75
+ {
76
+ return
77
+ value is bool
78
+ ? value
74
79
: ( int . Parse ( value . ToString ( ) ) != 0 ) ; //backward compatibility (prev version mapped bool as bit(1))
75
80
}
76
81
82
+ if ( type == typeof ( byte [ ] ) )
83
+ return value ;
84
+
77
85
return base . ConvertDbValue ( value , type ) ;
78
86
}
79
87
80
88
public override string GetQuotedTableName ( ModelDefinition modelDef )
81
89
{
82
90
return string . Format ( "`{0}`" , NamingStrategy . GetTableName ( modelDef . ModelName ) ) ;
83
- }
91
+ }
84
92
85
93
public override string GetQuotedTableName ( string tableName )
86
94
{
87
95
return string . Format ( "`{0}`" , NamingStrategy . GetTableName ( tableName ) ) ;
88
96
}
89
-
90
- public override string GetQuotedColumnName ( string columnName )
91
- {
92
- return string . Format ( "`{0}`" , NamingStrategy . GetColumnName ( columnName ) ) ;
97
+
98
+ public override string GetQuotedColumnName ( string columnName )
99
+ {
100
+ return string . Format ( "`{0}`" , NamingStrategy . GetColumnName ( columnName ) ) ;
93
101
}
94
102
95
103
public override string GetQuotedName ( string name )
96
- {
104
+ {
97
105
return string . Format ( "`{0}`" , name ) ;
98
106
}
99
107
@@ -108,78 +116,78 @@ public override long GetLastInsertId(IDbCommand command)
108
116
public override SqlExpressionVisitor < T > ExpressionVisitor < T > ( )
109
117
{
110
118
return new MySqlExpressionVisitor < T > ( ) ;
111
- }
112
-
113
- public override bool DoesTableExist ( IDbCommand dbCmd , string tableName )
114
- {
115
- //Same as SQL Server apparently?
119
+ }
120
+
121
+ public override bool DoesTableExist ( IDbCommand dbCmd , string tableName )
122
+ {
123
+ //Same as SQL Server apparently?
116
124
var sql = ( "SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES " +
117
125
"WHERE TABLE_NAME = {0} AND " +
118
- "TABLE_SCHEMA = {1}" )
119
- . SqlFormat ( tableName , dbCmd . Connection . Database ) ;
120
-
121
- //if (!string.IsNullOrEmpty(schemaName))
122
- // sql += " AND TABLE_SCHEMA = {0}".SqlFormat(schemaName);
123
-
124
- dbCmd . CommandText = sql ;
125
- var result = dbCmd . GetLongScalar ( ) ;
126
-
127
- return result > 0 ;
128
- }
129
-
130
- public override string ToCreateTableStatement ( Type tableType )
131
- {
132
- var sbColumns = new StringBuilder ( ) ;
133
- var sbConstraints = new StringBuilder ( ) ;
134
-
135
- var modelDef = GetModel ( tableType ) ;
136
- foreach ( var fieldDef in modelDef . FieldDefinitions )
137
- {
138
- if ( sbColumns . Length != 0 ) sbColumns . Append ( ", \n " ) ;
139
-
140
- sbColumns . Append ( GetColumnDefinition ( fieldDef ) ) ;
141
-
142
- if ( fieldDef . ForeignKey == null ) continue ;
143
-
144
- var refModelDef = GetModel ( fieldDef . ForeignKey . ReferenceType ) ;
145
- sbConstraints . AppendFormat (
146
- ", \n \n CONSTRAINT {0} FOREIGN KEY ({1}) REFERENCES {2} ({3})" ,
147
- GetQuotedName ( fieldDef . ForeignKey . GetForeignKeyName ( modelDef , refModelDef , NamingStrategy , fieldDef ) ) ,
148
- GetQuotedColumnName ( fieldDef . FieldName ) ,
149
- GetQuotedTableName ( refModelDef ) ,
150
- GetQuotedColumnName ( refModelDef . PrimaryKey . FieldName ) ) ;
151
-
152
- if ( ! string . IsNullOrEmpty ( fieldDef . ForeignKey . OnDelete ) )
153
- sbConstraints . AppendFormat ( " ON DELETE {0}" , fieldDef . ForeignKey . OnDelete ) ;
154
-
155
- if ( ! string . IsNullOrEmpty ( fieldDef . ForeignKey . OnUpdate ) )
156
- sbConstraints . AppendFormat ( " ON UPDATE {0}" , fieldDef . ForeignKey . OnUpdate ) ;
157
- }
158
- var sql = new StringBuilder ( string . Format (
159
- "CREATE TABLE {0} \n (\n {1}{2} \n ); \n " , GetQuotedTableName ( modelDef ) , sbColumns , sbConstraints ) ) ;
160
-
161
- return sql . ToString ( ) ;
162
- }
163
-
164
- public string GetColumnDefinition ( FieldDefinition fieldDefinition )
165
- {
166
- if ( fieldDefinition . PropertyInfo . FirstAttribute < TextAttribute > ( ) != null )
167
- {
168
- var sql = new StringBuilder ( ) ;
169
- sql . AppendFormat ( "{0} {1}" , GetQuotedColumnName ( fieldDefinition . FieldName ) , TextColumnDefinition ) ;
170
- sql . Append ( fieldDefinition . IsNullable ? " NULL" : " NOT NULL" ) ;
171
- return sql . ToString ( ) ;
172
- }
173
-
174
- return base . GetColumnDefinition (
175
- fieldDefinition . FieldName ,
176
- fieldDefinition . FieldType ,
177
- fieldDefinition . IsPrimaryKey ,
178
- fieldDefinition . AutoIncrement ,
179
- fieldDefinition . IsNullable ,
180
- fieldDefinition . FieldLength ,
181
- null ,
182
- fieldDefinition . DefaultValue ) ;
183
- }
126
+ "TABLE_SCHEMA = {1}" )
127
+ . SqlFormat ( tableName , dbCmd . Connection . Database ) ;
128
+
129
+ //if (!string.IsNullOrEmpty(schemaName))
130
+ // sql += " AND TABLE_SCHEMA = {0}".SqlFormat(schemaName);
131
+
132
+ dbCmd . CommandText = sql ;
133
+ var result = dbCmd . GetLongScalar ( ) ;
134
+
135
+ return result > 0 ;
136
+ }
137
+
138
+ public override string ToCreateTableStatement ( Type tableType )
139
+ {
140
+ var sbColumns = new StringBuilder ( ) ;
141
+ var sbConstraints = new StringBuilder ( ) ;
142
+
143
+ var modelDef = GetModel ( tableType ) ;
144
+ foreach ( var fieldDef in modelDef . FieldDefinitions )
145
+ {
146
+ if ( sbColumns . Length != 0 ) sbColumns . Append ( ", \n " ) ;
147
+
148
+ sbColumns . Append ( GetColumnDefinition ( fieldDef ) ) ;
149
+
150
+ if ( fieldDef . ForeignKey == null ) continue ;
151
+
152
+ var refModelDef = GetModel ( fieldDef . ForeignKey . ReferenceType ) ;
153
+ sbConstraints . AppendFormat (
154
+ ", \n \n CONSTRAINT {0} FOREIGN KEY ({1}) REFERENCES {2} ({3})" ,
155
+ GetQuotedName ( fieldDef . ForeignKey . GetForeignKeyName ( modelDef , refModelDef , NamingStrategy , fieldDef ) ) ,
156
+ GetQuotedColumnName ( fieldDef . FieldName ) ,
157
+ GetQuotedTableName ( refModelDef ) ,
158
+ GetQuotedColumnName ( refModelDef . PrimaryKey . FieldName ) ) ;
159
+
160
+ if ( ! string . IsNullOrEmpty ( fieldDef . ForeignKey . OnDelete ) )
161
+ sbConstraints . AppendFormat ( " ON DELETE {0}" , fieldDef . ForeignKey . OnDelete ) ;
162
+
163
+ if ( ! string . IsNullOrEmpty ( fieldDef . ForeignKey . OnUpdate ) )
164
+ sbConstraints . AppendFormat ( " ON UPDATE {0}" , fieldDef . ForeignKey . OnUpdate ) ;
165
+ }
166
+ var sql = new StringBuilder ( string . Format (
167
+ "CREATE TABLE {0} \n (\n {1}{2} \n ); \n " , GetQuotedTableName ( modelDef ) , sbColumns , sbConstraints ) ) ;
168
+
169
+ return sql . ToString ( ) ;
170
+ }
171
+
172
+ public string GetColumnDefinition ( FieldDefinition fieldDefinition )
173
+ {
174
+ if ( fieldDefinition . PropertyInfo . FirstAttribute < TextAttribute > ( ) != null )
175
+ {
176
+ var sql = new StringBuilder ( ) ;
177
+ sql . AppendFormat ( "{0} {1}" , GetQuotedColumnName ( fieldDefinition . FieldName ) , TextColumnDefinition ) ;
178
+ sql . Append ( fieldDefinition . IsNullable ? " NULL" : " NOT NULL" ) ;
179
+ return sql . ToString ( ) ;
180
+ }
181
+
182
+ return base . GetColumnDefinition (
183
+ fieldDefinition . FieldName ,
184
+ fieldDefinition . FieldType ,
185
+ fieldDefinition . IsPrimaryKey ,
186
+ fieldDefinition . AutoIncrement ,
187
+ fieldDefinition . IsNullable ,
188
+ fieldDefinition . FieldLength ,
189
+ null ,
190
+ fieldDefinition . DefaultValue ) ;
191
+ }
184
192
}
185
193
}
0 commit comments