1#!/usr/bin/env php
2<?php
3
4function read_sql_file(string $file)
5{
6    $comment_regex = '/(?<!:)\/\/.*|\/\\*(\s|.)*?\*\/|--[^\n]+/';
7    $lines = explode("\n", preg_replace($comment_regex, '', co::readFile($file)));
8    $init_sql = [];
9    $multi = false;
10    foreach ($lines as $index => $line) {
11        if (strlen($line) === 0) {
12            continue;
13        }
14        if (substr($line, -1, 1) !== ';') {
15            if (!$multi) {
16                $multi = true;
17                goto _new_line;
18            } else {
19                _append:
20                $end_line = &$init_sql[count($init_sql) - 1];
21                $end_line = $end_line . $line . "\n";
22            }
23        } else {
24            if ($multi) {
25                $multi = false;
26                goto _append;
27            } else {
28                $multi = false;
29                _new_line:
30                $init_sql[] = "{$line}";
31            }
32        }
33    }
34
35    return $init_sql;
36}
37
38require __DIR__ . '/include/config.php';
39
40Swoole\Coroutine\run(function () {
41    echo "[DB-init] initialization MySQL database...\n";
42    $mysql = new Swoole\Coroutine\MySQL();
43    $connected = $mysql->connect([
44        'host' => MYSQL_SERVER_HOST,
45        'port' => MYSQL_SERVER_PORT,
46        'user' => MYSQL_SERVER_USER,
47        'password' => MYSQL_SERVER_PWD,
48        'database' => MYSQL_SERVER_DB
49    ]);
50    if (!$connected) {
51        echo "[DB-init] Connect failed! Error#{$mysql->connect_errno}: {$mysql->connect_error}\n";
52        exit(1);
53    }
54    $sql_file = read_sql_file(__DIR__ . '/test.sql');
55    foreach ($sql_file as $line) {
56        if (!$mysql->query($line)) {
57            echo "[DB-init] Failed! Error#{$mysql->errno}: {$mysql->error}\n";
58            exit(1);
59        }
60    }
61    echo "[DB-init] Done!\n";
62});
63