test_sequence.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. from .. import fixtures, config
  2. from ..config import requirements
  3. from ..assertions import eq_
  4. from ... import testing
  5. from ... import Integer, String, Sequence, schema
  6. from ..schema import Table, Column
  7. class SequenceTest(fixtures.TablesTest):
  8. __requires__ = ('sequences',)
  9. __backend__ = True
  10. run_create_tables = 'each'
  11. @classmethod
  12. def define_tables(cls, metadata):
  13. Table('seq_pk', metadata,
  14. Column('id', Integer, Sequence('tab_id_seq'), primary_key=True),
  15. Column('data', String(50))
  16. )
  17. Table('seq_opt_pk', metadata,
  18. Column('id', Integer, Sequence('tab_id_seq', optional=True),
  19. primary_key=True),
  20. Column('data', String(50))
  21. )
  22. def test_insert_roundtrip(self):
  23. config.db.execute(
  24. self.tables.seq_pk.insert(),
  25. data="some data"
  26. )
  27. self._assert_round_trip(self.tables.seq_pk, config.db)
  28. def test_insert_lastrowid(self):
  29. r = config.db.execute(
  30. self.tables.seq_pk.insert(),
  31. data="some data"
  32. )
  33. eq_(
  34. r.inserted_primary_key,
  35. [1]
  36. )
  37. def test_nextval_direct(self):
  38. r = config.db.execute(
  39. self.tables.seq_pk.c.id.default
  40. )
  41. eq_(
  42. r, 1
  43. )
  44. @requirements.sequences_optional
  45. def test_optional_seq(self):
  46. r = config.db.execute(
  47. self.tables.seq_opt_pk.insert(),
  48. data="some data"
  49. )
  50. eq_(
  51. r.inserted_primary_key,
  52. [1]
  53. )
  54. def _assert_round_trip(self, table, conn):
  55. row = conn.execute(table.select()).first()
  56. eq_(
  57. row,
  58. (1, "some data")
  59. )
  60. class HasSequenceTest(fixtures.TestBase):
  61. __requires__ = 'sequences',
  62. __backend__ = True
  63. def test_has_sequence(self):
  64. s1 = Sequence('user_id_seq')
  65. testing.db.execute(schema.CreateSequence(s1))
  66. try:
  67. eq_(testing.db.dialect.has_sequence(testing.db,
  68. 'user_id_seq'), True)
  69. finally:
  70. testing.db.execute(schema.DropSequence(s1))
  71. @testing.requires.schemas
  72. def test_has_sequence_schema(self):
  73. s1 = Sequence('user_id_seq', schema=config.test_schema)
  74. testing.db.execute(schema.CreateSequence(s1))
  75. try:
  76. eq_(testing.db.dialect.has_sequence(
  77. testing.db, 'user_id_seq', schema=config.test_schema), True)
  78. finally:
  79. testing.db.execute(schema.DropSequence(s1))
  80. def test_has_sequence_neg(self):
  81. eq_(testing.db.dialect.has_sequence(testing.db, 'user_id_seq'),
  82. False)
  83. @testing.requires.schemas
  84. def test_has_sequence_schemas_neg(self):
  85. eq_(testing.db.dialect.has_sequence(testing.db, 'user_id_seq',
  86. schema=config.test_schema),
  87. False)
  88. @testing.requires.schemas
  89. def test_has_sequence_default_not_in_remote(self):
  90. s1 = Sequence('user_id_seq')
  91. testing.db.execute(schema.CreateSequence(s1))
  92. try:
  93. eq_(testing.db.dialect.has_sequence(testing.db, 'user_id_seq',
  94. schema=config.test_schema),
  95. False)
  96. finally:
  97. testing.db.execute(schema.DropSequence(s1))
  98. @testing.requires.schemas
  99. def test_has_sequence_remote_not_in_default(self):
  100. s1 = Sequence('user_id_seq', schema=config.test_schema)
  101. testing.db.execute(schema.CreateSequence(s1))
  102. try:
  103. eq_(testing.db.dialect.has_sequence(testing.db, 'user_id_seq'),
  104. False)
  105. finally:
  106. testing.db.execute(schema.DropSequence(s1))