public async Task TestBulkInsertFromQuery(string source, string destination)
        {
            var sql = Host.Services.GetService <SqlBulkInsertWorker>();
            var src = Host.Services.GetServices <BaseDatabase>().First(x => x.Name == source);
            var dst = Host.Services.GetServices <BaseDatabase>().First(x => x.Name == destination);

            string tableSrc = CreateTable(src);
            string tableDst = CreateTable(dst);

            Insert(src, tableSrc, Enumerable.Range(0, 1000).Select(x => (x, "hello")));

            try
            {
                var input = new BulkInsertInput();
                input.Source.ConnectionName = src.Name;
                input.Source.Query          = new SqlQuery
                {
                    Query = $"SELECT * FROM {tableSrc}",
                    Type  = SqlQueryType.Reader
                };
                input.Destination.ConnectionName = dst.Name;
                input.Destination.TableName      = tableDst;

                var result = await sql.DoJsonWork <BulkInsertInput, bool>(input);

                Assert.True(result);
                Assert.Equal(1000, Count(dst, tableDst));
            }
            finally
            {
                DropTable(src, tableSrc);
                DropTable(dst, tableDst);
            }
        }
        public async Task TestBulkInsertFromCsvFileWithHeader(string destination)
        {
            var fileStore = Host.Services.GetService <FileStoreFactory>().GetFileStoreFromName("test");
            var dst       = Host.Services.GetServices <BaseDatabase>().First(x => x.Name == destination);

            string tableName = CreateTable(dst);

            try
            {
                var token = await fileStore.CreateFileToken("test.csv");

                await using (var stream = await fileStore.OpenWrite(token))
                    await using (var writer = new StreamWriter(stream, Encoding.UTF8))
                    {
                        writer.WriteLine("id,name");
                        writer.WriteLine("1,Frank");
                        writer.WriteLine("2,Bob");
                        writer.WriteLine("3,Julia");
                        writer.WriteLine("4,Marie");
                    }

                BulkInsertInput input = new BulkInsertInput();
                input.Source.FileToken           = token;
                input.Source.Separator           = ',';
                input.Source.Headers             = true;
                input.Destination.ConnectionName = destination;
                input.Destination.TableName      = tableName;

                var sql = Host.Services.GetService <SqlBulkInsertWorker>();

                var result = await sql.DoJsonWork <BulkInsertInput, bool>(input);

                Assert.True(result);
                Assert.Equal(4, Count(dst, tableName));
            }
            finally
            {
                DropTable(dst, tableName);
            }
        }