Skip to content

Cannot compile statement with ArrowType columns, when using both dialect=engine.dialect and compile_kwargs={"literal_binds": True} #798

@HYBRID-BEING

Description

@HYBRID-BEING
d = arrow.utcnow().floor('month')
stmt = sql.select(
    sql.case((table_name.c.date_column == d, 1), else_=0)
)

If i compile it with only compile_kwargs={"literal_binds": True} it works:

print(stmt.compile(compile_kwargs={"literal_binds": True}))
# SELECT CASE WHEN (table_name.date_column = '2025-12-01T00:00:00+00:00') THEN 1 ELSE 0 END AS anon_1

It also works, if i compile it with just dialect=engine.dialect (dialect in question is fdb):

print(stmt.compile(dialect=engine.dialect))
# SELECT CASE WHEN (table_name.date_column = __[POSTCOMPILE_date_column_1]) THEN __[POSTCOMPILE_param_1] ELSE __[POSTCOMPILE_param_2] END AS anon_1

However, if i try both, i get an error:

print(stmt.compile(
    dialect=engine.dialect,
    compile_kwargs={"literal_binds": True},
))
Traceback (most recent call last):
  File "midservice\modules\module_life_cycle.py", line 295, in with_context
  File "#.py", line 334, in run
    logger.info(stmt.compile(
  File "sqlalchemy\sql\elements.py", line 503, in compile
  File "sqlalchemy\sql\elements.py", line 567, in _compiler
  File "sqlalchemy\sql\compiler.py", line 809, in __init__
  File "sqlalchemy\sql\compiler.py", line 464, in __init__
  File "sqlalchemy\sql\compiler.py", line 499, in process
  File "sqlalchemy\sql\visitors.py", line 82, in _compiler_dispatch
  File "sqlalchemy\sql\compiler.py", line 3485, in visit_select
  File "sqlalchemy\sql\compiler.py", line 3486, in <listcomp>
  File "sqlalchemy\sql\compiler.py", line 3317, in _label_select_column
  File "sqlalchemy\sql\visitors.py", line 82, in _compiler_dispatch
  File "sqlalchemy\sql\compiler.py", line 1534, in visit_label
  File "sqlalchemy\sql\visitors.py", line 82, in _compiler_dispatch
  File "sqlalchemy\sql\compiler.py", line 1774, in visit_case
  File "sqlalchemy\sql\visitors.py", line 82, in _compiler_dispatch
  File "sqlalchemy\sql\compiler.py", line 1428, in visit_grouping
  File "sqlalchemy\sql\visitors.py", line 82, in _compiler_dispatch
  File "sqlalchemy\sql\compiler.py", line 2278, in visit_binary
  File "sqlalchemy\sql\compiler.py", line 2330, in _generate_generic_binary
TypeError: can only concatenate str (not "Arrow") to str

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions