use of org.teiid.query.sql.proc.Block in project teiid by teiid.
the class TestOptionsAndHints method testCacheProc.
@Test
public void testCacheProc() {
// $NON-NLS-1$
String sql = "/*+ cache */ CREATE VIRTUAL PROCEDURE BEGIN END";
CreateProcedureCommand command = new CreateProcedureCommand(new Block());
command.setCacheHint(new CacheHint());
// $NON-NLS-1$
TestParser.helpTest(sql, "/*+ cache */ BEGIN\nEND", command);
}
use of org.teiid.query.sql.proc.Block in project teiid by teiid.
the class ValidationVisitor method visit.
@Override
public void visit(BranchingStatement obj) {
boolean matchedLabel = false;
boolean inLoop = false;
for (LanguageObject lo : stack) {
if (lo instanceof LoopStatement || lo instanceof WhileStatement) {
inLoop = true;
if (obj.getLabel() == null) {
break;
}
matchedLabel |= obj.getLabel().equalsIgnoreCase(((Labeled) lo).getLabel());
} else if (obj.getLabel() != null && lo instanceof Block && obj.getLabel().equalsIgnoreCase(((Block) lo).getLabel())) {
matchedLabel = true;
if (obj.getMode() != BranchingMode.LEAVE) {
// $NON-NLS-1$
handleValidationError(QueryPlugin.Util.getString("ValidationVisitor.invalid_label", obj.getLabel()), obj);
}
}
}
if (obj.getMode() != BranchingMode.LEAVE && !inLoop) {
// $NON-NLS-1$
handleValidationError(QueryPlugin.Util.getString("ValidationVisitor.no_loop"), obj);
}
if (obj.getLabel() != null && !matchedLabel) {
// $NON-NLS-1$
handleValidationError(QueryPlugin.Util.getString("ValidationVisitor.unknown_block_label", obj.getLabel()), obj);
}
}
use of org.teiid.query.sql.proc.Block in project teiid by teiid.
the class TestProcedureResolving method testProcedureScoping.
@Test
public void testProcedureScoping() throws Exception {
StringBuffer proc = // $NON-NLS-1$
new StringBuffer("FOR EACH ROW").append(// $NON-NLS-1$
"\nBEGIN").append(// $NON-NLS-1$
"\n declare integer e1 = 1;").append(// $NON-NLS-1$
"\n e1 = e1;").append(// $NON-NLS-1$
"\n LOOP ON (SELECT pm1.g1.e1 FROM pm1.g1) AS loopCursor").append(// $NON-NLS-1$
"\n BEGIN").append(// $NON-NLS-1$
"\n variables.e1 = convert(e1, integer);").append(// $NON-NLS-1$
"\n END").append(// $NON-NLS-1$
"\nEND");
// $NON-NLS-1$
String userUpdateStr = "UPDATE vm1.g1 SET e1='x'";
TriggerAction command = helpResolveUpdateProcedure(proc.toString(), userUpdateStr, Table.TriggerEvent.UPDATE);
Block block = command.getBlock();
AssignmentStatement assStmt = (AssignmentStatement) block.getStatements().get(1);
assertEquals(ProcedureReservedWords.VARIABLES, assStmt.getVariable().getGroupSymbol().getName());
assertEquals(ProcedureReservedWords.VARIABLES, ((ElementSymbol) assStmt.getExpression()).getGroupSymbol().getName());
Block inner = ((LoopStatement) block.getStatements().get(2)).getBlock();
assStmt = (AssignmentStatement) inner.getStatements().get(0);
ElementSymbol value = ElementCollectorVisitor.getElements(assStmt.getExpression(), false).iterator().next();
// $NON-NLS-1$
assertEquals("loopCursor", value.getGroupSymbol().getName());
}
use of org.teiid.query.sql.proc.Block in project teiid by teiid.
the class TestSQLStringVisitor method testCreateUpdateProcedure2.
@Test
public void testCreateUpdateProcedure2() {
Delete d1 = new Delete();
// $NON-NLS-1$
d1.setGroup(new GroupSymbol("g"));
CommandStatement cmdStmt = new CommandStatement(d1);
// $NON-NLS-1$
AssignmentStatement assigStmt = new AssignmentStatement(new ElementSymbol("a"), new Constant(new Integer(1)));
// $NON-NLS-1$
RaiseStatement errStmt = new RaiseStatement(new Constant("My Error"));
Block b = new Block();
b.addStatement(cmdStmt);
b.addStatement(assigStmt);
b.addStatement(errStmt);
CreateProcedureCommand cup = new CreateProcedureCommand(b);
// $NON-NLS-1$
helpTest(cup, "BEGIN\nDELETE FROM g;\na = 1;\nRAISE 'My Error';\nEND");
}
Aggregations