meaning they can store any number of dimensions no matter how
they were declared.
- :param zero_indexes=False: True allow to work with field like with
- python's list - use indexes starts with zero, but not starts with
- 1 like in ARRAY
+ :param zero_indexes=False: when True, index values will be converted
+ between Python zero-based and Postgresql one-based indexes, e.g.
+ a value of one will be added to all index values before passing
+ to the database.
+
+ .. versionadded:: 0.9.5
"""
if isinstance(item_type, ARRAY):
checkparams={'param_1': 7}
)
- def test_array_shift_indexes(self):
- c = Column('x', postgresql.ARRAY(Integer, zero_indexes=True))
+ def _test_array_zero_indexes(self, zero_indexes):
+ c = Column('x', postgresql.ARRAY(Integer, zero_indexes=zero_indexes))
+
+ add_one = 1 if zero_indexes else 0
self.assert_compile(
- cast(c, postgresql.ARRAY(Integer, zero_indexes=True)),
+ cast(c, postgresql.ARRAY(Integer, zero_indexes=zero_indexes)),
"CAST(x AS INTEGER[])"
)
self.assert_compile(
c[5],
"x[%(x_1)s]",
- checkparams={'x_1': 6}
+ checkparams={'x_1': 5 + add_one}
)
self.assert_compile(
c[5:7],
"x[%(x_1)s:%(x_2)s]",
- checkparams={'x_2': 8, 'x_1': 6}
+ checkparams={'x_2': 7 + add_one, 'x_1': 5 + add_one}
)
self.assert_compile(
c[5:7][2:3],
"x[%(x_1)s:%(x_2)s][%(param_1)s:%(param_2)s]",
- checkparams={'x_2': 8, 'x_1': 6, 'param_1': 3, 'param_2': 4}
+ checkparams={'x_2': 7 + add_one, 'x_1': 5 + add_one,
+ 'param_1': 2 + add_one, 'param_2': 3 + add_one}
)
self.assert_compile(
c[5:7][3],
"x[%(x_1)s:%(x_2)s][%(param_1)s]",
- checkparams={'x_2': 8, 'x_1': 6, 'param_1': 4}
+ checkparams={'x_2': 7 + add_one, 'x_1': 5 + add_one,
+ 'param_1': 3 + add_one}
)
- c = Column('x', postgresql.ARRAY(Integer, zero_indexes=False))
-
- self.assert_compile(
- c[5],
- "x[%(x_1)s]",
- checkparams={'x_1': 5}
- )
+ def test_array_zero_indexes_true(self):
+ self._test_array_zero_indexes(True)
- self.assert_compile(
- c[5:7],
- "x[%(x_1)s:%(x_2)s]",
- checkparams={'x_2': 7, 'x_1': 5}
- )
- self.assert_compile(
- c[5:7][2:3],
- "x[%(x_1)s:%(x_2)s][%(param_1)s:%(param_2)s]",
- checkparams={'x_2': 7, 'x_1': 5, 'param_1': 2, 'param_2': 3}
- )
- self.assert_compile(
- c[5:7][3],
- "x[%(x_1)s:%(x_2)s][%(param_1)s]",
- checkparams={'x_2': 7, 'x_1': 5, 'param_1': 3}
- )
+ def test_array_zero_indexes_false(self):
+ self._test_array_zero_indexes(False)
def test_array_literal_type(self):
is_(postgresql.array([1, 2]).type._type_affinity, postgresql.ARRAY)