// ============================================================================
//
// Copyright (C) 2006-2016 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package org.talend.dq.analysis.explore;
import java.util.HashMap;
import java.util.Map;
import org.talend.dataquality.analysis.ExecutionLanguage;
import org.talend.dq.dbms.HiveDbmsLanguage;
/**
* DOC zqin class global comment. Detailled comment
*/
public class TextStatisticsExplorer extends DataExplorer {
private String getTextRowsStatement() {
String instantiatedSQL = getIndicatorExpressionSQL();
if (instantiatedSQL == null) {
return instantiatedSQL;
}
String clause = dbmsLanguage.charLength(this.columnName) + dbmsLanguage.equal() + "(" + instantiatedSQL + ")"; //$NON-NLS-1$ //$NON-NLS-2$
return getRowsStatement(clause);
}
@Override
public Map<String, String> getSubClassQueryMap() {
boolean isSqlEngine = ExecutionLanguage.SQL.equals(this.analysis.getParameters().getExecutionLanguage());
Map<String, String> map = new HashMap<String, String>();
// MOD qiongli 2012-8-29 hive don't support the complex sql.
boolean isHive = dbmsLanguage instanceof HiveDbmsLanguage;
if (!isHive) {
switch (this.indicatorEnum) {
case AverageLengthIndicatorEnum:
// MOD msjian 2011-7-1 22549:change Sql for average length indicator
// MOD qiongli 2011-8-10 TDQ-2474:change Sql for kinds of average length indicator
case AverageLengthWithBlankIndicatorEnum:
if (isSqlEngine) {
map.put(MENU_VIEW_ROWS, getComment(MENU_VIEW_ROWS) + getAverageLengthWithBlankRowsStatement());
}
break;
case AverageLengthWithNullBlankIndicatorEnum:
if (isSqlEngine) {
map.put(MENU_VIEW_ROWS, getComment(MENU_VIEW_ROWS) + getAverageLengthWithNullBlankRowsStatement());
}
break;
case AverageLengthWithNullIndicatorEnum:
if (isSqlEngine) {
map.put(MENU_VIEW_ROWS, getComment(MENU_VIEW_ROWS) + getAverageLengthWithNullRowsStatement());
}
break;
case MinLengthIndicatorEnum:
case MaxLengthIndicatorEnum:
case MinLengthWithBlankIndicatorEnum:
case MinLengthWithBlankNullIndicatorEnum:
case MinLengthWithNullIndicatorEnum:
case MaxLengthWithBlankIndicatorEnum:
case MaxLengthWithBlankNullIndicatorEnum:
case MaxLengthWithNullIndicatorEnum:
map.put(MENU_VIEW_ROWS, isSqlEngine ? getComment(MENU_VIEW_ROWS) + getTextRowsStatement() : null);
break;
default:
}
} else {
// java engin is not support to all of Average indicator
if (!isSqlEngine) {
switch (this.indicatorEnum) {
case MinLengthIndicatorEnum:
case MinLengthWithBlankIndicatorEnum:
case MinLengthWithBlankNullIndicatorEnum:
case MinLengthWithNullIndicatorEnum:
case MaxLengthIndicatorEnum:
case MaxLengthWithBlankIndicatorEnum:
case MaxLengthWithBlankNullIndicatorEnum:
case MaxLengthWithNullIndicatorEnum:
map.put(MENU_VIEW_ROWS, null);
break;
default:
}
}
}
return map;
}
/**
* DOC qiongli 2011-09-8 TDQ-2474:view rows for average length with blank.
*
* @return
*/
private String getAverageLengthWithBlankRowsStatement() {
String tableName = getFullyQualifiedTableName(this.indicator.getAnalyzedElement());
return dbmsLanguage.fillGenericQueryWithColumnsAndTable(dbmsLanguage.getAverageLengthWithBlankRows(), this.columnName,
tableName);
}
/**
* DOC qiongli 2011-07-8 TDQ-2474:view rows for average length with null blank.
*
* @return
*/
private String getAverageLengthWithNullBlankRowsStatement() {
String tableName = getFullyQualifiedTableName(this.indicator.getAnalyzedElement());
return dbmsLanguage.fillGenericQueryWithColumnsAndTable(dbmsLanguage.getAverageLengthWithNullBlankRows(),
this.columnName, tableName);
}
/**
* DOC qiongli 2011-09-8 TDQ-2474:view rows for average length with null.
*
* @return
*/
private String getAverageLengthWithNullRowsStatement() {
String tableName = getFullyQualifiedTableName(this.indicator.getAnalyzedElement());
return dbmsLanguage.fillGenericQueryWithColumnsAndTable(dbmsLanguage.getAverageLengthWithNullRows(), this.columnName,
tableName);
}
}