Skip to content

Commit 611cb88

Browse files
committed
Merge remote-tracking branch 'remotes/barmi/master'
2 parents 6322da3 + dbc40e4 commit 611cb88

File tree

4 files changed

+35
-3
lines changed

4 files changed

+35
-3
lines changed

composer.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@
99
"name": "Carlos Cima",
1010
"role": "Developer"
1111
},
12+
{
13+
"name": "barmi",
14+
"role": "Developer"
15+
},
1216
{
1317
"name": "osapon",
1418
"role": "Developer"

src/Model/Column.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@ class Column
7777
*/
7878
private $defaultValue;
7979

80+
private $virtual;
81+
8082
/**
8183
* @var string
8284
*/
@@ -110,6 +112,16 @@ public function __construct($name)
110112
$this->name = $name;
111113
}
112114

115+
public function setVirtual($virtual)
116+
{
117+
$this->virtual = $virtual;
118+
}
119+
120+
public function getVirtual($virtual)
121+
{
122+
return $this->virtual;
123+
}
124+
113125
/**
114126
* @return string
115127
*/
@@ -435,6 +447,10 @@ public function generateCreationScript()
435447
$columnOptions[] = sprintf('DEFAULT %s', $this->defaultValue);
436448
}
437449

450+
if (!empty($this->virtual)) {
451+
$columnOptions[] = sprintf('GENERATED ALWAYS AS (%s) VIRTUAL', $this->virtual);
452+
}
453+
438454
if (!empty($this->onUpdateValue)) {
439455
$columnOptions[] = sprintf('ON UPDATE %s', $this->onUpdateValue);
440456
}

src/Parser.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ public function parseDatabase($sqlScript)
2323
{
2424
$database = new Database();
2525

26+
// skshin for remove PARTITION
27+
$sqlScript = preg_replace('/[\(]*PARTITION.*/', ';', $sqlScript);
28+
//$sqlScript = preg_replace('/(\s|\()*PARTITION.*ENGINE = .*$/', '', $sqlScript);
29+
2630
$tables = $this->parseTables($this->convertStringsToBase64($sqlScript));
2731

2832
foreach ($tables as $table) {
@@ -137,6 +141,7 @@ public function parseColumns(Table $table)
137141
$nullable = $matches['nullable'][$i];
138142
$autoIncrement = $matches['autoIncrement'][$i];
139143
$defaultValue = $matches['defaultValue'][$i];
144+
$virtual = $matches['virtual'][$i];
140145
$onUpdateValue = $matches['onUpdateValue'][$i];
141146
$comment = $matches['comment'][$i];
142147
$characterSet = $matches['characterSet'][$i];
@@ -156,6 +161,10 @@ public function parseColumns(Table $table)
156161
$column->setNullable($nullable !== 'NOT NULL');
157162
$column->setAutoIncrement(!empty($autoIncrement));
158163

164+
if (!empty($virtual)) {
165+
$column->setVirtual($virtual);
166+
}
167+
159168
if (!empty($defaultValue)) {
160169
$column->setDefaultValue($defaultValue);
161170
}

src/RegExpPattern.php

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ class RegExpPattern
2727
'(?:tiny|medium|long)?blob',
2828
'enum\(.+\)',
2929
'set\(.+\)',
30+
'json',
3031
];
3132

3233
/**
@@ -35,7 +36,7 @@ class RegExpPattern
3536
public static function tables()
3637
{
3738
$pattern = '/(?<creationScript>CREATE\s+TABLE\s+(?<ifNotExists>IF NOT EXISTS)?\s*`(?<tableName>\S+)`\s+';
38-
$pattern .= '\((?<tableDefinition>[^\/]+?)\)';
39+
$pattern .= '\((?<tableDefinition>.+?)\)';
3940
$pattern .= '(';
4041
$pattern .= '(?:\s+ENGINE\s*=\s*(?<engine>[^;\s]+))?\s*';
4142
$pattern .= '|';
@@ -73,6 +74,7 @@ public static function column()
7374
$pattern .= '(?<nullable>NULL|NOT NULL)?\s*';
7475
$pattern .= '(?<autoIncrement>AUTO_INCREMENT)?\s*';
7576
$pattern .= '(?:DEFAULT (?<defaultValue>\S+|\'[^\']+\'))?\s*';
77+
$pattern .= '(?:GENERATED ALWAYS AS \((?<virtual>.+)\) VIRTUAL)?\s*';
7678
$pattern .= '(?:ON UPDATE (?<onUpdateValue>\S+))?\s*';
7779
$pattern .= '(?:COMMENT \'(?<comment>([^\']|\'\')+)\')?\s*';
7880
$pattern .= '(?:,|$)/';
@@ -125,8 +127,9 @@ public static function index()
125127
$pattern .= '(?<fullText>FULLTEXT)?\s*';
126128
$pattern .= 'KEY\s+`(?<name>\S+?)`\s+';
127129
$pattern .= '\((?<columns>(?:`[^`]+`(?:\(\d+\))?,?)+)\)\s*';
128-
$pattern .= '(?<options>[^,]+?)?\s*';
129-
$pattern .= '(?:,|$)/';
130+
$pattern .= '(?<options>[^(\)|,)]+?)?\s*';
131+
//$pattern .= '(?:,|$)/';
132+
$pattern .= '/';
130133
$pattern .= 'i'; // modifier
131134

132135
return $pattern;

0 commit comments

Comments
 (0)