diff --git a/core/src/main/java/com/alibaba/druid/sql/dialect/postgresql/parser/PGSQLStatementParser.java b/core/src/main/java/com/alibaba/druid/sql/dialect/postgresql/parser/PGSQLStatementParser.java index de4da43ee3..1d097848c4 100644 --- a/core/src/main/java/com/alibaba/druid/sql/dialect/postgresql/parser/PGSQLStatementParser.java +++ b/core/src/main/java/com/alibaba/druid/sql/dialect/postgresql/parser/PGSQLStatementParser.java @@ -638,7 +638,15 @@ public class PGSQLStatementParser extends SQLStatementParser { accept(Token.LPAREN); for (; ; ) { - SQLSelectOrderByItem item = this.exprParser.parseSelectOrderByItem(); + SQLSelectOrderByItem item; + item = this.exprParser.parseSelectOrderByItem(); + + if (lexer.identifierEquals("jsonb_path_ops") && item.getExpr() instanceof SQLIdentifierExpr) { + String ident = ((SQLIdentifierExpr) item.getExpr()).getName() + " " + lexer.stringVal(); + lexer.nextToken(); + item.setExpr(new SQLIdentifierExpr(ident)); + } + item.setParent(stmt); stmt.addItem(item); if (lexer.token() == Token.COMMA) { diff --git a/core/src/test/java/com/alibaba/druid/bvt/sql/postgresql/PGCreateIndexTest_0.java b/core/src/test/java/com/alibaba/druid/bvt/sql/postgresql/PGCreateIndexTest_0.java index 82b2bbebcc..01f2a86a72 100644 --- a/core/src/test/java/com/alibaba/druid/bvt/sql/postgresql/PGCreateIndexTest_0.java +++ b/core/src/test/java/com/alibaba/druid/bvt/sql/postgresql/PGCreateIndexTest_0.java @@ -70,6 +70,32 @@ public class PGCreateIndexTest_0 extends PGTest { // System.out.println("Tables : " + visitor.getTables()); // System.out.println("fields : " + visitor.getColumns()); +// assertTrue(visitor.getTables().containsKey(new TableStat.Name("public.city"))); +// +// assertTrue(visitor.getTables().get(new TableStat.Name("public.city")).getCreateIndexCount() == 1); +// +// assertEquals(1, visitor.getColumns().size() ); + } + + public void test_2() throws Exception { + String sql = "create index if not exists idx_json_data_path on yida_entity_instance using gin(json_data jsonb_path_ops)"; + + PGSQLStatementParser parser = new PGSQLStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + + assertEquals("CREATE INDEX IF NOT EXISTS idx_json_data_path ON yida_entity_instance USING gin (json_data jsonb_path_ops)", SQLUtils.toPGString(stmt)); + + assertEquals("create index if not exists idx_json_data_path on yida_entity_instance using gin (json_data jsonb_path_ops)", stmt.toLowerCaseString()); + + assertEquals(1, statementList.size()); + + PGSchemaStatVisitor visitor = new PGSchemaStatVisitor(); + stmt.accept(visitor); + +// System.out.println("Tables : " + visitor.getTables()); +// System.out.println("fields : " + visitor.getColumns()); + // assertTrue(visitor.getTables().containsKey(new TableStat.Name("public.city"))); // // assertTrue(visitor.getTables().get(new TableStat.Name("public.city")).getCreateIndexCount() == 1);