/* * 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.query.sqm.tree.expression.function; import org.hibernate.persister.queryable.spi.BasicValuedExpressableType; import org.hibernate.query.sqm.consume.spi.SemanticQueryWalker; import org.hibernate.query.sqm.tree.expression.SqmExpression; /** * @author Steve Ebersole */ public class SubstringFunctionSqmExpression extends AbstractFunctionSqmExpression { public static final String NAME = "substr"; private final SqmExpression source; private final SqmExpression startPosition; private final SqmExpression length; public SubstringFunctionSqmExpression( BasicValuedExpressableType resultType, SqmExpression source, SqmExpression startPosition, SqmExpression length) { super( resultType ); this.source = source; this.startPosition = startPosition; this.length = length; } @Override public String getFunctionName() { return NAME; } @Override public boolean hasArguments() { return true; } public SqmExpression getSource() { return source; } public SqmExpression getStartPosition() { return startPosition; } public SqmExpression getLength() { return length; } @Override public <T> T accept(SemanticQueryWalker<T> walker) { return walker.visitSubstringFunction( this ); } @Override public String asLoggableText() { StringBuilder buff = new StringBuilder( "SUBSTR(" + getSource().asLoggableText() ); if ( getStartPosition() != null ) { buff.append( ", " ).append( getStartPosition().asLoggableText() ); } if ( getLength() != null ) { buff.append( ", " ).append( getLength().asLoggableText() ); } return buff.append( ")" ).toString(); } }