Path: blob/main/py-polars/tests/unit/sql/test_functions.py
6939 views
from __future__ import annotations12from pathlib import Path34import pytest56import polars as pl7from polars.exceptions import SQLInterfaceError8from polars.testing import assert_frame_equal91011@pytest.fixture12def foods_ipc_path() -> Path:13return Path(__file__).parent.parent / "io" / "files" / "foods1.ipc"141516def test_sql_expr() -> None:17df = pl.DataFrame({"a": [1, 2, 3], "b": ["xyz", "abcde", None]})18sql_exprs = pl.sql_expr(19[20"MIN(a)",21"POWER(a,a) AS aa",22"SUBSTR(b,2,2) AS b2",23]24)25result = df.select(*sql_exprs)26expected = pl.DataFrame(27{"a": [1, 1, 1], "aa": [1, 4, 27], "b2": ["yz", "bc", None]}28)29assert_frame_equal(result, expected)3031# expect expressions that can't reasonably be parsed as expressions to raise32# (for example: those that explicitly reference tables and/or use wildcards)33with pytest.raises(34SQLInterfaceError,35match=r"unable to parse 'xyz\.\*' as Expr",36):37pl.sql_expr("xyz.*")383940