Как использовать метод `literal_processor` типов диалектов `sqlalchemy`?
Использование этого метода для классов типов непонятно. Я прочитал документацию алхимии, где сказано, что метод используется для рендеринга куска запроса напрямую из значений, но нет примеров использования и непонятная ситуация, когда это вызывается.
Например, если мы возьмём его реализацию в clickhouse_sqlalchemy.types.Array
:
def literal_processor(self, dialect):
item_processor = self.item_type_impl.literal_processor(dialect)
def process(value):
processed_value = []
for x in value:
if item_processor:
x = item_processor(x)
processed_value.append(x)
return '[' + ', '.join(processed_value) + ']'
return process
Здесь, видимо, стремятся отрендерить нативную для ClickHouse запись массива ([1, 2, 3]
, например). Но как это использовать при построении запроса? Я не нашёл иного способа использования типов кроме кастинга sa.cast(sa.func.array(1, 2, 3), Array(String))
. Объекты типов невызываемы, поэтому откуда берутся значения, для которых мы применяем item_processor
в этом примере, неясно.