= Custom SQL Functions

:javaFile: {javaCodeDir}/SqlAPI.java

The SQL Engine can extend the SQL functions' set, defined by the ANSI-99 specification, via the addition of custom SQL functions written in Java.

A custom SQL function is just a public static method marked by the `@QuerySqlFunction` annotation.

////
TODO looks like it's unsupported in C#
////


[source,java]
----
include::{javaFile}[tags=sql-function-example, indent=0]
----


The class that owns the custom SQL function has to be registered in the `CacheConfiguration`.
To do that, use the `setSqlFunctionClasses(...)` method.

[source,java]
----
include::{javaFile}[tags=sql-function-config, indent=0]
----

Once you have deployed a cache with the above configuration, you can call the custom function from within SQL queries:

[source,java]
----
include::{javaFile}[tags=sql-function-query, indent=0]
----

NOTE: Classes registered with `CacheConfiguration.setSqlFunctionClasses(...)` must be added to the classpath of all the nodes where the defined custom functions might be executed. Otherwise, you will get a `ClassNotFoundException` error when trying to execute the custom function.
