public IDatabaseSchema GetSchema(string connectionString, Options options)
        {
            var schema = new SqlSchema {
                [ObjectType.Table]          = GetUserTables(connectionString),
                [ObjectType.View]           = GetViews(connectionString),
                [ObjectType.Procedure]      = GetProcedures(connectionString),
                [ObjectType.TableFunction]  = GetTableFunctions(connectionString),
                [ObjectType.ScalarFunction] = GetScalarFunctions(connectionString),
            };

            return(schema);
        }
        public async Task <IDatabaseSchema> GetSchemaAsync(string connectionString, Options options)
        {
            // Start loading all the different data sets without awaiting any of them
            var tableTask      = Task.Run(() => GetUserTables(connectionString));
            var viewTask       = Task.Run(() => GetViews(connectionString));
            var procTask       = Task.Run(() => GetProcedures(connectionString));
            var tableFuncTask  = Task.Run(() => GetTableFunctions(connectionString));
            var scalarFuncTask = Task.Run(() => GetScalarFunctions(connectionString));

            var schema = new SqlSchema {
                [ObjectType.Table]          = await tableTask,
                [ObjectType.View]           = await viewTask,
                [ObjectType.Procedure]      = await procTask,
                [ObjectType.TableFunction]  = await tableFuncTask,
                [ObjectType.ScalarFunction] = await scalarFuncTask,
            };

            return(schema);
        }