[ 
https://issues.apache.org/jira/browse/SYNCOPE-1519?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Francesco Chicchiriccò resolved SYNCOPE-1519.
---------------------------------------------
    Resolution: Fixed

> SchemaDataBinderImpl#update optimization
> ----------------------------------------
>
>                 Key: SYNCOPE-1519
>                 URL: https://issues.apache.org/jira/browse/SYNCOPE-1519
>             Project: Syncope
>          Issue Type: Improvement
>          Components: core
>    Affects Versions: 2.0.12
>            Reporter: Dmitriy B.
>            Assignee: Francesco Chicchiriccò
>            Priority: Minor
>             Fix For: 3.0.0, 2.1.5
>
>          Time Spent: 20m
>  Remaining Estimate: 0h
>
> When 
> _org.apache.syncope.core.provisioning.java.data.SchemaDataBinderImpl#update(org.apache.syncope.common.lib.to.PlainSchemaTO,
>  org.apache.syncope.core.persistence.api.entity.PlainSchema)_ is invoked it 
> checks whether plain schema has any attrs, by invoking the method 
> _org.apache.syncope.core.persistence.api.dao.PlainSchemaDAO#findAttrs_ which 
> generates  huge SQL:
> {code:sql}
> syncope 2.0.12-related
> SELECT t0.id, t2.id, t1.id, t3.id, t1.cipherAlgorithm, t1.conversionPattern, 
> t1.enumerationKeys, t1.enumerationValues, t1.mandatoryCondition, t1.mimeType, 
> t1.multivalue, t1.readonly, t1.secretKey, t1.type, t1.uniqueConstraint, 
> t1.validatorClass, t4.id, t5.id, t5.creationDate, t5.creator, 
> t5.lastChangeDate, t5.lastModifier, t6.id, t7.id, t7.description, 
> t7.maxAuthenticationAttempts, t7.propagateSuspension, t6.name, t8.id, 
> t8.ACCOUNTPOLICY_ID, t8.name, t8.PASSWORDPOLICY_ID, t9.id, t9.description, 
> t9.allowNullPassword, t9.historyLength, t5.status, t5.workflowId, 
> t5.changePwdDate, t5.cipherAlgorithm, t5.failedLogins, t5.lastLoginDate, 
> t5.lastRecertification, t5.lastRecertificator, t5.mustChangePassword, 
> t5.password, t5.securityAnswer, t10.id, t10.content, t5.suspended, t5.token, 
> t5.tokenExpireTime, t5.username, t11.id, t11.creationDate, t11.creator, 
> t11.lastChangeDate, t11.lastModifier, t11.REALM_ID, t11.status, 
> t11.workflowId, t12.id, t12.creationDate, t12.creator, t12.lastChangeDate, 
> t12.lastModifier, t12.REALM_ID, t12.status, t12.workflowId, t12.name, 
> t12.USEROWNER_ID, t11.name, t13.id, t13.fiql, t14.id, t14.creationDate, 
> t14.creator, t14.lastChangeDate, t14.lastModifier, t14.REALM_ID, t14.status, 
> t14.workflowId, t14.changePwdDate, t14.cipherAlgorithm, t14.failedLogins, 
> t14.lastLoginDate, t14.lastRecertification, t14.lastRecertificator, 
> t14.mustChangePassword, t14.password, t14.securityAnswer, 
> t14.SECURITYQUESTION_ID, t14.suspended, t14.token, t14.tokenExpireTime, 
> t14.username, t15.id, t15.creationDate, t15.creator, t15.lastChangeDate, 
> t15.lastModifier, t15.REALM_ID, t15.status, t15.workflowId, 
> t15.changePwdDate, t15.cipherAlgorithm, t15.failedLogins, t15.lastLoginDate, 
> t15.lastRecertification, t15.lastRecertificator, t15.mustChangePassword, 
> t15.password, t15.securityAnswer, t15.SECURITYQUESTION_ID, t15.suspended, 
> t15.token, t15.tokenExpireTime, t15.username, t16.id, t16.binaryValue, 
> t16.booleanValue, t16.dateValue, t16.doubleValue, t16.longValue, 
> t16.stringValue, t18.id, t17.id, t17.ANYTYPECLASS_ID, t17.cipherAlgorithm, 
> t17.conversionPattern, t17.enumerationKeys, t17.enumerationValues, 
> t17.mandatoryCondition, t17.mimeType, t17.multivalue, t17.readonly, 
> t17.secretKey, t17.type, t17.uniqueConstraint, t17.validatorClass FROM 
> UPlainAttr t0 LEFT OUTER JOIN PlainSchema t1 ON t0.schema_id = t1.id LEFT 
> OUTER JOIN UMembership t4 ON t0.MEMBERSHIP_ID = t4.id LEFT OUTER JOIN 
> SyncopeUser t15 ON t0.OWNER_ID = t15.id LEFT OUTER JOIN UPlainAttrUniqueValue 
> t16 ON t0.id = t16.ATTRIBUTE_ID LEFT OUTER JOIN AnyTypeClass t3 ON 
> t1.ANYTYPECLASS_ID = t3.id LEFT OUTER JOIN SyncopeSchema t2 ON t1.id = t2.id 
> LEFT OUTER JOIN SyncopeUser t5 ON t4.user_id = t5.id LEFT OUTER JOIN 
> SyncopeGroup t11 ON t4.group_id = t11.id LEFT OUTER JOIN PlainSchema t17 ON 
> t16.schema_id = t17.id LEFT OUTER JOIN Realm t6 ON t5.REALM_ID = t6.id LEFT 
> OUTER JOIN SecurityQuestion t10 ON t5.SECURITYQUESTION_ID = t10.id LEFT OUTER 
> JOIN SyncopeGroup t12 ON t11.GROUPOWNER_ID = t12.id LEFT OUTER JOIN 
> UDynGroupMembership t13 ON t11.id = t13.GROUP_ID LEFT OUTER JOIN SyncopeUser 
> t14 ON t11.USEROWNER_ID = t14.id LEFT OUTER JOIN SyncopeSchema t18 ON t17.id 
> = t18.id LEFT OUTER JOIN AccountPolicy t7 ON t6.ACCOUNTPOLICY_ID = t7.id LEFT 
> OUTER JOIN Realm t8 ON t6.PARENT_ID = t8.id LEFT OUTER JOIN PasswordPolicy t9 
> ON t6.PASSWORDPOLICY_ID = t9.id WHERE (t0.schema_id = ?)
> {code}
> The query can be optimized to:
> {code:sql}
> select count(UPlainAttr.id) FROM plainschema join UPlainAttr on 
> plainschema.id = UPlainAttr.schema_id WHERE plainschema.id = ?
> {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to