'Adjusts the limits on the rows retrieved. We use low/high to set these,
as it makes it more Pythonic to read and write. When the SQL query is
created, they are converted to the appropriate offset and limit values.
Any limits passed in here are applied relative to the existing
constraints. So low is added to the current low value and both will be
clamped to any existing high value.'

def set_limits(self, low=None, high=None):

    if (high is not None):
        if (self.high_mark is not None):
            self.high_mark = min(self.high_mark, (self.low_mark + high))
        else:
            self.high_mark = (self.low_mark + high)
    if (low is not None):
        if (self.high_mark is not None):
            self.low_mark = min(self.high_mark, (self.low_mark + low))
        else:
            self.low_mark = (self.low_mark + low)
