def generate_integer_field(self, row_index, field, field_options): if field_options == "primary-key": return 1 + row_index else: lower, upper = field_options.split(',') return pseudorandom_long([self.specifier, field, row_index], int(lower), int(upper))
def generate_field(self, field, row_index): field_specification = self.fields[field] if field_specification.optional: should_generate = pseudorandom_long( [self.specifier, field, 'optional', row_index], 2) if not should_generate: return None return self.field_generators[field_specification.type]( row_index, field, field_specification.options)
def generate_foreign_key(self, row_index, field, field_options): foreign_table = field_options foreign_row_generator = RowGenerator.get_instance( self.schema, self.database, foreign_table, self.config) foreign_table_bootstrap_count = int( float(self.config['mysql']['schemas'][self.schema]['tables'] [foreign_table][self.database]['size'])) foreign_row_index = pseudorandom_long( [self.specifier, field, row_index], foreign_table_bootstrap_count) return foreign_row_generator.generate_primary_key(foreign_row_index)
def produce_one(self): if self.operation == 'insert': # max id is the next row index, because id is 1 based, row index is 0 based row_idx = self.table.max_id self.table.max_id += 1 else: # generate id for update and delete message row_idx = pseudorandom_long([self.table.seed, 'id', self.operation, self.produced_count], 0, self.table.max_id) self.produced_count += 1 row_gen = self.table.row_gen data = row_gen.generate_row(row_idx) pk_name = row_gen.primary_key_field pk_value = row_gen.generate_primary_key(row_idx) return maxwell_message(self.table.database, self.table.table_name, self.operation, data, pk_name, pk_value)
def produce_one(self): if self.operation == 'insert': # max id is the next row index, because id is 1 based, row index is 0 based row_idx = self.table.max_id self.table.max_id += 1 else: # generate id for update and delete message row_idx = pseudorandom_long( [self.table.seed, 'id', self.operation, self.produced_count], 0, self.table.max_id) self.produced_count += 1 row_gen = self.table.row_gen data = row_gen.generate_row(row_idx) pk_name = row_gen.primary_key_field pk_value = row_gen.generate_primary_key(row_idx) return maxwell_message(self.table.database, self.table.table_name, self.operation, data, pk_name, pk_value)
def generate_enum(self, row_index, field, field_options): values = field_options.split(',') return values[pseudorandom_long([self.specifier, field, row_index], 0, len(values))]
def generate_date_time(self, row_index, field, field_options): lower, upper = 1142557409, 1773709409 epoch = pseudorandom_long([self.specifier, field, row_index], lower, upper) format = "%Y-%m-%d %H:%M:%S" return datetime.fromtimestamp(epoch).strftime(format)
def generate_foreign_key(self, row_index, field, field_options): foreign_table = field_options foreign_row_generator = RowGenerator.get_instance(self.schema, self.database, foreign_table, self.config) foreign_table_bootstrap_count = int(float(self.config['mysql']['schemas'][self.schema]['tables'][foreign_table][self.database]['size'])) foreign_row_index = pseudorandom_long([self.specifier, field, row_index], foreign_table_bootstrap_count) return foreign_row_generator.generate_primary_key(foreign_row_index)
def generate_field(self, field, row_index): field_specification = self.fields[field] if field_specification.optional: should_generate = pseudorandom_long([self.specifier, field, 'optional', row_index], 2) if not should_generate: return None return self.field_generators[field_specification.type](row_index, field, field_specification.options)