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
Original file line number Diff line number Diff line change
Expand Up @@ -413,7 +413,6 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
functionFactory.substr();
functionFactory.reverse();
functionFactory.repeat();
functionFactory.md5();
functionFactory.sha1();
functionFactory.octetLength();
functionFactory.bitLength();
Expand Down Expand Up @@ -503,6 +502,9 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
new PostgreSQLTruncFunction( true, functionContributions.getTypeConfiguration() )
);
functionContributions.getFunctionRegistry().registerAlternateKey( "truncate", "trunc" );

functionFactory.sha( "digest(?1, 'sha256')" );
functionFactory.md5( "digest(?1, 'md5')" );
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -452,6 +452,9 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio

functionFactory.unnest_db2( getMaximumSeriesSize() );
functionFactory.generateSeries_recursive( getMaximumSeriesSize(), false, true );

functionFactory.sha( "hash(?1, 2)" );
functionFactory.md5( "hash(?1, 0)" );
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -368,6 +368,9 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
functionFactory.unnest_h2( getMaximumArraySize() );
functionFactory.generateSeries_h2( getMaximumSeriesSize() );
functionFactory.jsonTable_h2( getMaximumArraySize() );

functionFactory.sha( "hash('SHA-256', ?1)" );
functionFactory.md5( "hash('MD5', ?1)" );
}

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

// functionFactory.xmlextract();
functionFactory.generateSeries_hana( getMaximumSeriesSize() );

functionFactory.sha( "hash_sha256(?1)" );
functionFactory.md5( "hash_md5(?1)" );
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -590,7 +590,6 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
functionFactory.space();
functionFactory.repeat();
functionFactory.pad_space();
functionFactory.md5();
functionFactory.yearMonthDay();
functionFactory.hourMinuteSecond();
functionFactory.dayofweekmonthyear();
Expand All @@ -606,7 +605,6 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
functionFactory.crc32();
functionFactory.sha1();
functionFactory.sha2();
functionFactory.sha();
functionFactory.bitLength();
functionFactory.octetLength();
functionFactory.ascii();
Expand Down Expand Up @@ -688,6 +686,9 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
if ( supportsRecursiveCTE() ) {
functionFactory.generateSeries_recursive( getMaximumSeriesSize(), false, false );
}

functionFactory.sha( "unhex(sha2(?1, 256))" );
functionFactory.md5( "unhex(md5(?1))" );
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -440,6 +440,9 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
functionFactory.unnest_oracle();
functionFactory.generateSeries_recursive( getMaximumSeriesSize(), true, false );
functionFactory.jsonTable_oracle();

functionFactory.sha( "standard_hash(?1, 'SHA256')" );
functionFactory.md5( "standard_hash(?1, 'MD5')" );
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -550,7 +550,6 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
functionFactory.pi();
functionFactory.trim2();
functionFactory.repeat();
functionFactory.md5();
functionFactory.initcap();
functionFactory.substr();
functionFactory.substring_substr();
Expand Down Expand Up @@ -690,6 +689,9 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
functionFactory.unnest_postgresql();
}
functionFactory.generateSeries( null, "ordinality", false );

functionFactory.sha( "sha256(?1)" );
functionFactory.md5( "decode(md5(?1), 'hex')" );
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -487,6 +487,9 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
functionFactory.generateSeries_recursive( getMaximumSeriesSize(), false, false );
}
}

functionFactory.sha( "hashbytes('SHA2_256', ?1)" );
functionFactory.md5( "hashbytes('MD5', ?1)" );
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ public class CommonFunctionFactory {
private final BasicType<Boolean> booleanType;
private final BasicType<Character> characterType;
private final BasicType<String> stringType;
private final BasicType<byte[]> binaryType;
private final BasicType<Integer> integerType;
private final BasicType<Long> longType;
private final BasicType<Double> doubleType;
Expand All @@ -90,6 +91,7 @@ public CommonFunctionFactory(FunctionContributions functionContributions) {
characterType = basicTypeRegistry.resolve(StandardBasicTypes.CHARACTER);
booleanType = basicTypeRegistry.resolve(StandardBasicTypes.BOOLEAN);
stringType = basicTypeRegistry.resolve(StandardBasicTypes.STRING);
binaryType = basicTypeRegistry.resolve(StandardBasicTypes.BINARY);
integerType = basicTypeRegistry.resolve(StandardBasicTypes.INTEGER);
doubleType = basicTypeRegistry.resolve(StandardBasicTypes.DOUBLE);
}
Expand Down Expand Up @@ -813,6 +815,7 @@ public void repeat_replicate() {
functionRegistry.registerAlternateKey( "repeat", "replicate" );
}

@Deprecated(since = "7")
public void md5() {
functionRegistry.namedDescriptorBuilder( "md5" )
.setInvariantType(stringType)
Expand Down Expand Up @@ -2313,6 +2316,7 @@ public void cbrt() {
.register();
}

@Deprecated(since = "7")
public void crc32() {
functionRegistry.namedDescriptorBuilder( "crc32" )
.setInvariantType(integerType)
Expand All @@ -2321,6 +2325,23 @@ public void crc32() {
.register();
}

public void md5(String pattern) {
functionRegistry.patternDescriptorBuilder( "md5", pattern )
.setInvariantType(binaryType)
.setParameterTypes( STRING )
.setExactArgumentCount( 1 )
.register();
}

public void sha(String pattern) {
functionRegistry.patternDescriptorBuilder( "sha", pattern )
.setInvariantType(binaryType)
.setParameterTypes( STRING )
.setExactArgumentCount( 1 )
.register();
}

@Deprecated(since = "7")
public void sha1() {
functionRegistry.namedDescriptorBuilder( "sha1" )
.setInvariantType(stringType)
Expand All @@ -2329,6 +2350,7 @@ public void sha1() {
.register();
}

@Deprecated(since = "7")
public void sha2() {
functionRegistry.namedDescriptorBuilder( "sha2" )
.setInvariantType(stringType)
Expand All @@ -2337,6 +2359,7 @@ public void sha2() {
.register();
}

@Deprecated(since = "7")
public void sha() {
functionRegistry.namedDescriptorBuilder( "sha" )
.setInvariantType(stringType)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import org.hibernate.dialect.DB2Dialect;
import org.hibernate.community.dialect.DerbyDialect;
import org.hibernate.dialect.H2Dialect;
import org.hibernate.dialect.HANADialect;
import org.hibernate.dialect.HSQLDialect;
import org.hibernate.dialect.MariaDBDialect;
import org.hibernate.dialect.MySQLDialect;
Expand Down Expand Up @@ -47,6 +48,8 @@

import java.math.BigDecimal;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.sql.Time;
import java.sql.Timestamp;
import java.time.Duration;
Expand Down Expand Up @@ -2596,4 +2599,25 @@ public void testCtidColumnFunction(SessionFactoryScope scope) {
.getSingleResultOrNull();
});
}

@Test
@RequiresDialect(PostgreSQLDialect.class)
@RequiresDialect(MySQLDialect.class)
@RequiresDialect(OracleDialect.class)
@RequiresDialect(DB2Dialect.class)
@RequiresDialect(SQLServerDialect.class)
@RequiresDialect(H2Dialect.class)
@RequiresDialect(HANADialect.class)
@RequiresDialect(CockroachDialect.class)
public void testSha256Function(SessionFactoryScope scope) {
scope.inTransaction(s -> {
byte[] bytes = s.createSelectionQuery("select sha('hello')", byte[].class).getSingleResult();
try {
assertArrayEquals( MessageDigest.getInstance( "SHA-256" ).digest("hello".getBytes()), bytes );
}
catch (NoSuchAlgorithmException e) {
throw new RuntimeException( e );
}
});
}
}
Loading