/* * Copyright (c) 2013-2015 Josef Hardi <josef.hardi@gmail.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.obidea.semantika.database.sql.dialect; import java.util.List; import com.obidea.semantika.database.sql.deparser.Sql99; public abstract class Sql99Dialect implements IDialect { private String mQuoteString = "\""; //$NON-NLS-1$ // by default private String mSeparator = "."; //$NON-NLS-1$ // by default public Sql99Dialect() { // NO-OP } @Override public void setQuoteString(String quoteString) { mQuoteString = quoteString; } @Override public String getQuoteString() { return mQuoteString; } @Override public void setSeparator(String catalogSeparator) { mSeparator = catalogSeparator; } @Override public String getSeparator() { return mSeparator; } @Override public String identifier(String... nameFragments) { String identifier = ""; //$NON-NLS-1$ boolean needSeparator = false; for (int i = 0; i < nameFragments.length; i++) { if (needSeparator) { identifier += getSeparator(); } identifier += getQuoteString() + nameFragments[i] + getQuoteString(); needSeparator = true; } return identifier; } @Override public String alias(String aliasName) { return Sql99.AS + " " + getQuoteString() + aliasName + getQuoteString(); //$NON-NLS-1$ } @Override public String view(String viewName) { return getQuoteString() + viewName + getQuoteString(); } @Override public String literal(String value) { return "'" + value + "'"; //$NON-NLS-1$ //$NON-NLS-2$ } @Override public String add(String leftExpr, String rightExpr) { return parenthesis(leftExpr + " " + Sql99.PLUS + " " + rightExpr); //$NON-NLS-1$ //$NON-NLS-1$ } @Override public String subtract(String leftExpr, String rightExpr) { return parenthesis(leftExpr + " " + Sql99.MINUS + " " + rightExpr); //$NON-NLS-1$ //$NON-NLS-1$ } @Override public String multiply(String leftExpr, String rightExpr) { return leftExpr + " " + Sql99.ASTERISK + " " + rightExpr; //$NON-NLS-1$ //$NON-NLS-1$ } @Override public String divide(String leftExpr, String rightExpr) { return leftExpr + " " + Sql99.SOLIDUS + " " + rightExpr; //$NON-NLS-1$ //$NON-NLS-1$ } @Override public String equals(String leftExpr, String rightExpr) { return leftExpr + " " + Sql99.EQ + " " + rightExpr; //$NON-NLS-1$ //$NON-NLS-1$ } @Override public String notEquals(String leftExpr, String rightExpr) { return leftExpr + " " + Sql99.NEQ + " " + rightExpr; //$NON-NLS-1$ //$NON-NLS-1$ } @Override public String greaterThan(String leftExpr, String rightExpr) { return leftExpr + " " + Sql99.GT + " " + rightExpr; //$NON-NLS-1$ //$NON-NLS-1$ } @Override public String greaterThanEquals(String leftExpr, String rightExpr) { return leftExpr + " " + Sql99.GTE + " " + rightExpr; //$NON-NLS-1$ //$NON-NLS-1$ } @Override public String lessThan(String leftExpr, String rightExpr) { return leftExpr + " " + Sql99.LT + " " + rightExpr; //$NON-NLS-1$ //$NON-NLS-1$ } @Override public String lessThanEquals(String leftExpr, String rightExpr) { return leftExpr + " " + Sql99.LTE + " " + rightExpr; //$NON-NLS-1$ //$NON-NLS-1$ } @Override public String or(String leftExpr, String rightExpr) { return parenthesis(leftExpr + " " + Sql99.OR + " " + rightExpr); //$NON-NLS-1$ //$NON-NLS-1$ } @Override public String and(String leftExpr, String rightExpr) { return leftExpr + " " + Sql99.AND + " " + rightExpr; //$NON-NLS-1$ //$NON-NLS-1$ } @Override public String isNull(String column) { return column + " IS NULL"; //$NON-NLS-1$ } @Override public String isNotNull(String column) { return column + " IS NOT NULL"; //$NON-NLS-1$ } @Override public String concat(List<String> parameters) { String concat = ""; //$NON-NLS-1$ boolean needConcat = false; for (String parameter : parameters) { if (needConcat) { concat += "||"; //$NON-NLS-1$ } concat += parameter; needConcat = true; } return parenthesis(concat); } @Override public String regex(String column, String pattern, String flag) { return column + " LIKE " + pattern; //$NON-NLS-1$ } private String parenthesis(String expr) { return Sql99.LPAREN + expr + Sql99.RPAREN; } }