Open pipoprods opened 7 months ago
Your workaround is a good idea.
A test could be to declare gosaMailQuota as binary attribute in LDAP connection. This should prevent LSC to force the value to be casted as String.
Unfortunately, the behavior is still the same with attribute declared as binary:
<ldapConnection>
<binaryAttributes>
<string>gosaMailQuota</string>
</binaryAttributes>
</ldapConnection>
Should I try and change something on the dataset
side?
Yes please try also to use this in your dataset:
<dataset>
<name>quota</name>
<policy>FORCE</policy>
<forceValues>
<string>srcBean.getDatasetBinaryValuesById("gosaMailQuota")</string>
</forceValues>
</dataset>
It's completely breaking data insertion as the dataset produces binary data that doesn't match database type:
Error: 1366-22007: Incorrect integer value: '[B@3dc5e5ba' for column `quota` at row 3
My mistake, try getDatasetFirstBinaryValueById instead of getDatasetBinaryValuesById
I don't have any idea after this...
Insertion is working correctly, but records still get updated at each run. Thanks for the ideas :)
I'm synchronising a LDAP to a MariaDB. The
gosaMailQuota
LDAP attribute goes toquota
in MariaDB, which is a bigInt:On the LSC side, the
quota
value is generated in a dataset:and extracted from SQL request in SqlMap:
In this first version, the value gets updated even if the LDAP value matches the DB.
I've tried converting the value to a numeric type, behavior is the same:
<string>parseInt(srcBean.getDatasetFirstValueById("gosaMailQuota"), 10)</string>
<string>new java.math.BigInteger(srcBean.getDatasetFirstValueById("gosaMailQuota"))</string>
To have LSC update the value only when it changes, I had to convert to string in SQL and compare with the value from LDAP:
and extracted from SQL request in SqlMap: