summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/Components/OptionsArray.php19
-rw-r--r--src/Statements/SetStatement.php29
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);
+ }
}