/*
 * Hibernate, Relational Persistence for Idiomatic Java
 *
 * License: GNU Lesser General Public License (LGPL), version 2.1 or later.
 * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
 */
package org.hibernate.dialect;

import org.hibernate.dialect.identity.DB2390IdentityColumnSupport;
import org.hibernate.dialect.identity.IdentityColumnSupport;
import org.hibernate.dialect.pagination.AbstractLimitHandler;
import org.hibernate.dialect.pagination.LimitHandler;
import org.hibernate.dialect.pagination.LimitHelper;
import org.hibernate.engine.spi.RowSelection;


An SQL dialect for DB2/390. This class provides support for DB2 Universal Database for OS/390, also known as DB2/390.
Author:Kristoffer Dyrkorn
/** * An SQL dialect for DB2/390. This class provides support for * DB2 Universal Database for OS/390, also known as DB2/390. * * @author Kristoffer Dyrkorn */
public class DB2390Dialect extends DB2Dialect { private static final AbstractLimitHandler LIMIT_HANDLER = new AbstractLimitHandler() { @Override public String processSql(String sql, RowSelection selection) { if (LimitHelper.hasFirstRow( selection )) { throw new UnsupportedOperationException( "query result offset is not supported" ); } return sql + " fetch first " + getMaxOrLimit( selection ) + " rows only"; } @Override public boolean supportsLimit() { return true; } @Override public boolean useMaxForLimit() { return true; } @Override public boolean supportsVariableLimit() { return false; } }; private static final AbstractLimitHandler LEGACY_LIMIT_HANDLER = new AbstractLimitHandler() { @Override public String processSql(String sql, RowSelection selection) { return sql + " fetch first " + getMaxOrLimit( selection ) + " rows only"; } @Override public boolean supportsLimit() { return true; } @Override public boolean supportsLimitOffset() { return false; } @Override public boolean useMaxForLimit() { return true; } @Override public boolean supportsVariableLimit() { return false; } }; @Override public boolean supportsSequences() { return false; } @Override public String getQuerySequencesString() { return null; } @Override public boolean supportsLimit() { return true; } @Override @SuppressWarnings("deprecation") public boolean supportsLimitOffset() { return false; } @Override public boolean useMaxForLimit() { return true; } @Override public boolean supportsVariableLimit() { return false; } @Override public String getLimitString(String sql, int offset, int limit) { if ( offset > 0 ) { throw new UnsupportedOperationException( "query result offset is not supported" ); } if ( limit == 0 ) { return sql; } return sql + " fetch first " + limit + " rows only "; } @Override public LimitHandler getLimitHandler() { if ( isLegacyLimitHandlerBehaviorEnabled() ) { return LEGACY_LIMIT_HANDLER; } else { return LIMIT_HANDLER; } } @Override public IdentityColumnSupport getIdentityColumnSupport() { return new DB2390IdentityColumnSupport(); } }