summaryrefslogtreecommitdiffstats
path: root/sqlglot/dialects/mysql.py
diff options
context:
space:
mode:
Diffstat (limited to 'sqlglot/dialects/mysql.py')
-rw-r--r--sqlglot/dialects/mysql.py15
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 ""