Skip to content

Commit b99e661

Browse files
authored
fix(parser): failed to recognize the schema or package name from an anonymous block (#3069)
* fix anonymous block parse error * fix anonymous block parse error * response to pr comments
1 parent 3bb7242 commit b99e661

File tree

3 files changed

+33
-1
lines changed

3 files changed

+33
-1
lines changed

client

Submodule client updated 141 files

server/odc-service/src/main/java/com/oceanbase/odc/service/session/util/DBSchemaExtractor.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
import com.oceanbase.tools.sqlparser.oboracle.OBParser.Var_nameContext;
6262
import com.oceanbase.tools.sqlparser.oboracle.PLParser.IdentifierContext;
6363
import com.oceanbase.tools.sqlparser.oboracle.PLParser.Pl_schema_nameContext;
64+
import com.oceanbase.tools.sqlparser.oboracle.PLParser.Sql_stmtContext;
6465
import com.oceanbase.tools.sqlparser.statement.Expression;
6566
import com.oceanbase.tools.sqlparser.statement.common.RelationFactor;
6667
import com.oceanbase.tools.sqlparser.statement.expression.FunctionCall;
@@ -420,6 +421,18 @@ public RelationFactor visitPl_schema_name(Pl_schema_nameContext ctx) {
420421
return null;
421422
}
422423

424+
@Override
425+
public RelationFactor visitSql_stmt(Sql_stmtContext ctx) {
426+
try {
427+
OBOracleRelationFactorVisitor visitor = new OBOracleRelationFactorVisitor();
428+
visitor.visit(ctx);
429+
identities.addAll(visitor.getIdentities());
430+
} catch (Exception e) {
431+
// eat the exception
432+
}
433+
return null;
434+
}
435+
423436
}
424437

425438

server/odc-service/src/test/java/com/oceanbase/odc/service/session/DBSchemaExtractorTest.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717

1818
import static org.junit.Assert.*;
1919

20+
import java.util.Collections;
21+
import java.util.HashMap;
2022
import java.util.List;
2123
import java.util.Map;
2224
import java.util.Set;
@@ -60,6 +62,23 @@ public void test() {
6062
}
6163
}
6264

65+
@Test
66+
public void listDBSchemasWithSqlTypes_anonymousBlock_listSucceed() {
67+
String pl = "DECLARE\n"
68+
+ " i VARCHAR2(300);\n"
69+
+ "BEGIN\n"
70+
+ " select ps_auto_refresh_publish_pkg.getloopup_meaning('YES_NO', 'Y') into i from dual;\n"
71+
+ " dbms_output.put_line(i);\n"
72+
+ "END;";
73+
Map<DBSchemaIdentity, Set<SqlType>> actual = DBSchemaExtractor.listDBSchemasWithSqlTypes(
74+
Collections.singletonList(SqlTuple.newTuple(pl)), DialectType.OB_ORACLE, "aps");
75+
Map<DBSchemaIdentity, Set<SqlType>> expect = new HashMap<>();
76+
DBSchemaIdentity dbSchemaIdentity = new DBSchemaIdentity();
77+
dbSchemaIdentity.setSchema("PS_AUTO_REFRESH_PUBLISH_PKG");
78+
expect.put(dbSchemaIdentity, Collections.singleton(SqlType.OTHERS));
79+
Assert.assertEquals(expect, actual);
80+
}
81+
6382
@Data
6483
@NoArgsConstructor
6584
@AllArgsConstructor

0 commit comments

Comments
 (0)