summaryrefslogtreecommitdiffstats
path: root/src/Statements/TransactionStatement.php
diff options
context:
space:
mode:
authorDan Ungureanu <udan1107@gmail.com>2015-07-23 12:27:58 +0300
committerDan Ungureanu <udan1107@gmail.com>2015-07-23 12:27:58 +0300
commitd855fb9c59bbf45a980be4b281de0c58a85d742d (patch)
treecc1ee1cd0f001da38c49c030cc23d689abe8e147 /src/Statements/TransactionStatement.php
parent367981588c47f5dc2f3c8cffa9b0038f5d807e65 (diff)
downloadsql-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.php123
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;
+ }
+}