Skip to content

Commit d6888fb

Browse files
committed
Fix ALTER statement not constructed properly, #33
Signed-off-by: Durgesh <007durgesh219@gmail.com>
1 parent 22debcf commit d6888fb

2 files changed

Lines changed: 50 additions & 17 deletions

File tree

‎src/Components/AlterOperation.php‎

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,19 +26,31 @@ class AlterOperation extends Component
2626
{
2727

2828
/**
29-
* All alter operations.
30-
*
29+
* All database options
30+
*
3131
* @var array
3232
*/
33-
public static $OPTIONS = array(
33+
public static $DB_OPTIONS = array(
34+
'CHARACTER SET' => array(1, 'var'),
35+
'CHARSET' => array(1, 'var'),
36+
'DEFAULT CHARACTER SET' => array(1, 'var'),
37+
'DEFAULT CHARSET' => array(1, 'var'),
38+
'UPGRADE' => array(1, 'var'),
39+
'COLLATE' => array(2, 'var'),
40+
'DEFAULT COLLATE' => array(2, 'var'),
41+
);
3442

35-
// table_options
43+
/**
44+
* All table options
45+
*
46+
* @var array
47+
*/
48+
public static $TABLE_OPTIONS = array(
3649
'ENGINE' => array(1, 'var='),
3750
'AUTO_INCREMENT' => array(1, 'var='),
3851
'AVG_ROW_LENGTH' => array(1, 'var'),
3952
'MAX_ROWS' => array(1, 'var'),
4053
'ROW_FORMAT' => array(1, 'var'),
41-
4254
'ADD' => 1,
4355
'ALTER' => 1,
4456
'ANALYZE' => 1,
@@ -60,6 +72,7 @@ class AlterOperation extends Component
6072
'RENAME' => 1,
6173
'REORGANIZE' => 1,
6274
'REPAIR' => 1,
75+
'UPGRADE' => 1,
6376

6477
'COLUMN' => 2,
6578
'CONSTRAINT' => 2,
@@ -75,11 +88,15 @@ class AlterOperation extends Component
7588
'SPATIAL' => 2,
7689
'TABLESPACE' => 2,
7790
'INDEX' => 2,
91+
);
7892

79-
'DEFAULT CHARACTER SET' => array(3, 'var'),
80-
'DEFAULT CHARSET' => array(3, 'var'),
81-
82-
'COLLATE' => array(4, 'var'),
93+
/**
94+
* All view options
95+
*
96+
* @var array
97+
*/
98+
public static $VIEW_OPTIONS = array(
99+
'AS' => 1,
83100
);
84101

85102
/**
@@ -165,7 +182,7 @@ public static function parse(Parser $parser, TokensList $list, array $options =
165182
}
166183

167184
if ($state === 0) {
168-
$ret->options = OptionsArray::parse($parser, $list, static::$OPTIONS);
185+
$ret->options = OptionsArray::parse($parser, $list, $options);
169186
$state = 1;
170187
} elseif ($state === 1) {
171188
$ret->field = Expression::parse(

‎src/Statements/AlterStatement.php‎

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,15 @@ class AlterStatement extends Statement
5151
'ONLINE' => 1,
5252
'OFFLINE' => 1,
5353
'IGNORE' => 2,
54+
55+
'DATABASE' => 3,
56+
'EVENT' => 3,
57+
'FUNCTION' => 3,
58+
'PROCEDURE' => 3,
59+
'SERVER' => 3,
60+
'TABLE' => 3,
61+
'TABLESPACE' => 3,
62+
'VIEW' => 3,
5463
);
5564

5665
/**
@@ -67,16 +76,14 @@ public function parse(Parser $parser, TokensList $list)
6776
$list,
6877
static::$OPTIONS
6978
);
70-
71-
// Skipping `TABLE`.
72-
$list->getNextOfTypeAndValue(Token::TYPE_KEYWORD, 'TABLE');
79+
++$list->idx;
7380

7481
// Parsing affected table.
7582
$this->table = Expression::parse(
7683
$parser,
7784
$list,
7885
array(
79-
'parseField' => 'column',
86+
'parseField' => 'table',
8087
'breakOnAlias' => true,
8188
)
8289
);
@@ -114,7 +121,16 @@ public function parse(Parser $parser, TokensList $list)
114121
}
115122

116123
if ($state === 0) {
117-
$this->altered[] = AlterOperation::parse($parser, $list);
124+
$options = array();
125+
if ($this->options->has('DATABASE')) {
126+
$options = AlterOperation::$DB_OPTIONS;
127+
} elseif ($this->options->has('TABLE')) {
128+
$options = AlterOperation::$TABLE_OPTIONS;
129+
} elseif ($this->options->has('VIEW')) {
130+
$options = AlterOperation::$VIEW_OPTIONS;
131+
}
132+
133+
$this->altered[] = AlterOperation::parse($parser, $list, $options);
118134
$state = 1;
119135
} elseif ($state === 1) {
120136
if (($token->type === Token::TYPE_OPERATOR) && ($token->value === ',')) {
@@ -135,7 +151,7 @@ public function build()
135151
}
136152

137153
return 'ALTER ' . OptionsArray::build($this->options)
138-
. ' TABLE ' . Expression::build($this->table)
139-
. ' ' . implode(', ', $tmp);
154+
. ' ' . Expression::build($this->table)
155+
. ' ' . implode(', ', $tmp);
140156
}
141157
}

0 commit comments

Comments
 (0)