Skip to content

Commit 7cf008b

Browse files
author
oyeliseiev-ua
committed
HHH-19297 Register SingleStore json functions to SingleStoreDialect
1 parent 5d10380 commit 7cf008b

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
@@ -84,6 +84,7 @@
8484
import org.hibernate.sql.ast.tree.Statement;
8585
import org.hibernate.sql.exec.spi.JdbcOperation;
8686
import org.hibernate.tool.schema.spi.Exporter;
87+
import org.hibernate.type.BasicType;
8788
import org.hibernate.type.BasicTypeRegistry;
8889
import org.hibernate.type.NullType;
8990
import org.hibernate.type.SqlTypes;
@@ -103,7 +104,9 @@
103104
import jakarta.persistence.TemporalType;
104105

105106
import static org.hibernate.exception.spi.TemplatedViolatedConstraintNameExtractor.extractUsingTemplate;
107+
import static org.hibernate.query.sqm.produce.function.FunctionParameterType.ANY;
106108
import static org.hibernate.query.sqm.produce.function.FunctionParameterType.NUMERIC;
109+
import static org.hibernate.query.sqm.produce.function.FunctionParameterType.STRING;
107110
import static org.hibernate.type.SqlTypes.BIGINT;
108111
import static org.hibernate.type.SqlTypes.BINARY;
109112
import static org.hibernate.type.SqlTypes.BIT;
@@ -582,23 +585,19 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
582585
commonFunctionFactory.hypotheticalOrderedSetAggregates_windowEmulation();
583586
commonFunctionFactory.inverseDistributionOrderedSetAggregates_windowEmulation();
584587
commonFunctionFactory.listagg_groupConcat();
585-
functionContributions.getFunctionRegistry()
588+
SqmFunctionRegistry functionRegistry = functionContributions.getFunctionRegistry();
589+
BasicTypeRegistry basicTypeRegistry = functionContributions.getTypeConfiguration().getBasicTypeRegistry();
590+
functionRegistry
586591
.namedDescriptorBuilder( "time" )
587592
.setExactArgumentCount( 1 )
588-
.setInvariantType( functionContributions.getTypeConfiguration()
589-
.getBasicTypeRegistry()
590-
.resolve( StandardBasicTypes.STRING ) )
593+
.setInvariantType( basicTypeRegistry.resolve( StandardBasicTypes.STRING ) )
591594
.register();
592-
functionContributions.getFunctionRegistry()
595+
functionRegistry
593596
.patternDescriptorBuilder( "median", "median(?1) over ()" )
594-
.setInvariantType( functionContributions.getTypeConfiguration()
595-
.getBasicTypeRegistry()
596-
.resolve( StandardBasicTypes.DOUBLE ) )
597+
.setInvariantType( basicTypeRegistry.resolve( StandardBasicTypes.DOUBLE ) )
597598
.setExactArgumentCount( 1 )
598599
.setParameterTypes( NUMERIC )
599600
.register();
600-
BasicTypeRegistry basicTypeRegistry = functionContributions.getTypeConfiguration().getBasicTypeRegistry();
601-
SqmFunctionRegistry functionRegistry = functionContributions.getFunctionRegistry();
602601
functionRegistry.noArgsBuilder( "localtime" )
603602
.setInvariantType( basicTypeRegistry.resolve( StandardBasicTypes.TIMESTAMP ) )
604603
.setUseParenthesesWhenNoArgs( false )
@@ -611,6 +610,45 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
611610
.setParameterTypes( FunctionParameterType.INTEGER )
612611
.register();
613612
functionRegistry.registerAlternateKey( "char", "chr" );
613+
BasicType<Boolean> booleanType = basicTypeRegistry.resolve( StandardBasicTypes.BOOLEAN );
614+
functionRegistry.namedDescriptorBuilder( "json_array_contains_string" )
615+
.setInvariantType( booleanType )
616+
.setExactArgumentCount( 2 )
617+
.setParameterTypes( ANY, STRING )
618+
.register();
619+
functionRegistry.registerAlternateKey( "json_array_contains", "json_array_contains_string" );
620+
functionRegistry.namedDescriptorBuilder( "json_array_contains_json" )
621+
.setInvariantType( booleanType )
622+
.setExactArgumentCount( 2 )
623+
.setParameterTypes( ANY, ANY )
624+
.register();
625+
functionRegistry.namedDescriptorBuilder( "json_array_contains_double" )
626+
.setInvariantType( booleanType )
627+
.setExactArgumentCount( 2 )
628+
.setParameterTypes( ANY, NUMERIC )
629+
.register();
630+
functionRegistry.namedDescriptorBuilder( "json_match_any_exists" )
631+
.setInvariantType( booleanType )
632+
.setMinArgumentCount( 1 )
633+
.register();
634+
functionRegistry.namedDescriptorBuilder( "json_match_any" )
635+
.setInvariantType( booleanType )
636+
.setMinArgumentCount( 1 )
637+
.register();
638+
functionRegistry.namedDescriptorBuilder( "json_extract_string" )
639+
.setInvariantType( basicTypeRegistry.resolve( StandardBasicTypes.STRING ) )
640+
.setMinArgumentCount( 1 )
641+
.register();
642+
functionRegistry.namedDescriptorBuilder( "json_extract_double" )
643+
.setInvariantType( basicTypeRegistry.resolve( StandardBasicTypes.DOUBLE ) )
644+
.setMinArgumentCount( 1 )
645+
.register();
646+
functionRegistry.namedDescriptorBuilder( "json_extract_bigint" )
647+
.setInvariantType( basicTypeRegistry.resolve( StandardBasicTypes.BIG_INTEGER ) )
648+
.setMinArgumentCount( 1 )
649+
.register();
650+
functionRegistry.registerAlternateKey( "json_extract", "json_extract_string" );
651+
functionRegistry.registerAlternateKey( "json_extract_json", "json_extract_string" );
614652
}
615653

616654

0 commit comments

Comments
 (0)