// ============================================================================ // // 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.eclipse.emf.common.util.EList; import org.talend.cwm.relational.TdExpression; import org.talend.dataquality.PluginConstant; import org.talend.dataquality.analysis.AnalysisType; import org.talend.dataquality.analysis.ExecutionLanguage; import org.talend.dataquality.helpers.IndicatorCategoryHelper; import org.talend.dataquality.indicators.definition.IndicatorCategory; import org.talend.dataquality.indicators.definition.IndicatorDefinition; import org.talend.dataquality.indicators.definition.userdefine.UDIndicatorDefinition; import org.talend.dq.dbms.DbmsLanguage; import org.talend.dq.dbms.GenericSQLHandler; import org.talend.dq.dbms.HiveDbmsLanguage; /** * DOC zqin class global comment. Detailled comment */ public class SimpleStatisticsExplorer extends DataExplorer { @Override public Map<String, String> getSubClassQueryMap() { Map<String, String> map = new HashMap<String, String>(); // MOD zshen feature 12919 adapt to pop-menu for Jave engin on result page boolean isSqlEngine = ExecutionLanguage.SQL.equals(this.analysis.getParameters().getExecutionLanguage()); // MOD qiongli 2011-3-4,feature 19192:filter menue 'view rows' for columSet AnalysisType. AnalysisType analysisType = this.analysis.getParameters().getAnalysisType(); // MOD qiongli 2012-8-29 hive don't support 'where in...' boolean isHive = dbmsLanguage instanceof HiveDbmsLanguage; switch (this.indicatorEnum) { case RowCountIndicatorEnum: // for columnset/column and jave engine, we didn't show the view rows menu if (isSqlEngine) { // when user define indicator map.put(MENU_VIEW_ROWS, getComment(MENU_VIEW_ROWS) + getRowsStatement()); } break; case NullCountIndicatorEnum: case BlankCountIndicatorEnum: case DefValueCountIndicatorEnum: case UserDefinedIndicatorEnum: // when user define indicator IndicatorDefinition indicatorDefinition = this.indicator.getIndicatorDefinition(); map.put(MENU_VIEW_ROWS, isSqlEngine ? getComment(MENU_VIEW_ROWS) + (indicatorDefinition instanceof UDIndicatorDefinition ? getQueryForViewRows(indicatorDefinition) : getRowsStatement()) : null); break; case UniqueIndicatorEnum: case DuplicateCountIndicatorEnum: if (analysisType != AnalysisType.COLUMN_SET) { if (!isHive) { map.put(MENU_VIEW_ROWS, isSqlEngine ? getComment(MENU_VIEW_ROWS) + getRowsStatementWithSubQuery() : null); } else if (!isSqlEngine) { map.put(MENU_VIEW_ROWS, null); } } map.put(MENU_VIEW_VALUES, isSqlEngine ? getComment(MENU_VIEW_VALUES) + getValuesStatement(this.columnName) : null); break; case DistinctCountIndicatorEnum: map.put(MENU_VIEW_VALUES, isSqlEngine ? getComment(MENU_VIEW_VALUES) + getDistinctValuesStatement(this.columnName) : null); break; default: } return map; } /** * get Query For View Rows. * * @param indicatorDefinition * @return */ private String getQueryForViewRows(IndicatorDefinition indicatorDefinition) { String sql = PluginConstant.EMPTY_STRING; IndicatorCategory category = IndicatorCategoryHelper.getCategory(indicatorDefinition); EList<TdExpression> list = ((UDIndicatorDefinition) indicatorDefinition).getViewRowsExpression(); TdExpression tdExp = DbmsLanguage.getSqlExpression(indicatorDefinition, dbmsLanguage.getDbmsName(), list, dbmsLanguage.getDbVersion()); sql = tdExp.getBody(); String dataFilterClause = getDataFilterClause(); if (!dataFilterClause.equals(PluginConstant.EMPTY_STRING)) { sql = sql.replace(GenericSQLHandler.WHERE_CLAUSE, dbmsLanguage.where() + "(" + dataFilterClause + ")"); //$NON-NLS-1$ //$NON-NLS-2$ sql = sql.replace(GenericSQLHandler.AND_WHERE_CLAUSE, dbmsLanguage.and() + "(" + dataFilterClause + ")"); //$NON-NLS-1$ //$NON-NLS-2$ } else { sql = sql.replace(GenericSQLHandler.WHERE_CLAUSE, PluginConstant.EMPTY_STRING); sql = sql.replace(GenericSQLHandler.AND_WHERE_CLAUSE, PluginConstant.EMPTY_STRING); } String tableName = getFullyQualifiedTableName(this.indicator.getAnalyzedElement()); sql = sql.replace(GenericSQLHandler.TABLE_NAME, tableName); // TDQ-12398 msjian: add quote for the column sql = sql.replace(GenericSQLHandler.COLUMN_NAMES, dbmsLanguage.quote(this.indicator.getAnalyzedElement().getName())); if (sql.indexOf(GenericSQLHandler.UDI_INDICATOR_VALUE) != -1) { if (IndicatorCategoryHelper.isUserDefRealValue(category)) { // replace <%=__INDICATOR_VALUE__%> Double realValue = this.indicator.getRealValue(); sql = sql.replace(GenericSQLHandler.UDI_INDICATOR_VALUE, realValue == null ? "0" : realValue.toString()); //$NON-NLS-1$ } else { sql = sql.replace(GenericSQLHandler.UDI_INDICATOR_VALUE, (String.valueOf(this.indicator.getIntegerValue().intValue()))); } } return sql; } }