diff options
| author | mike bayer <mike_mp@zzzcomputing.com> | 2017-08-25 15:29:25 -0400 |
|---|---|---|
| committer | Gerrit Code Review <gerrit@awstats.zzzcomputing.com> | 2017-08-25 15:29:25 -0400 |
| commit | 4baa9041cc97394600ad1eefbed81777dde18a1e (patch) | |
| tree | 8fcae0ec4064c02ef69f137b8f8536ca1fb516cb /lib/sqlalchemy/sql/elements.py | |
| parent | 887fb3ebaad20847edc752f5fcf072ace947d56a (diff) | |
| parent | 3a5bbe4cbe12d180fba2b942d0467b46be705bea (diff) | |
| download | sqlalchemy-4baa9041cc97394600ad1eefbed81777dde18a1e.tar.gz | |
Merge "Allow for multiple FOLLOWING/PRECEDING in a window range"
Diffstat (limited to 'lib/sqlalchemy/sql/elements.py')
| -rw-r--r-- | lib/sqlalchemy/sql/elements.py | 38 |
1 files changed, 15 insertions, 23 deletions
diff --git a/lib/sqlalchemy/sql/elements.py b/lib/sqlalchemy/sql/elements.py index 46a8d2c35..36a6a6557 100644 --- a/lib/sqlalchemy/sql/elements.py +++ b/lib/sqlalchemy/sql/elements.py @@ -3162,6 +3162,10 @@ class Over(ColumnElement): func.row_number().over(order_by='x', range_=(-2, None)) + * RANGE BETWEEN 1 FOLLOWING AND 3 FOLLOWING:: + + func.row_number().over(order_by='x', range_=(1, 3)) + .. versionadded:: 1.1 support for RANGE / ROWS within a window @@ -3223,42 +3227,30 @@ class Over(ColumnElement): raise exc.ArgumentError("2-tuple expected for range/rows") if range_[0] is None: - preceding = RANGE_UNBOUNDED + lower = RANGE_UNBOUNDED else: try: - preceding = int(range_[0]) + lower = int(range_[0]) except ValueError: raise exc.ArgumentError( - "Integer or None expected for preceding value") + "Integer or None expected for range value") else: - if preceding > 0: - raise exc.ArgumentError( - "Preceding value must be a " - "negative integer, zero, or None") - elif preceding < 0: - preceding = literal(abs(preceding)) - else: - preceding = RANGE_CURRENT + if lower == 0: + lower = RANGE_CURRENT if range_[1] is None: - following = RANGE_UNBOUNDED + upper = RANGE_UNBOUNDED else: try: - following = int(range_[1]) + upper = int(range_[1]) except ValueError: raise exc.ArgumentError( - "Integer or None expected for following value") + "Integer or None expected for range value") else: - if following < 0: - raise exc.ArgumentError( - "Following value must be a positive " - "integer, zero, or None") - elif following > 0: - following = literal(following) - else: - following = RANGE_CURRENT + if upper == 0: + upper = RANGE_CURRENT - return preceding, following + return lower, upper @property def func(self): |
