public override string FormatField(FormatterTableHelper helper)
        {
            var state  = _states[Random.Next(_states.Length)];
            var result = state.GetRandomDateTime();

            //TODO support other database
            return(result.ToString("yyyy-MM-dd HH:mm:ss"));
        }
Пример #2
0
        public override void AfterRowExecute(FormatterTableHelper helper)
        {
            _state.Current += Step;

            if (_state.Current > End)
            {
                _state.Current = Start;
            }
        }
Пример #3
0
        public override void BeforeTableExecute(FormatterTableHelper helper)
        {
            _state = new State {
                Current = Start
            };

            //can't read { in Format, so add { in here
            //if (Padding[0] != '{')
            //    Padding = string.Format("{{{0}}}", Padding);
        }
Пример #4
0
 public override void BeforeTableExecute(FormatterTableHelper helper)
 {
     if (!string.IsNullOrEmpty(ConverterName))
     {
         Conveter = (IReferenceFormatterConverter)Activator.CreateInstance(Type.GetType($"{ Namespace }.{ ConverterName }"));
         if (Conveter == null)
         {
             throw new NotSupportedException($"[ReferenceColumnFormatter] { ConverterName } not found");
         }
     }
 }
        public override void BeforeTableExecute(FormatterTableHelper helper)
        {
            var temp = new List <State>();

            foreach (var data in _datas)
            {
                temp.Add(new State(data));
            }

            _states = temp.ToArray();
        }
Пример #6
0
        //2. if it's itself, get current row
        public override void AfterRowExecute(FormatterTableHelper helper)
        {
            if (IsReferenceCurrentTable(helper.CurrentTable))
            {
                //replace value before generate statement
                var columIndex = helper.CurrentTable.FindColumnIndex(Column);
                var value      = helper.CurrentDataTable[helper.CurrentRowIndex][ThisColumnIndex].Replace(
                    ReferenceFormatterKey(Table, Column),
                    helper.CurrentDataTable[helper.CurrentRowIndex][columIndex]
                    );
                var convertedValue = ConvertValueIfNeeded(value);

                helper.CurrentDataTable[helper.CurrentRowIndex][ThisColumnIndex] = convertedValue;
            }
        }
Пример #7
0
        //two case
        //1. if it's another table, get random row
        public override string FormatField(FormatterTableHelper helper)
        {
            if (IsReferenceCurrentTable(helper.CurrentTable))
            {
                ThisColumnIndex = helper.CurrentColumnIndex;
                return(ReferenceFormatterKey(Table, Column)); //do it after row execute
            }
            else
            {
                var column         = (string[])helper.Session[ReferenceFormatterKey(Table, Column)];
                var value          = column[random.Next(0, column.LongLength)];
                var convertedValue = ConvertValueIfNeeded(value);

                return(convertedValue);
            }
        }
Пример #8
0
        public override void BeforeTableExecute(FormatterTableHelper helper)
        {
            //one dict name, one state
            var key = GetKey(helper.CurrentTable.TableName, Name);

            if (helper.Session.ContainsKey(key))
            {
                _state = (State)helper.Session[key];
            }
            else
            {
                _state = new State(Name);
                _state.Init();
                helper.Session[key] = _state;
            }

            _state.RegistField(Field);
        }
Пример #9
0
        //save session if needed
        public override void DependencyByTableExecuted(FormatterTableHelper helper)
        {
            var table        = helper.CurrentTable;
            var dependencyBy = table.DependencyBy.Where(x => !table.DependencyOn.Contains(x)).ToArray(); //if by & be contain that, it's reference itself

            foreach (var referenceColumnFormatter in dependencyBy)
            {
                var key          = ReferenceFormatterKey(referenceColumnFormatter.Table, referenceColumnFormatter.Column);
                var columnValues = new string[helper.CurrentDataTable.LongLength];
                var columIndex   = helper.CurrentTable.FindColumnIndex(referenceColumnFormatter.Column);

                //just clone that column
                for (var rowIndex = 0L; rowIndex < columnValues.LongLength; rowIndex++)
                {
                    columnValues[rowIndex] = helper.CurrentDataTable[rowIndex][columIndex];
                }

                helper.Session.Add(key, columnValues);
            }
        }
Пример #10
0
 public abstract string FormatField(FormatterTableHelper helper);
Пример #11
0
        public StringBuilder BuildInsertStatement(FormatterTableHelper helper, Database database, Table table)
        {
            var sb = new StringBuilder();

            if (!string.IsNullOrEmpty(database.Name))
            {
                sb.AppendLine($"use [{ database.Name }];");
                sb.AppendLine("GO");
                sb.AppendLine();
            }
            if (table.IdentityInsert)
            {
                sb.AppendLine($"set IDENTITY_INSERT { table.TableName } on;");
                sb.AppendLine("GO");
                sb.AppendLine();
            }

            for (var i = 0L; i < helper.CurrentDataTable.LongLength; i++)
            {
                var startBatch = i % BatchSize == 0;
                var endBatch   = (i + 1) % BatchSize == 0 || (i + 1) == helper.CurrentDataTable.LongLength;

                if (startBatch)
                {
                    var insertStatement = string.Format(
                        "insert into {0} ({1}) values",
                        table.TableName,
                        string.Join(", ", table.Columns.Select(x => string.Format(EscapeColumnNameFormat, x.ColumnName)))
                        );
                    sb.AppendLine(insertStatement);
                }

                //    (a, b, c, d, e)
                var values = new string[table.Columns.Count];
                for (var j = 0; j < table.Columns.Count; j++)
                {
                    var column = table.Columns[j];
                    var value  = helper.CurrentDataTable[i][j];

                    values[j] = this.QuoteIfNeeded(column, value);
                }
                sb.Append(string.Format("   ({0})", string.Join(", ", values)));

                if (endBatch)
                {
                    sb.AppendLine(";");
                    sb.AppendLine("GO");
                    sb.AppendLine();
                }
                else
                {
                    sb.Append(",");
                }

                sb.AppendLine();
            }

            if (table.IdentityInsert)
            {
                sb.AppendLine($"set IDENTITY_INSERT { table.TableName } off;");
                sb.AppendLine("GO");
                sb.AppendLine();
            }

            return(sb);
        }
Пример #12
0
 public FormatterTable(Database database, List <Table> tables)
 {
     helper = new FormatterTableHelper(database, tables);
 }
Пример #13
0
 public override string FormatField(FormatterTableHelper helper)
 {
     return(string.Format(Padding, _state.Current));
 }
Пример #14
0
 public override string FormatField(FormatterTableHelper helper)
 {
     return(_state.NextWord(Field));
 }
Пример #15
0
 public virtual void BeforeFieldExecute(FormatterTableHelper helper)
 {
     //waiting for override
 }
Пример #16
0
 public virtual void DependencyByTableExecuted(FormatterTableHelper helper)
 {
     //waiting for override
 }
Пример #17
0
 public virtual void AfterTableExecute(FormatterTableHelper helper)
 {
     //waiting for override
 }