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