You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
2.5 KiB
100 lines
2.5 KiB
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
/**
|
|
* @author Robert Strutts <Robert@TryingToScale.com>
|
|
* @copyright Copyright (c) 2022, Robert Strutts.
|
|
* @license MIT
|
|
*/
|
|
|
|
namespace tts\database;
|
|
|
|
final class dummy_data {
|
|
|
|
private $pdo;
|
|
private $random_engine;
|
|
|
|
public function __construct($pdo) {
|
|
$this->pdo = $pdo;
|
|
$this->random_engine = new \tts\random_engine();
|
|
}
|
|
|
|
/*
|
|
* Helper for add_dummy_data and get_dummy_data.
|
|
* Purpose: To return ONE ROW of junk/dummy data from input data.
|
|
* @param array $data
|
|
* @retval array of random dummy data AKA one row worth of it.
|
|
*/
|
|
|
|
private function use_dummy_data(array $data): array {
|
|
$ret = [];
|
|
foreach ($data as $field => $array_values) {
|
|
$array_count = \bs_tts\common::get_count($array_values);
|
|
if ($array_count) {
|
|
$ret[$field] = $array_values[$this->random_engine->get_int(0, $array_count - 1)];
|
|
}
|
|
}
|
|
return $ret;
|
|
}
|
|
|
|
/**
|
|
* Inserts Dummy Data to DB
|
|
* @param int $num_rows to add/make
|
|
* @param array $data sample data EX: array('fname'=>array('bob','kim','lisa', ect...), ...)
|
|
* @retval bool true
|
|
*/
|
|
public function add_dummy_data(string $table, int $num_rows, array $data): bool {
|
|
for ($i = 0; $i < $num_rows; $i++) {
|
|
$bind_data = $this->use_dummy_data($data);
|
|
$fields = [];
|
|
foreach ($data as $field => $array_values) {
|
|
$fields[] = $field;
|
|
}
|
|
|
|
$sql = "INSERT INTO `{$table}` "
|
|
. "(" . implode(", ", $fields) . ") "
|
|
. "VALUES (:" . implode(", :", $fields) . ");";
|
|
|
|
$bind = [];
|
|
foreach ($fields as $field) {
|
|
$bind[":$field"] = $bind_data[$field];
|
|
}
|
|
unset($bind_data);
|
|
unset($fields);
|
|
|
|
$pdo_stmt = $this->pdo->prepare($sql);
|
|
$exec = $pdo_stmt->execute($bind);
|
|
unset($bind);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Make an array of fields for a fake row of dummy data out of input data.
|
|
* @param int $num_rows to make
|
|
* @param array $data sample data
|
|
* @retval array of rows with dummy data in it.
|
|
*/
|
|
public function get_dummy_data(int $num_rows, array $data): array {
|
|
if ($num_rows > 100) {
|
|
throw new \LengthException("Generating too much dummy data via \$num_rows!");
|
|
}
|
|
$ret = [];
|
|
for ($i = 0; $i < $num_rows; $i++) {
|
|
$ret[] = $this->use_dummy_data($data);
|
|
}
|
|
return $ret;
|
|
}
|
|
|
|
public function get_dummy_data_generator(
|
|
int $num_rows,
|
|
array $data
|
|
): \Generator {
|
|
for ($i = 0; $i < $num_rows; $i++) {
|
|
yield $this->use_dummy_data($data);
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
|