Esempio n. 1
0
 async def run_transaction():
     try:
         async with Band._meta.db.transaction():
             Manager.create_table()
             Band.create_table()
             Band.raw("MALFORMED QUERY ... SHOULD ERROR")
     except Exception:
         pass
Esempio n. 2
0
    def test_set_default(self):
        Manager.alter().set_default(Manager.name, "Pending").run_sync()

        # Bypassing the ORM to make sure the database default is present.
        Band.raw("INSERT INTO manager (id, name) VALUES (DEFAULT, DEFAULT);"
                 ).run_sync()

        manager = Manager.objects().first().run_sync()
        self.assertEqual(manager.name, "Pending")
Esempio n. 3
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. 4
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. 5
0
    def test_raw_without_args(self):
        self.insert_row()

        response = Band.raw("select * from band").run_sync()

        self.assertDictEqual(
            response[0],
            {"id": 1, "name": "Pythonistas", "manager": 1, "popularity": 1000},
        )
Esempio n. 6
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. 7
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. 8
0
    def test_multiple(self):
        self.insert_row()

        query = (Manager.alter().add_column("column_a",
                                            Integer(default=0,
                                                    null=True)).add_column(
                                                        "column_b",
                                                        Integer(default=0,
                                                                null=True)))
        query.run_sync()

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

        column_names = response[0].keys()
        self.assertIn("column_a", column_names)
        self.assertIn("column_b", column_names)
Esempio n. 9
0
 def test_error(self):
     """
     Make sure queries in a transaction aren't committed if a query fails.
     """
     transaction = Band._meta.db.atomic()
     transaction.add(
         Manager.create_table(),
         Band.create_table(),
         Band.raw("MALFORMED QUERY ... SHOULD ERROR"),
     )
     try:
         transaction.run_sync()
     except Exception:
         pass
     self.assertTrue(not Band.table_exists().run_sync())
     self.assertTrue(not Manager.table_exists().run_sync())
Esempio n. 10
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. 11
0
 def test_rename(self):
     Band.alter().rename_table("act").run_sync()
     self.assertEqual(Band.raw("SELECT * FROM act").run_sync(), [])