Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 23 additions & 1 deletion docker_db.sh
Original file line number Diff line number Diff line change
Expand Up @@ -371,7 +371,7 @@ EOF
}

mssql() {
mssql_2022
mssql_2025
}

mssql_2017() {
Expand Down Expand Up @@ -418,6 +418,28 @@ mssql_2022() {
fi
}

mssql_2025() {
$CONTAINER_CLI rm -f mssql || true
#This sha256 matches a specific tag of 2025-latest (https://mcr.microsoft.com/en-us/product/mssql/server/tags):
$CONTAINER_CLI run --name mssql -d -p 1433:1433 -e "SA_PASSWORD=Hibernate_orm_test" -e ACCEPT_EULA=Y ${DB_IMAGE_MSSQL_2025:-mcr.microsoft.com/mssql/server@sha256:2fa59c23272a23dfd9600abf4ee52c0de6ae7ac640f14c617bc717ec139a5295}
sleep 5
n=0
until [ "$n" -ge 5 ]
do
# We need a database that uses a non-lock based MVCC approach
# https://github.com/microsoft/homebrew-mssql-release/issues/2#issuecomment-682285561
$CONTAINER_CLI exec mssql bash -c 'echo "create database hibernate_orm_test collate SQL_Latin1_General_CP1_CS_AS; alter database hibernate_orm_test set READ_COMMITTED_SNAPSHOT ON" | /opt/mssql-tools18/bin/sqlcmd -C -S localhost -U sa -P Hibernate_orm_test -i /dev/stdin' && break
echo "Waiting for SQL Server to start..."
n=$((n+1))
sleep 5
done
if [ "$n" -ge 5 ]; then
echo "SQL Server failed to start and configure after 25 seconds"
else
echo "SQL Server successfully started"
fi
}

sybase() {
$CONTAINER_CLI rm -f sybase || true
# Yup, that sucks, but on ubuntu we need to use -T11889 as per: https://github.com/DataGrip/docker-env/issues/12
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -257,6 +257,7 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
.setExactArgumentCount( 2 )
.setArgumentTypeResolver( StandardFunctionArgumentTypeResolvers.ARGUMENT_OR_IMPLIED_RESULT_TYPE )
.register();
functionFactory.regexpLike_predicateFunction();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -266,6 +266,7 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
functionFactory.addMonths();
functionFactory.monthsBetween();
functionFactory.rownumInstOrderbyGroupbyNum();
functionFactory.regexpLike();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -548,6 +548,7 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
)
);
functionContributions.getFunctionRegistry().registerAlternateKey( "truncate", "trunc" );
functionFactory.regexpLike_postgresql( false );
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -504,6 +504,8 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
if ( getDB2Version().isSameOrAfter( 11 ) ) {
functionFactory.sha( "hash(?1, 2)" );
functionFactory.md5( "hash(?1, 0)" );

functionFactory.regexpLike();
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,11 +71,14 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
"substring",
new DB2SubstringFunction( false, functionContributions.getTypeConfiguration() )
);
if ( getVersion().isSameOrAfter( 7, 2 ) ) {
if ( getVersion().isSameOrAfter( 7, 1 ) ) {
CommonFunctionFactory functionFactory = new CommonFunctionFactory( functionContributions );
functionFactory.listagg( null );
functionFactory.inverseDistributionOrderedSetAggregates();
functionFactory.hypotheticalOrderedSetAggregates_windowEmulation();
functionFactory.regexpLike();
if ( getVersion().isSameOrAfter( 7, 2 ) ) {
functionFactory.listagg( null );
functionFactory.inverseDistributionOrderedSetAggregates();
functionFactory.hypotheticalOrderedSetAggregates_windowEmulation();
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
functionFactory.listagg( null );
functionFactory.inverseDistributionOrderedSetAggregates();
functionFactory.hypotheticalOrderedSetAggregates_windowEmulation();
functionFactory.regexpLike();
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,7 @@ public void register() {
arraySet_gaussdb();
arrayFill_gaussdb();
jsonObject_gaussdb();
functionFactory.regexpLike();
}

public void array_gaussdb() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -443,6 +443,10 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
functionFactory.unnest_h2( getMaximumArraySize() );
functionFactory.generateSeries_h2( getMaximumSeriesSize() );
functionFactory.jsonTable_h2( getMaximumArraySize() );

if ( getVersion().isSameOrAfter( 1, 4, 193 ) ) {
functionFactory.regexpLike();
}
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -529,6 +529,8 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio

// functionFactory.xmlextract();
}

functionFactory.regexpLike_like_regexp();
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -292,6 +292,7 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
functionContributions.getTypeConfiguration(),
SqlAstNodeRenderingMode.NO_PLAIN_PARAMETER
) );
functionFactory.regexpLike_hsql();
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import org.hibernate.boot.model.FunctionContributions;
import org.hibernate.boot.model.TypeContributions;
import org.hibernate.boot.model.relational.SqlStringGenerationContext;
import org.hibernate.community.dialect.function.InformixRegexpLikeFunction;
import org.hibernate.community.dialect.identity.InformixIdentityColumnSupport;
import org.hibernate.community.dialect.pagination.FirstLimitHandler;
import org.hibernate.community.dialect.pagination.SkipFirstLimitHandler;
Expand All @@ -38,6 +39,7 @@
import org.hibernate.exception.ConstraintViolationException;
import org.hibernate.exception.LockAcquisitionException;
import org.hibernate.exception.spi.SQLExceptionConversionDelegate;
import org.hibernate.mapping.CheckConstraint;
import org.hibernate.query.sqm.CastType;
import org.hibernate.query.sqm.IntervalType;
import org.hibernate.query.sqm.function.SqmFunctionRegistry;
Expand Down Expand Up @@ -111,6 +113,7 @@

import static org.hibernate.exception.spi.TemplatedViolatedConstraintNameExtractor.extractUsingTemplate;
import static org.hibernate.internal.util.JdbcExceptionHelper.extractErrorCode;
import static org.hibernate.internal.util.StringHelper.isBlank;
import static org.hibernate.query.common.TemporalUnit.DAY;
import static org.hibernate.query.sqm.produce.function.FunctionParameterType.STRING;
import static org.hibernate.query.sqm.produce.function.StandardFunctionArgumentTypeResolvers.impliedOrInvariant;
Expand Down Expand Up @@ -411,11 +414,7 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
functionContributions.getFunctionRegistry().register( "trim",
new TrimFunction( this, typeConfiguration, SqlAstNodeRenderingMode.NO_UNTYPED ) );

//TODO: emulate support for the 'i' flag argument
functionRegistry.namedDescriptorBuilder( "regexp_like", "regex_match" )
.setParameterTypes( STRING, STRING )
.setInvariantType( booleanBasicType )
.register();
functionRegistry.register( "regexp_like", new InformixRegexpLikeFunction( typeConfiguration ) );
}

@Override
Expand Down Expand Up @@ -608,11 +607,22 @@ public boolean supportsIfExistsBeforeConstraintName() {
}

@Override
public boolean supportsTableCheck() {
// multi-column check constraints are created using 'alter table'
public boolean supportsNamedColumnCheck() {
// It seems the constraint name is ignored on column level
return false;
}

@Override
public String getCheckConstraintString(CheckConstraint checkConstraint) {
final String constraintName = checkConstraint.getName();
final String constraint = " check (" + checkConstraint.getConstraint() + ")";
final String constraintWithName =
isBlank( constraintName )
? constraint
: constraint + " constraint " + constraintName;
return appendCheckConstraintOptions( checkConstraint, constraintWithName );
}

@Override
public String getCascadeConstraintsString() {
return getVersion().isSameOrAfter( 12, 10 )
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -695,6 +695,7 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
functionRegistry.registerAlternateKey( "char", "chr" );

functionFactory.listagg_groupConcat();
functionFactory.regexpLike_regexp();

if ( getMySQLVersion().isSameOrAfter( 5, 7 ) ) {
functionFactory.jsonValue_mysql();
Expand All @@ -715,6 +716,7 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
if ( getMySQLVersion().isSameOrAfter( 8 ) ) {
functionFactory.unnest_emulated();
functionFactory.jsonTable_mysql();
functionFactory.regexpLike();
}
if ( supportsRecursiveCTE() ) {
functionFactory.generateSeries_recursive( getMaximumSeriesSize(), false, false );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -375,6 +375,7 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio

functionFactory.unnest_oracle();
functionFactory.generateSeries_recursive( getMaximumSeriesSize(), true, false );
functionFactory.regexpLike_predicateFunction();
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -768,6 +768,8 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio

functionFactory.unnest_postgresql( getVersion().isSameOrAfter( 17 ) );
functionFactory.generateSeries( null, "ordinality", false );

functionFactory.regexpLike_postgresql( getVersion().isSameOrAfter( 15 ) );
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -521,6 +521,9 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
functionFactory.generateSeries_recursive( getMaximumSeriesSize(), false, false );
}
}
if ( getVersion().isSameOrAfter( 17 ) ) {
functionFactory.regexpLike_predicateFunction();
}
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -354,6 +354,7 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
}
functionFactory.windowFunctions();
functionFactory.listagg_groupConcat();
functionFactory.regexpLike_regexp();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -651,6 +651,7 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
functionRegistry.register( "json_mergepatch", new SingleStoreJsonMergepatchFunction( typeConfiguration ) );
functionRegistry.register( "json_array_append", new SingleStoreJsonArrayAppendFunction( typeConfiguration ) );
functionRegistry.register( "json_array_insert", new SingleStoreJsonArrayInsertFunction( typeConfiguration ) );
commonFunctionFactory.regexpLike_regexp();
}


Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
/*
* SPDX-License-Identifier: Apache-2.0
* Copyright Red Hat Inc. and Hibernate Authors
*/
package org.hibernate.community.dialect.function;

import org.hibernate.dialect.function.AbstractRegexpLikeFunction;
import org.hibernate.metamodel.model.domain.ReturnableType;
import org.hibernate.sql.ast.SqlAstTranslator;
import org.hibernate.sql.ast.spi.SqlAppender;
import org.hibernate.sql.ast.tree.SqlAstNode;
import org.hibernate.sql.ast.tree.expression.Literal;
import org.hibernate.type.spi.TypeConfiguration;

import java.util.List;


/**
* Informix has special integer constants as third argument.
*/
public class InformixRegexpLikeFunction extends AbstractRegexpLikeFunction {

public InformixRegexpLikeFunction(TypeConfiguration typeConfiguration) {
super( typeConfiguration );
}

@Override
public void render(
SqlAppender sqlAppender,
List<? extends SqlAstNode> arguments,
ReturnableType<?> returnType,
SqlAstTranslator<?> walker) {
final boolean caseSensitive;
if ( arguments.size() > 2 ) {
if ( !(arguments.get( 2 ) instanceof Literal literal)
|| !(literal.getLiteralValue() instanceof String flags)
|| !flags.equals( "i" ) ) {
throw new IllegalArgumentException( "Informix only supports the case insensitive flag 'i' as literal but got." );
}
caseSensitive = false;
}
else {
caseSensitive = true;
}

sqlAppender.appendSql( "regex_match(" );
arguments.get( 0 ).accept( walker );
sqlAppender.appendSql( ',' );
arguments.get( 1 ).accept( walker );
if ( !caseSensitive ) {
// 1 is extended POSIX regex which is the default, 3 is extended POSIX regex and case-insensitive
// See https://www.ibm.com/docs/en/informix-servers/14.10.0?topic=routines-regex-match-function
sqlAppender.appendSql( ",3" );
}
sqlAppender.appendSql( ')' );
}

@Override
public boolean isPredicate() {
return false;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -512,6 +512,7 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
functionFactory.hex( "encode(?1, 'hex')" );
functionFactory.sha( "digest(?1, 'sha256')" );
functionFactory.md5( "digest(?1, 'md5')" );
functionFactory.regexpLike_postgresql( false );
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -435,6 +435,8 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
functionFactory.hex( "hex(?1)" );
functionFactory.sha( "hash(?1, 2)" );
functionFactory.md5( "hash(?1, 0)" );

functionFactory.regexpLike();
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1373,8 +1373,6 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
functionRegistry.registerAlternateKey( "current_instant", "instant" ); //deprecated legacy!

functionRegistry.register( "sql", new SqlFunction() );

functionFactory.regexpLike();
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -382,6 +382,8 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
functionFactory.hex( "rawtohex(?1)" );
functionFactory.sha( "hash('SHA-256', ?1)" );
functionFactory.md5( "hash('MD5', ?1)" );

functionFactory.regexpLike();
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -533,6 +533,7 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
functionFactory.hex( "bintohex(?1)" );
functionFactory.sha( "hash_sha256(to_binary(?1))" );
functionFactory.md5( "hash_md5(to_binary(?1))" );
functionFactory.regexpLike_like_regexp();
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,7 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
) );

functionFactory.hex( "hex(?1)" );
functionFactory.regexpLike_hsql();
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -681,10 +681,12 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
functionFactory.jsonMergepatch_mysql();
functionFactory.jsonArrayAppend_mysql();
functionFactory.jsonArrayInsert_mysql();
functionFactory.regexpLike_regexp();

if ( getMySQLVersion().isSameOrAfter( 8 ) ) {
functionFactory.unnest_emulated();
functionFactory.jsonTable_mysql();
functionFactory.regexpLike();
}
if ( supportsRecursiveCTE() ) {
functionFactory.generateSeries_recursive( getMaximumSeriesSize(), false, false );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -434,6 +434,7 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
"extract",
new OracleExtractFunction( this, typeConfiguration )
);
functionFactory.regexpLike_predicateFunction();
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -706,6 +706,8 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
functionFactory.hex( "encode(?1, 'hex')" );
functionFactory.sha( "sha256(?1)" );
functionFactory.md5( "decode(md5(?1), 'hex')" );

functionFactory.regexpLike_postgresql( getVersion().isSameOrAfter( 15 ) );
}

@Override
Expand Down
Loading
Loading