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();
示例#3
0
        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);
        }
示例#4
0
        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));
示例#8
0
 public static string TableName(this TablePrescription tablePrescription) => TableName(tablePrescription.TableDescription);
示例#9
0
 private static void AsExpected(TablePrescription tablePrescription)
 {
     Assert.NotNull(tablePrescription);
     AsExpected(tablePrescription.ColumnPrescriptions);
 }