@Override public void initializeFunctionRegistry(SqmFunctionRegistry registry) { super.initializeFunctionRegistry( registry ); registry.registerPattern( "second", "datepart(second, ?1)", StandardSpiBasicTypes.INTEGER ); registry.registerPattern( "minute", "datepart(minute, ?1)", StandardSpiBasicTypes.INTEGER ); registry.registerPattern( "hour", "datepart(hour, ?1)", StandardSpiBasicTypes.INTEGER ); registry.namedTemplateBuilder( "locate", "charindex" ) .setInvariantType( StandardSpiBasicTypes.INTEGER ) .setArgumentCountBetween( 2, 3 ) .register(); registry.registerPattern( "extract", "datepart(?1, ?3)", StandardSpiBasicTypes.INTEGER ); registry.registerPattern( "mod", "?1 % ?2", StandardSpiBasicTypes.INTEGER ); registry.registerPattern( "bit_length", "datalength(?1) * 8", StandardSpiBasicTypes.INTEGER ); registry.register( "trim", new AnsiTrimEmulationFunctionTemplate() ); }