diff options
Diffstat (limited to 'sqlglot/dialects/mysql.py')
-rw-r--r-- | sqlglot/dialects/mysql.py | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/sqlglot/dialects/mysql.py b/sqlglot/dialects/mysql.py index 1dd2096..5f743ee 100644 --- a/sqlglot/dialects/mysql.py +++ b/sqlglot/dialects/mysql.py @@ -132,6 +132,10 @@ class MySQL(Dialect): "SEPARATOR": TokenType.SEPARATOR, "ENUM": TokenType.ENUM, "START": TokenType.BEGIN, + "SIGNED": TokenType.BIGINT, + "SIGNED INTEGER": TokenType.BIGINT, + "UNSIGNED": TokenType.UBIGINT, + "UNSIGNED INTEGER": TokenType.UBIGINT, "_ARMSCII8": TokenType.INTRODUCER, "_ASCII": TokenType.INTRODUCER, "_BIG5": TokenType.INTRODUCER, @@ -441,6 +445,17 @@ class MySQL(Dialect): LIMIT_FETCH = "LIMIT" + def cast_sql(self, expression: exp.Cast, safe_prefix: t.Optional[str] = None) -> str: + """(U)BIGINT is not allowed in a CAST expression, so we use (UN)SIGNED instead.""" + if expression.to.this == exp.DataType.Type.BIGINT: + to = "SIGNED" + elif expression.to.this == exp.DataType.Type.UBIGINT: + to = "UNSIGNED" + else: + return super().cast_sql(expression) + + return f"CAST({self.sql(expression, 'this')} AS {to})" + def show_sql(self, expression: exp.Show) -> str: this = f" {expression.name}" full = " FULL" if expression.args.get("full") else "" |