use of com.facebook.presto.sql.tree.Query in project presto by prestodb.
the class LimitQueryDeterminismAnalyzer method analyzeQuery.
private LimitQueryDeterminismAnalysis analyzeQuery(Query query) {
if (query.getOrderBy().isPresent() || !query.getLimit().isPresent()) {
return NOT_RUN;
}
if (isLimitAll(query.getLimit().get())) {
return NOT_RUN;
}
long limit = parseLong(query.getLimit().get());
if (rowCount < limit) {
return DETERMINISTIC;
}
Optional<String> newLimit = Optional.of(Long.toString(limit + 1));
Query newLimitQuery = new Query(query.getWith(), query.getQueryBody(), Optional.empty(), query.getOffset(), newLimit);
return analyzeLimitNoOrderBy(newLimitQuery, limit);
}
use of com.facebook.presto.sql.tree.Query in project presto by prestodb.
the class LimitQueryDeterminismAnalyzer method analyzeQuerySpecification.
private LimitQueryDeterminismAnalysis analyzeQuerySpecification(Optional<With> with, QuerySpecification querySpecification) {
if (!querySpecification.getLimit().isPresent()) {
return NOT_RUN;
}
if (isLimitAll(querySpecification.getLimit().get())) {
return NOT_RUN;
}
long limit = parseLong(querySpecification.getLimit().get());
if (rowCount < limit) {
return DETERMINISTIC;
}
Optional<String> newLimit = Optional.of(Long.toString(limit + 1));
Optional<OrderBy> orderBy = querySpecification.getOrderBy();
if (orderBy.isPresent()) {
List<SelectItem> selectItems = new ArrayList<>(querySpecification.getSelect().getSelectItems());
List<ColumnNameOrIndex> orderByKeys = populateSelectItems(selectItems, orderBy.get());
return analyzeLimitOrderBy(new Query(with, new QuerySpecification(new Select(false, selectItems), querySpecification.getFrom(), querySpecification.getWhere(), querySpecification.getGroupBy(), querySpecification.getHaving(), orderBy, querySpecification.getOffset(), newLimit), Optional.empty(), Optional.empty(), Optional.empty()), orderByKeys, limit);
}
Query newLimitQuery = new Query(with, new QuerySpecification(querySpecification.getSelect(), querySpecification.getFrom(), querySpecification.getWhere(), querySpecification.getGroupBy(), querySpecification.getHaving(), Optional.empty(), querySpecification.getOffset(), newLimit), Optional.empty(), Optional.empty(), Optional.empty());
return analyzeLimitNoOrderBy(newLimitQuery, limit);
}
use of com.facebook.presto.sql.tree.Query in project presto by prestodb.
the class QueryRewriter method getResultMetadata.
private ResultSetMetaData getResultMetadata(Query query) {
Query zeroRowQuery;
if (query.getQueryBody() instanceof QuerySpecification) {
QuerySpecification querySpecification = (QuerySpecification) query.getQueryBody();
zeroRowQuery = new Query(query.getWith(), new QuerySpecification(querySpecification.getSelect(), querySpecification.getFrom(), querySpecification.getWhere(), querySpecification.getGroupBy(), querySpecification.getHaving(), querySpecification.getOrderBy(), querySpecification.getOffset(), Optional.of("0")), Optional.empty(), Optional.empty(), Optional.empty());
} else {
zeroRowQuery = new Query(query.getWith(), query.getQueryBody(), Optional.empty(), Optional.empty(), Optional.of("0"));
}
return prestoAction.execute(zeroRowQuery, REWRITE, ResultSetConverter.DEFAULT).getMetadata();
}
use of com.facebook.presto.sql.tree.Query in project presto by prestodb.
the class TestChecksumValidator method testChecksumQuery.
@Test
public void testChecksumQuery() {
Query checksumQuery = checksumValidator.generateChecksumQuery(QualifiedName.of("test:di"), ImmutableList.of(BIGINT_COLUMN, VARCHAR_COLUMN, DOUBLE_COLUMN, REAL_COLUMN, INT_ARRAY_COLUMN, ROW_ARRAY_COLUMN, MAP_ARRAY_COLUMN, MAP_COLUMN, MAP_NON_ORDERABLE_COLUMN, ROW_COLUMN));
Statement expectedChecksumQuery = sqlParser.createStatement("SELECT\n" + " \"count\"(*)\n" + ", \"checksum\"(\"bigint\") \"bigint$checksum\"\n" + ", \"checksum\"(\"varchar\") \"varchar$checksum\"\n" + ", \"sum\"(\"double\") FILTER (WHERE \"is_finite\"(\"double\")) \"double$sum\"\n" + ", \"count\"(\"double\") FILTER (WHERE \"is_nan\"(\"double\")) \"double$nan_count\"\n" + ", \"count\"(\"double\") FILTER (WHERE (\"double\" = \"infinity\"())) \"double$pos_inf_count\"\n" + ", \"count\"(\"double\") FILTER (WHERE (\"double\" = -\"infinity\"())) \"double$neg_inf_count\"\n" + ", \"sum\"(CAST(\"real\" AS double)) FILTER (WHERE \"is_finite\"(\"real\")) \"real$sum\"\n" + ", \"count\"(\"real\") FILTER (WHERE \"is_nan\"(\"real\")) \"real$nan_count\"\n" + ", \"count\"(\"real\") FILTER (WHERE (\"real\" = \"infinity\"())) \"real$pos_inf_count\"\n" + ", \"count\"(\"real\") FILTER (WHERE (\"real\" = -\"infinity\"())) \"real$neg_inf_count\"\n" + ", \"checksum\"(\"array_sort\"(\"int_array\")) \"int_array$checksum\"\n" + ", \"checksum\"(\"cardinality\"(\"int_array\")) \"int_array$cardinality_checksum\"\n" + ", COALESCE(\"sum\"(\"cardinality\"(\"int_array\")), 0) \"int_array$cardinality_sum\"\n" + ", COALESCE(\"checksum\"(TRY(\"array_sort\"(\"row_array\"))), \"checksum\"(\"row_array\")) \"row_array$checksum\"\n" + ", \"checksum\"(\"cardinality\"(\"row_array\")) \"row_array$cardinality_checksum\"\n" + ", COALESCE(\"sum\"(\"cardinality\"(\"row_array\")), 0) \"row_array$cardinality_sum\"\n" + ", \"checksum\"(\"map_array\") \"map_array$checksum\"\n" + ", \"checksum\"(\"cardinality\"(\"map_array\")) \"map_array$cardinality_checksum\"\n" + ", COALESCE(\"sum\"(\"cardinality\"(\"map_array\")), 0) \"map_array$cardinality_sum\"\n" + ", \"checksum\"(\"map\") \"map$checksum\"\n" + ", \"checksum\"(\"array_sort\"(\"map_keys\"(\"map\"))) \"map$keys_checksum\"\n" + ", COALESCE(\"checksum\"(TRY(\"array_sort\"(\"map_values\"(\"map\")))), \"checksum\"(\"map_values\"(\"map\"))) \"map$values_checksum\"\n" + ", \"checksum\"(\"cardinality\"(\"map\")) \"map$cardinality_checksum\"\n" + ", COALESCE(\"sum\"(\"cardinality\"(\"map\")), 0) \"map$cardinality_sum\"\n" + ", \"checksum\"(\"map_non_orderable\") \"map_non_orderable$checksum\"\n" + ", \"checksum\"(\"map_keys\"(\"map_non_orderable\")) \"map_non_orderable$keys_checksum\"\n" + ", \"checksum\"(\"map_values\"(\"map_non_orderable\")) \"map_non_orderable$values_checksum\"\n" + ", \"checksum\"(\"cardinality\"(\"map_non_orderable\")) \"map_non_orderable$cardinality_checksum\"\n" + ", COALESCE(\"sum\"(\"cardinality\"(\"map_non_orderable\")), 0) \"map_non_orderable$cardinality_sum\"\n" + ", \"checksum\"(\"row\".\"i\") \"row.i$checksum\"\n" + ", \"checksum\"(\"row\"[2]) \"row._col2$checksum\"\n" + ", \"sum\"(\"row\".\"d\") FILTER (WHERE \"is_finite\"(\"row\".\"d\")) \"row.d$sum\"\n" + ", \"count\"(\"row\".\"d\") FILTER (WHERE \"is_nan\"(\"row\".\"d\")) \"row.d$nan_count\"\n" + ", \"count\"(\"row\".\"d\") FILTER (WHERE (\"row\".\"d\" = \"infinity\"())) \"row.d$pos_inf_count\"\n" + ", \"count\"(\"row\".\"d\") FILTER (WHERE (\"row\".\"d\" = -\"infinity\"())) \"row.d$neg_inf_count\"\n" + ", \"checksum\"(\"array_sort\"(\"row\".\"a\")) \"row.a$checksum\"\n" + ", \"checksum\"(\"cardinality\"(\"row\".\"a\")) \"row.a$cardinality_checksum\"\n" + ", COALESCE(\"sum\"(\"cardinality\"(\"row\".\"a\")), 0) \"row.a$cardinality_sum\"\n" + ", \"sum\"(\"row\".\"r\"[1]) FILTER (WHERE \"is_finite\"(\"row\".\"r\"[1])) \"row.r._col1$sum\"\n" + ", \"count\"(\"row\".\"r\"[1]) FILTER (WHERE \"is_nan\"(\"row\".\"r\"[1])) \"row.r._col1$nan_count\"\n" + ", \"count\"(\"row\".\"r\"[1]) FILTER (WHERE (\"row\".\"r\"[1] = \"infinity\"())) \"row.r._col1$pos_inf_count\"\n" + ", \"count\"(\"row\".\"r\"[1]) FILTER (WHERE (\"row\".\"r\"[1] = -\"infinity\"())) \"row.r._col1$neg_inf_count\"\n" + ", \"checksum\"(\"row\".\"r\".\"b\") \"row.r.b$checksum\"\n" + "FROM\n" + " \"test:di\"\n", PARSING_OPTIONS);
assertEquals(formatSql(checksumQuery, Optional.empty()), formatSql(expectedChecksumQuery, Optional.empty()));
}
use of com.facebook.presto.sql.tree.Query in project presto by prestodb.
the class TestQueryRewriter method assertCreateTableAs.
private static void assertCreateTableAs(Statement statement, String selectQuery) {
assertTrue(statement instanceof CreateTableAsSelect);
Query query = ((CreateTableAsSelect) statement).getQuery();
assertEquals(formatSql(query, Optional.empty()), formatSql(sqlParser.createStatement(selectQuery, PARSING_OPTIONS), Optional.empty()));
}
Aggregations