From d680d5d2d27dc18e5b19dabe8b2706d8cd27fbbb Mon Sep 17 00:00:00 2001 From: Teddy Date: Fri, 18 Nov 2022 09:41:36 +0100 Subject: [PATCH] added logic for modulo function for pyodbc driver (#8853) --- .../src/metadata/orm_profiler/orm/functions/median.py | 2 +- .../src/metadata/orm_profiler/orm/functions/modulo.py | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/ingestion/src/metadata/orm_profiler/orm/functions/median.py b/ingestion/src/metadata/orm_profiler/orm/functions/median.py index b996594ba05..7328e21d853 100644 --- a/ingestion/src/metadata/orm_profiler/orm/functions/median.py +++ b/ingestion/src/metadata/orm_profiler/orm/functions/median.py @@ -58,7 +58,7 @@ def _(elements, compiler, **kwargs): @compiles(MedianFn, Dialects.MSSQL) def _(elements, compiler, **kwargs): """Median computation for MSSQL""" - col, _ = [compiler.process(element, **kwargs) for element in elements.clauses] + col = elements.clauses.clauses[0].name return "percentile_cont(0.5) WITHIN GROUP (ORDER BY %s ASC) OVER()" % col diff --git a/ingestion/src/metadata/orm_profiler/orm/functions/modulo.py b/ingestion/src/metadata/orm_profiler/orm/functions/modulo.py index d48fd246576..5d40186c575 100644 --- a/ingestion/src/metadata/orm_profiler/orm/functions/modulo.py +++ b/ingestion/src/metadata/orm_profiler/orm/functions/modulo.py @@ -74,3 +74,13 @@ def _(element, compiler, **kw): """SQLite modulo function""" value, base = validate_and_compile(element, compiler, **kw) return f"{value} % {base}" + + +@compiles(ModuloFn, Dialects.MSSQL) +def _(element, compiler, **kw): + """Azure SQL modulo function""" + value, base = validate_and_compile(element, compiler, **kw) + if compiler.dialect.driver == "pyodbc": + # pyodbc compiles to c++ code. + return f"{value} % {base}" + return f"{value} %% {base}"