Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion sqlglot/dialects/e6.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -3381,7 +3381,17 @@ def create_lpad_component(func_name: str):
exp.LastValue: rename_func("LAST_VALUE"),
exp.NextDay: _next_day_sql,
exp.Length: length_sql,
exp.Log: lambda self, e: self.func("LOG", e.this, e.expression),
exp.Log: lambda self, e: self.func("LOG", e.this, e.expression)
if e.expression
else self.func("LOG", exp.Literal.number("2.718281828459045"), e.this),
# DBR parses single-argument LOG(x) into an Ln node (it treats log as
# natural log) that keeps the original name in meta; give it the base
# e explicitly. A genuine LN(x) is left as-is.
exp.Ln: lambda self, e: self.func(
"LOG", exp.Literal.number("2.718281828459045"), e.this
)
if (e.meta.get("name") or "").lower() == "log"
else self.func("LN", e.this),
exp.Lower: rename_func("LOWER"),
exp.LogicalOr: rename_func("BOOL_OR"),
exp.MakeInterval: lambda self, e: make_interval_sql(self, e)
Expand Down
10 changes: 10 additions & 0 deletions tests/dialects/test_e6.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -1798,6 +1798,16 @@ def test_math(self):

self.validate_all("SELECT LN(1)", read={"databricks": "SELECT ln(1)"})

# DBR treats single-argument LOG(x) as natural log (base e); e6 needs an
# explicit base, so supply e = 2.718281828459045.
self.validate_all("SELECT LOG(2.718281828459045, a)", read={"databricks": "SELECT log(a)"})

# Two-argument LOG(base, value) is passed through unchanged.
self.validate_all("SELECT LOG(2, 8)", read={"databricks": "SELECT log(2, 8)"})

# A single-argument LOG parsed as an e6 Log node also gets the base.
self.validate_identity("SELECT LOG(a)", "SELECT LOG(2.718281828459045, a)")

def test_string(self):
self.validate_all(
"SELECT '%SystemDrive%/Users/John' LIKE '/%SystemDrive/%//Users%' ESCAPE '/'",
Expand Down
Loading