```
clickhouse-local -n <<<"

DROP TABLE IF EXISTS test_table_join_1;
CREATE TABLE test_table_join_1
(
    id UInt64,
    value String
) ENGINE = TinyLog;

DROP TABLE IF EXISTS test_table_join_2;
CREATE TABLE test_table_join_2
(
    id UInt64,
    value String
) ENGINE = TinyLog;

DROP TABLE IF EXISTS test_table_join_3;
CREATE TABLE test_table_join_3
(
    id UInt64,
    value String
) ENGINE = TinyLog;

DESCRIBE TABLE
(
    SELECT
        test_table_join_1.* APPLY toString,
        test_table_join_2.* APPLY toString,
        test_table_join_3.* APPLY toString
    FROM test_table_join_1 AS t1
    INNER JOIN test_table_join_2 AS t2 ON t1.id = t2.id
    INNER JOIN test_table_join_3 AS t3 ON t2.id = t3.id
)
"
Code: 49. DB::Exception: Logical error: qualified asterisk must have exactly one child: While processing test_table_join_1.* APPLY toString, test_table_join_2.* APPLY toString, test_table_join_3.* APPLY toString: While processing SELECT test_table_join_1.* APPLY toString, test_table_join_2.* APPLY toString, test_table_join_3.* APPLY toString FROM test_table_join_1 AS t1 INNER JOIN test_table_join_2 AS t2 ON t1.id = t2.id INNER JOIN test_table_join_3 AS t3 ON t2.id = t3.id. (LOGICAL_ERROR)
```

https://s3.amazonaws.com/clickhouse-test-reports/0/f84064d05acd76e5098e14f42f15656960f29da6/fuzzer_astfuzzerubsan/report.html
if (*table_pos != last_table_pos)
                    {
                        String unique_short_name = unique_names.longToShort(unique_long_name);
                        ident->setShortName(unique_short_name);
                        needed_columns[*table_pos].column_clashes.emplace(short_name, unique_short_name);
                    }
                }
                else
                {
                    if (!table.hasColumn(short_name))
                    {
                        throw Exception(ErrorCodes::UNKNOWN_IDENTIFIER,
                                        "There's no column '{}' in table '{}'",
                                        ident->name(),
                                        table.table.getQualifiedNamePrefix(false));
                    }
                    ident->setShortName(short_name); 
                    needed_columns[*table_pos].no_clashes.emplace(short_name);
                }
                restoreName(*ident, original_long_name, restored_names);
            }
            else if (got_alias)
                needed_columns[*table_pos].alias_clashes.emplace(ident->shortName());
            else
                needed_columns[*table_pos].no_clashes.emplace(ident->shortName());
        }
    }
    return needed_columns;
}
std::shared_ptr<ASTExpressionList> subqueryExpressionList(