/*
* JBoss, Home of Professional Open Source.
*
* See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing.
*
* See the AUTHORS.txt file distributed with this work for a full listing of individual contributors.
*/
package org.teiid.query.sql.v7;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import org.teiid.designer.runtime.version.spi.TeiidServerVersion.Version;
import org.teiid.language.SQLConstants.NonReserved;
import org.teiid.query.parser.TeiidNodeFactory.ASTNodes;
import org.teiid.query.sql.AbstractTestSQLStringVisitor;
import org.teiid.query.sql.lang.Criteria;
import org.teiid.query.sql.lang.CriteriaOperator.Operator;
import org.teiid.query.sql.lang.CriteriaSelector;
import org.teiid.query.sql.lang.Delete;
import org.teiid.query.sql.proc.AssignmentStatement;
import org.teiid.query.sql.proc.Block;
import org.teiid.query.sql.proc.CommandStatement;
import org.teiid.query.sql.proc.CreateUpdateProcedureCommand;
import org.teiid.query.sql.proc.IfStatement;
import org.teiid.query.sql.proc.RaiseErrorStatement;
import org.teiid.query.sql.proc.Statement;
import org.teiid.query.sql.symbol.AggregateSymbol;
import org.teiid.query.sql.symbol.ElementSymbol;
/**
*
*/
@SuppressWarnings( {"nls", "javadoc"} )
public class Test7SQLStringVisitor extends AbstractTestSQLStringVisitor {
private Test7Factory factory;
public Test7SQLStringVisitor() {
super(Version.TEIID_7_7);
}
@Override
protected Test7Factory getFactory() {
if (factory == null)
factory = new Test7Factory(parser);
return factory;
}
@Test
public void testAggregateSymbol1() {
AggregateSymbol agg = getFactory().newAggregateSymbol("abc", NonReserved.COUNT, false, getFactory().newConstant("abc"));
helpTest(agg, "COUNT('abc')");
}
@Test
public void testAggregateSymbol2() {
AggregateSymbol agg = getFactory().newAggregateSymbol("abc", NonReserved.COUNT, true, getFactory().newConstant("abc"));
helpTest(agg, "COUNT(DISTINCT 'abc')");
}
@Test
public void testAggregateSymbol3() {
AggregateSymbol agg = getFactory().newAggregateSymbol("abc", NonReserved.COUNT, false, null);
helpTest(agg, "COUNT(*)");
}
@Test
public void testAggregateSymbol4() {
AggregateSymbol agg = getFactory().newAggregateSymbol("abc", NonReserved.AVG, false, getFactory().newConstant("abc"));
helpTest(agg, "AVG('abc')");
}
@Test
public void testAggregateSymbol5() {
AggregateSymbol agg = getFactory().newAggregateSymbol("abc", NonReserved.SUM, false, getFactory().newConstant("abc"));
helpTest(agg, "SUM('abc')");
}
@Test
public void testAggregateSymbol6() {
AggregateSymbol agg = getFactory().newAggregateSymbol("abc", NonReserved.MIN, false, getFactory().newConstant("abc"));
helpTest(agg, "MIN('abc')");
}
@Test
public void testAggregateSymbol7() {
AggregateSymbol agg = getFactory().newAggregateSymbol("abc", NonReserved.MAX, false, getFactory().newConstant("abc"));
helpTest(agg, "MAX('abc')");
}
@Test
public void testRaiseErrorStatement() {
Statement errStmt = getFactory().newRaiseStatement(getFactory().newConstant("My Error"));
helpTest(errStmt, "ERROR 'My Error';");
}
@Test
public void testRaiseErrorStatementWithExpression() {
Statement errStmt = getFactory().newRaiseStatement(getFactory().newElementSymbol("a"));
helpTest(errStmt, "ERROR a;");
}
@Test public void testHasCriteria1() {
ElementSymbol sy1 = getFactory().newElementSymbol("x"); //$NON-NLS-1$
ElementSymbol sy2 = getFactory().newElementSymbol("y"); //$NON-NLS-1$
ElementSymbol sy3 = getFactory().newElementSymbol("z"); //$NON-NLS-1$
List elmnts = new ArrayList(3);
elmnts.add(sy1);
elmnts.add(sy2);
elmnts.add(sy3);
CriteriaSelector cs = getFactory().newCriteriaSelector();
cs.setElements(elmnts);
cs.setSelectorType(Operator.LIKE);
helpTest(getFactory().newHasCriteria(cs), "HAS LIKE CRITERIA ON (x, y, z)"); //$NON-NLS-1$
}
@Test public void testHasCriteria2() {
ElementSymbol sy1 = getFactory().newElementSymbol("x"); //$NON-NLS-1$
ElementSymbol sy2 = getFactory().newElementSymbol("y"); //$NON-NLS-1$
ElementSymbol sy3 = getFactory().newElementSymbol("z"); //$NON-NLS-1$
List elmnts = new ArrayList(3);
elmnts.add(sy1);
elmnts.add(sy2);
elmnts.add(sy3);
CriteriaSelector cs = getFactory().newCriteriaSelector();
cs.setElements(elmnts);
cs.setSelectorType(Operator.LIKE);
helpTest(getFactory().newHasCriteria(cs), "HAS LIKE CRITERIA ON (x, y, z)"); //$NON-NLS-1$
}
@Test public void testHasCriteria3() {
ElementSymbol sy1 = getFactory().newElementSymbol("x"); //$NON-NLS-1$
ElementSymbol sy2 = getFactory().newElementSymbol("y"); //$NON-NLS-1$
ElementSymbol sy3 = getFactory().newElementSymbol("z"); //$NON-NLS-1$
List elmnts = new ArrayList(3);
elmnts.add(sy1);
elmnts.add(sy2);
elmnts.add(sy3);
CriteriaSelector cs = getFactory().newCriteriaSelector();
cs.setElements(elmnts);
cs.setSelectorType(Operator.BETWEEN);
helpTest(getFactory().newHasCriteria(cs), "HAS BETWEEN CRITERIA ON (x, y, z)"); //$NON-NLS-1$
}
@Test
public void testBlock1() {
Delete d1 = getFactory().newNode(ASTNodes.DELETE);
d1.setGroup(getFactory().newGroupSymbol("g"));
CommandStatement cmdStmt = getFactory().newCommandStatement(d1);
AssignmentStatement assigStmt = getFactory().newAssignmentStatement(getFactory().newElementSymbol("a"), getFactory().newConstant(new Integer(1)));
Statement errStmt = getFactory().newRaiseStatement(getFactory().newConstant("My Error"));
Block b = getFactory().newBlock();
b.addStatement(cmdStmt);
b.addStatement(assigStmt);
b.addStatement(errStmt);
helpTest(b, "BEGIN\nDELETE FROM g;\na = 1;\nERROR 'My Error';\nEND");
}
@Test public void testBlock2() {
// construct If statement
Delete d1 = getFactory().newNode(ASTNodes.DELETE);
d1.setGroup(getFactory().newGroupSymbol("g")); //$NON-NLS-1$
CommandStatement cmdStmt = getFactory().newCommandStatement(d1);
Block ifblock = getFactory().newBlock(cmdStmt);
// construct If criteria
ElementSymbol sy1 = getFactory().newElementSymbol("x"); //$NON-NLS-1$
List elmnts = new ArrayList(1);
elmnts.add(sy1);
CriteriaSelector cs = getFactory().newCriteriaSelector();
cs.setElements(elmnts);
cs.setSelectorType(Operator.LIKE);
Criteria crit = getFactory().newHasCriteria(cs);
IfStatement ifStmt = getFactory().newIfStatement(crit, ifblock);
// other statements
RaiseErrorStatement errStmt = getFactory().newRaiseStatement(getFactory().newConstant("My Error")); //$NON-NLS-1$
Block b = getFactory().newBlock();
b.addStatement(cmdStmt);
b.addStatement(ifStmt);
b.addStatement(errStmt);
helpTest(b, "BEGIN\nDELETE FROM g;\nIF(HAS LIKE CRITERIA ON (x))\nBEGIN\nDELETE FROM g;\nEND\nERROR 'My Error';\nEND"); //$NON-NLS-1$
}
@Test public void testIfStatement1() {
// construct If block
Delete d1 = getFactory().newNode(ASTNodes.DELETE);
d1.setGroup(getFactory().newGroupSymbol("g")); //$NON-NLS-1$
CommandStatement cmdStmt = getFactory().newCommandStatement(d1);
AssignmentStatement assigStmt = getFactory().newAssignmentStatement(getFactory().newElementSymbol("a"), getFactory().newConstant(new Integer(1))); //$NON-NLS-1$
RaiseErrorStatement errStmt = getFactory().newRaiseStatement(getFactory().newConstant("My Error")); //$NON-NLS-1$
Block ifblock = getFactory().newBlock();
ifblock.addStatement(cmdStmt);
ifblock.addStatement(assigStmt);
ifblock.addStatement(errStmt);
// construct If criteria
ElementSymbol sy1 = getFactory().newElementSymbol("x"); //$NON-NLS-1$
List elmnts = new ArrayList(1);
elmnts.add(sy1);
CriteriaSelector cs = getFactory().newCriteriaSelector();
cs.setElements(elmnts);
cs.setSelectorType(Operator.LIKE);
Criteria crit = getFactory().newHasCriteria(cs);
IfStatement ifStmt = getFactory().newIfStatement(crit, ifblock);
helpTest(ifStmt, "IF(HAS LIKE CRITERIA ON (x))\nBEGIN\nDELETE FROM g;\na = 1;\nERROR 'My Error';\nEND"); //$NON-NLS-1$
}
@Test public void testIfStatement2() {
// construct If block
Delete d1 = getFactory().newNode(ASTNodes.DELETE);
d1.setGroup(getFactory().newGroupSymbol("g")); //$NON-NLS-1$
CommandStatement cmdStmt = getFactory().newCommandStatement(d1);
Block ifblock = getFactory().newBlock(cmdStmt);
// construct If criteria
ElementSymbol sy1 = getFactory().newElementSymbol("x"); //$NON-NLS-1$
List elmnts = new ArrayList(1);
elmnts.add(sy1);
CriteriaSelector cs = getFactory().newCriteriaSelector();
cs.setElements(elmnts);
cs.setSelectorType(Operator.LIKE);
Criteria crit = getFactory().newHasCriteria(cs);
IfStatement ifStmt = getFactory().newIfStatement(crit, ifblock);
helpTest(ifStmt, "IF(HAS LIKE CRITERIA ON (x))\nBEGIN\nDELETE FROM g;\nEND"); //$NON-NLS-1$
}
@Test public void testIfStatement3() {
// construct If block
Delete d1 = getFactory().newNode(ASTNodes.DELETE);
d1.setGroup(getFactory().newGroupSymbol("g")); //$NON-NLS-1$
CommandStatement cmdStmt = getFactory().newCommandStatement(d1);
AssignmentStatement assigStmt = getFactory().newAssignmentStatement(getFactory().newElementSymbol("a"), getFactory().newConstant(new Integer(1))); //$NON-NLS-1$
RaiseErrorStatement errStmt = getFactory().newRaiseStatement(getFactory().newConstant("My Error")); //$NON-NLS-1$
Block ifblock = getFactory().newBlock();
ifblock.addStatement(cmdStmt);
ifblock.addStatement(assigStmt);
ifblock.addStatement(errStmt);
// construct If criteria
ElementSymbol sy1 = getFactory().newElementSymbol("x"); //$NON-NLS-1$
List elmnts = new ArrayList(1);
elmnts.add(sy1);
CriteriaSelector cs = getFactory().newCriteriaSelector();
cs.setElements(elmnts);
cs.setSelectorType(Operator.LIKE);
Criteria crit = getFactory().newHasCriteria(cs);
Block elseblock = getFactory().newBlock();
elseblock.addStatement(cmdStmt);
IfStatement ifStmt = getFactory().newIfStatement(crit, ifblock);
ifStmt.setElseBlock(elseblock);
helpTest(ifStmt, "IF(HAS LIKE CRITERIA ON (x))\nBEGIN\nDELETE FROM g;\na = 1;\nERROR 'My Error';\nEND\nELSE\nBEGIN\nDELETE FROM g;\nEND"); //$NON-NLS-1$
}
@Test
public void testCreateUpdateProcedure1() {
Delete d1 = getFactory().newNode(ASTNodes.DELETE);
d1.setGroup(getFactory().newGroupSymbol("g"));
CommandStatement cmdStmt = getFactory().newCommandStatement(d1);
AssignmentStatement assigStmt = getFactory().newAssignmentStatement(getFactory().newElementSymbol("a"), getFactory().newConstant(new Integer(1)));
RaiseErrorStatement errStmt = getFactory().newRaiseStatement(getFactory().newConstant("My Error"));
Block b = getFactory().newBlock();
b.addStatement(cmdStmt);
b.addStatement(assigStmt);
b.addStatement(errStmt);
CreateUpdateProcedureCommand cup = getFactory().newCreateUpdateProcedureCommand(b);
helpTest(cup, "CREATE PROCEDURE\nBEGIN\nDELETE FROM g;\na = 1;\nERROR 'My Error';\nEND");
}
@Test
public void testCreateUpdateProcedure2() {
Delete d1 = getFactory().newNode(ASTNodes.DELETE);
d1.setGroup(getFactory().newGroupSymbol("g"));
CommandStatement cmdStmt = getFactory().newCommandStatement(d1);
AssignmentStatement assigStmt = getFactory().newAssignmentStatement(getFactory().newElementSymbol("a"), getFactory().newConstant(new Integer(1)));
RaiseErrorStatement errStmt = getFactory().newRaiseStatement(getFactory().newConstant("My Error"));
Block b = getFactory().newBlock();
b.addStatement(cmdStmt);
b.addStatement(assigStmt);
b.addStatement(errStmt);
CreateUpdateProcedureCommand cup = getFactory().newCreateUpdateProcedureCommand(b);
helpTest(cup, "CREATE PROCEDURE\nBEGIN\nDELETE FROM g;\na = 1;\nERROR 'My Error';\nEND");
}
@Test
public void testCreateUpdateProcedure3() {
Delete d1 = getFactory().newNode(ASTNodes.DELETE);
d1.setGroup(getFactory().newGroupSymbol("g"));
CommandStatement cmdStmt = getFactory().newCommandStatement(d1);
AssignmentStatement assigStmt = getFactory().newAssignmentStatement(getFactory().newElementSymbol("a"), getFactory().newConstant(new Integer(1)));
Statement errStmt = getFactory().newRaiseStatement(getFactory().newConstant("My Error"));
Block b = getFactory().newBlock();
b.addStatement(cmdStmt);
b.addStatement(assigStmt);
b.addStatement(errStmt);
CreateUpdateProcedureCommand cup = getFactory().newCreateUpdateProcedureCommand(b);
helpTest(cup, "CREATE PROCEDURE\nBEGIN\nDELETE FROM g;\na = 1;\nERROR 'My Error';\nEND");
}
}