com.github.cassandra.jdbc.cql.SqlToCqlTranslator Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of cassandra-jdbc-driver Show documentation
Show all versions of cassandra-jdbc-driver Show documentation
Type 4 JDBC driver for Apache Cassandra built on top of existing great libs like java driver from
DataStax. It supports Cassandra 2.x and above with improved SQL compatibility.
/**
* Copyright (C) 2015-2017, Zhichun Wu
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.github.cassandra.jdbc.cql;
import com.github.cassandra.jdbc.CassandraCqlStmtConfiguration;
import net.sf.jsqlparser.expression.*;
import net.sf.jsqlparser.expression.operators.arithmetic.*;
import net.sf.jsqlparser.expression.operators.conditional.AndExpression;
import net.sf.jsqlparser.expression.operators.conditional.OrExpression;
import net.sf.jsqlparser.expression.operators.relational.*;
import net.sf.jsqlparser.schema.Column;
import net.sf.jsqlparser.schema.Table;
import net.sf.jsqlparser.statement.select.*;
import java.util.List;
public class SqlToCqlTranslator implements SelectVisitor, FromItemVisitor,
SelectItemVisitor, ExpressionVisitor {
private final CassandraCqlStmtConfiguration config;
public SqlToCqlTranslator(CassandraCqlStmtConfiguration config) {
this.config = config;
}
public void visit(Addition addition) {
// throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(AllColumns allColumns) {
}
public void visit(AllComparisonExpression allComparisonExpression) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(AllTableColumns allTableColumns) {
}
public void visit(AnalyticExpression aexpr) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(WithinGroupExpression wgexpr) {
}
public void visit(AndExpression andExpression) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(AnyComparisonExpression anyComparisonExpression) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(Between between) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(BitwiseAnd bitwiseAnd) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(BitwiseOr bitwiseOr) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(BitwiseXor bitwiseXor) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(CaseExpression caseExpression) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(CastExpression cast) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(Column tableColumn) {
if (tableColumn.getTable() != null) {
tableColumn.setTable(null);
}
}
public void visit(Concat concat) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(DateValue dateValue) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(Division division) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(DoubleValue doubleValue) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(EqualsTo equalsTo) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(ExistsExpression existsExpression) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(ExtractExpression eexpr) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(Function function) {
}
public void visit(GreaterThan greaterThan) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(GreaterThanEquals greaterThanEquals) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(InExpression inExpression) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(IntervalExpression iexpr) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(IsNullExpression isNullExpression) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(JdbcNamedParameter jdbcNamedParameter) {
}
public void visit(JdbcParameter jdbcParameter) {
}
public void visit(LateralSubSelect lateralSubSelect) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(LikeExpression likeExpression) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(LongValue longValue) {
// throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(HexValue hexValue) {
}
public void visit(Matches matches) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(MinorThan minorThan) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(MinorThanEquals minorThanEquals) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(Modulo modulo) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(Multiplication multiplication) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(NotEqualsTo notEqualsTo) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(NullValue nullValue) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(OracleHierarchicalExpression oexpr) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(OrExpression orExpression) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(Parenthesis parenthesis) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(PlainSelect plainSelect) {
if (plainSelect.getIntoTables() != null
|| plainSelect.getGroupByColumnReferences() != null
|| plainSelect.getJoins() != null
//|| plainSelect.getFromItem() == null
|| plainSelect.getSelectItems() == null) {
throw new UnsupportedOperationException("Not supported yet.");
}
FromItem selectFrom = plainSelect.getFromItem();
if (selectFrom != null) {
selectFrom.accept(this);
}
List items = plainSelect.getSelectItems();
int index = 0;
for (SelectItem item : items) {
if (item instanceof AllTableColumns) {
AllTableColumns atc = (AllTableColumns) item;
if (atc.getTable() != null) {
items.set(index, new AllColumns());
}
} else {
item.accept(this);
}
index++;
}
long rowLimit = config.getConnectionConfig().getRowLimit();
if (config.noLimit()) {
plainSelect.setLimit(null);
} else if (rowLimit > 0) {
Limit limit = plainSelect.getLimit();
if (limit == null) {
limit = new Limit();
limit.setRowCount(rowLimit);
plainSelect.setLimit(limit);
} else {
// turn off not supported features
limit.setLimitAll(false);
limit.setOffsetJdbcParameter(false);
limit.setOffset(-1);
// apply default limits
if (limit.getRowCount() <= 0) {
limit.setRowCount(rowLimit);
}
}
}
}
public void visit(RegExpMatchOperator rexpr) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(JsonExpression jsonExpr) {
}
public void visit(RegExpMySQLOperator regExpMySQLOperator) {
}
public void visit(UserVariable var) {
}
public void visit(NumericBind bind) {
}
public void visit(KeepExpression aexpr) {
}
public void visit(MySQLGroupConcat groupConcat) {
}
public void visit(RowConstructor rowConstructor) {
}
public void visit(OracleHint hint) {
}
public void visit(TimeKeyExpression timeKeyExpression) {
}
public void visit(DateTimeLiteralExpression literal) {
}
public void visit(SelectExpressionItem selectExpressionItem) {
selectExpressionItem.getExpression().accept(this);
}
public void visit(SetOperationList setOpList) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(SignedExpression signedExpression) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(StringValue stringValue) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(SubJoin subjoin) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(SubSelect subSelect) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(Subtraction subtraction) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(Table tableName) {
if (tableName.getAlias() != null) {
tableName.setAlias(null);
}
}
public void visit(TimestampValue timestampValue) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(TimeValue timeValue) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(ValuesList valuesList) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(TableFunction tableFunction) {
}
public void visit(WhenClause whenClause) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void visit(WithItem withItem) {
throw new UnsupportedOperationException("Not supported yet.");
}
}