Skip to content

Commit c73ded8

Browse files
committed
HHH-19297 Register SingleStore json functions to SingleStoreDialect
1 parent 2bc4a94 commit c73ded8

File tree

1 file changed

+48
-10
lines changed

1 file changed

+48
-10
lines changed

hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/SingleStoreDialect.java

Lines changed: 48 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@
8383
import org.hibernate.sql.ast.tree.Statement;
8484
import org.hibernate.sql.exec.spi.JdbcOperation;
8585
import org.hibernate.tool.schema.spi.Exporter;
86+
import org.hibernate.type.BasicType;
8687
import org.hibernate.type.BasicTypeRegistry;
8788
import org.hibernate.type.NullType;
8889
import org.hibernate.type.SqlTypes;
@@ -102,7 +103,9 @@
102103
import jakarta.persistence.TemporalType;
103104

104105
import static org.hibernate.exception.spi.TemplatedViolatedConstraintNameExtractor.extractUsingTemplate;
106+
import static org.hibernate.query.sqm.produce.function.FunctionParameterType.ANY;
105107
import static org.hibernate.query.sqm.produce.function.FunctionParameterType.NUMERIC;
108+
import static org.hibernate.query.sqm.produce.function.FunctionParameterType.STRING;
106109
import static org.hibernate.type.SqlTypes.BIGINT;
107110
import static org.hibernate.type.SqlTypes.BINARY;
108111
import static org.hibernate.type.SqlTypes.BIT;
@@ -581,23 +584,19 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
581584
commonFunctionFactory.hypotheticalOrderedSetAggregates_windowEmulation();
582585
commonFunctionFactory.inverseDistributionOrderedSetAggregates_windowEmulation();
583586
commonFunctionFactory.listagg_groupConcat();
584-
functionContributions.getFunctionRegistry()
587+
SqmFunctionRegistry functionRegistry = functionContributions.getFunctionRegistry();
588+
BasicTypeRegistry basicTypeRegistry = functionContributions.getTypeConfiguration().getBasicTypeRegistry();
589+
functionRegistry
585590
.namedDescriptorBuilder( "time" )
586591
.setExactArgumentCount( 1 )
587-
.setInvariantType( functionContributions.getTypeConfiguration()
588-
.getBasicTypeRegistry()
589-
.resolve( StandardBasicTypes.STRING ) )
592+
.setInvariantType( basicTypeRegistry.resolve( StandardBasicTypes.STRING ) )
590593
.register();
591-
functionContributions.getFunctionRegistry()
594+
functionRegistry
592595
.patternDescriptorBuilder( "median", "median(?1) over ()" )
593-
.setInvariantType( functionContributions.getTypeConfiguration()
594-
.getBasicTypeRegistry()
595-
.resolve( StandardBasicTypes.DOUBLE ) )
596+
.setInvariantType( basicTypeRegistry.resolve( StandardBasicTypes.DOUBLE ) )
596597
.setExactArgumentCount( 1 )
597598
.setParameterTypes( NUMERIC )
598599
.register();
599-
BasicTypeRegistry basicTypeRegistry = functionContributions.getTypeConfiguration().getBasicTypeRegistry();
600-
SqmFunctionRegistry functionRegistry = functionContributions.getFunctionRegistry();
601600
functionRegistry.noArgsBuilder( "localtime" )
602601
.setInvariantType( basicTypeRegistry.resolve( StandardBasicTypes.TIMESTAMP ) )
603602
.setUseParenthesesWhenNoArgs( false )
@@ -610,6 +609,45 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
610609
.setParameterTypes( FunctionParameterType.INTEGER )
611610
.register();
612611
functionRegistry.registerAlternateKey( "char", "chr" );
612+
BasicType<Boolean> booleanType = basicTypeRegistry.resolve( StandardBasicTypes.BOOLEAN );
613+
functionRegistry.namedDescriptorBuilder( "json_array_contains_string" )
614+
.setInvariantType( booleanType )
615+
.setExactArgumentCount( 2 )
616+
.setParameterTypes( ANY, STRING )
617+
.register();
618+
functionRegistry.registerAlternateKey( "json_array_contains", "json_array_contains_string" );
619+
functionRegistry.namedDescriptorBuilder( "json_array_contains_json" )
620+
.setInvariantType( booleanType )
621+
.setExactArgumentCount( 2 )
622+
.setParameterTypes( ANY, ANY )
623+
.register();
624+
functionRegistry.namedDescriptorBuilder( "json_array_contains_double" )
625+
.setInvariantType( booleanType )
626+
.setExactArgumentCount( 2 )
627+
.setParameterTypes( ANY, NUMERIC )
628+
.register();
629+
functionRegistry.namedDescriptorBuilder( "json_match_any_exists" )
630+
.setInvariantType( booleanType )
631+
.setMinArgumentCount( 1 )
632+
.register();
633+
functionRegistry.namedDescriptorBuilder( "json_match_any" )
634+
.setInvariantType( booleanType )
635+
.setMinArgumentCount( 1 )
636+
.register();
637+
functionRegistry.namedDescriptorBuilder( "json_extract_string" )
638+
.setInvariantType( basicTypeRegistry.resolve( StandardBasicTypes.STRING ) )
639+
.setMinArgumentCount( 1 )
640+
.register();
641+
functionRegistry.namedDescriptorBuilder( "json_extract_double" )
642+
.setInvariantType( basicTypeRegistry.resolve( StandardBasicTypes.DOUBLE ) )
643+
.setMinArgumentCount( 1 )
644+
.register();
645+
functionRegistry.namedDescriptorBuilder( "json_extract_bigint" )
646+
.setInvariantType( basicTypeRegistry.resolve( StandardBasicTypes.BIG_INTEGER ) )
647+
.setMinArgumentCount( 1 )
648+
.register();
649+
functionRegistry.registerAlternateKey( "json_extract", "json_extract_string" );
650+
functionRegistry.registerAlternateKey( "json_extract_json", "json_extract_string" );
613651
}
614652

615653

0 commit comments

Comments
 (0)