in ambari-metrics-timelineservice/src/main/java/org/apache/ambari/metrics/core/timeline/query/PhoenixTransactSQL.java [512:596]
public static PreparedStatement prepareGetMetricsSqlStmt(Connection connection,
Condition condition) throws SQLException {
validateConditionIsNotEmpty(condition);
validateRowCountLimit(condition);
String stmtStr;
if (condition.getStatement() != null) {
stmtStr = condition.getStatement();
} else {
String metricsTable;
String query;
if (condition.getPrecision() == null) {
condition.setPrecision(getBestPrecisionForCondition(condition));
} else {
condition.setNoLimit();
}
switch (condition.getPrecision()) {
case DAYS:
metricsTable = METRICS_AGGREGATE_DAILY_TABLE_NAME;
query = GET_METRIC_AGGREGATE_ONLY_SQL;
break;
case HOURS:
metricsTable = METRICS_AGGREGATE_HOURLY_TABLE_NAME;
query = GET_METRIC_AGGREGATE_ONLY_SQL;
break;
case MINUTES:
metricsTable = METRICS_AGGREGATE_MINUTE_TABLE_NAME;
query = GET_METRIC_AGGREGATE_ONLY_SQL;
break;
default:
metricsTable = METRICS_RECORD_TABLE_NAME;
query = GET_METRIC_SQL;
}
stmtStr = String.format(query, metricsTable);
}
StringBuilder sb = new StringBuilder(stmtStr);
if (!(condition instanceof EmptyCondition)) {
sb.append(" WHERE ");
sb.append(condition.getConditionClause());
String orderByClause = condition.getOrderByClause(true);
if (orderByClause != null) {
sb.append(orderByClause);
} else {
sb.append(" ORDER BY UUID, SERVER_TIME ");
}
}
if (condition.getLimit() != null) {
sb.append(" LIMIT ").append(condition.getLimit());
}
if (LOG.isDebugEnabled()) {
LOG.debug("SQL: " + sb.toString() + ", condition: " + condition);
}
PreparedStatement stmt = null;
try {
stmt = connection.prepareStatement(sb.toString());
int pos = 1;
pos = addUuids(condition, pos, stmt);
if (condition instanceof TopNCondition) {
pos = addStartTime(condition, pos, stmt);
pos = addEndTime(condition, pos, stmt);
}
pos = addStartTime(condition, pos, stmt);
addEndTime(condition, pos, stmt);
if (condition.getFetchSize() != null) {
stmt.setFetchSize(condition.getFetchSize());
}
} catch (SQLException e) {
if (stmt != null) {
stmt.close();
}
throw e;
}
return stmt;
}