コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }