Skip to content

Commit 1afe21e

Browse files
committed
Add dual() transform
1 parent 3111b08 commit 1afe21e

2 files changed

Lines changed: 19 additions & 1 deletion

File tree

backend/src/api/translate.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from src.schemas.translation import SqlQueryRequest, TranslateApiResponse
88
from src.utils.ai_analyzer import analyze_sql_translation_error
99
from src.utils.vdb_transformer import transform_vdb_table_qualification
10+
from src.utils.dual_transformer import transform_dual_function
1011
from src.schemas.translation import TranslationError
1112

1213
logger = logging.getLogger(__name__)
@@ -30,8 +31,10 @@ def translate_sql_to_vql(request: SqlQueryRequest) -> TranslateApiResponse:
3031
expression_tree = parse_one(source_sql, dialect=dialect)
3132
if vdb: # Only apply transformation if vdb is provided
3233
expression_tree = expression_tree.transform(transform_vdb_table_qualification, vdb)
33-
converted_vql = expression_tree.sql(dialect="denodo", pretty=True)
34+
if dialect == "oracle":
35+
expression_tree = expression_tree.transform(transform_dual_function)
3436

37+
converted_vql = expression_tree.sql(dialect="denodo", pretty=True)
3538
logger.info(f"Successfully translated SQL to VQL. VQL: {converted_vql[:100]}...")
3639
return TranslateApiResponse(vql=converted_vql)
3740

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import logging
2+
from sqlglot import exp, parse_one
3+
4+
logger = logging.getLogger(__name__)
5+
6+
7+
def transform_dual_function(node: exp.Expression) -> exp.Expression:
8+
"""
9+
Recursively prefixes transforms Oracle dual to Denodo dual().
10+
"""
11+
if isinstance(node, exp.Table) and node.name == "dual":
12+
logger.info(f"Transforming table: {node.sql()}")
13+
14+
return parse_one("dual()")
15+
return node

0 commit comments

Comments
 (0)