JChem Cartridge supports the ability to execute external program objects written in Java. To make an own external Java program available from SQL a PL/SQL function (and an according operator) and a Java class has to be defined.
A Java class can be called from JChem Cartridge if it implements the JChemCartModul
interface.
The interface has a doFunc
function that is called by the send_user_func PL/SQL function. The doFunc
function gets a String
array as parameter. This array contains the items of the parameter list defined in the third parameter of the send_user_func PL/SQL function (the parameter list is converted into a String
array using the separator String
defined in the second parameter of the send_user_func PL/SQL function).
The doFunc
function returns a Java object
type and sends it back to the caller send_user_func PL/SQL function.
There is a more efficient way to evaluate user defined operators appearing in the where
clause. To increase the speed of these queries the evaluation of the user defined operator's return value has to be performed on the Java side. This requires another Java class beside the one that implements the JChemCartModul
interface. This Java class has to implement the JChemCartEvalModul
interface. Its name has to be the same as the name of the Java class that implements the JChemCartModul
interface with the "_eval" end.
This interface has an eval
function that gets two parameters. The first one is the returning object of the JChemCartModul
Java class. The second is a String
called "opStr
" containing the lower and upper boundary points for the operator return value and information of the relational operator (were defined in the SQL statement).
Format of the opStr
string: lower_value/upper_value/op
where:
lower_value
the lower value of the operator returning value. If there is no lower value defined it's values is "null".
upper_value
the upper value of the operator returning value. If there is no upper value defined it's values is "null".
op
an integer describing the relational operator:
4 if no upper value defined: operator >= lower value
else operator >= lower value
and operator < upper value
8 if no lower value defined: operator <= upper value
else operator <= upper value
and operator > lower value
12 operator <= upper value
and operator >= lower value
13 operator
= upper value
The eval
function has to return a boolean value. Returns true
if the returning value is acceptable regarding to the relational conditions (defined by the "opStr
" String), returns false
if not.
Here are some examples concerning to the "opStr
" String:
SQL statement | opStr string |
---|---|
select ... where my_op(cd_smiles) < 11; |
null/11/0 |
select ... where my_op(cd_smiles) <= 5; |
null/5/8 |
select ... where my_op(cd_smiles) = 34; |
34/34/13 |