public static List <string> GenerateListOfTimestampsWOTZInInterval(int numberOfRowsToGenerate, string sqlPlatformName, DatabaseColumn column, DatabaseTable table, Dictionary <string, List <string> > valuesGeneratedForDatabase) { string dateFromString = column.DateFrom; string dateToString = column.DateTo; string timeFromString = column.TimeFrom; string timeToString = column.TimeTo; if (dateFromString == null) { throw new GenerationException("Must specify date from."); } if (dateToString == null) { throw new GenerationException("Must specify date to."); } if (timeFromString == null) { throw new GenerationException("Must specify time from."); } if (timeToString == null) { throw new GenerationException("Must specify time to."); } // Throw exception if date formats are not right DateTime dateFrom, dateTo; try { dateFrom = Util.ParseDate(dateFromString); dateTo = Util.ParseDate(dateToString); } catch (FormatException ex) { throw new GenerationException(ex.Message); } // Validate time format var regex = new Regex(@"^[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}$"); if (regex.Match(timeFromString).Success == false) { throw new GenerationException("Time from format invalid"); } if (regex.Match(timeFromString).Success == false) { throw new GenerationException("Time to format invalid"); } // 0: hour, 1: minute, 2: second string[] timeFromArr = timeFromString.Split(":"); string[] timeToArr = timeToString.Split(":"); int hourFrom = Int32.Parse(timeFromArr[0]); int minuteFrom = Int32.Parse(timeFromArr[1]); int secondFrom = Int32.Parse(timeFromArr[2]); int hourTo = Int32.Parse(timeToArr[0]); int minuteTo = Int32.Parse(timeToArr[1]); int secondTo = Int32.Parse(timeToArr[2]); // Generate date for every row var random = new Random(); List <string> listOfValues = new List <string>(numberOfRowsToGenerate); string properDateFormat; DateTime dateTimeFrom = new DateTime(dateFrom.Year, dateFrom.Month, dateFrom.Day, hourFrom, minuteFrom, secondFrom); DateTime dateTimeTo = new DateTime(dateTo.Year, dateTo.Month, dateTo.Day, hourTo, minuteTo, secondTo); // Get proper formatter for date IFormatDateDateTime formatter = FormatDateDateTimeFormatterFactory.GetTimestampWOTZFormatter(sqlPlatformName); List <DateTime> otherTimestamps = new List <DateTime>(); List <string> tempListOfOtherTimestampStrings = new List <string>(); if (valuesGeneratedForDatabase.TryGetValue($"{table.Name}:{column.RelatedColumn}", out tempListOfOtherTimestampStrings)) { foreach (string dateString in tempListOfOtherTimestampStrings) { // substring to remove quotes //otherTimestamps.Add(Util.ParseTimestamp(formatter.FormatBack(dateString.Substring(1, dateString.Length - 2)))); otherTimestamps.Add(DateTime.Parse(dateString.Substring(1, dateString.Length - 2))); } } TimeSpan timeSpan = dateTimeTo - dateTimeFrom; for (int i = 0; i < numberOfRowsToGenerate; i++) { if (otherTimestamps.Count() == 0) { TimeSpan newSpan = new TimeSpan(0, 0, random.Next(0, (int)timeSpan.TotalSeconds)); DateTime newTimestamp = dateTimeFrom + newSpan; string value = formatter.Format(newTimestamp); listOfValues.Add($"'{value}'"); } else { String relation = column.Relation; DateTime newDate = new DateTime(); DateTime otherDate = otherTimestamps[i]; switch (relation) { case GenerationConstants.LESSER_THAN: newDate = LesserThan(otherDate, dateTimeFrom, dateTimeTo); break; case GenerationConstants.LESSER_THAN_OR_EQUAL_TO: newDate = LesserThanOrEqualTo(otherDate, dateTimeFrom, dateTimeTo); break; case GenerationConstants.EQUAL_TO: newDate = Equal(otherDate, dateTimeFrom, dateTimeTo); break; case GenerationConstants.NOT_EQUAL_TO: newDate = NotEqual(otherDate, dateTimeFrom, dateTimeTo); break; case GenerationConstants.GREATER_THAN_OR_EQUAL_TO: newDate = GreaterThanOrEqualTo(otherDate, dateTimeFrom, dateTimeTo); break; case GenerationConstants.GREATER_THAN: newDate = GreaterThan(otherDate, dateTimeFrom, dateTimeTo); break; default: throw new GenerationException($"{relation} is not a supported column relation"); } properDateFormat = formatter.Format(newDate); listOfValues.Add($"'{properDateFormat}'"); } } return(listOfValues); }
public static List <string> GenerateListOfDatesInInterval(int numberOfRowsToGenerate, DatabaseColumn column, DatabaseTable table, string sqlPlatformName, Dictionary <string, List <string> > valuesGeneratedForDatabase) { // Get proper formatter IFormatDateDateTime formatter = FormatDateDateTimeFormatterFactory.GetDateFormatter(sqlPlatformName); string dateFromString = column.DateFrom; string dateToString = column.DateTo; if (dateFromString == null) { throw new GenerationException("Must specify date from."); } if (dateToString == null) { throw new GenerationException("Must specify date to."); } List <string> tempListOfOtherDateStrings = new List <string>(); // List of dates, values generated here will be bigger List <DateTime> otherDates = new List <DateTime>(); if (valuesGeneratedForDatabase.TryGetValue($"{table.Name}:{column.RelatedColumn}", out tempListOfOtherDateStrings)) { foreach (string dateString in tempListOfOtherDateStrings) { // substring to remove quotes otherDates.Add(Util.ParseDate(formatter.FormatBack(dateString.Substring(1, dateString.Length - 2)))); } } // Throw exception if date formats are not right DateTime dateFrom, dateTo; try { dateFrom = Util.ParseDate(dateFromString); dateTo = Util.ParseDate(dateToString); } catch (FormatException ex) { throw new GenerationException(ex.Message); } // Generate date for every row var random = new Random(); List <string> listOfValues = new List <string>(numberOfRowsToGenerate); string properDateFormat; for (int i = 0; i < numberOfRowsToGenerate; i++) { if (otherDates.Count() == 0) { TimeSpan timeSpan = dateTo - dateFrom; TimeSpan newSpan = new TimeSpan(0, random.Next(0, (int)timeSpan.TotalMinutes), 0); DateTime newDate = dateFrom + newSpan; properDateFormat = formatter.Format(newDate); listOfValues.Add($"'{properDateFormat}'"); } else { String relation = column.Relation; DateTime newDate = new DateTime(); DateTime otherDate = otherDates[i]; switch (relation) { case GenerationConstants.LESSER_THAN: newDate = LesserThan(otherDate, dateFrom, dateTo); break; case GenerationConstants.LESSER_THAN_OR_EQUAL_TO: newDate = LesserThanOrEqualTo(otherDate, dateFrom, dateTo); break; case GenerationConstants.EQUAL_TO: newDate = Equal(otherDate, dateFrom, dateTo); break; case GenerationConstants.NOT_EQUAL_TO: newDate = NotEqual(otherDate, dateFrom, dateTo); break; case GenerationConstants.GREATER_THAN_OR_EQUAL_TO: newDate = GreaterThanOrEqualTo(otherDate, dateFrom, dateTo); break; case GenerationConstants.GREATER_THAN: newDate = GreaterThan(otherDate, dateFrom, dateTo); break; default: throw new GenerationException($"{relation} is not a supported column relation"); } properDateFormat = formatter.Format(newDate); listOfValues.Add($"'{properDateFormat}'"); } } return(listOfValues); }