From: Kaan Date: Wed, 19 Mar 2025 06:34:47 +0000 (+0000) Subject: cleaned multiple framespec clause check X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e53d71a1fa1e0e564de3ce3697a98e6d8e7b8d20;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git cleaned multiple framespec clause check --- diff --git a/lib/sqlalchemy/sql/elements.py b/lib/sqlalchemy/sql/elements.py index 9d8b00b854..ce35ac5e61 100644 --- a/lib/sqlalchemy/sql/elements.py +++ b/lib/sqlalchemy/sql/elements.py @@ -4246,23 +4246,14 @@ class Over(ColumnElement[_T]): _literal_as_text_role=roles.ByOfRole, ) - # validate frame spec and assign clause - _frame_spec_map = {"range_": range_, "rows": rows, "groups": groups} - if sum([v is not None for v in _frame_spec_map.values()]) > 1: - _clauses = [ - f"'{k}'" - for i, k in enumerate(_frame_spec_map.keys()) - if list(_frame_spec_map.values())[i] - ] - _clauses_str = ' and '.join(_clauses) + if (range_ and (rows or groups)) or (rows and (range_ or groups)): raise exc.ArgumentError( - f"too many frame spec clauses provided: {_clauses_str}" + "only one of 'rows', 'range_', or 'groups' may be provided" ) else: - self.range_, self.rows, self.groups = [ - (_FrameClause(v) if v else None) - for v in _frame_spec_map.values() - ] + self.range_ = _FrameClause(range_) if range_ else None + self.rows = _FrameClause(rows) if rows else None + self.groups = _FrameClause(groups) if groups else None if not TYPE_CHECKING: diff --git a/test/sql/test_compiler.py b/test/sql/test_compiler.py index 0f701e9872..aa6e3275ce 100644 --- a/test/sql/test_compiler.py +++ b/test/sql/test_compiler.py @@ -3260,8 +3260,7 @@ class SelectTest(fixtures.TestBase, AssertsCompiledSQL): assert_raises_message( exc.ArgumentError, - "too many frame spec clauses provided: " - "'range_' and 'rows'", + "only one of 'rows', 'range_', or 'groups' may be provided", func.row_number().over, range_=(-5, 8), rows=(-2, 5), @@ -3269,8 +3268,7 @@ class SelectTest(fixtures.TestBase, AssertsCompiledSQL): assert_raises_message( exc.ArgumentError, - "too many frame spec clauses provided: " - "'range_' and 'groups'", + "only one of 'rows', 'range_', or 'groups' may be provided", func.row_number().over, range_=(-5, 8), groups=(None, None), @@ -3278,8 +3276,7 @@ class SelectTest(fixtures.TestBase, AssertsCompiledSQL): assert_raises_message( exc.ArgumentError, - "too many frame spec clauses provided: " - "'rows' and 'groups'", + "only one of 'rows', 'range_', or 'groups' may be provided", func.row_number().over, rows=(-2, 5), groups=(None, None), @@ -3287,8 +3284,7 @@ class SelectTest(fixtures.TestBase, AssertsCompiledSQL): assert_raises_message( exc.ArgumentError, - "too many frame spec clauses provided: " - "'range_' and 'rows' and 'groups'", + "only one of 'rows', 'range_', or 'groups' may be provided", func.row_number().over, range_=(-5, 8), rows=(-2, 5),