<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_sqlserver_product_version(engine: "Engine") -> Tuple[int]: """ Gets SQL Server version information. Attempted to use ``dialect.server_version_info``: .. code-block:: python from sqlalchemy import create_engine url = "mssql+pyodbc://USER:PASSWORD@ODBC_NAME" engine = create_engine(url) dialect = engine.dialect vi = dialect.server_version_info Unfortunately, ``vi == ()`` for an SQL Server 2014 instance via ``mssql+pyodbc``. It's also ``None`` for a ``mysql+pymysql`` connection. So this seems ``server_version_info`` is a badly supported feature. So the only other way is to ask the database directly. The problem is that this requires an :class:`Engine` or similar. (The initial hope was to be able to use this from within SQL compilation hooks, to vary the SQL based on the engine version. Still, this isn't so bad.) We could use either .. code-block:: sql SELECT @@version; -- returns a human-readable string SELECT SERVERPROPERTY('ProductVersion'); -- better The ``pyodbc`` interface will fall over with ``ODBC SQL type -150 is not yet supported`` with that last call, though, meaning that a ``VARIANT`` is coming back, so we ``CAST`` as per the source below. """

    assert is_sqlserver(engine), (
        "Only call get_sqlserver_product_version() for Microsoft SQL Server "
        "instances."
    )
    sql = "SELECT CAST(SERVERPROPERTY('ProductVersion') AS VARCHAR)"
    rp = engine.execute(sql)  # type: ResultProxy
    row = rp.fetchone()
    dotted_version = row[0]  # type: str  # e.g. '12.0.5203.0'
    return tuple(int(x) for x in dotted_version.split("."))