diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a7a6ce7..363a849 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -20,3 +20,7 @@ vendor/bin/phpunit --testdox echo '' | vendor/bin/phpcs vendor/bin/phpstan analyze ``` + +## Regenerating expected output + +To regenerate expected tests output, run `bin/regenerate-expected-output`. diff --git a/bin/regenerate-expected-output b/bin/regenerate-expected-output new file mode 100755 index 0000000..824236d --- /dev/null +++ b/bin/regenerate-expected-output @@ -0,0 +1,29 @@ +#!/usr/bin/env php + '\s+', - Token::TOKEN_TYPE_COMMENT => '(?:--|#)[^\n]*+', + Token::TOKEN_TYPE_COMMENT => '(?:--|#(?!>))[^\n]*+', // #>, #>> and <#> are PostgreSQL operators Token::TOKEN_TYPE_BLOCK_COMMENT => '/\*(?:[^*]+|\*(?!/))*+(?:\*|$)(?:/|$)', // 1. backtick quoted string using `` to escape // 2. square bracket quoted string (SQL Server) using ]] to escape diff --git a/tests/SqlFormatterTest.php b/tests/SqlFormatterTest.php index 6993bbc..0cb48f4 100644 --- a/tests/SqlFormatterTest.php +++ b/tests/SqlFormatterTest.php @@ -101,7 +101,7 @@ public function testUsePre(): void } /** @return string[] */ - private static function fileSqlData(): array + public static function fileSqlData(): array { $contents = file_get_contents(__DIR__ . '/sql.sql'); assert($contents !== false); diff --git a/tests/TokenizerTest.php b/tests/TokenizerTest.php index 1e8af7c..7668542 100644 --- a/tests/TokenizerTest.php +++ b/tests/TokenizerTest.php @@ -1658,6 +1658,20 @@ public static function tokenizeData(): Generator ], '/* foo...', ]; + + yield 'PostgreSQL operator' => [ + [ + new Token(Token::TOKEN_TYPE_RESERVED_TOPLEVEL, 'select'), + new Token(Token::TOKEN_TYPE_WHITESPACE, ' '), + new Token(Token::TOKEN_TYPE_WORD, 'json'), + new Token(Token::TOKEN_TYPE_WHITESPACE, ' '), + new Token(Token::TOKEN_TYPE_BOUNDARY, '#'), + new Token(Token::TOKEN_TYPE_BOUNDARY, '>'), + new Token(Token::TOKEN_TYPE_WHITESPACE, ' '), + new Token(Token::TOKEN_TYPE_RESERVED, 'null'), + ], + 'select json #> null', + ]; } public function testTokenizeLongConcat(): void diff --git a/tests/clihighlight.txt b/tests/clihighlight.txt index 01fcff0..75c8429 100644 --- a/tests/clihighlight.txt +++ b/tests/clihighlight.txt @@ -1205,3 +1205,9 @@ MY_NON_TOP_LEVEL_KEYWORD_FX_3(); CREATE TABLE t ( c VARCHAR(20) ) DEFAULT CHARACTER SET utf8mb4 ENGINE = InnoDB +--- +SELECT + '{}' :: json #> '{}' +--- +SELECT + vector1 <#> vector2 diff --git a/tests/compress.txt b/tests/compress.txt index 58a0391..f7fcba4 100644 --- a/tests/compress.txt +++ b/tests/compress.txt @@ -111,3 +111,7 @@ SELECT a FROM test STRAIGHT_JOIN test2 ON test.id = test2.id SELECT t.id, t.start, t.end, t.end AS e2, t.limit, t.begin, t.case, t.when, t.then, t.else FROM t WHERE t.start = t.end --- CREATE TABLE t (c VARCHAR(20)) DEFAULT CHARACTER SET utf8mb4 ENGINE = InnoDB +--- +SELECT '{}'::json #> '{}' +--- +SELECT vector1 <#> vector2 diff --git a/tests/format-highlight.html b/tests/format-highlight.html index 5286c90..a059de3 100644 --- a/tests/format-highlight.html +++ b/tests/format-highlight.html @@ -1205,3 +1205,9 @@
CREATE TABLE t (
   c VARCHAR(20)
 ) DEFAULT CHARACTER SET utf8mb4 ENGINE = InnoDB
+--- +
SELECT
+  '{}' :: json #> '{}'
+--- +
SELECT
+  vector1 <#> vector2
diff --git a/tests/format.txt b/tests/format.txt index 9216132..868db4b 100644 --- a/tests/format.txt +++ b/tests/format.txt @@ -1203,3 +1203,9 @@ WHERE CREATE TABLE t ( c VARCHAR(20) ) DEFAULT CHARACTER SET utf8mb4 ENGINE = InnoDB +--- +SELECT + '{}' :: json #> '{}' +--- +SELECT + vector1 <#> vector2 diff --git a/tests/highlight.html b/tests/highlight.html index fa79610..e988db0 100644 --- a/tests/highlight.html +++ b/tests/highlight.html @@ -425,3 +425,7 @@ WHERE t.start = t.end ---
CREATE TABLE t (c VARCHAR(20)) DEFAULT CHARACTER SET utf8mb4 ENGINE = InnoDB
+--- +
SELECT '{}'::json #> '{}'
+--- +
SELECT vector1 <#> vector2
diff --git a/tests/sql.sql b/tests/sql.sql index d595f76..c0811e5 100644 --- a/tests/sql.sql +++ b/tests/sql.sql @@ -425,3 +425,7 @@ FROM t WHERE t.start = t.end --- CREATE TABLE t (c VARCHAR(20)) DEFAULT CHARACTER SET utf8mb4 ENGINE = InnoDB +--- +SELECT '{}'::json #> '{}' +--- +SELECT vector1 <#> vector2