diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index b7c98d59..3a7773a8 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -2147,12 +2147,12 @@ parameters: - message: "#^Dynamic call to static method PHPUnit\\\\Framework\\\\Assert\\:\\:assertEmpty\\(\\)\\.$#" - count: 2 + count: 3 path: tests/Builder/CreateStatementTest.php - message: "#^Dynamic call to static method PHPUnit\\\\Framework\\\\Assert\\:\\:assertEquals\\(\\)\\.$#" - count: 35 + count: 36 path: tests/Builder/CreateStatementTest.php - diff --git a/src/Components/CreateDefinition.php b/src/Components/CreateDefinition.php index 436987ee..7f8cb0bc 100644 --- a/src/Components/CreateDefinition.php +++ b/src/Components/CreateDefinition.php @@ -201,6 +201,7 @@ public static function parse(Parser $parser, TokensList $list, array $options = * 0 -----------------------[ ( ]------------------------> 1 * * 1 --------------------[ CONSTRAINT ]------------------> 1 + * 1 ----------------------[ CHECK ]---------------------> 4 * 1 -----------------------[ key ]----------------------> 2 * 1 -------------[ constraint / column name ]-----------> 2 * @@ -244,6 +245,10 @@ public static function parse(Parser $parser, TokensList $list, array $options = } elseif ($state === 1) { if ($token->type === Token::TYPE_KEYWORD && $token->keyword === 'CONSTRAINT') { $expr->isConstraint = true; + } elseif ($token->type === Token::TYPE_KEYWORD && $token->keyword === 'CHECK') { + // Table check constraint: [CONSTRAINT [symbol]] CHECK (expr) + $expr->options = OptionsArray::parse($parser, $list, static::$FIELD_OPTIONS); + $state = 4; } elseif (($token->type === Token::TYPE_KEYWORD) && ($token->flags & Token::FLAG_KEYWORD_KEY)) { $expr->key = Key::parse($parser, $list); $state = 4; @@ -290,7 +295,7 @@ public static function parse(Parser $parser, TokensList $list, array $options = $state = 5; } elseif ($state === 5) { - if (! empty($expr->type) || ! empty($expr->key)) { + if (! empty($expr->type) || ! empty($expr->key) || $expr->options !== null) { $ret[] = $expr; } @@ -310,7 +315,7 @@ public static function parse(Parser $parser, TokensList $list, array $options = } // Last iteration was not saved. - if (! empty($expr->type) || ! empty($expr->key)) { + if (! empty($expr->type) || ! empty($expr->key) || $expr->options !== null) { $ret[] = $expr; } diff --git a/tests/Builder/CreateStatementTest.php b/tests/Builder/CreateStatementTest.php index 693bad1b..c9f763ea 100644 --- a/tests/Builder/CreateStatementTest.php +++ b/tests/Builder/CreateStatementTest.php @@ -895,4 +895,19 @@ public function testBuildCreateTableWithUppercaseHexDefault(): void $this->assertEmpty($parser->errors); $this->assertStringContainsString("DEFAULT X'FF'", $parser->statements[0]->build()); } + + public function testBuildCreateTableCheckConstraint(): void + { + $sql = "CREATE TABLE `t` (\n" + . " `a` int(11) DEFAULT NULL,\n" + . " `b` int(11) DEFAULT NULL,\n" + . " CONSTRAINT `chk_ab` CHECK (`a` < `b`),\n" + . " CHECK (`b` > 0),\n" + . " `c` int(11) DEFAULT NULL\n" + . ') ENGINE=InnoDB'; + + $parser = new Parser($sql); + $this->assertEmpty($parser->errors); + $this->assertEquals($sql, $parser->statements[0]->build()); + } } diff --git a/tests/Parser/CreateStatementTest.php b/tests/Parser/CreateStatementTest.php index 3f793431..7ee1d6a7 100644 --- a/tests/Parser/CreateStatementTest.php +++ b/tests/Parser/CreateStatementTest.php @@ -71,6 +71,7 @@ public static function createProvider(): array ['parser/parseCreateTableTimestampWithPrecision'], ['parser/parseCreateTableEnforcedCheck'], ['parser/parseCreateTableNotEnforcedCheck'], + ['parser/parseCreateTableCheckConstraint'], ['parser/parseCreateTableWithInvisibleKey'], ['parser/parseCreateTableWithParser'], ['parser/parseCreateTableUuidColumn_mariadb_100700'], diff --git a/tests/data/parser/parseCreateTableCheckConstraint.in b/tests/data/parser/parseCreateTableCheckConstraint.in new file mode 100644 index 00000000..22a9b20d --- /dev/null +++ b/tests/data/parser/parseCreateTableCheckConstraint.in @@ -0,0 +1,9 @@ +CREATE TABLE `t` ( + `a` int(11) DEFAULT NULL, + `b` int(11) DEFAULT NULL CHECK (`b` > 0), + CONSTRAINT `chk_ab` CHECK (`a` < `b`), + CONSTRAINT CHECK (`a` <> 42), + CHECK (`b` != 0xDEAD), + CONSTRAINT `chk_not_enforced` CHECK (`a` > 0) NOT ENFORCED, + `c` int(11) DEFAULT NULL +) ENGINE=InnoDB; diff --git a/tests/data/parser/parseCreateTableCheckConstraint.out b/tests/data/parser/parseCreateTableCheckConstraint.out new file mode 100644 index 00000000..33641ea5 --- /dev/null +++ b/tests/data/parser/parseCreateTableCheckConstraint.out @@ -0,0 +1,1395 @@ +{ + "query": "CREATE TABLE `t` (\n `a` int(11) DEFAULT NULL,\n `b` int(11) DEFAULT NULL CHECK (`b` > 0),\n CONSTRAINT `chk_ab` CHECK (`a` < `b`),\n CONSTRAINT CHECK (`a` <> 42),\n CHECK (`b` != 0xDEAD),\n CONSTRAINT `chk_not_enforced` CHECK (`a` > 0) NOT ENFORCED,\n `c` int(11) DEFAULT NULL\n) ENGINE=InnoDB;\n", + "lexer": { + "@type": "PhpMyAdmin\\SqlParser\\Lexer", + "str": "CREATE TABLE `t` (\n `a` int(11) DEFAULT NULL,\n `b` int(11) DEFAULT NULL CHECK (`b` > 0),\n CONSTRAINT `chk_ab` CHECK (`a` < `b`),\n CONSTRAINT CHECK (`a` <> 42),\n CHECK (`b` != 0xDEAD),\n CONSTRAINT `chk_not_enforced` CHECK (`a` > 0) NOT ENFORCED,\n `c` int(11) DEFAULT NULL\n) ENGINE=InnoDB;\n", + "len": 295, + "last": 295, + "list": { + "@type": "PhpMyAdmin\\SqlParser\\TokensList", + "tokens": [ + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "CREATE", + "value": "CREATE", + "keyword": "CREATE", + "type": 1, + "flags": 3, + "position": 0 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 6 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "TABLE", + "value": "TABLE", + "keyword": "TABLE", + "type": 1, + "flags": 3, + "position": 7 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 12 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "`t`", + "value": "t", + "keyword": null, + "type": 8, + "flags": 2, + "position": 13 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 16 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "(", + "value": "(", + "keyword": null, + "type": 2, + "flags": 16, + "position": 17 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "\n ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 18 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "`a`", + "value": "a", + "keyword": null, + "type": 8, + "flags": 2, + "position": 21 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 24 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "int", + "value": "INT", + "keyword": "INT", + "type": 1, + "flags": 11, + "position": 25 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "(", + "value": "(", + "keyword": null, + "type": 2, + "flags": 16, + "position": 28 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "11", + "value": 11, + "keyword": null, + "type": 6, + "flags": 0, + "position": 29 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": ")", + "value": ")", + "keyword": null, + "type": 2, + "flags": 16, + "position": 31 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 32 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "DEFAULT", + "value": "DEFAULT", + "keyword": "DEFAULT", + "type": 1, + "flags": 35, + "position": 33 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 40 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "NULL", + "value": "NULL", + "keyword": "NULL", + "type": 1, + "flags": 3, + "position": 41 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": ",", + "value": ",", + "keyword": null, + "type": 2, + "flags": 16, + "position": 45 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "\n ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 46 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "`b`", + "value": "b", + "keyword": null, + "type": 8, + "flags": 2, + "position": 49 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 52 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "int", + "value": "INT", + "keyword": "INT", + "type": 1, + "flags": 11, + "position": 53 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "(", + "value": "(", + "keyword": null, + "type": 2, + "flags": 16, + "position": 56 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "11", + "value": 11, + "keyword": null, + "type": 6, + "flags": 0, + "position": 57 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": ")", + "value": ")", + "keyword": null, + "type": 2, + "flags": 16, + "position": 59 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 60 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "DEFAULT", + "value": "DEFAULT", + "keyword": "DEFAULT", + "type": 1, + "flags": 35, + "position": 61 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 68 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "NULL", + "value": "NULL", + "keyword": "NULL", + "type": 1, + "flags": 3, + "position": 69 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 73 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "CHECK", + "value": "CHECK", + "keyword": "CHECK", + "type": 1, + "flags": 3, + "position": 74 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 79 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "(", + "value": "(", + "keyword": null, + "type": 2, + "flags": 16, + "position": 80 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "`b`", + "value": "b", + "keyword": null, + "type": 8, + "flags": 2, + "position": 81 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 84 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": ">", + "value": ">", + "keyword": null, + "type": 2, + "flags": 2, + "position": 85 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 86 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "0", + "value": 0, + "keyword": null, + "type": 6, + "flags": 0, + "position": 87 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": ")", + "value": ")", + "keyword": null, + "type": 2, + "flags": 16, + "position": 88 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": ",", + "value": ",", + "keyword": null, + "type": 2, + "flags": 16, + "position": 89 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "\n ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 90 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "CONSTRAINT", + "value": "CONSTRAINT", + "keyword": "CONSTRAINT", + "type": 1, + "flags": 3, + "position": 93 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 103 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "`chk_ab`", + "value": "chk_ab", + "keyword": null, + "type": 8, + "flags": 2, + "position": 104 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 112 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "CHECK", + "value": "CHECK", + "keyword": "CHECK", + "type": 1, + "flags": 3, + "position": 113 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 118 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "(", + "value": "(", + "keyword": null, + "type": 2, + "flags": 16, + "position": 119 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "`a`", + "value": "a", + "keyword": null, + "type": 8, + "flags": 2, + "position": 120 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 123 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "<", + "value": "<", + "keyword": null, + "type": 2, + "flags": 2, + "position": 124 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 125 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "`b`", + "value": "b", + "keyword": null, + "type": 8, + "flags": 2, + "position": 126 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": ")", + "value": ")", + "keyword": null, + "type": 2, + "flags": 16, + "position": 129 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": ",", + "value": ",", + "keyword": null, + "type": 2, + "flags": 16, + "position": 130 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "\n ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 131 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "CONSTRAINT", + "value": "CONSTRAINT", + "keyword": "CONSTRAINT", + "type": 1, + "flags": 3, + "position": 134 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 144 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "CHECK", + "value": "CHECK", + "keyword": "CHECK", + "type": 1, + "flags": 3, + "position": 145 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 150 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "(", + "value": "(", + "keyword": null, + "type": 2, + "flags": 16, + "position": 151 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "`a`", + "value": "a", + "keyword": null, + "type": 8, + "flags": 2, + "position": 152 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 155 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "<>", + "value": "<>", + "keyword": null, + "type": 2, + "flags": 2, + "position": 156 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 158 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "42", + "value": 42, + "keyword": null, + "type": 6, + "flags": 0, + "position": 159 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": ")", + "value": ")", + "keyword": null, + "type": 2, + "flags": 16, + "position": 161 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": ",", + "value": ",", + "keyword": null, + "type": 2, + "flags": 16, + "position": 162 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "\n ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 163 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "CHECK", + "value": "CHECK", + "keyword": "CHECK", + "type": 1, + "flags": 3, + "position": 166 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 171 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "(", + "value": "(", + "keyword": null, + "type": 2, + "flags": 16, + "position": 172 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "`b`", + "value": "b", + "keyword": null, + "type": 8, + "flags": 2, + "position": 173 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 176 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "!=", + "value": "!=", + "keyword": null, + "type": 2, + "flags": 2, + "position": 177 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 179 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "0xDEAD", + "value": 57005, + "keyword": null, + "type": 6, + "flags": 1, + "position": 180 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": ")", + "value": ")", + "keyword": null, + "type": 2, + "flags": 16, + "position": 186 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": ",", + "value": ",", + "keyword": null, + "type": 2, + "flags": 16, + "position": 187 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "\n ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 188 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "CONSTRAINT", + "value": "CONSTRAINT", + "keyword": "CONSTRAINT", + "type": 1, + "flags": 3, + "position": 191 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 201 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "`chk_not_enforced`", + "value": "chk_not_enforced", + "keyword": null, + "type": 8, + "flags": 2, + "position": 202 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 220 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "CHECK", + "value": "CHECK", + "keyword": "CHECK", + "type": 1, + "flags": 3, + "position": 221 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 226 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "(", + "value": "(", + "keyword": null, + "type": 2, + "flags": 16, + "position": 227 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "`a`", + "value": "a", + "keyword": null, + "type": 8, + "flags": 2, + "position": 228 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 231 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": ">", + "value": ">", + "keyword": null, + "type": 2, + "flags": 2, + "position": 232 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 233 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "0", + "value": 0, + "keyword": null, + "type": 6, + "flags": 0, + "position": 234 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": ")", + "value": ")", + "keyword": null, + "type": 2, + "flags": 16, + "position": 235 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 236 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "NOT", + "value": "NOT", + "keyword": "NOT", + "type": 1, + "flags": 3, + "position": 237 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 240 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "ENFORCED", + "value": "ENFORCED", + "keyword": null, + "type": 0, + "flags": 0, + "position": 241 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": ",", + "value": ",", + "keyword": null, + "type": 2, + "flags": 16, + "position": 249 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "\n ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 250 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "`c`", + "value": "c", + "keyword": null, + "type": 8, + "flags": 2, + "position": 253 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 256 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "int", + "value": "INT", + "keyword": "INT", + "type": 1, + "flags": 11, + "position": 257 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "(", + "value": "(", + "keyword": null, + "type": 2, + "flags": 16, + "position": 260 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "11", + "value": 11, + "keyword": null, + "type": 6, + "flags": 0, + "position": 261 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": ")", + "value": ")", + "keyword": null, + "type": 2, + "flags": 16, + "position": 263 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 264 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "DEFAULT", + "value": "DEFAULT", + "keyword": "DEFAULT", + "type": 1, + "flags": 35, + "position": 265 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 272 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "NULL", + "value": "NULL", + "keyword": "NULL", + "type": 1, + "flags": 3, + "position": 273 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "\n", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 277 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": ")", + "value": ")", + "keyword": null, + "type": 2, + "flags": 16, + "position": 278 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 279 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "ENGINE", + "value": "ENGINE", + "keyword": "ENGINE", + "type": 1, + "flags": 1, + "position": 280 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "=", + "value": "=", + "keyword": null, + "type": 2, + "flags": 2, + "position": 286 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "InnoDB", + "value": "InnoDB", + "keyword": null, + "type": 0, + "flags": 0, + "position": 287 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": ";", + "value": ";", + "keyword": null, + "type": 9, + "flags": 0, + "position": 293 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "\n", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 294 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": null, + "value": null, + "keyword": null, + "type": 9, + "flags": 0, + "position": null + } + ], + "count": 119, + "idx": 119 + }, + "delimiter": ";", + "delimiterLen": 1, + "strict": false, + "errors": [] + }, + "parser": { + "@type": "PhpMyAdmin\\SqlParser\\Parser", + "list": { + "@type": "@1" + }, + "statements": [ + { + "@type": "PhpMyAdmin\\SqlParser\\Statements\\CreateStatement", + "name": { + "@type": "PhpMyAdmin\\SqlParser\\Components\\Expression", + "database": null, + "table": "t", + "column": null, + "expr": "`t`", + "alias": null, + "function": null, + "subquery": null + }, + "entityOptions": { + "@type": "PhpMyAdmin\\SqlParser\\Components\\OptionsArray", + "options": { + "1": { + "name": "ENGINE", + "equals": true, + "expr": "InnoDB", + "value": "InnoDB" + } + } + }, + "fields": [ + { + "@type": "PhpMyAdmin\\SqlParser\\Components\\CreateDefinition", + "name": "a", + "isConstraint": null, + "type": { + "@type": "PhpMyAdmin\\SqlParser\\Components\\DataType", + "name": "INT", + "parameters": [ + "11" + ], + "options": { + "@type": "PhpMyAdmin\\SqlParser\\Components\\OptionsArray", + "options": [] + } + }, + "key": null, + "references": null, + "options": { + "@type": "PhpMyAdmin\\SqlParser\\Components\\OptionsArray", + "options": { + "2": { + "name": "DEFAULT", + "equals": false, + "expr": { + "@type": "PhpMyAdmin\\SqlParser\\Components\\Expression", + "database": null, + "table": null, + "column": null, + "expr": "NULL", + "alias": null, + "function": null, + "subquery": null + }, + "value": "NULL" + } + } + } + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Components\\CreateDefinition", + "name": "b", + "isConstraint": null, + "type": { + "@type": "PhpMyAdmin\\SqlParser\\Components\\DataType", + "name": "INT", + "parameters": [ + "11" + ], + "options": { + "@type": "PhpMyAdmin\\SqlParser\\Components\\OptionsArray", + "options": [] + } + }, + "key": null, + "references": null, + "options": { + "@type": "PhpMyAdmin\\SqlParser\\Components\\OptionsArray", + "options": { + "2": { + "name": "DEFAULT", + "equals": false, + "expr": { + "@type": "PhpMyAdmin\\SqlParser\\Components\\Expression", + "database": null, + "table": null, + "column": null, + "expr": "NULL", + "alias": null, + "function": null, + "subquery": null + }, + "value": "NULL" + }, + "12": { + "name": "CHECK", + "equals": false, + "expr": { + "@type": "PhpMyAdmin\\SqlParser\\Components\\Expression", + "database": null, + "table": null, + "column": null, + "expr": "(`b` > 0)", + "alias": null, + "function": null, + "subquery": null + }, + "value": "(`b` > 0)" + } + } + } + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Components\\CreateDefinition", + "name": "chk_ab", + "isConstraint": true, + "type": null, + "key": null, + "references": null, + "options": { + "@type": "PhpMyAdmin\\SqlParser\\Components\\OptionsArray", + "options": { + "12": { + "name": "CHECK", + "equals": false, + "expr": { + "@type": "PhpMyAdmin\\SqlParser\\Components\\Expression", + "database": null, + "table": null, + "column": null, + "expr": "(`a` < `b`)", + "alias": null, + "function": null, + "subquery": null + }, + "value": "(`a` < `b`)" + } + } + } + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Components\\CreateDefinition", + "name": null, + "isConstraint": true, + "type": null, + "key": null, + "references": null, + "options": { + "@type": "PhpMyAdmin\\SqlParser\\Components\\OptionsArray", + "options": { + "12": { + "name": "CHECK", + "equals": false, + "expr": { + "@type": "PhpMyAdmin\\SqlParser\\Components\\Expression", + "database": null, + "table": null, + "column": null, + "expr": "(`a` <> 42)", + "alias": null, + "function": null, + "subquery": null + }, + "value": "(`a` <> 42)" + } + } + } + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Components\\CreateDefinition", + "name": null, + "isConstraint": null, + "type": null, + "key": null, + "references": null, + "options": { + "@type": "PhpMyAdmin\\SqlParser\\Components\\OptionsArray", + "options": { + "12": { + "name": "CHECK", + "equals": false, + "expr": { + "@type": "PhpMyAdmin\\SqlParser\\Components\\Expression", + "database": null, + "table": null, + "column": null, + "expr": "(`b` != 0xDEAD)", + "alias": null, + "function": null, + "subquery": null + }, + "value": "(`b` != 0xDEAD)" + } + } + } + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Components\\CreateDefinition", + "name": "chk_not_enforced", + "isConstraint": true, + "type": null, + "key": null, + "references": null, + "options": { + "@type": "PhpMyAdmin\\SqlParser\\Components\\OptionsArray", + "options": { + "12": { + "name": "CHECK", + "equals": false, + "expr": { + "@type": "PhpMyAdmin\\SqlParser\\Components\\Expression", + "database": null, + "table": null, + "column": null, + "expr": "(`a` > 0)", + "alias": null, + "function": null, + "subquery": null + }, + "value": "(`a` > 0)" + }, + "15": "NOT", + "14": "ENFORCED" + } + } + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Components\\CreateDefinition", + "name": "c", + "isConstraint": null, + "type": { + "@type": "PhpMyAdmin\\SqlParser\\Components\\DataType", + "name": "INT", + "parameters": [ + "11" + ], + "options": { + "@type": "PhpMyAdmin\\SqlParser\\Components\\OptionsArray", + "options": [] + } + }, + "key": null, + "references": null, + "options": { + "@type": "PhpMyAdmin\\SqlParser\\Components\\OptionsArray", + "options": { + "2": { + "name": "DEFAULT", + "equals": false, + "expr": { + "@type": "PhpMyAdmin\\SqlParser\\Components\\Expression", + "database": null, + "table": null, + "column": null, + "expr": "NULL", + "alias": null, + "function": null, + "subquery": null + }, + "value": "NULL" + } + } + } + } + ], + "with": null, + "select": null, + "like": null, + "partitionBy": null, + "partitionsNum": null, + "subpartitionBy": null, + "subpartitionsNum": null, + "partitions": null, + "table": null, + "return": null, + "parameters": null, + "body": [], + "options": { + "@type": "PhpMyAdmin\\SqlParser\\Components\\OptionsArray", + "options": { + "6": "TABLE" + } + }, + "first": 0, + "last": 116 + } + ], + "brackets": 0, + "strict": false, + "errors": [] + }, + "errors": { + "lexer": [], + "parser": [] + } +} \ No newline at end of file