diff options
-rw-r--r-- | src/Components/OptionsArray.php | 19 | ||||
-rw-r--r-- | src/Statements/SetStatement.php | 29 |
2 files changed, 48 insertions, 0 deletions
diff --git a/src/Components/OptionsArray.php b/src/Components/OptionsArray.php index 3d2fded..c048e19 100644 --- a/src/Components/OptionsArray.php +++ b/src/Components/OptionsArray.php @@ -242,6 +242,25 @@ class OptionsArray extends Component } } + /* + * We reached the end of statement without getting a value + * for an option for which a value was required + */ + if ($state === 1 + && $lastOption + && ($lastOption[1] == 'expr' + || $lastOption[1] == 'var' + || $lastOption[1] == 'var=') + ) { + $parser->error( + sprintf( + __('Value/Expression for the option %1$s was expected'), + $ret->options[$lastOptionId]['name'] + ), + $list->tokens[$list->idx - 1] + ); + } + if (empty($options['_UNSORTED'])) { ksort($ret->options); } diff --git a/src/Statements/SetStatement.php b/src/Statements/SetStatement.php index d412853..a5cffa2 100644 --- a/src/Statements/SetStatement.php +++ b/src/Statements/SetStatement.php @@ -10,6 +10,7 @@ namespace SqlParser\Statements; use SqlParser\Statement; use SqlParser\Components\SetOperation; +use SqlParser\Components\OptionsArray; /** * `SET` statement. @@ -35,9 +36,37 @@ class SetStatement extends Statement ); /** + * Possible exceptions in SET statment + * + * @var array + */ + public static $OPTIONS = array( + 'CHARSET' => array(3, 'var'), + 'CHARACTER SET' => array(3, 'var'), + 'NAMES' => array(3, 'var'), + 'PASSWORD' => array(3, 'expr'), + ); + + /** + * Options used in current statement + * + * @var OptionsArray[] + */ + public $options; + + /** * The updated values. * * @var SetOperation[] */ public $set; + + /** + * @return string + */ + public function build() + { + return 'SET ' . OptionsArray::build($this->options) + . ' ' . SetOperation::build($this->set); + } } |