Skip to content

Commit

Permalink
feat: functions
Browse files Browse the repository at this point in the history
- BigQuery `DATE()`
- `NVL()`

Signed-off-by: Andreas Reichel <andreas@manticore-projects.com>
  • Loading branch information
manticore-projects committed Mar 15, 2024
1 parent 6f6f872 commit 44cf635
Show file tree
Hide file tree
Showing 5 changed files with 88 additions and 0 deletions.
32 changes: 32 additions & 0 deletions src/main/java/com/manticore/transpiler/ExpressionTranspiler.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,38 @@
package com.manticore.transpiler;

import net.sf.jsqlparser.expression.CastExpression;
import net.sf.jsqlparser.expression.Function;
import net.sf.jsqlparser.expression.operators.relational.ExpressionList;
import net.sf.jsqlparser.statement.create.table.ColDataType;
import net.sf.jsqlparser.util.deparser.ExpressionDeParser;

public class ExpressionTranspiler extends ExpressionDeParser {
public void visit(Function function) {
if (function.getName().equalsIgnoreCase("nvl")) {
function.setName("Coalesce");
}

if (function.getName().equalsIgnoreCase("date")) {
ExpressionList<?> parameters = function.getParameters();
final CastExpression expression;
switch (parameters.size()) {
// DATE(DATETIME '2016-12-25 23:59:59') AS date_dt
case 1:
// DATE(TIMESTAMP '2016-12-25 05:30:00+07', 'America/Los_Angeles') AS date_tstz
case 2:
expression =
new CastExpression("Cast")
.withLeftExpression(parameters.get(0))
.withType(new ColDataType().withDataType("DATE"));
super.visit(expression);
break;
case 3:
function.setName("MAKE_DATE");
super.visit(function);
break;
}
}


}
}
Binary file modified src/main/resources/doc/JSQLTranspiler.ods
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.manticore.transpiler;

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;

import java.io.File;
import java.util.Map;
import java.util.stream.Stream;

public class GoogleBigQueryTranspilerTest extends JSQLTranspilerTest {
public final static String TEST_FOLDER_STR =
"build/resources/test/com/manticore/transpiler/google_bigquery";

static Stream<Map.Entry<File, SQLTest>> getSqlTestMap() {
return getSqlTestMap(new File(TEST_FOLDER_STR).listFiles(FILENAME_FILTER));
}

@ParameterizedTest(name = "{index} {0}: {1}")
@MethodSource("getSqlTestMap")
void transpile(Map.Entry<File, SQLTest> entry) throws Exception {
super.transpile(entry);
}

}
14 changes: 14 additions & 0 deletions src/test/resources/com/manticore/transpiler/any/nvl_function.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
-- provided
SELECT Nvl( NULL, 1 ) a
;

-- expected
SELECT Coalesce( NULL, 1 ) a
;

-- count
1

-- results
"a"
"1"
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
-- provided
SELECT
DATE(2016, 12, 25) AS date_ymd,
DATE(DATETIME '2016-12-25 23:59:59') AS date_dt,
DATE(TIMESTAMP '2016-12-25 05:30:00+07', 'America/Los_Angeles') AS date_tstz;

-- expected
SELECT
MAKE_DATE(2016, 12, 25) AS date_ymd,
CAST(DATETIME '2016-12-25 23:59:59' AS DATE) AS date_dt,
CAST(TIMESTAMP '2016-12-25 05:30:00+07' AS DATE) AS date_tstz;

-- count
1

-- result
"date_ymd","date_dt","date_tstz"
"2016-12-15","2016-12-15","2016-12-15"

0 comments on commit 44cf635

Please sign in to comment.