2 columns sample

```sql
CREATE TABLE userid_set(userid UInt64, name String) ENGINE = Set;
INSERT INTO userid_set VALUES (1, 'Mary'),(2, 'Jane'),(3, 'Mary'),(4, 'Jack');

CREATE TABLE userid_test (userid UInt64, name String) ENGINE = MergeTree() PARTITION BY (intDiv(userid, 500)) ORDER BY (userid) SETTINGS index_granularity = 8192;
INSERT INTO userid_test VALUES (1, 'Jack'),(2, 'Mary'),(3, 'Mary'),(4, 'John'),(5, 'Mary');

SELECT * FROM userid_test WHERE (userid, name) IN (userid_set); -- fails

SELECT * FROM userid_test WHERE (name, userid) IN (userid_set); -- works, but order of columns is reversed.

```

3 columns sample
```sql
CREATE TABLE userid_set2(userid UInt64, name String, birthdate Date) ENGINE = Set;
 insert into userid_set2 values (1,'John', '1990-01-01');

WITH  'John' AS name,  toDate('1990-01-01') AS birthdate
SELECT * FROM numbers(10)
WHERE (number, name, birthdate) IN (userid_set2); -- fails

WITH  'John' AS name,  toDate('1990-01-01') AS birthdate
SELECT * FROM numbers(10)
WHERE (birthdate, name, number) IN (userid_set2); -- works, but order of column is reversed
```

bool use_grouping_set_key = false;
    ActionsDAGPtr before_array_join;
    ArrayJoinActionPtr array_join;
    ActionsDAGPtr before_join;
    ActionsDAGPtr converting_join_columns;
    JoinPtr join;
    ActionsDAGPtr before_where;
    ActionsDAGPtr before_aggregation;
    ActionsDAGPtr before_having;
    String having_column_name;
    bool remove_having_filter = false;
    ActionsDAGPtr before_window;
    ActionsDAGPtr before_order_by;
    ActionsDAGPtr before_limit_by;
    ActionsDAGPtr final_projection;
    
    
    Names selected_columns;
    
    Names required_columns;
    
    NameSet columns_to_remove_after_prewhere;
    PrewhereInfoPtr prewhere_info;
    FilterDAGInfoPtr filter_info;
    ConstantFilterDescription prewhere_constant_filter_description;
    ConstantFilterDescription where_constant_filter_description;
    
    ManyExpressionActions order_by_elements_actions;
    ManyExpressionActions group_by_elements_actions;
    ExpressionAnalysisResult() = default;