-
Notifications
You must be signed in to change notification settings - Fork 0
/
seeder.php
98 lines (79 loc) · 2.28 KB
/
seeder.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
<?php
require_once 'database.php';
function seed($connection, $count)
{
$start = microtime(true);
$chunk = 1000;
if ($count < $chunk) {
$chunk = $count;
}
toggle_keys($connection, 'users', false);
toggle_keys($connection, 'emails', false);
for ($i = 0; $i < $count / $chunk; $i++) {
$users = [];
$emails = [];
for ($j = 0; $j < $chunk; $j++) {
$name = generate_name();
$emailName = str_replace(' ', '_', $name);
$email = "{$emailName}@example.com";
$confirmed = rand(0, 1);
$expiry = rand(time() - 2629743, time() + 2629743);
$checked = rand(0, 1);
$valid = $checked === 1 ? rand(0, 1) : 0;
$users[] = "('{$name}','{$email}',{$expiry},{$confirmed})";
$emails[] = "('{$email}',{$checked},{$valid})";
}
$usersList = implode(',', $users);
$usersQuery = <<<QUERY
INSERT
INTO users
(username, email, validts, email_confirmed)
VALUES
{$usersList}
QUERY;
$emailsList = implode(',', $emails);
$emailsQuery = <<<QUERY
INSERT
INTO emails
(email, checked, valid)
VALUES
{$emailsList}
QUERY;
if (!mysqli_query($connection, $usersQuery)) {
die(mysqli_error($connection));
}
if (!mysqli_query($connection, $emailsQuery)) {
die(mysqli_error($connection));
}
}
toggle_keys($connection, 'users', true);
toggle_keys($connection, 'emails', true);
$end = microtime(true);
$time = round($end - $start, 4);
echo "Inserted {$count} rows. It took {$time} seconds";
}
function generate_name()
{
$chars = range('a', 'z');
$nameArray = array_rand($chars, rand(4, 10));
$surnameArray = array_rand($chars, rand(6, 15));
$name = '';
foreach ($nameArray as $index) {
$name .= $chars[$index];
}
$surname = '';
foreach ($surnameArray as $index) {
$surname .= $chars[$index];
}
return "{$name} {$surname}";
}
function toggle_keys($connection, $table, $state)
{
$action = $state ? 'ENABLE' : 'DISABLE';
$query = <<<QUERY
ALTER TABLE {$table} {$action} KEYS;
QUERY;
if (!mysqli_query($connection, $query)) {
die("Unable to {$action} keys for table {$table}!");
}
}