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")); }
public override void AfterRowExecute(FormatterTableHelper helper) { _state.Current += Step; if (_state.Current > End) { _state.Current = Start; } }
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); }
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(); }
//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; } }
//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); } }
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); }
//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); } }
public abstract string FormatField(FormatterTableHelper helper);
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); }
public FormatterTable(Database database, List <Table> tables) { helper = new FormatterTableHelper(database, tables); }
public override string FormatField(FormatterTableHelper helper) { return(string.Format(Padding, _state.Current)); }
public override string FormatField(FormatterTableHelper helper) { return(_state.NextWord(Field)); }
public virtual void BeforeFieldExecute(FormatterTableHelper helper) { //waiting for override }
public virtual void DependencyByTableExecuted(FormatterTableHelper helper) { //waiting for override }
public virtual void AfterTableExecute(FormatterTableHelper helper) { //waiting for override }