Skip to content

Commit

Permalink
Fixed Exception occur if use "weighted average" function
Browse files Browse the repository at this point in the history
Add data type on bindings generated by DatasetPreviewTask.
  • Loading branch information
azhu authored and zhiqiangqian committed Jul 22, 2014
1 parent 3ca0587 commit d7374df
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 9 deletions.
Expand Up @@ -15,17 +15,14 @@
import org.eclipse.birt.data.engine.api.DataEngineContext;
import org.eclipse.birt.data.engine.api.IBaseExpression;
import org.eclipse.birt.data.engine.api.IBasePreparedQuery;
import org.eclipse.birt.data.engine.api.IBinding;
import org.eclipse.birt.data.engine.api.IConditionalExpression;
import org.eclipse.birt.data.engine.api.IExpressionCollection;
import org.eclipse.birt.data.engine.api.IFilterDefinition;
import org.eclipse.birt.data.engine.api.IQueryDefinition;
import org.eclipse.birt.data.engine.api.IQueryResults;
import org.eclipse.birt.data.engine.api.IScriptExpression;
import org.eclipse.birt.data.engine.api.ISortDefinition;
import org.eclipse.birt.data.engine.api.querydefn.Binding;
import org.eclipse.birt.data.engine.api.querydefn.QueryDefinition;
import org.eclipse.birt.data.engine.api.querydefn.ScriptExpression;
import org.eclipse.birt.data.engine.core.DataException;
import org.eclipse.birt.report.data.adapter.api.DataRequestSession;
import org.eclipse.birt.report.data.adapter.api.DataSessionContext;
Expand Down Expand Up @@ -53,6 +50,7 @@
import org.eclipse.birt.report.model.api.DataSetHandle;
import org.eclipse.birt.report.model.api.ModuleHandle;
import org.eclipse.birt.report.model.api.ReportDesignHandle;
import org.eclipse.birt.report.model.api.elements.structures.ResultSetColumn;

public class DatasetPreviewTask extends EngineTask implements IDatasetPreviewTask
{
Expand Down Expand Up @@ -372,15 +370,15 @@ protected QueryDefinition constructQuery( DataSetHandle dataset )
query.setDataSetName( dataset.getQualifiedName( ) );
Set<String> existBindings = new HashSet<String>( );

Map<String, ResultSetColumn> columns = QueryUtil.getResultSetColumns( dataset );
if ( this.selectedColumns == null )
{
List<String> columnNames = QueryUtil.getColumnNames( dataset );
for ( String column : columnNames )
for ( ResultSetColumn column : columns.values( ) )
{
if ( !existBindings.contains( column ) )
if ( !existBindings.contains( column.getColumnName( ) ) )
{
QueryUtil.addBinding( query, column );
existBindings.add( column );
existBindings.add( column.getColumnName( ) );
}
}
}
Expand All @@ -390,8 +388,12 @@ protected QueryDefinition constructQuery( DataSetHandle dataset )
{
if ( !existBindings.contains( column ) )
{
QueryUtil.addBinding( query, column );
existBindings.add( column );
ResultSetColumn col = columns.get( column );
if ( col != null )
{
QueryUtil.addBinding( query, col );
existBindings.add( column );
}
}
}
}
Expand Down
Expand Up @@ -14,6 +14,7 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

Expand All @@ -38,6 +39,7 @@
import org.eclipse.birt.data.engine.olap.api.IPreparedCubeQuery;
import org.eclipse.birt.data.engine.olap.api.query.ICubeQueryDefinition;
import org.eclipse.birt.data.engine.olap.api.query.ISubCubeQueryDefinition;
import org.eclipse.birt.report.data.adapter.api.DataAdapterUtil;
import org.eclipse.birt.report.data.adapter.api.DataRequestSession;
import org.eclipse.birt.report.engine.api.DataID;
import org.eclipse.birt.report.engine.api.DataSetID;
Expand Down Expand Up @@ -641,6 +643,29 @@ public static List<String> getColumnNames( DataSetHandle dataset )
}
return Collections.EMPTY_LIST;
}

@SuppressWarnings("unchecked")
public static Map<String, ResultSetColumn> getResultSetColumns( DataSetHandle dataset )
{
CachedMetaDataHandle cachedMetaDataHandle = dataset
.getCachedMetaDataHandle( );
if ( cachedMetaDataHandle != null )
{
List<ResultSetColumn> resultSetColumns = (List<ResultSetColumn>) cachedMetaDataHandle
.getProperty( CachedMetaData.RESULT_SET_MEMBER );
if ( resultSetColumns == null )
{
return Collections.EMPTY_MAP;
}
Map<String, ResultSetColumn> retVal = new LinkedHashMap<String, ResultSetColumn>( );
for ( ResultSetColumn col : resultSetColumns )
{
retVal.put( col.getColumnName( ), col );
}
return retVal;
}
return Collections.EMPTY_MAP;
}

public static void addBinding( IQueryDefinition query, String column )
throws DataException
Expand All @@ -651,6 +676,16 @@ public static void addBinding( IQueryDefinition query, String column )
query.addBinding( binding );
}

public static void addBinding( IQueryDefinition query, ResultSetColumn column )
throws DataException
{
ScriptExpression expr = new ScriptExpression(
ExpressionUtil.createDataSetRowExpression( column.getColumnName( ) ) );
IBinding binding = new Binding( column.getColumnName( ), expr );
binding.setDataType( DataAdapterUtil.adaptModelDataType( column.getDataType( ) ) );
query.addBinding( binding );
}

public static interface IResultSetIDProvider
{
String getResultsID( String parent, String rawId,
Expand Down

0 comments on commit d7374df

Please sign in to comment.