summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDan Ungureanu <udan1107@gmail.com>2015-07-08 00:09:11 +0300
committerDan Ungureanu <udan1107@gmail.com>2015-07-08 00:09:34 +0300
commit283349508291d70e6e06f0ed58ab1c174f362775 (patch)
treeadb682104497da623f203f140e6d2b5290af83df /src
parente58d23067743641529348e4a1cc93cf1c73a85a5 (diff)
downloadsql-parser-283349508291d70e6e06f0ed58ab1c174f362775.zip
sql-parser-283349508291d70e6e06f0ed58ab1c174f362775.tar.gz
sql-parser-283349508291d70e6e06f0ed58ab1c174f362775.tar.bz2
Fixed the 'CREATE' statement for long queries, where there may be more than one 'END' keyword.
Added 'CHARSET' as synonym for 'CHARACTER SET'. Updated contexts definitions.
Diffstat (limited to 'src')
-rw-r--r--src/Contexts/ContextMySql50000.php2
-rw-r--r--src/Contexts/ContextMySql50100.php2
-rw-r--r--src/Contexts/ContextMySql50500.php2
-rw-r--r--src/Contexts/ContextMySql50600.php2
-rw-r--r--src/Contexts/ContextMySql50700.php2
-rw-r--r--src/Fragments/AlterFragment.php1
-rw-r--r--src/Fragments/KeyFragment.php9
-rw-r--r--src/Statements/CreateStatement.php36
8 files changed, 29 insertions, 27 deletions
diff --git a/src/Contexts/ContextMySql50000.php b/src/Contexts/ContextMySql50000.php
index 7db5fc3..312a53e 100644
--- a/src/Contexts/ContextMySql50000.php
+++ b/src/Contexts/ContextMySql50000.php
@@ -149,7 +149,7 @@ class ContextMySql50000 extends Context
'FOR EACH ROW' => 7, 'SQL SECURITY' => 7,
'CHARACTER SET' => 7, 'IF NOT EXISTS' => 7,
'DATA DIRECTORY' => 7,
- 'DEFAULT COLLATE' => 7, 'INDEX DIRECTORY' => 7,
+ 'DEFAULT CHARSET' => 7, 'DEFAULT COLLATE' => 7, 'INDEX DIRECTORY' => 7,
'DEFAULT CHARACTER SET' => 7,
'XML' => 9,
diff --git a/src/Contexts/ContextMySql50100.php b/src/Contexts/ContextMySql50100.php
index a5c4bef..0e5a574 100644
--- a/src/Contexts/ContextMySql50100.php
+++ b/src/Contexts/ContextMySql50100.php
@@ -160,7 +160,7 @@ class ContextMySql50100 extends Context
'FOR EACH ROW' => 7, 'SQL SECURITY' => 7,
'CHARACTER SET' => 7, 'IF NOT EXISTS' => 7,
'DATA DIRECTORY' => 7,
- 'DEFAULT COLLATE' => 7, 'INDEX DIRECTORY' => 7,
+ 'DEFAULT CHARSET' => 7, 'DEFAULT COLLATE' => 7, 'INDEX DIRECTORY' => 7,
'DEFAULT CHARACTER SET' => 7,
'XML' => 9,
diff --git a/src/Contexts/ContextMySql50500.php b/src/Contexts/ContextMySql50500.php
index 3faf785..426bd52 100644
--- a/src/Contexts/ContextMySql50500.php
+++ b/src/Contexts/ContextMySql50500.php
@@ -165,7 +165,7 @@ class ContextMySql50500 extends Context
'FOR EACH ROW' => 7, 'SQL SECURITY' => 7,
'CHARACTER SET' => 7, 'IF NOT EXISTS' => 7,
'DATA DIRECTORY' => 7,
- 'DEFAULT COLLATE' => 7, 'INDEX DIRECTORY' => 7,
+ 'DEFAULT CHARSET' => 7, 'DEFAULT COLLATE' => 7, 'INDEX DIRECTORY' => 7,
'DEFAULT CHARACTER SET' => 7,
'XML' => 9,
diff --git a/src/Contexts/ContextMySql50600.php b/src/Contexts/ContextMySql50600.php
index 6a1af74..e091314 100644
--- a/src/Contexts/ContextMySql50600.php
+++ b/src/Contexts/ContextMySql50600.php
@@ -171,7 +171,7 @@ class ContextMySql50600 extends Context
'FOR EACH ROW' => 7, 'SQL SECURITY' => 7,
'CHARACTER SET' => 7, 'IF NOT EXISTS' => 7,
'DATA DIRECTORY' => 7,
- 'DEFAULT COLLATE' => 7, 'INDEX DIRECTORY' => 7,
+ 'DEFAULT CHARSET' => 7, 'DEFAULT COLLATE' => 7, 'INDEX DIRECTORY' => 7,
'DEFAULT CHARACTER SET' => 7,
'XML' => 9,
diff --git a/src/Contexts/ContextMySql50700.php b/src/Contexts/ContextMySql50700.php
index ac81e8a..207ffd2 100644
--- a/src/Contexts/ContextMySql50700.php
+++ b/src/Contexts/ContextMySql50700.php
@@ -179,7 +179,7 @@ class ContextMySql50700 extends Context
'FOR EACH ROW' => 7, 'SQL SECURITY' => 7,
'CHARACTER SET' => 7, 'IF NOT EXISTS' => 7,
'DATA DIRECTORY' => 7,
- 'DEFAULT COLLATE' => 7, 'INDEX DIRECTORY' => 7,
+ 'DEFAULT CHARSET' => 7, 'DEFAULT COLLATE' => 7, 'INDEX DIRECTORY' => 7,
'DEFAULT CHARACTER SET' => 7,
'XML' => 9,
diff --git a/src/Fragments/AlterFragment.php b/src/Fragments/AlterFragment.php
index b5c66e8..fbcce4c 100644
--- a/src/Fragments/AlterFragment.php
+++ b/src/Fragments/AlterFragment.php
@@ -69,6 +69,7 @@ class AlterFragment extends Fragment
'INDEX' => 4,
'DEFAULT CHARACTER SET' => array(5, 'var'),
+ 'DEFAULT CHARSET' => array(5, 'var'),
'COLLATE' => array(6, 'var'),
);
diff --git a/src/Fragments/KeyFragment.php b/src/Fragments/KeyFragment.php
index 1964cd2..c27d745 100644
--- a/src/Fragments/KeyFragment.php
+++ b/src/Fragments/KeyFragment.php
@@ -67,7 +67,14 @@ class KeyFragment extends Fragment
*/
public $options;
-
+ /**
+ * Constructor.
+ *
+ * @param string $name The name of the key.
+ * @param array $columns The columns covered by this key.
+ * @param string $type The type of this key.
+ * @param OptionsFragment $options The options of this key.
+ */
public function __construct($name = null, array $columns = array(),
$type = null, $options = null
) {
diff --git a/src/Statements/CreateStatement.php b/src/Statements/CreateStatement.php
index 71557c7..0fb5193 100644
--- a/src/Statements/CreateStatement.php
+++ b/src/Statements/CreateStatement.php
@@ -40,7 +40,6 @@ class CreateStatement extends Statement
// CREATE TABLE
'TEMPORARY' => 1,
- 'IF NOT EXISTS' => 2,
// CREATE FUNCTION / PROCEDURE and CREATE VIEW
'DEFINER' => array(1, 'var='),
@@ -62,6 +61,9 @@ class CreateStatement extends Statement
'TRIGGER' => 6,
'USER' => 6,
'VIEW' => 6,
+
+ // CREATE TABLE
+ 'IF NOT EXISTS' => 7,
);
/**
@@ -73,12 +75,14 @@ class CreateStatement extends Statement
'ENGINE' => array(1, 'var='),
'AUTO_INCREMENT' => array(2, 'var='),
'AVG_ROW_LENGTH' => array(3, 'var'),
- 'DEFAULT CHARACTER SET' => array(4, 'var'),
- 'CHARACTER SET' => array(4, 'var'),
+ 'CHARACTER SET' => array(4, 'var='),
+ 'CHARSET' => array(4, 'var='),
+ 'DEFAULT CHARACTER SET' => array(4, 'var='),
+ 'DEFAULT CHARSET' => array(4, 'var='),
'CHECKSUM' => array(5, 'var'),
- 'DEFAULT COLLATE' => array(5, 'var'),
- 'COLLATE' => array(6, 'var'),
- 'COMMENT' => array(7, 'var'),
+ 'DEFAULT COLLATE' => array(5, 'var='),
+ 'COLLATE' => array(6, 'var='),
+ 'COMMENT' => array(7, 'var='),
'CONNECTION' => array(8, 'var'),
'DATA DIRECTORY' => array(9, 'var'),
'DELAY_KEY_WRITE' => array(10, 'var'),
@@ -101,7 +105,7 @@ class CreateStatement extends Statement
* @var array
*/
public static $FUNC_OPTIONS = array(
- 'COMMENT' => array(1, 'var'),
+ 'COMMENT' => array(1, 'var='),
'LANGUAGE SQL' => 2,
'DETERMINISTIC' => 3,
'NOT DETERMINISTIC' => 3,
@@ -257,9 +261,9 @@ class CreateStatement extends Statement
$parser,
$list,
array(
- 'skipColumn' => true,
- 'noBrackets' => true,
'noAlias' => true,
+ 'noBrackets' => true,
+ 'skipColumn' => true,
)
);
++$list->idx; // Skipping field.
@@ -304,11 +308,6 @@ class CreateStatement extends Statement
for (; $list->idx < $list->count; ++$list->idx) {
$token = $list->tokens[$list->idx];
$this->body[] = $token;
- if (($token->type === Token::TYPE_KEYWORD)
- && ($token->value === 'END')
- ) {
- break;
- }
}
} else if ($this->options->has('VIEW')) {
$token = $list->getNext(); // Skipping whitespaces and comments.
@@ -342,13 +341,13 @@ class CreateStatement extends Statement
++$list->idx; // Skipping `ON`.
// Parsing the name of the table.
- $this->fields = FieldFragment::parse(
+ $this->table = FieldFragment::parse(
$parser,
$list,
array(
- 'skipColumn' => true,
'noAlias' => true,
'noBrackets' => true,
+ 'skipColumn' => true,
)
);
++$list->idx;
@@ -359,11 +358,6 @@ class CreateStatement extends Statement
for (; $list->idx < $list->count; ++$list->idx) {
$token = $list->tokens[$list->idx];
$this->body[] = $token;
- if (($token->type === Token::TYPE_KEYWORD)
- && ($token->value === 'END')
- ) {
- break;
- }
}
}
}