in ambari-metrics-timelineservice/src/main/java/org/apache/ambari/metrics/core/timeline/query/PhoenixTransactSQL.java [753:822]
public static PreparedStatement prepareGetAggregateSqlStmt(
Connection connection, Condition condition) throws SQLException {
validateConditionIsNotEmpty(condition);
validateRowCountLimit(condition);
String metricsAggregateTable;
String queryStmt;
if (condition.getPrecision() == null) {
condition.setPrecision(getBestPrecisionForCondition(condition));
} else {
condition.setNoLimit();
}
switch (condition.getPrecision()) {
case DAYS:
metricsAggregateTable = METRICS_CLUSTER_AGGREGATE_DAILY_TABLE_NAME;
queryStmt = GET_CLUSTER_AGGREGATE_TIME_SQL;
break;
case HOURS:
metricsAggregateTable = METRICS_CLUSTER_AGGREGATE_HOURLY_TABLE_NAME;
queryStmt = GET_CLUSTER_AGGREGATE_TIME_SQL;
break;
case MINUTES:
metricsAggregateTable = METRICS_CLUSTER_AGGREGATE_MINUTE_TABLE_NAME;
queryStmt = GET_CLUSTER_AGGREGATE_TIME_SQL;
break;
default:
metricsAggregateTable = METRICS_CLUSTER_AGGREGATE_TABLE_NAME;
queryStmt = GET_CLUSTER_AGGREGATE_SQL;
}
queryStmt = String.format(queryStmt, metricsAggregateTable);
StringBuilder sb = new StringBuilder(queryStmt);
sb.append(" WHERE ");
sb.append(condition.getConditionClause());
sb.append(" ORDER BY UUID, SERVER_TIME");
if (condition.getLimit() != null) {
sb.append(" LIMIT ").append(condition.getLimit());
}
String query = sb.toString();
if (LOG.isDebugEnabled()) {
LOG.debug("SQL => " + query + ", condition => " + condition);
}
PreparedStatement stmt = null;
try {
stmt = connection.prepareStatement(query);
int pos = 1;
pos = addUuids(condition, pos, stmt);
if (condition instanceof TopNCondition) {
pos = addStartTime(condition, pos, stmt);
pos = addEndTime(condition, pos, stmt);
}
// TODO: Upper case all strings on POST
pos = addStartTime(condition, pos, stmt);
addEndTime(condition, pos, stmt);
} catch (SQLException e) {
if (stmt != null) {
stmt.close();
}
throw e;
}
return stmt;
}