MES-ETL/Mesdb.Cli/Schema/Database.cs

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);
}
}