using System.Data; using MesETL.Shared.Helper; using MySqlConnector; namespace Mesdb.Cli.Schema; public class Database { public static async Task 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().Select(row => new Table{Name = row[0].ToString()!}).ToArray(); } public string Name { get; } public string ConnectionString { get; } public IReadOnlyList 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 ExecuteQueryAsync(string sql, CancellationToken cancellationToken = default) { return DatabaseHelper.QueryTableAsync(ConnectionString, sql, cancellationToken); } public Task ExecuteScalarAsync(string sql, CancellationToken cancellationToken = default) { return DatabaseHelper.QueryScalarAsync(ConnectionString, sql, cancellationToken); } }