from sqlalchemy import select
from sqlalchemy import table
from sqlalchemy.dialects.mysql import base as mysql
from sqlalchemy.dialects.mysql import ENUM
from sqlalchemy.dialects.mysql import SET
from sqlalchemy.testing import AssertsCompiledSQL
from sqlalchemy.testing import expect_deprecated
from sqlalchemy.testing import expect_deprecated_20
from sqlalchemy.testing import fixtures


class CompileTest(AssertsCompiledSQL, fixtures.TestBase):

    __dialect__ = mysql.dialect()

    def test_distinct_string(self):
        s = select(["*"]).select_from(table("foo"))
        s._distinct = "foo"

        with expect_deprecated(
            "Sending string values for 'distinct' is deprecated in the MySQL "
            "dialect and will be removed in a future release"
        ):
            self.assert_compile(s, "SELECT FOO * FROM foo")


class DeprecateQuoting(fixtures.TestBase):
    def test_enum_warning(self):
        ENUM("a", "b")
        with expect_deprecated_20(
            "The 'quoting' parameter to :class:`.mysql.ENUM` is deprecated."
        ):
            ENUM("a", quoting="foo")

    def test_set_warning(self):
        SET("a", "b")
        with expect_deprecated_20(
            "The 'quoting' parameter to :class:`.mysql.SET` is deprecated.*"
        ):
            SET("a", quoting="foo")
