50 lines
1.6 KiB
C#
50 lines
1.6 KiB
C#
using System.Data;
|
|
using MesETL.Shared.Helper;
|
|
using MySqlConnector;
|
|
|
|
namespace Mesdb.Cli.Schema;
|
|
|
|
public class Database
|
|
{
|
|
public static async Task<Table[]> FetchTableAsync(string dbName, string connStr)
|
|
{
|
|
var tables = await DatabaseHelper.QueryTableAsync(connStr,
|
|
$"""
|
|
SELECT TABLE_NAME FROM information_schema.`TABLES` WHERE TABLE_SCHEMA = '{dbName}';
|
|
""");
|
|
return tables.Tables[0].Rows.Cast<DataRow>().Select(row => new Table{Name = row[0].ToString()!}).ToArray();
|
|
}
|
|
|
|
|
|
public string Name { get; }
|
|
public string ConnectionString { get; }
|
|
public IReadOnlyList<Table> Tables { get; }
|
|
|
|
public Database(string name, string connStr)
|
|
{
|
|
var trueConnStr = new MySqlConnectionStringBuilder(connStr)
|
|
{
|
|
Database = name
|
|
}.ConnectionString;
|
|
|
|
var tables = FetchTableAsync(name, trueConnStr).Result;
|
|
Name = name;
|
|
ConnectionString = trueConnStr;
|
|
Tables = tables;
|
|
}
|
|
|
|
public Task ExecuteNonQueryAsync(string sql, CancellationToken cancellationToken = default)
|
|
{
|
|
return DatabaseHelper.NonQueryAsync(ConnectionString, sql, cancellationToken);
|
|
}
|
|
|
|
public Task<DataSet> ExecuteQueryAsync(string sql, CancellationToken cancellationToken = default)
|
|
{
|
|
return DatabaseHelper.QueryTableAsync(ConnectionString, sql, cancellationToken);
|
|
}
|
|
|
|
public Task<object?> ExecuteScalarAsync(string sql, CancellationToken cancellationToken = default)
|
|
{
|
|
return DatabaseHelper.QueryScalarAsync(ConnectionString, sql, cancellationToken);
|
|
}
|
|
} |