in ambari-metrics-timelineservice/src/main/java/org/apache/ambari/metrics/core/timeline/query/PhoenixTransactSQL.java [880:941]
public static PreparedStatement prepareTransientMetricsSqlStmt(Connection connection, Condition c)
throws SQLException {
validateConditionIsNotEmpty(c);
validateRowCountLimit(c);
if (!(c instanceof TransientMetricCondition)) {
LOG.error("Condition not instanceOf TransientMetricCondition");
return null;
}
TransientMetricCondition condition = (TransientMetricCondition) c;
String stmtStr;
if (condition.getStatement() != null) {
stmtStr = condition.getStatement();
} else {
stmtStr = String.format(GET_TRANSIENT_METRIC_SQL, METRIC_TRANSIENT_TABLE_NAME);
}
StringBuilder sb = new StringBuilder(stmtStr);
sb.append(" WHERE ");
sb.append(condition.getTransientConditionClause());
String orderByClause = condition.getOrderByClause(true);
if (orderByClause != null) {
sb.append(orderByClause);
} else {
sb.append(" ORDER BY METRIC_NAME, 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 = addMetricNames(condition, pos, stmt);
pos = addHostNames(condition, pos, stmt);
pos = addAppId(condition, pos, stmt);
pos = addInstanceId(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;
}