**Use case**

We're building a publicly available CH query interface (like Play UI but with enhanced capabilities like exploring the data and other goodies).
Essentially, it will contain TBs of publicly available blockchain analytics data served over browser and powered by CH.
Thousands of users are expected to use the UI and send arbitrary SQL statements to our CH cluster.
For the best experience, we want to provide fast, intuitive and seamless environment for the users.

As you can guess, the product is all about writing ad-hoc queries. 
Considering the number of tables, it becomes really hard to use the mouse to explore the data and to type the table/column names with the keyboard.
This is why we have implemented autocomplete into our SQL editor.
One significant problem about the autocomplete is that the system cannot know beforehand the column names of the table unless the table name is provided.

**Describe the solution you'd like**

If somehow users provide the table name first then all the column names would be inferred and could be autocompleted, only if CH supports this:

```sql
FROM table
SELECT *
```
It is a simple yet powerfull way to increase the user experience. This project will also lead lots of users to get to know CH and show the world that there is a better DBMS.

if (!order_expression_list && select_query->limit_with_ties)
        throw Exception("Can not use WITH TIES without ORDER BY", ErrorCodes::WITH_TIES_WITHOUT_ORDER_BY);
    
    if (s_settings.ignore(pos, expected))
    {
        ParserSetQuery parser_settings(true);
        if (!parser_settings.parse(pos, settings, expected))
            return false;
    }
    select_query->setExpression(ASTSelectQuery::Expression::WITH, std::move(with_expression_list));
    select_query->setExpression(ASTSelectQuery::Expression::SELECT, std::move(select_expression_list));
    select_query->setExpression(ASTSelectQuery::Expression::TABLES, std::move(tables));
    select_query->setExpression(ASTSelectQuery::Expression::PREWHERE, std::move(prewhere_expression));
    select_query->setExpression(ASTSelectQuery::Expression::WHERE, std::move(where_expression));
    select_query->setExpression(ASTSelectQuery::Expression::GROUP_BY, std::move(group_expression_list));
    select_query->setExpression(ASTSelectQuery::Expression::HAVING, std::move(having_expression));
    select_query->setExpression(ASTSelectQuery::Expression::WINDOW, std::move(window_list));
    select_query->setExpression(ASTSelectQuery::Expression::ORDER_BY, std::move(order_expression_list));
    select_query->setExpression(ASTSelectQuery::Expression::LIMIT_BY_OFFSET, std::move(limit_by_offset));
    select_query->setExpression(ASTSelectQuery::Expression::LIMIT_BY_LENGTH, std::move(limit_by_length));
    select_query->setExpression(ASTSelectQuery::Expression::LIMIT_BY, std::move(limit_by_expression_list));
    select_query->setExpression(ASTSelectQuery::Expression::LIMIT_OFFSET, std::move(limit_offset));
    select_query->setExpression(ASTSelectQuery::Expression::LIMIT_LENGTH, std::move(limit_length));
    select_query->setExpression(ASTSelectQuery::Expression::SETTINGS, std::move(settings));
    select_query->setExpression(ASTSelectQuery::Expression::INTERPOLATE, std::move(interpolate_expression_list));
    return true;
}
}