Esempio n. 1
0
    def _test_drop(self, column: str):
        self.insert_row()

        Band.alter().drop_column(column).run_sync()

        response = Band.raw("SELECT * FROM band").run_sync()

        column_names = response[0].keys()
        self.assertNotIn("popularity", column_names)
Esempio n. 2
0
    def _test_add_column(self, column: Column, column_name: str,
                         expected_value: t.Any):
        self.insert_row()
        Band.alter().add_column(column_name, column).run_sync()

        response = Band.raw("SELECT * FROM band").run_sync()

        column_names = response[0].keys()
        self.assertIn(column_name, column_names)

        self.assertEqual(response[0][column_name], expected_value)
Esempio n. 3
0
    def test_set_length(self):
        query = """
            SELECT character_maximum_length FROM information_schema.columns
            WHERE table_name = 'band'
            AND table_catalog = 'piccolo'
            AND column_name = 'name'
            """

        for length in (5, 20, 50):
            Band.alter().set_length(Band.name, length=length).run_sync()
            response = Band.raw(query).run_sync()
            self.assertEqual(response[0]["character_maximum_length"], length)
Esempio n. 4
0
    def test_set_null(self):
        query = """
            SELECT is_nullable FROM information_schema.columns
            WHERE table_name = 'band'
            AND table_catalog = 'piccolo'
            AND column_name = 'popularity'
            """

        Band.alter().set_null(Band.popularity, boolean=True).run_sync()
        response = Band.raw(query).run_sync()
        self.assertEqual(response[0]["is_nullable"], "YES")

        Band.alter().set_null(Band.popularity, boolean=False).run_sync()
        response = Band.raw(query).run_sync()
        self.assertEqual(response[0]["is_nullable"], "NO")
Esempio n. 5
0
    def test_succeeds(self):
        transaction = Band._meta.db.atomic()
        transaction.add(Manager.create_table(), Band.create_table())
        transaction.run_sync()

        self.assertTrue(Band.table_exists().run_sync())
        self.assertTrue(Manager.table_exists().run_sync())

        transaction.add(Band.alter().drop_table(),
                        Manager.alter().drop_table())
        transaction.run_sync()
Esempio n. 6
0
    def test_using_expression(self):
        """
        Test the `using_expression` option, which can be used to tell Postgres
        how to convert certain column types.
        """
        Band(name="1").save().run_sync()

        alter_query = Band.alter().set_column_type(
            old_column=Band.name,
            new_column=Integer(),
            using_expression="name::integer",
        )
        alter_query.run_sync()

        popularity = Band.select(Band.name).first().run_sync()["name"]
        self.assertEqual(popularity, 1)
Esempio n. 7
0
    def test_integer_to_varchar(self):
        """
        Test converting an Integer column to Varchar.
        """
        self.insert_row()

        alter_query = Band.alter().set_column_type(old_column=Band.popularity,
                                                   new_column=Varchar())
        alter_query.run_sync()

        self.assertEqual(
            self.get_postgres_column_type(tablename="band",
                                          column_name="popularity"),
            "CHARACTER VARYING",
        )

        popularity = (Band.select(
            Band.popularity).first().run_sync()["popularity"])
        self.assertEqual(popularity, "1000")
Esempio n. 8
0
    def test_integer_to_bigint(self):
        """
        Test converting an Integer column to BigInt.
        """
        self.insert_row()

        alter_query = Band.alter().set_column_type(old_column=Band.popularity,
                                                   new_column=BigInt())
        alter_query.run_sync()

        self.assertEqual(
            self.get_postgres_column_type(tablename="band",
                                          column_name="popularity"),
            "BIGINT",
        )

        popularity = (Band.select(
            Band.popularity).first().run_sync()["popularity"])
        self.assertEqual(popularity, 1000)
Esempio n. 9
0
    def _test_rename(
        self,
        existing_column: t.Union[Column, str],
        new_column_name: str = "rating",
    ):
        self.insert_row()

        rename_query = Band.alter().rename_column(existing_column,
                                                  new_column_name)
        rename_query.run_sync()

        select_query = Band.raw("SELECT * FROM band")
        response = select_query.run_sync()

        column_names = response[0].keys()
        existing_column_name = (existing_column._meta.name if isinstance(
            existing_column, Column) else existing_column)
        self.assertTrue((new_column_name in column_names)
                        and (existing_column_name not in column_names))
Esempio n. 10
0
 def test_rename(self):
     Band.alter().rename_table("act").run_sync()
     self.assertEqual(Band.raw("SELECT * FROM act").run_sync(), [])
Esempio n. 11
0
 def tearDown(self) -> None:
     Band.alter().drop_table(if_exists=True).run_sync()
     Manager.alter().drop_table(if_exists=True).run_sync()