Skip to content
Open
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
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@

public class SqrlConfigurations {

public static final UnaryOperator<SqlWriterConfig> sqlToString =
public static final UnaryOperator<SqlWriterConfig> SQL_TO_STRING =
c ->
c.withAlwaysUseParentheses(false)
.withSelectListItemsOnSeparateLines(false)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
/*
* Copyright © 2021 DataSQRL (contact@datasqrl.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.datasqrl.calcite.convert;

import com.datasqrl.calcite.Dialect;
import com.datasqrl.calcite.DynamicParamSqlPrettyWriter;
import com.datasqrl.calcite.SqrlConfigurations;
import java.util.Map;
import lombok.AccessLevel;
import lombok.RequiredArgsConstructor;
import org.apache.calcite.rel.RelNode;
import org.apache.calcite.rel.rel2sql.RelToSqlConverterWithHints;
import org.apache.calcite.sql.CalciteFixes;
import org.apache.calcite.sql.SqlDialect;
import org.apache.calcite.sql.SqlNode;
import org.apache.calcite.sql.pretty.SqlPrettyWriter;

@RequiredArgsConstructor(access = AccessLevel.PACKAGE)
abstract class AbstractSqlConverters implements SqlConverters {

private final Dialect dialect;
private final SqlDialect calciteSqlDialect;
private final boolean appendSelectLists;

@Override
public final SqlNode convert(RelNode relNode, Map<String, String> tableNameMapping) {
var sqlNode =
new RelToSqlConverterWithHints(calciteSqlDialect, tableNameMapping)
.visitRoot(relNode)
.asStatement();

if (appendSelectLists) {
CalciteFixes.appendSelectLists(sqlNode);
}

return sqlNode;
}

@Override
public final String convert(SqlNode sqlNode) {
var writer = createWriter();
sqlNode.unparse(writer, 0, 0);

return writer.toSqlString().getSql();
}

@Override
public final Dialect getDialect() {
return dialect;
}

protected SqlPrettyWriter createWriter() {
var baseConfig = SqlPrettyWriter.config().withDialect(calciteSqlDialect);
var config = SqrlConfigurations.SQL_TO_STRING.apply(baseConfig);

return new DynamicParamSqlPrettyWriter(config);
}

protected final SqlDialect getCalciteSqlDialect() {
return calciteSqlDialect;
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,13 @@
package com.datasqrl.calcite.convert;

import com.datasqrl.calcite.Dialect;
import com.datasqrl.calcite.convert.RelToSqlNode.SqlNodes;
import com.datasqrl.calcite.dialect.DuckDbSqlDialect;
import com.google.auto.service.AutoService;

/** Converts a SqlNode to a SQL string for a given dialect */
public interface SqlNodeToString {
SqlStrings convert(SqlNodes sqlNode);
@AutoService(SqlConverters.class)
public class DuckDbSqlConverters extends AbstractSqlConverters {

Dialect getDialect();

interface SqlStrings {
String getSql();
public DuckDbSqlConverters() {
super(Dialect.DUCKDB, DuckDbSqlDialect.DEFAULT, true);
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -13,19 +13,25 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.datasqrl.util;
package com.datasqrl.calcite.convert;

import com.datasqrl.calcite.Dialect;
import com.datasqrl.calcite.convert.RelToSqlNode.SqlNodes;
import com.datasqrl.calcite.convert.SqlNodeToString;
import com.datasqrl.engine.stream.flink.sql.RelToFlinkSql;
import com.google.auto.service.AutoService;
import java.util.Map;
import org.apache.calcite.rel.RelNode;
import org.apache.calcite.sql.SqlNode;

@AutoService(SqlNodeToString.class)
public class FlinkSqlNodeToString implements SqlNodeToString {
@AutoService(SqlConverters.class)
public class FlinkSqlConverters implements SqlConverters {

@Override
public SqlStrings convert(SqlNodes sqlNode) {
public SqlNode convert(RelNode relNode, Map<String, String> tableNameMapping) {
throw new UnsupportedOperationException();
}

@Override
public String convert(SqlNode sqlNode) {
// TODO: Migrate remaining FlinkRelToSqlConverter to this paradigm
return RelToFlinkSql.convertToString(sqlNode);
}
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -16,18 +16,13 @@
package com.datasqrl.calcite.convert;

import com.datasqrl.calcite.Dialect;
import java.util.Map;
import org.apache.calcite.rel.RelNode;
import org.apache.calcite.sql.SqlNode;
import com.datasqrl.calcite.dialect.ExtendedPostgresSqlDialect;
import com.google.auto.service.AutoService;

/** Converts a RelNode to a SqlNode for a given dialect */
public interface RelToSqlNode {
@AutoService(SqlConverters.class)
public class PostgresSqlConverters extends AbstractSqlConverters {

SqlNodes convert(RelNode relNode, Map<String, String> tableNameMapping);

Dialect getDialect();

interface SqlNodes {
SqlNode getSqlNode();
public PostgresSqlConverters() {
super(Dialect.POSTGRES, ExtendedPostgresSqlDialect.DEFAULT, false);
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -16,28 +16,25 @@
package com.datasqrl.calcite.convert;

import com.datasqrl.calcite.Dialect;
import com.datasqrl.calcite.convert.RelToSqlNode.SqlNodes;
import com.datasqrl.calcite.dialect.ExtendedSnowflakeSqlDialect;
import com.google.auto.service.AutoService;
import org.apache.calcite.sql.pretty.SqlPrettyWriter;

@AutoService(SqlNodeToString.class)
public class SnowflakeSqlNodeToString implements SqlNodeToString {
@AutoService(SqlConverters.class)
public class SnowflakeSqlConverters extends AbstractSqlConverters {

public SnowflakeSqlConverters() {
super(Dialect.SNOWFLAKE, ExtendedSnowflakeSqlDialect.DEFAULT, true);
}

@Override
public SqlStrings convert(SqlNodes sqlNode) {
protected SqlPrettyWriter createWriter() {
var config =
SqlPrettyWriter.config()
.withDialect(ExtendedSnowflakeSqlDialect.DEFAULT)
.withDialect(getCalciteSqlDialect())
.withQuoteAllIdentifiers(false)
.withIndentation(0);
var prettyWriter = new SqlPrettyWriter(config);
sqlNode.getSqlNode().unparse(prettyWriter, 0, 0);
return () -> prettyWriter.toSqlString().getSql();
}

@Override
public Dialect getDialect() {
return Dialect.SNOWFLAKE;
return new SqlPrettyWriter(config);
}
}
Loading