* @param queryWhereClause the where clause of the query (used for add the strin WHERE or AND at
* the beginning of the clause)
* @return
*/
public String buildViewsRelations(Map entityAliasesMaps, Query query, String queryWhereClause) {
IModelField datamartField;
Set<ViewRalationClause> viewRelations = new HashSet<ViewRalationClause>();
StringBuffer whereClause = new StringBuffer("");
Set<IModelEntity> concernedEntities = new HashSet<IModelEntity>();
String clauseToReturn;
//get all the fields
//Get the select fields
List<DataMartSelectField> selectFields = query.getSelectFields(false);
if(selectFields!=null){
for(int i=0; i<selectFields.size(); i++){
datamartField = statement.getDataSource().getModelStructure().getField(selectFields.get(i).getUniqueName());
concernedEntities.add(datamartField.getPathParent());
}
}
//Get the where fields
List<WhereField> whereFields = query.getWhereFields();
if(whereFields!=null){
for(int i=0; i<whereFields.size(); i++){
WhereField whereField = whereFields.get(i);
Operand leftOperand = whereField.getLeftOperand();
if(statement.OPERAND_TYPE_FIELD.equalsIgnoreCase(leftOperand.type)){
datamartField = statement.getDataSource().getModelStructure().getField( leftOperand.values[0] );
concernedEntities.add(datamartField.getPathParent());
}
Operand rightOperand = whereField.getLeftOperand();
if(statement.OPERAND_TYPE_FIELD.equalsIgnoreCase(rightOperand.type)){
datamartField = statement.getDataSource().getModelStructure().getField( rightOperand.values[0] );
concernedEntities.add(datamartField.getPathParent());
}
}
}
//Get the having fields
List<HavingField> havingFields = query.getHavingFields();
if(havingFields!=null){
for(int i=0; i<havingFields.size(); i++){
HavingField havingField = havingFields.get(i);
Operand leftOperand = havingField.getLeftOperand();
if(statement.OPERAND_TYPE_FIELD.equalsIgnoreCase(leftOperand.type)){
datamartField = statement.getDataSource().getModelStructure().getField( leftOperand.values[0] );
concernedEntities.add(datamartField.getPathParent());
}
Operand rightOperand = havingField.getLeftOperand();
if(statement.OPERAND_TYPE_FIELD.equalsIgnoreCase(rightOperand.type)){
datamartField = statement.getDataSource().getModelStructure().getField( rightOperand.values[0] );
concernedEntities.add(datamartField.getPathParent());
}
}
}
//Get the order by fields
List<DataMartSelectField> orderFields = query.getOrderByFields();
if(orderFields!=null){
for(int i=0; i<orderFields.size(); i++){
datamartField = statement.getDataSource().getModelStructure().getField(orderFields.get(i).getUniqueName());
concernedEntities.add(datamartField.getPathParent());
}
}
//Get the group by fields
List<DataMartSelectField> groupFields = query.getGroupByFields();
if(groupFields!=null){
for(int i=0; i<groupFields.size(); i++){
datamartField = statement.getDataSource().getModelStructure().getField(groupFields.get(i).getUniqueName());
concernedEntities.add(datamartField.getPathParent());
}
}
Iterator<IModelEntity> concernedEntitiesIter = concernedEntities.iterator();