Hi All
As part of a standardisation process, I'm trying to get Keycloak working with Informix
DB, the enterprise DB!I understand that Keycloak does not officially support Informix
however given the use of JPA / Hibernate I though there was a good chance it would work
out of the box.However this has proven not the case. The connection dialect does indeed
recognise Informix but does not appear to correctly map to this DB.
The issue I've come across is the handling of boolean conditional in SQL.
In RoleEntry.java the query @NamedQuery(name="getRealmRoleByName",
query="select role from RoleEntity role where role.applicationRole = false and
role.name = :name and role.realm = :realm")
Generates the following select roleentity0_.id as id1_15_,
roleentity0_.APP_REALM_CONSTRAINT as APP_REAL2_15_, roleentity0_.APPLICATION as
APPLICAT7_15_, roleentity0_.APPLICATION_ROLE as APPLICAT3_15_,
roleentity0_.DESCRIPTION as DESCRIPT4_15_, roleentity0_.NAME as NAME5_15_,
roleentity0_.REALM as REALM8_15_, roleentity0_.REALM_ID as REALM_ID6_15_ from
KEYCLOAK_ROLE roleentity0_ where roleentity0_.APPLICATION_ROLE=0 The
above does not work with Informix as 't', 'f', true and false respectively
is used. So it should be where roleentity0_.APPLICATION_ROLE='f'
Looking through the code, it appears I cannot configure this. Happy to be proven wrong
here!I found I could override within Hibernate using the property
hibernate.query.substitutions=true t, false f
I've added this change into DefaultJpaConnectionProviderFactory.java
String querySubstitutions = config.get("querySubstitutions"); if
(querySubstitutions != null) { logger.debug("hibernate.query.substitutions=" +
querySubstitutions); properties.put("hibernate.query.substitutions",
querySubstitutions); }
Adding the setting in keycloak-server.json "connectionsJpa": {
"default": { "dataSource":
"java:jboss/datasources/KeycloakDS", "databaseSchema":
"update", "querySubstitutions" : "true t, false f" }
However I've found the translation is not occurring as I would have expected.
Can you please advise on the approach I'm taking or any alternatives I have not looked
into?
Also once we get this working with Informix how can I get it added to the supported DB
list?
Regards
Tom Connolly.