Skip to content

Commit

Permalink
Fix ALTER statement not constructed properly, #33
Browse files Browse the repository at this point in the history
Signed-off-by: Durgesh <007durgesh219@gmail.com>
  • Loading branch information
007durgesh219 committed Feb 19, 2016
1 parent 22debcf commit d6888fb
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 17 deletions.
37 changes: 27 additions & 10 deletions src/Components/AlterOperation.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,19 +26,31 @@ class AlterOperation extends Component
{

/**
* All alter operations.
*
* All database options
*
* @var array
*/
public static $OPTIONS = array(
public static $DB_OPTIONS = array(
'CHARACTER SET' => array(1, 'var'),
'CHARSET' => array(1, 'var'),
'DEFAULT CHARACTER SET' => array(1, 'var'),
'DEFAULT CHARSET' => array(1, 'var'),
'UPGRADE' => array(1, 'var'),
'COLLATE' => array(2, 'var'),
'DEFAULT COLLATE' => array(2, 'var'),
);

// table_options
/**
* All table options
*
* @var array
*/
public static $TABLE_OPTIONS = array(
'ENGINE' => array(1, 'var='),
'AUTO_INCREMENT' => array(1, 'var='),
'AVG_ROW_LENGTH' => array(1, 'var'),
'MAX_ROWS' => array(1, 'var'),
'ROW_FORMAT' => array(1, 'var'),

'ADD' => 1,
'ALTER' => 1,
'ANALYZE' => 1,
Expand All @@ -60,6 +72,7 @@ class AlterOperation extends Component
'RENAME' => 1,
'REORGANIZE' => 1,
'REPAIR' => 1,
'UPGRADE' => 1,

'COLUMN' => 2,
'CONSTRAINT' => 2,
Expand All @@ -75,11 +88,15 @@ class AlterOperation extends Component
'SPATIAL' => 2,
'TABLESPACE' => 2,
'INDEX' => 2,
);

'DEFAULT CHARACTER SET' => array(3, 'var'),
'DEFAULT CHARSET' => array(3, 'var'),

'COLLATE' => array(4, 'var'),
/**
* All view options
*
* @var array
*/
public static $VIEW_OPTIONS = array(
'AS' => 1,
);

/**
Expand Down Expand Up @@ -165,7 +182,7 @@ public static function parse(Parser $parser, TokensList $list, array $options =
}

if ($state === 0) {
$ret->options = OptionsArray::parse($parser, $list, static::$OPTIONS);
$ret->options = OptionsArray::parse($parser, $list, $options);
$state = 1;
} elseif ($state === 1) {
$ret->field = Expression::parse(
Expand Down
30 changes: 23 additions & 7 deletions src/Statements/AlterStatement.php
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,15 @@ class AlterStatement extends Statement
'ONLINE' => 1,
'OFFLINE' => 1,
'IGNORE' => 2,

'DATABASE' => 3,
'EVENT' => 3,
'FUNCTION' => 3,
'PROCEDURE' => 3,
'SERVER' => 3,
'TABLE' => 3,
'TABLESPACE' => 3,
'VIEW' => 3,
);

/**
Expand All @@ -67,16 +76,14 @@ public function parse(Parser $parser, TokensList $list)
$list,
static::$OPTIONS
);

// Skipping `TABLE`.
$list->getNextOfTypeAndValue(Token::TYPE_KEYWORD, 'TABLE');
++$list->idx;

// Parsing affected table.
$this->table = Expression::parse(
$parser,
$list,
array(
'parseField' => 'column',
'parseField' => 'table',
'breakOnAlias' => true,
)
);
Expand Down Expand Up @@ -114,7 +121,16 @@ public function parse(Parser $parser, TokensList $list)
}

if ($state === 0) {
$this->altered[] = AlterOperation::parse($parser, $list);
$options = array();
if ($this->options->has('DATABASE')) {
$options = AlterOperation::$DB_OPTIONS;
} elseif ($this->options->has('TABLE')) {
$options = AlterOperation::$TABLE_OPTIONS;
} elseif ($this->options->has('VIEW')) {
$options = AlterOperation::$VIEW_OPTIONS;
}

$this->altered[] = AlterOperation::parse($parser, $list, $options);
$state = 1;
} elseif ($state === 1) {
if (($token->type === Token::TYPE_OPERATOR) && ($token->value === ',')) {
Expand All @@ -135,7 +151,7 @@ public function build()
}

return 'ALTER ' . OptionsArray::build($this->options)
. ' TABLE ' . Expression::build($this->table)
. ' ' . implode(', ', $tmp);
. ' ' . Expression::build($this->table)
. ' ' . implode(', ', $tmp);
}
}

0 comments on commit d6888fb

Please sign in to comment.