internal static async Task <IDbCommandAsync> CreateDbCommand(IDbConnectionAsync connection, string text)
        {
            if (connection.State == System.Data.ConnectionState.Closed)
            {
                await connection.OpenAsync();
            }

            var command = connection.CreateCommand();

            command.CommandText = text;
            command.CommandType = System.Data.CommandType.Text;

            return(command);
        }
        //TODO unit test this.
        public static async Task <Result <IReadOnlyCollection <Table> > > GetTablesFromConnectionStringAsync(IDbConnectionAsync connection, Func <ISchemaDataAdapter> adapterFactory)
        {
            try
            {
                await connection.OpenAsync();

                var adapter = adapterFactory();

                var tablesNames = adapter.GetTableList();

                var result = tablesNames
                             .Select(x => GetTable(adapter, x))
                             .ToList();

                return(Success <IReadOnlyCollection <Table> > .Succeed(result));
            }
            catch (Exception e)
            {
                //var d = Failure<SqlError>.Fail(new SqlError());
                //return (Result<IReadOnlyCollection<Table>>)d;
                return(Failure <IReadOnlyCollection <Table>, SqlError> .Fail(new SqlError { Message = e.Message }));
            }
        }