Skip to content

Commit

Permalink
Support combined Oda data Set.
Browse files Browse the repository at this point in the history
Signed-off-by: xinzhao-acutate <xzhao@actuate.com>
  • Loading branch information
xinzhao-actuate committed Oct 8, 2015
1 parent c709c5b commit 49ecb02
Show file tree
Hide file tree
Showing 11 changed files with 483 additions and 75 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package org.eclipse.birt.data.engine.api;

import java.util.Set;


/**
* Special Oda data set, containing multiple oda data set design
* @author xzhao
*
*/
public interface ICombinedOdaDataSetDesign extends IOdaDataSetDesign
{
public void addDataSetDesign( IOdaDataSetDesign dataSetDesign );

public Set<IOdaDataSetDesign> getDataSetDesigns( );
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,195 @@
package org.eclipse.birt.data.engine.api.querydefn;

import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.eclipse.birt.data.engine.api.ICombinedOdaDataSetDesign;
import org.eclipse.birt.data.engine.api.IOdaDataSetDesign;
import org.eclipse.birt.data.engine.api.ISortDefinition;
import org.eclipse.birt.data.engine.api.script.IBaseDataSetEventHandler;

import com.ibm.icu.util.ULocale;


public class CombinedOdaDataSetDesign extends OdaDataSetDesign implements ICombinedOdaDataSetDesign
{
private IOdaDataSetDesign masterDesign;
private Set<IOdaDataSetDesign> dataSetDesigns = new HashSet<IOdaDataSetDesign>( );

public CombinedOdaDataSetDesign( IOdaDataSetDesign masterDesign )
{
super( masterDesign.getName( ), masterDesign.getDataSourceName( ) );
this.masterDesign = masterDesign;
addDataSetDesign( masterDesign );
}


public void addDataSetDesign( IOdaDataSetDesign dataSetDesign )
{
dataSetDesigns.add( dataSetDesign );
}

public Set<IOdaDataSetDesign> getDataSetDesigns( )
{
return dataSetDesigns;
}

@Override
public String getQueryText( )
{
return masterDesign.getQueryText( );
}

@Override
public String getExtensionID( )
{
return masterDesign.getExtensionID( );
}

@Override
public String getPrimaryResultSetName( )
{
return masterDesign.getPrimaryResultSetName( );
}

@Override
public Map getPublicProperties( )
{
return masterDesign.getPublicProperties( );
}

@Override
public Map getPrivateProperties( )
{
return masterDesign.getPublicProperties( );
}

@Override
public int getPrimaryResultSetNumber( )
{
return masterDesign.getPrimaryResultSetNumber( );
}

@Override
public String getName( )
{
return masterDesign.getName( );
}

@Override
public int getCacheRowCount( )
{
return masterDesign.getCacheRowCount( );
}

@Override
public boolean needDistinctValue( )
{
return masterDesign.needDistinctValue( );
}

@Override
public String getDataSourceName( )
{
return masterDesign.getDataSourceName( );
}

@Override
public List getComputedColumns( )
{
return masterDesign.getComputedColumns( );
}

@Override
public List getFilters( )
{
return masterDesign.getFilters( );
}

@Override
public List<ISortDefinition> getSortHints( )
{
return masterDesign.getSortHints( );
}

@Override
public List getParameters( )
{
return masterDesign.getParameters( );
}

@Override
public List getResultSetHints( )
{
return masterDesign.getResultSetHints( );
}

@Override
public Collection getInputParamBindings( )
{
return masterDesign.getInputParamBindings( );
}

@Override
public String getBeforeOpenScript( )
{
return masterDesign.getBeforeOpenScript( );
}

@Override
public String getAfterOpenScript( )
{
return masterDesign.getAfterOpenScript( );
}

@Override
public String getOnFetchScript( )
{
return masterDesign.getOnFetchScript( );
}

@Override
public String getBeforeCloseScript( )
{
return masterDesign.getBeforeCloseScript( );
}

@Override
public String getAfterCloseScript( )
{
return masterDesign.getAfterCloseScript( );
}

@Override
public IBaseDataSetEventHandler getEventHandler( )
{
return masterDesign.getEventHandler( );
}

@Override
public void setRowFetchLimit( int max )
{
masterDesign.setRowFetchLimit( max );
}

@Override
public int getRowFetchLimit( )
{
return masterDesign.getRowFetchLimit( );
}

@Override
public ULocale getCompareLocale( )
{
return masterDesign.getCompareLocale( );
}

@Override
public String getNullsOrdering( )
{
return masterDesign.getNullsOrdering( );
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ public interface IDataSetInstanceHandle extends IJavascriptContext
*
* @return The static query text for execution.
*/
String getQueryText( ) throws BirtException;
String getQueryText( );

/**
* Sets the query text of the data set.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package org.eclipse.birt.data.engine.impl;

import java.util.Set;

import org.eclipse.birt.data.engine.api.IBaseDataSetDesign;
import org.eclipse.birt.data.engine.api.ICombinedOdaDataSetDesign;
import org.eclipse.birt.data.engine.api.IOdaDataSetDesign;
import org.eclipse.birt.data.engine.core.DataException;


public class CombinedOdaDataSetRuntime extends OdaDataSetRuntime
{
private DataSetRuntime[] dataSetRuntimes;

public CombinedOdaDataSetRuntime( ICombinedOdaDataSetDesign dataSet,
IQueryExecutor executor, DataEngineSession session ) throws DataException
{
this( ( IOdaDataSetDesign ) dataSet, executor, session );
}

private CombinedOdaDataSetRuntime( IOdaDataSetDesign dataSet,
IQueryExecutor executor, DataEngineSession session ) throws DataException
{
super( dataSet, executor, session );
ICombinedOdaDataSetDesign design = ( ICombinedOdaDataSetDesign ) dataSet;
Set<IOdaDataSetDesign> childDesigns = design.getDataSetDesigns( );
dataSetRuntimes = new DataSetRuntime[ childDesigns.size( ) ];
int i = 0;
for ( IBaseDataSetDesign childDesign : childDesigns )
{
dataSetRuntimes[i++] = DataSetRuntime.newInstance( childDesign, queryExecutor, session );
}
}

public String getQueryText( String dataSetName )
{
for ( DataSetRuntime dataSetRuntime : dataSetRuntimes )
{
if ( dataSetRuntime.getName( ).equals( dataSetName ) )
{
return dataSetRuntime.getQueryText( );
}
}
return null;
}

@Override
public void beforeOpen() throws DataException
{
for ( DataSetRuntime dataSetRuntime : dataSetRuntimes )
{
dataSetRuntime.beforeOpen( );
}
}

@Override
public void beforeClose() throws DataException
{
for ( DataSetRuntime dataSetRuntime : dataSetRuntimes )
{
dataSetRuntime.beforeClose( );
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@

import org.eclipse.birt.core.exception.BirtException;
import org.eclipse.birt.data.engine.api.IBaseDataSetDesign;
import org.eclipse.birt.data.engine.api.ICombinedOdaDataSetDesign;
import org.eclipse.birt.data.engine.api.IJointDataSetDesign;
import org.eclipse.birt.data.engine.api.IOdaDataSetDesign;
import org.eclipse.birt.data.engine.api.IParameterDefinition;
Expand All @@ -48,7 +49,6 @@
import org.eclipse.birt.data.engine.script.JSRowObject;
import org.eclipse.birt.data.engine.script.JSRows;
import org.eclipse.birt.data.engine.script.ScriptDataSetJSEventHandler;
import org.eclipse.datatools.connectivity.oda.spec.QuerySpecification;
import org.mozilla.javascript.Context;
import org.mozilla.javascript.Scriptable;

Expand Down Expand Up @@ -369,10 +369,17 @@ public static DataSetRuntime newInstance( IBaseDataSetDesign dataSetDefn,
DataSetRuntime dataSet = null;
if ( dataSetDefn instanceof IOdaDataSetDesign )
{
IOdaDataSetDesign odaDsetDesign = (IOdaDataSetDesign) dataSetDefn;
dataSet = new OdaDataSetRuntime( odaDsetDesign,
queryExecutor,
session );
if ( dataSetDefn instanceof ICombinedOdaDataSetDesign )
{
dataSet = new CombinedOdaDataSetRuntime(
(ICombinedOdaDataSetDesign) dataSetDefn, queryExecutor,
session );
}
else
{
dataSet = new OdaDataSetRuntime(
(IOdaDataSetDesign) dataSetDefn, queryExecutor, session );
}
}
else if ( dataSetDefn instanceof IScriptDataSetDesign )
{
Expand Down Expand Up @@ -784,7 +791,7 @@ public String getExtensionProperty(String name)
/**
* @see org.eclipse.birt.data.engine.api.script.IDataSetInstanceHandle#getQueryText()
*/
public String getQueryText() throws BirtException
public String getQueryText()
{
// Default implementation: no queryText support
return null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import org.eclipse.birt.data.engine.api.IComputedColumn;
import org.eclipse.birt.data.engine.api.IFilterDefinition;
import org.eclipse.datatools.connectivity.oda.spec.QuerySpecification;
import org.eclipse.datatools.connectivity.oda.spec.basequery.AtomicQuery;


public interface IQueryOptimizeHints
Expand Down Expand Up @@ -39,4 +40,6 @@ public interface IQueryOptimizeHints
public Map<String, List<Integer>> getPushedDownDataSetFilters( );

public List<IFilterDefinition> getFilterNeededMerge( );

public String getDataSetForAtomicQuery( AtomicQuery query );
}
Loading

0 comments on commit 49ecb02

Please sign in to comment.