private void FillTable(ISql sql, TablePrescription tablePrescription) { _Owner._Logger.LogInformation(Messages.LOG_INF_STARTED_1, nameof(FillTable), tablePrescription.TableDescription.Name); var columns = tablePrescription.ColumnPrescriptions.Select(_ => _.ColumnDescription.Name).ToArray(); var tableName = tablePrescription.TableName(); using var recordGenerator = _Owner._RecordGeneratorFactory.Create(tablePrescription, tablePrescription.Rows); using var connection = sql.CreateConnection(); connection.Open(); using var bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.KeepIdentity, null) { BatchSize = BULKCOPY_BATCHSIZE, BulkCopyTimeout = 0, DestinationTableName = tableName, EnableStreaming = true, }; // skipping DF1, DF2. for (var i = 0; i < recordGenerator.FieldCount; i++) { _ = bulkCopy.ColumnMappings.Add(i, i + 2); } bulkCopy.WriteToServer(recordGenerator); _Owner._Logger.LogInformation(Messages.LOG_INF_FINISHED_1, nameof(FillTable), tablePrescription.TableDescription.Name); }
private static string CreateTableDefinition(TablePrescription tablePrescription) => new StringBuilder() .AppendFormatInvariant("CREATE TABLE {0} (", tablePrescription.TableName()) .AppendFormatInvariant("[@DF1] [BIGINT] IDENTITY(1, 1) NOT NULL PRIMARY KEY, ") .AppendFormatInvariant("[@DF2] [BIGINT] NULL, ") .AppendJoin(", ", tablePrescription .ColumnPrescriptions .Select(columnPrescription => columnPrescription.ColumnDescription) .Where(columnDescription => columnDescription.IsWritable()) .Select(columnDescription => columnDescription.SqlDefinition())) .AppendFormatInvariant(");") .ToString();
private TablePrescription CreateDefaultTablePrescription(Project project, TableDescription tableDescription) { var tablePrescription = new TablePrescription(tableDescription); foreach (var columnDescription in tableDescription.ColumnDescriptions.Where(_ => _.IsWritable())) { var valueFactory = GetValueFactoryPrescription(project, columnDescription); var columnPrescription = new ColumnPrescription(columnDescription, valueFactory, columnDescription.Nullable ? 0.25f : 0f); tablePrescription.AddColumn(columnPrescription); } return(tablePrescription); }
public void AddColumnPrescriptions() { var fileName = Temporary.GetTempFilePath(); var project = CreateProject(); ValueFactoryManager.Initialize(); var i = 0; foreach (var tableDescription in project.Descriptor.TableDescriptions) { var tablePrescription = new TablePrescription(tableDescription); foreach (var columnDescription in tableDescription.ColumnDescriptions) { if (columnDescription.Identity != null || !columnDescription.IsWritable()) { continue; } var type = columnDescription.UserType switch { "sql_variant" => typeof(int), _ => SqlTypeUtility.GetDataType(columnDescription.UserType, columnDescription.MaxLength), }; var factory = ValueFactoryManager.ValueFactoryInfos.FilterByType(type).FirstOrDefault(); Assert.NotNull(factory); var configuration = factory.Configurator.CreateConfiguration(); var valueFactoryPrescription = new ValueFactoryPrescription(factory.Name + i++, factory.Name, configuration); project.Prescriptor.AddValueFactory(valueFactoryPrescription); var columnPrescription = new ColumnPrescription(columnDescription, valueFactoryPrescription, null); tablePrescription.AddColumn(columnPrescription); } project.Prescriptor.AddTable(tablePrescription); } ProjectManager.SaveToFile(project, fileName); Output.WriteLine(File.ReadAllText(fileName)); var project2 = ProjectManager.LoadFromFile(fileName); IoAssert.AsExpected(project2); }
private IEnumerable <(IValueFactory factory, Type type, float nullPercentage)> GetFactories(TablePrescription tablePrescription) { foreach (var columnPrescription in tablePrescription.ColumnPrescriptions) { var factoryInfo = _ValueFactoryManager.Resolve(columnPrescription.ValueFactoryPrescription.Factory); var factory = factoryInfo.ValueFactory; factory.Configuration = columnPrescription.ValueFactoryPrescription.Configuration; yield return(factory, factoryInfo.ValueType, columnPrescription.NullPercentage ?? 0); } }
public IDataReader Create(TablePrescription tablePrescription, int rows) => new RecordGenerator(rows, GetFactories(tablePrescription));
private static void CreateTable(ISql sql, TablePrescription tablePrescription) => sql.NonQuery(CreateTableDefinition(tablePrescription));
public static string TableName(this TablePrescription tablePrescription) => TableName(tablePrescription.TableDescription);
private static void AsExpected(TablePrescription tablePrescription) { Assert.NotNull(tablePrescription); AsExpected(tablePrescription.ColumnPrescriptions); }