Fixes #1520 [plsql] Missing PL/SQL language constructs in parser: Is Of Type, Using
This commit is contained in:
@ -690,4 +690,8 @@ public class PLSQLParserVisitorAdapter implements PLSQLParserVisitor {
|
||||
return visit((PLSQLNode) node, data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object visit(ASTIsOfTypeCondition node, Object data) {
|
||||
return visit((PLSQLNode) node, data);
|
||||
}
|
||||
}
|
||||
|
@ -784,6 +784,10 @@ public abstract class AbstractPLSQLRule extends AbstractRule implements PLSQLPar
|
||||
public Object visit(ASTAccessibleByClause node, Object data) {
|
||||
return visit((PLSQLNode) node, data);
|
||||
}
|
||||
@Override
|
||||
public Object visit(ASTIsOfTypeCondition node, Object data) {
|
||||
return visit((PLSQLNode) node, data);
|
||||
}
|
||||
|
||||
/*
|
||||
* Treat all Executable Code
|
||||
|
@ -50,4 +50,14 @@ public class PLSQLParserTest extends AbstractPLSQLParserTst {
|
||||
public void testBug1527() throws Exception {
|
||||
parsePLSQL(IOUtils.toString(PLSQLParserTest.class.getResourceAsStream("ast/InlinePragmaProcError.pls")));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBug1520IsOfType() throws Exception {
|
||||
parsePLSQL(IOUtils.toString(PLSQLParserTest.class.getResourceAsStream("ast/IsOfType.pls")));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBug1520Using() throws Exception {
|
||||
parsePLSQL(IOUtils.toString(PLSQLParserTest.class.getResourceAsStream("ast/Using.pls")));
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,23 @@
|
||||
PROCEDURE IsOfType (
|
||||
inChannelID IN number,
|
||||
inOperID IN number,
|
||||
inClientId IN number,
|
||||
ioFPOobj IN FPO_OBJ,
|
||||
inPackageIDout IN number,
|
||||
inStatusId IN number)
|
||||
is
|
||||
loFPOGE_OBJ FPOGE_OBJ;
|
||||
BEGIN
|
||||
|
||||
IF ioFPOobj IS OF (FPOGE_OBJ) THEN
|
||||
loFPOGE_OBJ:=treat(ioFPOobj AS FPOGE_OBJ);
|
||||
end if;
|
||||
|
||||
IF ioFPOobj IS NOT OF TYPE (ONLY FPOGE_OBJ) THEN
|
||||
loFPOGE_OBJ:=treat(ioFPOobj AS FPOGE_OBJ);
|
||||
end if;
|
||||
|
||||
loFPOGE_OBJ:=SELECT A FROM persons p WHERE IS OF TYPE (employee_t);
|
||||
loFPOGE_OBJ:=SELECT A FROM persons p WHERE IS NOT OF TYPE (ONLY employee_t, other_t);
|
||||
|
||||
end;
|
@ -0,0 +1,16 @@
|
||||
/*
|
||||
* From: https://docs.oracle.com/cd/B13789_01/appdev.101/b10807/13_elems034.htm
|
||||
*/
|
||||
DECLARE
|
||||
TYPE EmpCurTyp IS REF CURSOR; -- define weak REF CURSOR type
|
||||
emp_cv EmpCurTyp; -- declare cursor variable
|
||||
my_ename VARCHAR2(15);
|
||||
my_sal NUMBER := 1000;
|
||||
BEGIN
|
||||
OPEN emp_cv FOR -- open cursor variable
|
||||
'SELECT ename, sal FROM emp WHERE sal > :s' USING my_sal;
|
||||
open cursor for 'query' USING variable;
|
||||
open cursor for 'query' USING IN variable;
|
||||
open cursor for 'query' USING OUT variable, IN othervariable;
|
||||
open cursor for 'query' USING IN_OUT variable;
|
||||
END;
|
Reference in New Issue
Block a user