20.7
```
SELECT indexOf(['a', 'b', 'c'], toLowCardinality('a'))

┌─indexOf(['a', 'b', 'c'], toLowCardinality('a'))─┐
│                                               1 │
└─────────────────────────────────────────────────┘
```

20.8
```
SELECT indexOf(['a', 'b', 'c'], toLowCardinality('a'))


Received exception from server (version 20.8.3):
Code: 43. DB::Exception: Received from localhost:9000. DB::Exception: Types of array and 2nd argument of function "indexOf" must be identical up to nullability, cardinality, numeric types, or Enum and numeric type. Passed: Array(String) and LowCardinality(String).. 
```

https://github.com/ClickHouse/ClickHouse/pull/12550

/cc @myrrc 

}
            
            executeOnNonNullable(source_columns, {0, 1, 2, 3}, 4);
            
            const ColumnWithTypeAndName & source_col = source_columns[4];
            ColumnWithTypeAndName & dest_col = columns[result];
            dest_col.column = std::move(source_col.column);
        }
    }
private:
    using ResultType = typename ConcreteAction::ResultType;
    using ResultColumnType = ColumnVector<ResultType>;
    using ResultColumnPtr = decltype(ResultColumnType::create());
    using NullMaps = std::pair<const NullMap *, const NullMap *>;
    struct ExecutionData
    {
        const IColumn& left;
        const IColumn& right;
        const ColumnArray::Offsets& offsets;
        ColumnsWithTypeAndName & columns;
        size_t result_pos;
        NullMaps maps;
        ResultColumnPtr result { ResultColumnType::create() };
        inline void move_result() { columns[result_pos].column = std::move(result); }
    };
    static inline bool allowNested(const DataTypePtr & left, const DataTypePtr & right)
    {
        return ((isNativeNumber(left) || isEnum(left)) && isNativeNumber(right)) || left->equals(*right);
    }
    static inline bool allowArguments(const DataTypePtr & array_inner_type, const DataTypePtr & arg)