
com.sap.cds.util.ProjectionProcessor Maven / Gradle / Ivy
/*******************************************************************
* © 2021 SAP SE or an SAP affiliate company. All rights reserved. *
*******************************************************************/
package com.sap.cds.util;
import static com.sap.cds.util.CqnStatementUtils.getEntries;
import com.sap.cds.ql.cqn.CqnAnalyzer;
import com.sap.cds.ql.cqn.CqnStatement;
import com.sap.cds.reflect.CdsEntity;
import com.sap.cds.reflect.CdsModel;
import com.sap.cds.util.ProjectionResolver.BiPredicate;
public class ProjectionProcessor {
private final DataUtils dataUtils;
private final CqnAnalyzer cqnAnalyzer;
private final CdsModel model;
private ProjectionProcessor(CdsModel model, CqnAnalyzer cqnAnalyzer, DataUtils dataUtils) {
this.model = model;
this.cqnAnalyzer = cqnAnalyzer;
this.dataUtils = dataUtils;
}
public static ProjectionProcessor create(CdsModel model, CqnAnalyzer cqnAnalyzer, DataUtils dataUtils) {
return new ProjectionProcessor(model, cqnAnalyzer, dataUtils);
}
/**
* Removes virtual elements from payload of insert, update and upsert statements
* and resolves the projection.
*
* @param type
* @param statement original statement
* @return resolved statement
*/
public T resolve(T statement) {
CdsEntity target = cqnAnalyzer.analyze(statement.ref()).targetEntity();
dataUtils.removeVirtualElements(target, getEntries(statement));
return resolveProjection(statement);
}
private T resolveProjection(T cqn) {
BiPredicate isTable = (prev, stmnt) -> cqnAnalyzer.analyze(stmnt.ref()).targetEntity()
.getAnnotationValue("cds.persistence.table", false);
return ProjectionResolver.create(model, cqn).condition(isTable).resolveAll().getResolvedStatement();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy