@Override public boolean visit(SQLPropertyExpr x) { String name = x.getSimpleName(); SQLIdentifierExpr owner = (SQLIdentifierExpr) x.getOwner(); String simpleName = owner.getSimpleName(); boolean hasQuote = simpleName.charAt(0) == '`'; String tableName = hasQuote ? parseTableName(simpleName) : simpleName; String finalTable = tableMapping.get(tableName); if (finalTable != null) { if (hasQuote) { print0(String.format(PROPERTY_QUOT_NAME_PATTERN, finalTable, name)); } else { print0(String.format(PROPERTY_NAME_PATTERN, finalTable, name)); } } else { print0(String.format(PROPERTY_NAME_PATTERN, simpleName, name)); } return false; }
@Override public void endVisit(SQLPropertyExpr x) { String dbName = null; String tableName; if (x.getOwner() instanceof SQLPropertyExpr) { SQLPropertyExpr tableInfo = (SQLPropertyExpr) x.getOwner(); dbName = ((SQLIdentifierExpr) tableInfo.getOwner()).getSimpleName(); tableName = tableInfo.getSimpleName(); } else { tableName = ((SQLIdentifierExpr) x.getOwner()).getSimpleName(); } item = new ItemField(dbName, StringUtil.removeBackQuote(tableName), StringUtil.removeBackQuote(x.getSimpleName())); }
@Override public boolean visit(final MySqlInsertStatement x) { SQLName expr = x.getTableName(); String tableName = expr.toString(); String schema = null; if (expr instanceof SQLPropertyExpr) { SQLPropertyExpr propertyExpr = (SQLPropertyExpr) expr; tableName = propertyExpr.getSimpleName(); schema = propertyExpr.getOwner().toString(); } tableName = SQLUtil.getExactlyValue(tableName); getParsedResult().setTable(new Table(tableName, schema, x.getAlias())); List<SQLExpr> columns = x.getColumns(); for (SQLExpr sqlExpr : columns) { String columnName = SQLUtil.getExactlyValue(sqlExpr.toString()); Column column = new Column(columnName, tableName); getParsedResult().getColumns().add(column); } return super.visit(x); }
private void parseGroupCommon(RouteResultset rrs, MySqlSelectQueryBlock mysqlSelectQuery, TableConfig tc) { if (mysqlSelectQuery.getGroupBy() != null) { SQLSelectGroupByClause groupBy = mysqlSelectQuery.getGroupBy(); boolean hasPartitionColumn = false; for (SQLExpr groupByItem : groupBy.getItems()) { if (isNeedOptimizer(groupByItem)) { rrs.setNeedOptimizer(true); return; } else if (groupByItem instanceof SQLIdentifierExpr) { SQLIdentifierExpr item = (SQLIdentifierExpr) groupByItem; if (item.getSimpleName().equalsIgnoreCase(tc.getPartitionColumn())) { hasPartitionColumn = true; } } else if (groupByItem instanceof SQLPropertyExpr) { SQLPropertyExpr item = (SQLPropertyExpr) groupByItem; if (item.getSimpleName().equalsIgnoreCase(tc.getPartitionColumn())) { hasPartitionColumn = true; } } } if (groupBy.getItems().size() > 0 && !hasPartitionColumn) { rrs.setNeedOptimizer(true); return; } if (groupBy.getItems().size() == 0 && groupBy.getHaving() != null) { // only having filter need optimizer rrs.setNeedOptimizer(true); } } }
} else if (itemExpr instanceof SQLPropertyExpr) { SQLPropertyExpr item = (SQLPropertyExpr) itemExpr; if (item.getSimpleName().equalsIgnoreCase(tc.getPartitionColumn())) { hasPartitionColumn = true;