/* * Copyright 2000-2016 Vaadin Ltd. * * 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.vaadin.v7.data.util.sqlcontainer.query.generator; import java.util.List; import com.vaadin.v7.data.Container.Filter; import com.vaadin.v7.data.util.sqlcontainer.query.OrderBy; import com.vaadin.v7.data.util.sqlcontainer.query.generator.filter.QueryBuilder; /** * @deprecated As of 8.0, no replacement available. */ @SuppressWarnings("serial") @Deprecated public class MSSQLGenerator extends DefaultSQLGenerator { public MSSQLGenerator() { } /** * Construct a MSSQLGenerator with the specified identifiers for start and * end of quoted strings. The identifiers may be different depending on the * database engine and it's settings. * * @param quoteStart * the identifier (character) denoting the start of a quoted * string * @param quoteEnd * the identifier (character) denoting the end of a quoted string */ public MSSQLGenerator(String quoteStart, String quoteEnd) { super(quoteStart, quoteEnd); } /* * (non-Javadoc) * * @see com.vaadin.addon.sqlcontainer.query.generator.DefaultSQLGenerator# * generateSelectQuery(java.lang.String, java.util.List, * com.vaadin.addon.sqlcontainer.query.FilteringMode, java.util.List, int, * int, java.lang.String) */ @Override public StatementHelper generateSelectQuery(String tableName, List<Filter> filters, List<OrderBy> orderBys, int offset, int pagelength, String toSelect) { if (tableName == null || tableName.trim().equals("")) { throw new IllegalArgumentException("Table name must be given."); } /* Adjust offset and page length parameters to match "row numbers" */ offset = pagelength > 1 ? ++offset : offset; pagelength = pagelength > 1 ? --pagelength : pagelength; toSelect = toSelect == null ? "*" : toSelect; StatementHelper sh = getStatementHelper(); StringBuffer query = new StringBuffer(); /* Row count request is handled here */ if ("COUNT(*)".equalsIgnoreCase(toSelect)) { query.append(String.format( "SELECT COUNT(*) AS %s FROM (SELECT * FROM %s", QueryBuilder.quote("rowcount"), tableName)); if (filters != null && !filters.isEmpty()) { query.append( QueryBuilder.getWhereStringForFilters(filters, sh)); } query.append(") AS t"); sh.setQueryString(query.toString()); return sh; } /* SELECT without row number constraints */ if (offset == 0 && pagelength == 0) { query.append("SELECT ").append(toSelect).append(" FROM ") .append(tableName); if (filters != null) { query.append( QueryBuilder.getWhereStringForFilters(filters, sh)); } if (orderBys != null) { for (OrderBy o : orderBys) { generateOrderBy(query, o, orderBys.indexOf(o) == 0); } } sh.setQueryString(query.toString()); return sh; } /* Remaining SELECT cases are handled here */ query.append("SELECT * FROM (SELECT row_number() OVER ("); if (orderBys != null) { for (OrderBy o : orderBys) { generateOrderBy(query, o, orderBys.indexOf(o) == 0); } } query.append(") AS rownum, " + toSelect + " FROM ").append(tableName); if (filters != null) { query.append(QueryBuilder.getWhereStringForFilters(filters, sh)); } query.append(") AS a WHERE a.rownum BETWEEN ").append(offset) .append(" AND ").append(Integer.toString(offset + pagelength)); sh.setQueryString(query.toString()); return sh; } }