本文整理汇总了Java中com.taobao.tddl.optimizer.core.expression.IFunction类的典型用法代码示例。如果您正苦于以下问题:Java IFunction类的具体用法?Java IFunction怎么用?Java IFunction使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
IFunction类属于com.taobao.tddl.optimizer.core.expression包,在下文中一共展示了IFunction类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。
示例1: ALL
import com.taobao.tddl.optimizer.core.expression.IFunction; //导入依赖的package包/类
@Test
public void testQuery_子查询_all模式() throws SqlParserException {
String sql = "SELECT * FROM TABLE1 WHERE ID > ALL (SELECT ID FROM TABLE2 WHERE TABLE2.NAME = TABLE1.NAME)";
IQueryTree qc = (IQueryTree) optimizer.optimizeAndAssignment(sql, null, extraCmd, true);
Assert.assertTrue(qc instanceof IMerge);
IQuery query1 = (IQuery) ((IMerge) qc).getSubNodes().get(0);
IQuery query2 = (IQuery) ((IMerge) qc).getSubNodes().get(1);
IFunction subquery1 = (IFunction) query1.getSubqueryFilter().getArgs().get(1);
IFunction subquery2 = (IFunction) query2.getSubqueryFilter().getArgs().get(1);
Assert.assertTrue(subquery1 == subquery2);
Assert.assertTrue(subquery1.getArgs().get(0) instanceof IQuery);
IQuery merge = (IQuery) subquery1.getArgs().get(0);
IFunction func = (IFunction) merge.getColumns().get(0);
Assert.assertEquals("MAX", func.getFunctionName());
}
示例2: testDistinct
import com.taobao.tddl.optimizer.core.expression.IFunction; //导入依赖的package包/类
@Test
public void testDistinct() throws SqlParserException {
String sql = "SELECT COUNT(DISTINCT ID) FROM TABLE1";
QueryTreeNode qn = query(sql);
TableNode table1 = new TableNode("TABLE1");
IColumn c = ASTNodeFactory.getInstance().createColumn();
c.setColumnName("ID");
c.setDistinct(true);
IFunction f = ASTNodeFactory.getInstance().createFunction();
f.setFunctionName("COUNT");
f.setColumnName("COUNT(DISTINCT ID)");
List args = new ArrayList();
args.add(c);
f.setArgs(args);
qn.build();
QueryTreeNode qnExpected = table1.select(f);
qnExpected.build();
assertEquals(qn, qnExpected);
}
示例3: testFunction1
import com.taobao.tddl.optimizer.core.expression.IFunction; //导入依赖的package包/类
@Test
public void testFunction1() throws SqlParserException {
String sql = "SELECT COUNT(ID) FROM TABLE1 T1 WHERE ID = 1";
QueryTreeNode qn = query(sql);
TableNode table1 = new TableNode("TABLE1");
IFunction f = ASTNodeFactory.getInstance().createFunction();
f.setFunctionName("COUNT");
f.setColumnName("COUNT(ID)");
IColumn c = ASTNodeFactory.getInstance().createColumn();
c.setColumnName("ID");
List args = new ArrayList();
args.add(c);
f.setArgs(args);
QueryTreeNode qnExpected = table1.alias("T1").query("ID=1").select(f);
assertEquals(qn, qnExpected);
}
示例4: buildFunction
import com.taobao.tddl.optimizer.core.expression.IFunction; //导入依赖的package包/类
protected void buildFunction(IFunction f, boolean findInSelectList) {
if (FunctionType.Aggregate == f.getFunctionType()) {
setExistAggregate();
}
if (f.getArgs().size() == 0) {
return;
}
List<Object> args = f.getArgs();
for (int i = 0; i < args.size(); i++) {
if (args.get(i) instanceof ISelectable) {
args.set(i, this.buildSelectable((ISelectable) args.get(i), findInSelectList));
} else if (args.get(i) instanceof ISequenceVal) {
setExistSequenceVal();
}
}
}
示例5: constructColumnNameForFunction
import com.taobao.tddl.optimizer.core.expression.IFunction; //导入依赖的package包/类
@Override
public String constructColumnNameForFunction(IDataNodeExecutor query, boolean bindVal,
AtomicInteger bindValSequence,
Map<Integer, ParameterContext> paramMap, IFunction func,
MysqlPlanVisitorImpl parentVisitor) {
StringBuilder sb = new StringBuilder();
sb.append("TRIM").append("(");
if (func.getArgs().size() == 2) {
sb.append(parentVisitor.getNewVisitor(func.getArgs().get(0)).getString());
} else {
sb.append(func.getArgs().get(2)).append(" ");
sb.append(parentVisitor.getNewVisitor(func.getArgs().get(1)).getString());
sb.append(" FROM ");
sb.append(parentVisitor.getNewVisitor(func.getArgs().get(0)).getString());
}
sb.append(")");
return sb.toString();
}
示例6: constructColumnNameForFunction
import com.taobao.tddl.optimizer.core.expression.IFunction; //导入依赖的package包/类
@Override
public String constructColumnNameForFunction(IDataNodeExecutor query, boolean bindVal,
AtomicInteger bindValSequence,
Map<Integer, ParameterContext> paramMap, IFunction func,
MysqlPlanVisitorImpl parentVisitor) {
StringBuilder sb = new StringBuilder();
sb.append(parentVisitor.getNewVisitor(func.getArgs().get(0)).getString());
Object right = func.getArgs().get(1);
// 右边被提前计算过了,直接用not in
if (right instanceof List) {
sb.append(" not in ");
sb.append(parentVisitor.getNewVisitor(func.getArgs().get(1)).getString());
} else {
// 右边没进行计算,还是个子查询,理论上不会发生
sb.append(" != all (");
sb.append(parentVisitor.getNewVisitor(func.getArgs().get(1)).getString());
sb.append(")");
}
return sb.toString();
}
示例7: WHERE
import com.taobao.tddl.optimizer.core.expression.IFunction; //导入依赖的package包/类
@Test
public void testQuery_子查询_in模式() throws SqlParserException {
String sql = "SELECT * FROM TABLE1 WHERE (ID > 10 OR ID < 5) OR ID IN (SELECT ID FROM TABLE2 WHERE ID > 10 OR ID < 5)";
QueryTreeNode qn = query(sql);
FilterPreProcessor.optimize(qn, true, null);
qn.build();
IFunction func = SubQueryPreProcessor.findNextSubqueryOnFilter(qn);
Assert.assertTrue(func != null);
QueryTreeNode qtn = (QueryTreeNode) func.getArgs().get(0);
Map<Long, Object> subquerySettings = new HashMap<Long, Object>();
subquerySettings.put(qtn.getSubqueryOnFilterId(), Arrays.asList(1, 2));
func = SubQueryPreProcessor.assignmentSubqueryOnFilter(qn, subquerySettings);
FilterPreProcessor.optimize(qn, true, null);
Assert.assertTrue(func == null);
}
示例8: LENGTH
import com.taobao.tddl.optimizer.core.expression.IFunction; //导入依赖的package包/类
@Test
public void testQuery_函数别名() throws SqlParserException, QueryException {
String sql = "SELECT T.ID , LENGTH(NAME) AS LEN FROM TABLE1 T WHERE ID=1";
QueryTreeNode qn = query(sql);
qn.build();
IFunction function = ASTNodeFactory.getInstance().createFunction();
function.setColumnName("LENGTH(NAME)");
function.setAlias("LEN");
function.setFunctionName("LENGTH");
QueryTreeNode qnExpected = new TableNode("TABLE1").alias("T").select("T.ID").query("ID=1");
qnExpected.addColumnsSelected(function);
qnExpected.build();
assertEquals(qn, qnExpected);
}
示例9: copySelectables
import com.taobao.tddl.optimizer.core.expression.IFunction; //导入依赖的package包/类
public static List<ISelectable> copySelectables(List<ISelectable> selects, String tableName) {
if (tableName == null) {
return copySelectables(selects);
}
if (selects == null) {
return null;
}
List<ISelectable> news = new ArrayList(selects.size());
for (ISelectable s : selects) {
ISelectable a = s.copy();
if (a instanceof IColumn) {
setColumn((IColumn) a, tableName);
} else if (a instanceof IFilter) {
setFilter((IFilter) a, tableName);
} else if (a instanceof IFunction) {
setFunction((IFunction) a, tableName);
}
news.add(a);
}
return news;
}
示例10: getSelectableFromChild
import com.taobao.tddl.optimizer.core.expression.IFunction; //导入依赖的package包/类
@Override
public ISelectable getSelectableFromChild(ISelectable c) {
// 如果存在表名,则进行强校验,比如字段为A.ID,否则直接进行ID名字匹配
if (c.getTableName() != null && !c.getTableName().equals(this.getNode().getTableName())
&& !c.getTableName().equals(this.getNode().getAlias())) {
return null;
}
if (IColumn.STAR.equals(c.getColumnName())) {
return c;
}
if (c instanceof IFunction) {
c.setTableName(this.getNode().getTableName());
return c;
}
if (SchemaManager.DUAL.equals(getNode().getTableName())) {
throw new TddlRuntimeException(ErrorCode.ERR_PARSER, "can't not visit column in dual");
}
return this.getSelectableFromChild(c.getColumnName());
}
示例11: putRetColumnInMeta
import com.taobao.tddl.optimizer.core.expression.IFunction; //导入依赖的package包/类
void putRetColumnInMeta(ISelectable column, List<ColumnMeta> metaColumns) {
String columnName;
columnName = column.getColumnName();
DataType type = null;
// 函数在Map和Reduce过程中的返回类型可以不同
// 如Avg,map过程返回String
// reduce过程中返回数字类型
if (this.isMerge()) {
type = column.getDataType();
} else {
if (column instanceof IFunction) {
type = ((IFunction) column).getExtraFunction().getMapReturnType();
} else {
type = column.getDataType();
}
}
ColumnMeta cm = new ColumnMeta(ExecUtils.getLogicTableName(column.getTableName()),
columnName,
type,
column.getAlias(),
true);
metaColumns.add(cm);
}
示例12: testFunction1
import com.taobao.tddl.optimizer.core.expression.IFunction; //导入依赖的package包/类
@Test
public void testFunction1() throws SqlParserException, QueryException {
String sql = "SELECT COUNT(ID) FROM TABLE1 T1 WHERE ID = 1";
QueryTreeNode qn = query(sql);
TableNode table1 = new TableNode("TABLE1");
IFunction f = ASTNodeFactory.getInstance().createFunction();
f.setFunctionName("COUNT");
f.setColumnName("COUNT(ID)");
IColumn c = ASTNodeFactory.getInstance().createColumn();
c.setColumnName("ID");
List args = new ArrayList();
args.add(c);
f.setArgs(args);
QueryTreeNode qnExpected = table1.alias("T1").query("ID=1").select(f);
assertEquals(qn, qnExpected);
}
示例13: COUNT
import com.taobao.tddl.optimizer.core.expression.IFunction; //导入依赖的package包/类
@Test
public void testQuery_orderBy加函数() throws Exception {
String sql = "SELECT * FROM TABLE1 WHERE ID=1 ORDER BY COUNT(ID)";
QueryTreeNode qn = query(sql);
qn.build();
TableNode table1 = new TableNode("TABLE1");
IColumn c = ASTNodeFactory.getInstance().createColumn();
c.setColumnName("ID");
IFunction f = ASTNodeFactory.getInstance().createFunction();
f.setFunctionName("COUNT");
List args = new ArrayList();
args.add(c);
f.setArgs(args);
f.setColumnName("COUNT(ID)");
QueryTreeNode qnExpected = table1.query("ID=1").orderBy(f, true);
qnExpected.build();
assertEquals(qn, qnExpected);
}
示例14: replaceAliasInFilter
import com.taobao.tddl.optimizer.core.expression.IFunction; //导入依赖的package包/类
private void replaceAliasInFilter(Object filter, String alias) {
if (filter instanceof IFunction) {
for (Object sub : ((IFunction) filter).getArgs()) {
this.replaceAliasInFilter(sub, alias);
}
}
if (filter instanceof ISelectable) {
if (alias != null) {
((ISelectable) filter).setTableName(alias);
}
if (((ISelectable) filter).getAlias() != null) {
((ISelectable) filter).setColumnName(((ISelectable) filter).getAlias());
((ISelectable) filter).setAlias(null);
}
}
}
示例15: executeAgg
import com.taobao.tddl.optimizer.core.expression.IFunction; //导入依赖的package包/类
protected ISchematicCursor executeAgg(ISchematicCursor cursor, IDataNodeExecutor executor,
boolean closeResultCursor, IRepository repo, List<IFunction> aggregates,
List<IOrderBy> groupBycols, ExecutionContext executionContext)
throws TddlException {
List<ISelectable> _retColumns = null;
if (executor instanceof IQuery) {
_retColumns = ((IQuery) executor).getColumns();
} else if (executor instanceof IJoin) {
_retColumns = ((IJoin) executor).getColumns();
} else if (executor instanceof IMerge) {
_retColumns = ((IMerge) executor).getColumns();
}
if (_retColumns != null) {
if ((aggregates != null && !aggregates.isEmpty()) || (groupBycols != null && !groupBycols.isEmpty())) {
cursor = repo.getCursorFactory().aggregateCursor(executionContext,
cursor,
aggregates,
groupBycols,
_retColumns,
false);
}
}
return cursor;
}