Generate pairs of date (start and end)
This commit is contained in:
		
							parent
							
								
									4c175a49e7
								
							
						
					
					
						commit
						ce1e594913
					
				@ -10,7 +10,7 @@ def main():
 | 
				
			|||||||
    sql_tables = SQLParser.parse_sql_file("schema.sql")
 | 
					    sql_tables = SQLParser.parse_sql_file("schema.sql")
 | 
				
			||||||
    inserts = []
 | 
					    inserts = []
 | 
				
			||||||
    for table in sql_tables:
 | 
					    for table in sql_tables:
 | 
				
			||||||
        for i in range(0, 100):
 | 
					        for i in range(0, 5):
 | 
				
			||||||
            inserts.append(SQLGenerator.generate_random_insert(table))
 | 
					            inserts.append(SQLGenerator.generate_random_insert(table))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    with open("inserts.sql", "w") as file:
 | 
					    with open("inserts.sql", "w") as file:
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,8 @@ CREATE TABLE `test` (
 | 
				
			|||||||
  `id` bigint(20) NOT NULL,
 | 
					  `id` bigint(20) NOT NULL,
 | 
				
			||||||
  `test_value` int(11) NOT NULL,
 | 
					  `test_value` int(11) NOT NULL,
 | 
				
			||||||
  `test_string` varchar(255) DEFAULT NULL,
 | 
					  `test_string` varchar(255) DEFAULT NULL,
 | 
				
			||||||
  `local_date` date DEFAULT NULL,
 | 
					  `starting_date` date DEFAULT NULL,
 | 
				
			||||||
 | 
					  `ending_date` date DEFAULT NULL,
 | 
				
			||||||
  PRIMARY KEY (`id`)
 | 
					  PRIMARY KEY (`id`)
 | 
				
			||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
 | 
					) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,7 @@
 | 
				
			|||||||
from enum import Enum
 | 
					from enum import Enum
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from sqlparse.SQLColumn import SQLColumn
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ValueType(Enum):
 | 
					class ValueType(Enum):
 | 
				
			||||||
    INT = 0,
 | 
					    INT = 0,
 | 
				
			||||||
@ -7,6 +9,7 @@ class ValueType(Enum):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ColumnValue:
 | 
					class ColumnValue:
 | 
				
			||||||
    def __init__(self, value, value_type: ValueType):
 | 
					    def __init__(self, value, value_type: ValueType, sql_column: SQLColumn):
 | 
				
			||||||
        self.value = value
 | 
					        self.value = value
 | 
				
			||||||
        self.valueType = value_type
 | 
					        self.valueType = value_type
 | 
				
			||||||
 | 
					        self.sqlColumn = sql_column
 | 
				
			||||||
@ -1,6 +1,7 @@
 | 
				
			|||||||
import datetime
 | 
					import datetime
 | 
				
			||||||
import random
 | 
					import random
 | 
				
			||||||
import time
 | 
					import time
 | 
				
			||||||
 | 
					from typing import List
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from sqlgenerator.ColumnValue import ValueType, ColumnValue
 | 
					from sqlgenerator.ColumnValue import ValueType, ColumnValue
 | 
				
			||||||
from sqlparse.SQLColumn import SQLColumn, SQLColumnType
 | 
					from sqlparse.SQLColumn import SQLColumn, SQLColumnType
 | 
				
			||||||
@ -20,7 +21,7 @@ max_date = datetime.date(2024, 12, 31)
 | 
				
			|||||||
def generate_random_insert(sql_table: SQLTable):
 | 
					def generate_random_insert(sql_table: SQLTable):
 | 
				
			||||||
    columnValues = []
 | 
					    columnValues = []
 | 
				
			||||||
    for column in sql_table.columns:
 | 
					    for column in sql_table.columns:
 | 
				
			||||||
        columnValues.append(generate_random_column(column))
 | 
					        columnValues.append(generate_random_column(column, columnValues))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    sql_insert_command = "INSERT INTO " + sql_table.table_name + " VALUES (${i});"
 | 
					    sql_insert_command = "INSERT INTO " + sql_table.table_name + " VALUES (${i});"
 | 
				
			||||||
    for columnValue in columnValues:
 | 
					    for columnValue in columnValues:
 | 
				
			||||||
@ -33,17 +34,31 @@ def generate_random_insert(sql_table: SQLTable):
 | 
				
			|||||||
    return sql_insert_command
 | 
					    return sql_insert_command
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def generate_random_column(sql_column: SQLColumn):
 | 
					def generate_random_column(sql_column: SQLColumn, generated_values: List[ColumnValue]):
 | 
				
			||||||
    if sql_column.columnType == SQLColumnType.BIGINT:
 | 
					    if sql_column.columnType == SQLColumnType.BIGINT:
 | 
				
			||||||
        return ColumnValue(random.randint(min_bigint, max_bigint), ValueType.INT)
 | 
					        return ColumnValue(random.randint(min_bigint, max_bigint), ValueType.INT, sql_column)
 | 
				
			||||||
    elif sql_column.columnType == SQLColumnType.INT:
 | 
					    elif sql_column.columnType == SQLColumnType.INT:
 | 
				
			||||||
        return ColumnValue(random.randint(min_int, max_int), ValueType.INT)
 | 
					        return ColumnValue(random.randint(min_int, max_int), ValueType.INT, sql_column)
 | 
				
			||||||
    elif sql_column.columnType == SQLColumnType.VARCHAR:
 | 
					    elif sql_column.columnType == SQLColumnType.VARCHAR:
 | 
				
			||||||
        text_legnth = random.randint(1, 255)
 | 
					        text_legnth = random.randint(1, 255)
 | 
				
			||||||
        lorem_text = lorem.sentence()
 | 
					        lorem_text = lorem.sentence()
 | 
				
			||||||
        return ColumnValue(lorem_text[:text_legnth], ValueType.STRING)
 | 
					        return ColumnValue(lorem_text[:text_legnth], ValueType.STRING, sql_column)
 | 
				
			||||||
    elif sql_column.columnType == SQLColumnType.DATE:
 | 
					    elif sql_column.columnType == SQLColumnType.DATE:
 | 
				
			||||||
        delta = max_date - min_date
 | 
					        if "end" in sql_column.columnName or "max" in sql_column.columnName:
 | 
				
			||||||
        random_days = random.randrange(delta.days + 1)
 | 
					            for value in generated_values:
 | 
				
			||||||
        random_date = min_date + datetime.timedelta(days=random_days)
 | 
					                if "start" in value.sqlColumn.columnName or "min" in sql_column.columnName:
 | 
				
			||||||
        return ColumnValue(str(random_date), ValueType.STRING)
 | 
					                    startingDate = datetime.datetime.strptime(value.value, "%Y-%m-%d").date()
 | 
				
			||||||
 | 
					                    return generate_random_date(startingDate, max_date, sql_column)
 | 
				
			||||||
 | 
					        elif "start" in sql_column.columnName or "min" in sql_column.columnName:
 | 
				
			||||||
 | 
					            for value in generated_values:
 | 
				
			||||||
 | 
					                if "end" in value.sqlColumn.columnName or "max" in sql_column.columnName:
 | 
				
			||||||
 | 
					                    endingDate = datetime.datetime.strptime(value.value, "%Y-%m-%d").date()
 | 
				
			||||||
 | 
					                    return generate_random_date(min_date, endingDate, sql_column)
 | 
				
			||||||
 | 
					        return generate_random_date(min_date, max_date, sql_column)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def generate_random_date(start_date, end_date, sql_column):
 | 
				
			||||||
 | 
					    delta = end_date - start_date
 | 
				
			||||||
 | 
					    random_days = random.randrange(delta.days + 1)
 | 
				
			||||||
 | 
					    random_date = start_date + datetime.timedelta(days=random_days)
 | 
				
			||||||
 | 
					    return ColumnValue(str(random_date), ValueType.STRING, sql_column)
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user