diff options
author | Dan Ungureanu <udan1107@gmail.com> | 2015-07-23 12:27:58 +0300 |
---|---|---|
committer | Dan Ungureanu <udan1107@gmail.com> | 2015-07-23 12:27:58 +0300 |
commit | d855fb9c59bbf45a980be4b281de0c58a85d742d (patch) | |
tree | cc1ee1cd0f001da38c49c030cc23d689abe8e147 /src/Statements/TransactionStatement.php | |
parent | 367981588c47f5dc2f3c8cffa9b0038f5d807e65 (diff) | |
download | sql-parser-d855fb9c59bbf45a980be4b281de0c58a85d742d.zip sql-parser-d855fb9c59bbf45a980be4b281de0c58a85d742d.tar.gz sql-parser-d855fb9c59bbf45a980be4b281de0c58a85d742d.tar.bz2 |
Added the missing files.
Diffstat (limited to 'src/Statements/TransactionStatement.php')
-rw-r--r-- | src/Statements/TransactionStatement.php | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/src/Statements/TransactionStatement.php b/src/Statements/TransactionStatement.php new file mode 100644 index 0000000..e7a13de --- /dev/null +++ b/src/Statements/TransactionStatement.php @@ -0,0 +1,123 @@ +<?php + +/** + * Transaction statement. + * + * @package SqlParser + * @subpackage Statements + */ +namespace SqlParser\Statements; + +use SqlParser\Parser; +use SqlParser\Statement; +use SqlParser\Token; +use SqlParser\TokensList; +use SqlParser\Components\Expression; +use SqlParser\Components\OptionsArray; + +/** + * Transaction statement. + * + * @category Statements + * @package SqlParser + * @subpackage Statements + * @author Dan Ungureanu <udan1107@gmail.com> + * @license http://opensource.org/licenses/GPL-2.0 GNU Public License + */ +class TransactionStatement extends Statement +{ + + /** + * START TRANSACTION and BEGIN + * + * @var int + */ + const TYPE_BEGIN = 1; + + /** + * COMMIT and ROLLBACK + * + * @var int + */ + const TYPE_END = 2; + + /** + * The type of this query. + * + * @var int + */ + public $type; + + /** + * The list of statements in this transaction. + * + * @var Statements[] + */ + public $statements; + + /** + * The ending transaction statement which may be a `COMMIT` or a `ROLLBACK`. + * + * @var TransactionStatement + */ + public $end; + + /** + * Options for this query. + * + * @var array + */ + public static $OPTIONS = array( + 'START TRANSACTION' => 1, + 'BEGIN' => 1, + 'COMMIT' => 1, + 'ROLLBACK' => 1, + 'WITH CONSISTENT SNAPSHOT' => 2, + 'WORK' => 2, + 'AND NO CHAIN' => 3, + 'AND CHAIN' => 3, + 'RELEASE' => 4, + 'NO RELEASE' => 4, + ); + + /** + * @param Parser $parser The instance that requests parsing. + * @param TokensList $list The list of tokens to be parsed. + * + * @return void + */ + public function parse(Parser $parser, TokensList $list) + { + $this->options = OptionsArray::parse( + $parser, + $list, + static::$OPTIONS + ); + + // Checks the type of this query. + if (($this->options->has('START TRANSACTION')) + || ($this->options->has('BEGIN')) + ) { + $this->type = TransactionStatement::TYPE_BEGIN; + } elseif (($this->options->has('COMMIT')) + || ($this->options->has('ROLLBACK')) + ) { + $this->type = TransactionStatement::TYPE_END; + } + } + + /** + * @return string + */ + public function build() + { + $ret = OptionsArray::build($this->options); + if ($this->type === TransactionStatement::TYPE_BEGIN) { + foreach ($this->statements as $statement) { + $ret .= ';' . $statement->build(); + } + $ret .= ';' . $this->end->build(); + } + return $ret; + } +} |