Skip to content

Commit 6844336

Browse files
authored
fix: calculate limit value correctly for offset only queries (#160)
Co-authored-by: larkee <larkee@users.noreply.github.com>
1 parent 646d6ac commit 6844336

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

google/cloud/sqlalchemy_spanner/sqlalchemy_spanner.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ def limit_clause(self, select, **kw):
259259
text += "\n LIMIT " + self.process(select._limit_clause, **kw)
260260
if select._offset_clause is not None:
261261
if select._limit_clause is None:
262-
text += "\n LIMIT 9223372036854775805"
262+
text += f"\n LIMIT {9223372036854775807-select._offset}"
263263
text += " OFFSET " + self.process(select._offset_clause, **kw)
264264
return text
265265

test/test_suite.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1613,6 +1613,31 @@ def test_staleness(self):
16131613
assert connection.connection.staleness is None
16141614

16151615

1616+
class LimitOffsetTest(fixtures.TestBase):
1617+
"""
1618+
Check that SQL with an offset and no limit is being generated correctly.
1619+
"""
1620+
1621+
def setUp(self):
1622+
self._engine = create_engine(get_db_url(), pool_size=1)
1623+
self._metadata = MetaData(bind=self._engine)
1624+
1625+
self._table = Table(
1626+
"users",
1627+
self._metadata,
1628+
Column("user_id", Integer, primary_key=True),
1629+
Column("user_name", String(16), nullable=False),
1630+
)
1631+
1632+
self._metadata.create_all(self._engine)
1633+
1634+
def test_offset_only(self):
1635+
for offset in [1, 7, 10, 100, 1000, 10000]:
1636+
1637+
with self._engine.connect().execution_options(read_only=True) as connection:
1638+
list(connection.execute(self._table.select().offset(offset)).fetchall())
1639+
1640+
16161641
class ComputedReflectionFixtureTest(_ComputedReflectionFixtureTest):
16171642
@classmethod
16181643
def define_tables(cls, metadata):

0 commit comments

Comments
 (0)