All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.hibernate.dialect.function.DB2SubstringFunction Maven / Gradle / Ivy

There is a newer version: 7.0.0.Alpha1
Show newest version
/*
 * 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 .
 */
package org.hibernate.dialect.function;

import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.hibernate.type.StandardBasicTypes;

/**
 * When "substring" function is used for DB2, this implementation of {@link StandardSQLFunction}
 * will render "substr" or "substring", depending on the last argument being used. If the last
 * argument is a string unit ("CODEUNITS16", "CODEUNITS32", or "OCTETS"), then the function
 * will be rendered as "substring"; otherwise, it will be rendered as "substr".
 * 

* ANSI SQL-92 standard defines "substring" without string units, which is more similar to DB2's "substr", * so it makes sense to use DB2's "substr" function when string units are not provided. *

* Background: DB2 has both "substr" and "substring", which are different functions that are not * interchangeable. Prior to DB2 11.1, DB2's "substring" function requires an argument for string * units; without this argument, DB2 throws an exception. DB2's "substr" function throws an exception * if string unit is provided as an argument. * * @author Gail Badner */ public class DB2SubstringFunction extends StandardSQLFunction { private static final Set possibleStringUnits = new HashSet<>( Arrays.asList( "CODEUNITS16", "CODEUNITS32", "OCTETS" ) ); public DB2SubstringFunction() { super( "substring", StandardBasicTypes.STRING ); } @Override protected String getRenderedName(List arguments) { final String lastArgument = (String) arguments.get( arguments.size() - 1 ); if ( lastArgument != null && possibleStringUnits.contains( lastArgument.toUpperCase() ) ) { return getName(); } else{ return "substr"; } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy