Program: 139734
Project: 139734
Buggy source:
/** 
 * Method "createSqlQuery".
 * @param dataFilterExpression
 * @param analysis
 * @param indicator
 * @throws ParseException
 * @throws AnalysisExecutionException
 */
private boolean createSqlQuery(String dataFilterAsString,Indicator indicator) throws ParseException, AnalysisExecutionException {
  ModelElement analyzedElement=indicator.getAnalyzedElement();
  if (analyzedElement == null) {
    return traceError("String_Node_Str" + indicator.getName());
  }
  TdColumn tdColumn=SwitchHelpers.COLUMN_SWITCH.doSwitch(indicator.getAnalyzedElement());
  if (tdColumn == null) {
    return traceError("String_Node_Str" + indicator.getName());
  }
  String colName=getQuotedColumnName(tdColumn);
  if (!belongToSameSchemata(tdColumn)) {
    StringBuffer buf=new StringBuffer();
    for (    orgomg.cwm.objectmodel.core.Package schema : schemata.values()) {
      buf.append(schema.getName() + "String_Node_Str");
    }
    log.error("String_Node_Str" + colName + "String_Node_Str"+ buf.toString().trim()+ "String_Node_Str");
    return false;
  }
  colName=castColumn(indicator,tdColumn,colName);
  String language=dbms().getDbmsName();
  Expression sqlGenericExpression=null;
  IndicatorDefinition indicatorDefinition=indicator.getIndicatorDefinition();
  if (indicatorDefinition == null) {
    return traceError("String_Node_Str" + indicator.getName() + "String_Node_Str");
  }
  sqlGenericExpression=dbms().getSqlExpression(indicatorDefinition);
  final EClass indicatorEclass=indicator.eClass();
  if (sqlGenericExpression == null || sqlGenericExpression.getBody() == null) {
    if (IndicatorsPackage.eINSTANCE.getRegexpMatchingIndicator().equals(indicatorEclass)) {
      return traceError("String_Node_Str" + language + "String_Node_Str");
    }
    return traceError("String_Node_Str" + (indicator.getName() != null ? indicator.getName() : indicatorEclass.getName()) + "String_Node_Str"+ ResourceHelper.getUUID(indicatorDefinition)+ "String_Node_Str");
  }
  List<String> whereExpression=new ArrayList<String>();
  if (StringUtils.isNotBlank(dataFilterAsString)) {
    whereExpression.add(dataFilterAsString);
  }
  List<String> rangeStrings=null;
  DateGrain dateAggregationType=null;
  IndicatorParameters parameters=indicator.getParameters();
  if (parameters != null) {
    Domain bins=parameters.getBins();
    if (bins != null) {
      rangeStrings=getBinsAsGenericString(bins.getRanges(),colName);
    }
    DateParameters dateParameters=parameters.getDateParameters();
    if (dateParameters != null) {
      dateAggregationType=dateParameters.getDateAggregationType();
    }
    TextParameters textParameter=parameters.getTextParameter();
    if (textParameter != null) {
      if (textParameter.isUseNulls()) {
        colName=dbms().replaceNullsWithString(colName,"String_Node_Str");
      }
      if (textParameter.isIgnoreCase()) {
        colName=dbms().toUpperCase(colName);
      }
      if (!textParameter.isUseBlank() && IndicatorsPackage.eINSTANCE.getTextIndicator().isSuperTypeOf(indicatorEclass)) {
        whereExpression.add(dbms().isNotBlank(colName));
      }
 else       if (textParameter.isUseBlank() && IndicatorsPackage.eINSTANCE.getFrequencyIndicator().isSuperTypeOf(indicatorEclass)) {
        colName=dbms().trim(colName);
      }
    }
  }
  final ColumnSet columnSetOwner=ColumnHelper.getColumnSetOwner(tdColumn);
  String schemaName=getQuotedSchemaName(columnSetOwner);
  String table=getQuotedTableName(tdColumn);
  String catalogName=getQuotedCatalogName(columnSetOwner);
  if (catalogName == null && schemaName != null) {
    final TdSchema parentSchema=SchemaHelper.getParentSchema(columnSetOwner);
    final TdCatalog parentCatalog=CatalogHelper.getParentCatalog(parentSchema);
    catalogName=parentCatalog != null ? parentCatalog.getName() : null;
  }
  table=dbms().toQualifiedName(catalogName,schemaName,table);
  String completedSqlString=null;
  if (indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getMedianIndicator()) || indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getLowerQuartileIndicator()) || indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getUpperQuartileIndicator())) {
    completedSqlString=getCompletedStringForQuantiles(indicator,sqlGenericExpression,colName,table,whereExpression);
    whereExpression=duplicateForCrossJoin(completedSqlString,whereExpression,tdColumn);
    completedSqlString=addWhereToSqlStringStatement(whereExpression,completedSqlString);
  }
 else   if (indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getFrequencyIndicator()) || IndicatorsPackage.eINSTANCE.getFrequencyIndicator().isSuperTypeOf(indicatorEclass) || indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getModeIndicator())) {
    int topN=indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getModeIndicator()) ? 1 : getTopN(indicator);
    if (topN <= 0) {
      topN=TOP_N;
    }
    if (rangeStrings != null) {
      completedSqlString=getUnionCompletedString(indicator,sqlGenericExpression,colName,table,whereExpression,rangeStrings);
      if (indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getModeIndicator())) {
        completedSqlString=dbms().getTopNQuery(completedSqlString,topN);
      }
    }
 else     if (dateAggregationType != null && !dateAggregationType.equals(DateGrain.NONE) && Java2SqlType.isDateInSQL(tdColumn.getJavaType())) {
      completedSqlString=getDateAggregatedCompletedString(sqlGenericExpression,colName,table,dateAggregationType);
      completedSqlString=addWhereToSqlStringStatement(whereExpression,completedSqlString);
      completedSqlString=dbms().getTopNQuery(completedSqlString,topN);
    }
 else {
      if (indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getPatternFreqIndicator()) || indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getPatternLowFreqIndicator())) {
        if (!Java2SqlType.isNumbericInSQL(tdColumn.getJavaType())) {
          colName=dbms().getPatternFinderDefaultFunction(colName);
        }
      }
      completedSqlString=dbms().fillGenericQueryWithColumnTableAndAlias(sqlGenericExpression.getBody(),colName,table,colName);
      completedSqlString=addWhereToSqlStringStatement(whereExpression,completedSqlString);
      completedSqlString=dbms().getTopNQuery(completedSqlString,topN);
    }
  }
 else   if (IndicatorsPackage.eINSTANCE.getPatternMatchingIndicator().isSuperTypeOf(indicatorEclass)) {
    List<String> patterns=getPatterns(indicator);
    if (patterns.isEmpty()) {
      return traceError("String_Node_Str" + language + "String_Node_Str"+ indicator.getName());
    }
    completedSqlString=replaceVariables(sqlGenericExpression.getBody(),colName,table,patterns);
    completedSqlString=addWhereToSqlStringStatement(whereExpression,completedSqlString);
  }
 else {
    if (IndicatorsPackage.eINSTANCE.getDefValueCountIndicator().equals(indicatorEclass)) {
      String defValue=ColumnHelper.getDefaultValue(tdColumn);
      if (defValue == null) {
        return traceError("String_Node_Str" + colName + "String_Node_Str"+ indicator.getName()+ "String_Node_Str");
      }
      int javaType=tdColumn.getJavaType();
      if (!Java2SqlType.isNumbericInSQL(javaType)) {
        defValue="String_Node_Str" + defValue + "String_Node_Str";
      }
      whereExpression.add(colName + dbms().equal() + defValue);
    }
    completedSqlString=dbms().fillGenericQueryWithColumnsAndTable(sqlGenericExpression.getBody(),colName,table);
    completedSqlString=addWhereToSqlStringStatement(whereExpression,completedSqlString);
  }
  String finalQuery=completedSqlString;
  Expression instantiateSqlExpression=BooleanExpressionHelper.createExpression(language,finalQuery);
  indicator.setInstantiatedExpression(instantiateSqlExpression);
  return true;
}

Fixed version (ground truth):
/** 
 * Method "createSqlQuery".
 * @param dataFilterExpression
 * @param analysis
 * @param indicator
 * @throws ParseException
 * @throws AnalysisExecutionException
 */
private boolean createSqlQuery(String dataFilterAsString,Indicator indicator) throws ParseException, AnalysisExecutionException {
  ModelElement analyzedElement=indicator.getAnalyzedElement();
  if (analyzedElement == null) {
    return traceError("String_Node_Str" + indicator.getName());
  }
  TdColumn tdColumn=SwitchHelpers.COLUMN_SWITCH.doSwitch(indicator.getAnalyzedElement());
  if (tdColumn == null) {
    return traceError("String_Node_Str" + indicator.getName());
  }
  String colName=getQuotedColumnName(tdColumn);
  if (!belongToSameSchemata(tdColumn)) {
    StringBuffer buf=new StringBuffer();
    for (    orgomg.cwm.objectmodel.core.Package schema : schemata.values()) {
      buf.append(schema.getName() + "String_Node_Str");
    }
    log.error("String_Node_Str" + colName + "String_Node_Str"+ buf.toString().trim()+ "String_Node_Str");
    return false;
  }
  colName=castColumn(indicator,tdColumn,colName);
  String language=dbms().getDbmsName();
  Expression sqlGenericExpression=null;
  IndicatorDefinition indicatorDefinition=DefinitionHandler.getInstance().getIndicatorDefinition(indicator.getIndicatorDefinition().getLabel());
  if (indicatorDefinition == null) {
    return traceError("String_Node_Str" + indicator.getName() + "String_Node_Str");
  }
  sqlGenericExpression=dbms().getSqlExpression(indicatorDefinition);
  final EClass indicatorEclass=indicator.eClass();
  if (sqlGenericExpression == null || sqlGenericExpression.getBody() == null) {
    if (IndicatorsPackage.eINSTANCE.getRegexpMatchingIndicator().equals(indicatorEclass)) {
      return traceError("String_Node_Str" + language + "String_Node_Str");
    }
    return traceError("String_Node_Str" + (indicator.getName() != null ? indicator.getName() : indicatorEclass.getName()) + "String_Node_Str"+ ResourceHelper.getUUID(indicatorDefinition)+ "String_Node_Str");
  }
  List<String> whereExpression=new ArrayList<String>();
  if (StringUtils.isNotBlank(dataFilterAsString)) {
    whereExpression.add(dataFilterAsString);
  }
  List<String> rangeStrings=null;
  DateGrain dateAggregationType=null;
  IndicatorParameters parameters=indicator.getParameters();
  if (parameters != null) {
    Domain bins=parameters.getBins();
    if (bins != null) {
      rangeStrings=getBinsAsGenericString(bins.getRanges(),colName);
    }
    DateParameters dateParameters=parameters.getDateParameters();
    if (dateParameters != null) {
      dateAggregationType=dateParameters.getDateAggregationType();
    }
    TextParameters textParameter=parameters.getTextParameter();
    if (textParameter != null) {
      if (textParameter.isUseNulls()) {
        colName=dbms().replaceNullsWithString(colName,"String_Node_Str");
      }
      if (textParameter.isIgnoreCase()) {
        colName=dbms().toUpperCase(colName);
      }
      if (!textParameter.isUseBlank() && IndicatorsPackage.eINSTANCE.getTextIndicator().isSuperTypeOf(indicatorEclass)) {
        whereExpression.add(dbms().isNotBlank(colName));
      }
 else       if (textParameter.isUseBlank() && IndicatorsPackage.eINSTANCE.getFrequencyIndicator().isSuperTypeOf(indicatorEclass)) {
        colName=dbms().trim(colName);
      }
    }
  }
  final ColumnSet columnSetOwner=ColumnHelper.getColumnSetOwner(tdColumn);
  String schemaName=getQuotedSchemaName(columnSetOwner);
  String table=getQuotedTableName(tdColumn);
  String catalogName=getQuotedCatalogName(columnSetOwner);
  if (catalogName == null && schemaName != null) {
    final TdSchema parentSchema=SchemaHelper.getParentSchema(columnSetOwner);
    final TdCatalog parentCatalog=CatalogHelper.getParentCatalog(parentSchema);
    catalogName=parentCatalog != null ? parentCatalog.getName() : null;
  }
  table=dbms().toQualifiedName(catalogName,schemaName,table);
  String completedSqlString=null;
  if (indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getMedianIndicator()) || indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getLowerQuartileIndicator()) || indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getUpperQuartileIndicator())) {
    completedSqlString=getCompletedStringForQuantiles(indicator,sqlGenericExpression,colName,table,whereExpression);
    whereExpression=duplicateForCrossJoin(completedSqlString,whereExpression,tdColumn);
    completedSqlString=addWhereToSqlStringStatement(whereExpression,completedSqlString);
  }
 else   if (indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getFrequencyIndicator()) || IndicatorsPackage.eINSTANCE.getFrequencyIndicator().isSuperTypeOf(indicatorEclass) || indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getModeIndicator())) {
    int topN=indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getModeIndicator()) ? 1 : getTopN(indicator);
    if (topN <= 0) {
      topN=TOP_N;
    }
    if (rangeStrings != null) {
      completedSqlString=getUnionCompletedString(indicator,sqlGenericExpression,colName,table,whereExpression,rangeStrings);
      if (indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getModeIndicator())) {
        completedSqlString=dbms().getTopNQuery(completedSqlString,topN);
      }
    }
 else     if (dateAggregationType != null && !dateAggregationType.equals(DateGrain.NONE) && Java2SqlType.isDateInSQL(tdColumn.getJavaType())) {
      completedSqlString=getDateAggregatedCompletedString(sqlGenericExpression,colName,table,dateAggregationType);
      completedSqlString=addWhereToSqlStringStatement(whereExpression,completedSqlString);
      completedSqlString=dbms().getTopNQuery(completedSqlString,topN);
    }
 else {
      if (indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getPatternFreqIndicator()) || indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getPatternLowFreqIndicator())) {
        if (!Java2SqlType.isNumbericInSQL(tdColumn.getJavaType())) {
          colName=dbms().getPatternFinderDefaultFunction(colName);
        }
      }
      completedSqlString=dbms().fillGenericQueryWithColumnTableAndAlias(sqlGenericExpression.getBody(),colName,table,colName);
      completedSqlString=addWhereToSqlStringStatement(whereExpression,completedSqlString);
      completedSqlString=dbms().getTopNQuery(completedSqlString,topN);
    }
  }
 else   if (IndicatorsPackage.eINSTANCE.getPatternMatchingIndicator().isSuperTypeOf(indicatorEclass)) {
    List<String> patterns=getPatterns(indicator);
    if (patterns.isEmpty()) {
      return traceError("String_Node_Str" + language + "String_Node_Str"+ indicator.getName());
    }
    completedSqlString=replaceVariables(sqlGenericExpression.getBody(),colName,table,patterns);
    completedSqlString=addWhereToSqlStringStatement(whereExpression,completedSqlString);
  }
 else {
    if (IndicatorsPackage.eINSTANCE.getDefValueCountIndicator().equals(indicatorEclass)) {
      String defValue=ColumnHelper.getDefaultValue(tdColumn);
      if (defValue == null) {
        return traceError("String_Node_Str" + colName + "String_Node_Str"+ indicator.getName()+ "String_Node_Str");
      }
      int javaType=tdColumn.getJavaType();
      if (!Java2SqlType.isNumbericInSQL(javaType)) {
        defValue="String_Node_Str" + defValue + "String_Node_Str";
      }
      whereExpression.add(colName + dbms().equal() + defValue);
    }
    completedSqlString=dbms().fillGenericQueryWithColumnsAndTable(sqlGenericExpression.getBody(),colName,table);
    completedSqlString=addWhereToSqlStringStatement(whereExpression,completedSqlString);
  }
  String finalQuery=completedSqlString;
  Expression instantiateSqlExpression=BooleanExpressionHelper.createExpression(language,finalQuery);
  indicator.setInstantiatedExpression(instantiateSqlExpression);
  return true;
}