Dreamine.Database.MySql
1.0.1
Dreamine.Database.MySql 데이터베이스 기능과 관련 API를 제공합니다.
Toggle main menu visibility
로딩중...
검색중...
일치하는것 없음
MySqlDatabaseProvider.cs
이 파일의 문서화 페이지로 가기
1
using
Dreamine.Database.Abstractions;
2
using
Dreamine.Database.Core.Mapping;
3
using
Dreamine.Database.Core.Providers;
4
using
MySqlConnector;
5
using
System.Data;
6
7
namespace
Dreamine.Database.MySql
;
8
17
public
sealed
class
MySqlDatabaseProvider
: DatabaseProviderBase
18
{
51
public
MySqlDatabaseProvider
(
string
connectionString)
52
: base(connectionString)
53
{
54
}
55
64
public
override
DatabaseProviderKind
Kind
=> DatabaseProviderKind.MySql;
65
74
public
override
void
EnsureDatabaseExists
()
75
{
76
var builder =
new
MySqlConnectionStringBuilder(ConnectionString);
77
var databaseName = builder.Database;
78
if
(
string
.IsNullOrWhiteSpace(databaseName))
79
{
80
base.EnsureDatabaseExists();
81
return
;
82
}
83
84
builder.Database =
string
.Empty;
85
86
using
var connection =
new
MySqlConnection(builder.ConnectionString);
87
connection.Open();
88
89
using
var command = connection.CreateCommand();
90
command.CommandText = $
"CREATE DATABASE IF NOT EXISTS {QuoteIdentifier(databaseName)}"
;
91
command.ExecuteNonQuery();
92
}
93
118
public
override
async Task
EnsureDatabaseExistsAsync
(CancellationToken cancellationToken =
default
)
119
{
120
var builder =
new
MySqlConnectionStringBuilder(ConnectionString);
121
var databaseName = builder.Database;
122
if
(
string
.IsNullOrWhiteSpace(databaseName))
123
{
124
await base.EnsureDatabaseExistsAsync(cancellationToken).ConfigureAwait(
false
);
125
return
;
126
}
127
128
builder.Database =
string
.Empty;
129
130
await
using
var connection =
new
MySqlConnection(builder.ConnectionString);
131
await connection.OpenAsync(cancellationToken).ConfigureAwait(
false
);
132
133
await
using
var command = connection.CreateCommand();
134
command.CommandText = $
"CREATE DATABASE IF NOT EXISTS {QuoteIdentifier(databaseName)}"
;
135
await command.ExecuteNonQueryAsync(cancellationToken).ConfigureAwait(
false
);
136
}
137
178
public
override
bool
IsTableExists
(
string
tableName)
179
{
180
ArgumentException.ThrowIfNullOrWhiteSpace(tableName);
181
182
const
string
sql =
""
"
183
SELECT COUNT(1)
184
FROM information_schema.tables
185
WHERE table_schema = DATABASE()
186
AND table_name = @TableName
187
"
""
;
188
189
return
ExecuteScalar<long>(sql,
new
{ TableName = tableName }) > 0;
190
}
191
240
public
override
async Task<bool>
IsTableExistsAsync
(
241
string
tableName,
242
CancellationToken cancellationToken =
default
)
243
{
244
ArgumentException.ThrowIfNullOrWhiteSpace(tableName);
245
246
const
string
sql =
""
"
247
SELECT COUNT(1)
248
FROM information_schema.tables
249
WHERE table_schema = DATABASE()
250
AND table_name = @TableName
251
"
""
;
252
253
var count = await ExecuteScalarAsync<long>(sql,
new
{ TableName = tableName }, cancellationToken)
254
.ConfigureAwait(
false
);
255
return
count > 0;
256
}
257
274
protected
override
IDbConnection
CreateConnection
()
275
{
276
return
new
MySqlConnection(ConnectionString);
277
}
278
319
protected
override
string
QuoteIdentifier
(
string
identifier)
320
{
321
ArgumentException.ThrowIfNullOrWhiteSpace(identifier);
322
return
"`"
+ identifier.Replace(
"`"
,
"``"
, StringComparison.Ordinal) +
"`"
;
323
}
324
349
protected
override
string
BuildCreateTableSql
(DatabaseEntityMap map)
350
{
351
var columns = map.Properties.Select(property =>
352
{
353
var sql = $
"{QuoteIdentifier(property.ColumnName)} {GetSqlType(property)}"
;
354
if
(property.IsKey)
355
{
356
sql += property.IsGenerated ?
" AUTO_INCREMENT PRIMARY KEY"
:
" PRIMARY KEY"
;
357
}
358
359
return
sql;
360
});
361
362
return
$
"CREATE TABLE IF NOT EXISTS {QuoteIdentifier(map.TableName)} ({string.Join("
,
", columns)})"
;
363
}
364
389
protected
override
string
GetSqlType
(DatabasePropertyMap property)
390
{
391
var type =
property
.PropertyType;
392
393
if
(type == typeof(
bool
))
394
{
395
return
"TINYINT(1)"
;
396
}
397
398
if
(type == typeof(
byte
) || type == typeof(
short
))
399
{
400
return
"SMALLINT"
;
401
}
402
403
if
(type == typeof(
int
))
404
{
405
return
"INT"
;
406
}
407
408
if
(type == typeof(
long
))
409
{
410
return
"BIGINT"
;
411
}
412
413
if
(type == typeof(
float
) || type == typeof(
double
))
414
{
415
return
"DOUBLE"
;
416
}
417
418
if
(type == typeof(decimal))
419
{
420
return
"DECIMAL(18, 4)"
;
421
}
422
423
if
(type == typeof(DateTime) || type == typeof(DateTimeOffset))
424
{
425
return
"DATETIME"
;
426
}
427
428
if
(type == typeof(
byte
[]))
429
{
430
return
"BLOB"
;
431
}
432
433
return
"TEXT"
;
434
}
435
}
Dreamine.Database.MySql
Definition
MySqlDatabaseProvider.cs:7
Dreamine.Database.MySql.MySqlDatabaseProvider.BuildCreateTableSql
override string BuildCreateTableSql(DatabaseEntityMap map)
Definition
MySqlDatabaseProvider.cs:349
Dreamine.Database.MySql.MySqlDatabaseProvider.Kind
override DatabaseProviderKind Kind
Definition
MySqlDatabaseProvider.cs:64
Dreamine.Database.MySql.MySqlDatabaseProvider.MySqlDatabaseProvider
MySqlDatabaseProvider(string connectionString)
Definition
MySqlDatabaseProvider.cs:51
Dreamine.Database.MySql.MySqlDatabaseProvider.QuoteIdentifier
override string QuoteIdentifier(string identifier)
Definition
MySqlDatabaseProvider.cs:319
Dreamine.Database.MySql.MySqlDatabaseProvider.EnsureDatabaseExists
override void EnsureDatabaseExists()
Definition
MySqlDatabaseProvider.cs:74
Dreamine.Database.MySql.MySqlDatabaseProvider.GetSqlType
override string GetSqlType(DatabasePropertyMap property)
Definition
MySqlDatabaseProvider.cs:389
Dreamine.Database.MySql.MySqlDatabaseProvider.CreateConnection
override IDbConnection CreateConnection()
Definition
MySqlDatabaseProvider.cs:274
Dreamine.Database.MySql.MySqlDatabaseProvider.IsTableExists
override bool IsTableExists(string tableName)
Definition
MySqlDatabaseProvider.cs:178
Dreamine.Database.MySql.MySqlDatabaseProvider.IsTableExistsAsync
override async Task< bool > IsTableExistsAsync(string tableName, CancellationToken cancellationToken=default)
Definition
MySqlDatabaseProvider.cs:240
Dreamine.Database.MySql.MySqlDatabaseProvider.EnsureDatabaseExistsAsync
override async Task EnsureDatabaseExistsAsync(CancellationToken cancellationToken=default)
Definition
MySqlDatabaseProvider.cs:118
MySqlDatabaseProvider.cs
다음에 의해 생성됨 :
1.17.0