Repository URL to install this package:
|
Version:
3.0.0.dev3 ▾
|
"""Module to translatior builders."""
import copy
from snsql._ast.ast import Query
from snsql.sql.parse import QueryParser
from .ast_transform import (
BigQueryTranslator,
DatabricksTranslator,
MySQLTranslator,
RedshiftTranslator,
SqlServerTranslator,
)
from .dialects import SQLDialect
DIALECT_TO_TRANSLATOR = {
SQLDialect.BIG_QUERY: BigQueryTranslator,
SQLDialect.DATABRICKS: DatabricksTranslator,
SQLDialect.MY_SQL: MySQLTranslator,
SQLDialect.REDSHIFT: RedshiftTranslator,
SQLDialect.SQL_SERVER: SqlServerTranslator,
}
def translate_to_postgres(query: Query, dialect: SQLDialect) -> Query:
"""It translates the query into postgres dialec (the standard in sarus):
It changes identifiers quoting: e.g. `iden` to "iden"
Args:
query (Query): smartnoise Query.
dialect (SupprtedDialect): dialect
Returns:
str: translated query if exist a translator otherwise return the query
sting unchanged.
"""
translator_obj = DIALECT_TO_TRANSLATOR.get(dialect, None)
copied_query = copy.deepcopy(query)
if translator_obj:
translator = translator_obj(copied_query)
translator.to_postgres()
return translator.query
return copied_query
def translate_to_dialect(query: Query, dialect: SQLDialect) -> Query:
"""It translates the query into postgres dialec (the standard in sarus):
It changes identifiers quoting: e.g. `iden` to "iden"
Args:
query (Query): smartnoise Query.
dialect (SupprtedDialect): dialect
Returns:
str: translated query if exist a translator otherwise return the query
sting unchanged.
"""
translator_obj = DIALECT_TO_TRANSLATOR.get(dialect, None)
copied_query = copy.deepcopy(query)
if translator_obj:
translator = translator_obj(copied_query)
translator.to_dialect()
return translator.query
return copied_query
def parse_query(
query_str: str,
) -> Query:
"""Parses the string query and returns an ast."""
try:
parsed_query = QueryParser().query(query_str)
except BaseException as err:
raise type(err)(
f"Query parsing failed for `{query_str}`\n with error:\n{err}"
)
return parsed_query