public static List <string> Generate(baseContext ctx, int numberOfRowsToGenerate, DatabaseColumn column, Dictionary <string, List <string> > valuesGeneratedForDatabase, int sqlPlatformId, DatabaseTable table) { List <string> listOfValues = new List <string>(); switch (column.GenerationModeId) { case SERIAL_ID: listOfValues = IntegerGeneratorsClass.GenerateListOfSerials(numberOfRowsToGenerate); break; case COUNTRY_NAME_RANDOM_ENGLISH_ID: listOfValues = new LimitCharactersDecorator(new RandomCountryesEnglish(numberOfRowsToGenerate, column, ctx)).GenerateVarchar(); //CountryGenerators.GenerateListOfRandomCountryesEnglish(numberOfRowsToGenerate, ctx, column.MaxNumber); break; case COUNTRY_NAME_SEQUENTIAL_ENGLISH_ID: listOfValues = new LimitCharactersDecorator(new SequentialCountryesEnglish(numberOfRowsToGenerate, column, ctx)).GenerateVarchar(); break; case COUNTRY_SHORT_RANDOM_ENGLISH_ID: listOfValues = new LimitCharactersDecorator(new RandomCountryShortsEnglish(numberOfRowsToGenerate, column, ctx)).GenerateVarchar(); break; case COUNTRY_SHORT_SEQUENTIAL_ENGLISH_ID: listOfValues = new LimitCharactersDecorator(new SequentialCountryShortsEnglish(numberOfRowsToGenerate, column, ctx)).GenerateVarchar(); break; case NAME_RANDOM_GLOBAL_ID: listOfValues = new LimitCharactersDecorator(new NamesRandomGlobal(numberOfRowsToGenerate, column, ctx)).GenerateVarchar(); //NameGenerators.GenerateListOfRandomNamesGlobal(numberOfRowsToGenerate, ctx); break; case NAME_FEMALE_RANDOM_GLOBAL_ID: listOfValues = new LimitCharactersDecorator(new FemaleNamesRandomGlobal(numberOfRowsToGenerate, column, ctx)).GenerateVarchar(); break; case NAME_MALE_RANDOM_GLOBAL_ID: listOfValues = new LimitCharactersDecorator(new MaleNamesGlobal(numberOfRowsToGenerate, column, ctx)).GenerateVarchar(); break; case LAST_NAME_RANDOM_GLOBAL_ID: listOfValues = new LimitCharactersDecorator(new LastNameRandomGlobal(numberOfRowsToGenerate, column, ctx)).GenerateVarchar(); break; case VARCHAR_PATTERN: listOfValues = new LimitCharactersDecorator(new PatternGenerator(numberOfRowsToGenerate, column, ctx)).GenerateVarchar(); break; case FOREIGN_KEY_RANDOM_ID: listOfValues = ForeignKeyGeneratorsClass.GenerateRandomValuesForForeignKey(numberOfRowsToGenerate, valuesGeneratedForDatabase, column, table); break; case FOREIGN_KEY_RANDOM_10PER_NULL_ID: listOfValues = ForeignKeyGeneratorsClass.GenerateRandomValuesForForeignKey10PercentNull(numberOfRowsToGenerate, valuesGeneratedForDatabase, column, table); break; case FOREIGN_KEY_ORDERED_UNIQUE: listOfValues = ForeignKeyGeneratorsClass.GenerateOrderedUniqueValuesForForeignKey(numberOfRowsToGenerate, valuesGeneratedForDatabase, column, table); break; case FOREIGN_KEY_ORDERED_REPEATED: listOfValues = ForeignKeyGeneratorsClass.GenerateOrderedRepeatedForeignKey(numberOfRowsToGenerate, valuesGeneratedForDatabase, column, table); break; case INTEGER_RANDOM_FROM_INTERVAL_ID: listOfValues = IntegerGeneratorsClass.GenerateListOfRandomIntegersInInterval(numberOfRowsToGenerate, column.MinNumber, column.MaxNumber, column, table, valuesGeneratedForDatabase); break; case INTEGER_ORDERED_REPEATED: listOfValues = IntegerGeneratorsClass.GenerateIncrementAfterN(numberOfRowsToGenerate, column); break; case INTEGER_COUNTRY_POPULATION: listOfValues = ctx.Countries.Select(c => c.Inhabitants.ToString()).ToList(); break; case SMALLINT_RANDOM_FROM_INTERVAL_ID: listOfValues = IntegerGeneratorsClass.GenerateListOfRandomShortsInInterval(numberOfRowsToGenerate, column.MinNumber, column.MaxNumber, column, table, valuesGeneratedForDatabase); break; case BIGINT_RANDOM: listOfValues = IntegerGeneratorsClass.GenerateListOfRandomLongsInInterval(numberOfRowsToGenerate, column.MinNumber, column.MaxNumber, column, table, valuesGeneratedForDatabase); break; case NUMBERIC_RANDOM_FROM_INTERVAL: listOfValues = NumericGeneratorsClass.GenerateListOfRandomNumbericFromInterval(numberOfRowsToGenerate, column, table, valuesGeneratedForDatabase); break; case FLOAT_RANDOM: listOfValues = NumericGeneratorsClass.GenerateListOfRandomNumbericFromInterval(numberOfRowsToGenerate, column, table, valuesGeneratedForDatabase); break; case DOUBLE_RANDOM: listOfValues = NumericGeneratorsClass.GenerateListOfRandomNumbericFromInterval(numberOfRowsToGenerate, column, table, valuesGeneratedForDatabase); break; case DATE_RANDOM_FROM_INTERVAL_ID: string sqlPlatformName = ctx.SqlPlatforms.Where(p => p.SqlPlatformId == sqlPlatformId).FirstOrDefault().Name; listOfValues = DateGeneratorsClass.GenerateListOfDatesInInterval(numberOfRowsToGenerate, column, table, sqlPlatformName, valuesGeneratedForDatabase); break; case TIMESTAMPWOTZ_RANDOM_FROM_INTERVAL_ID: sqlPlatformName = ctx.SqlPlatforms.Where(p => p.SqlPlatformId == sqlPlatformId).FirstOrDefault().Name; listOfValues = TimestampWOTZGenerator.GenerateListOfTimestampsWOTZInInterval(numberOfRowsToGenerate, sqlPlatformName, column, table, valuesGeneratedForDatabase); break; case INTERVAL_RANDOM_FROM_RANGE: sqlPlatformName = ctx.SqlPlatforms.Where(p => p.SqlPlatformId == sqlPlatformId).FirstOrDefault().Name; listOfValues = IntervalGeneratorClass.GenerateListOfIntervalsFromRange(numberOfRowsToGenerate, column.TimeFrom, column.TimeTo, sqlPlatformName); break; case BOOLEAN_TRUE: listOfValues = BooleanGeneratorsClass.GenerateListOfTrue(numberOfRowsToGenerate); break; case BOOLEAN_FALSE: listOfValues = BooleanGeneratorsClass.GenerateListOfFalse(numberOfRowsToGenerate); break; default: throw new GenerationException($"Invalid generation mode id: {column.GenerationModeId}"); } return(listOfValues); }
public static List <string> GenerateListOfRandomNumbericFromInterval(int numberOfRowsToGenerate, DatabaseColumn column, DatabaseTable table, Dictionary <string, List <string> > valuesGeneratedForDatabase) { string min = column.MinNumber; string max = column.MaxNumber; Decimal minValue; Decimal maxValue; try { minValue = Decimal.Parse(min); } catch (Exception) { throw new GenerationException($"Could not parse {min}."); } try { maxValue = Decimal.Parse(max); } catch (Exception) { throw new GenerationException($"Could not parse {max}."); } if (minValue > maxValue) { throw new GenerationException($"Minimum value cannot be greater then maximum value"); } minValue *= 100; maxValue *= 100; int intMinValue = Decimal.ToInt32(minValue); int intMaxValue = Decimal.ToInt32(maxValue); Random random = new Random(); List <string> listOfNumerics = new List <string>(numberOfRowsToGenerate); List <string> tempListOfOtherNumerics = new List <string>(); // List of dates, values generated here will be bigger List <Decimal> otherNumerics = new List <Decimal>(); if (valuesGeneratedForDatabase.TryGetValue($"{table.Name}:{column.RelatedColumn}", out tempListOfOtherNumerics)) { foreach (string numericString in tempListOfOtherNumerics) { // substring to remove quotes otherNumerics.Add(Decimal.Parse(numericString)); } } for (int i = 0; i < numberOfRowsToGenerate; i++) { if (otherNumerics.Count() == 0) { int randomInt = random.Next(intMinValue, intMaxValue + 1); listOfNumerics.Add(ParseIntToNumericStringDivideBy100(randomInt)); } else { Decimal otherNumeric = otherNumerics[i]; otherNumeric *= 100; int otherValue = Decimal.ToInt32(otherNumeric); string relation = column.Relation; string value; switch (relation) { case GenerationConstants.LESSER_THAN: value = ParseIntToNumericStringDivideBy100(IntegerGeneratorsClass.LesserThan(otherValue, intMinValue, intMaxValue)); break; case GenerationConstants.LESSER_THAN_OR_EQUAL_TO: value = ParseIntToNumericStringDivideBy100(IntegerGeneratorsClass.LesserThanOrEqual(otherValue, intMinValue, intMaxValue)); break; case GenerationConstants.EQUAL_TO: value = ParseIntToNumericStringDivideBy100(IntegerGeneratorsClass.Equal(otherValue, intMinValue, intMaxValue)); break; case GenerationConstants.NOT_EQUAL_TO: value = ParseIntToNumericStringDivideBy100(IntegerGeneratorsClass.NotEqual(otherValue, intMinValue, intMaxValue)); break; case GenerationConstants.GREATER_THAN_OR_EQUAL_TO: value = ParseIntToNumericStringDivideBy100(IntegerGeneratorsClass.GreaterThanOrEqual(otherValue, intMinValue, intMaxValue)); break; case GenerationConstants.GREATER_THAN: value = ParseIntToNumericStringDivideBy100(IntegerGeneratorsClass.GreaterThan(otherValue, intMinValue, intMaxValue)); break; default: throw new GenerationException($"{relation} is not a supported column relation"); } listOfNumerics.Add(value); } } return(listOfNumerics); }