Skip to content

Commit

Permalink
Minor Interface changes and refactoring to support IV for datamodel b…
Browse files Browse the repository at this point in the history
…ased designs
  • Loading branch information
rvinjamu authored and ravikirankatneni committed Feb 19, 2018
1 parent 0c9b7fc commit 5573830
Show file tree
Hide file tree
Showing 17 changed files with 193 additions and 70 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1397,6 +1397,83 @@ else if ( clazz == Object.class )
// any other types are not recognized nor supported;
return DataType.UNKNOWN_TYPE;
}

public static Class fromApiDataTypeToJavaClass( int apiDataType )
{
/*
if ( clazz == null )
return DataType.UNKNOWN_TYPE;
if ( clazz == DataType.AnyType.class )
return DataType.ANY_TYPE;
else if ( Integer.class.isAssignableFrom( clazz ) )
return DataType.INTEGER_TYPE;
else if ( Double.class.isAssignableFrom( clazz ) )
return DataType.DOUBLE_TYPE;
else if ( String.class.isAssignableFrom( clazz ) )
return DataType.STRING_TYPE;
else if ( BigDecimal.class.isAssignableFrom( clazz ) )
return DataType.DECIMAL_TYPE;
else if ( clazz == java.sql.Date.class )
return DataType.SQL_DATE_TYPE;
else if ( clazz == java.sql.Time.class )
return DataType.SQL_TIME_TYPE;
else if ( Date.class.isAssignableFrom( clazz ) )
return DataType.DATE_TYPE;
else if ( byte[].class.isAssignableFrom( clazz ) )
return DataType.BINARY_TYPE;
else if ( Clob.class.isAssignableFrom( clazz )
|| clazz.getName( )
.equals( "org.eclipse.datatools.connectivity.oda.IClob" ) )
return DataType.STRING_TYPE;
else if ( Blob.class.isAssignableFrom( clazz )
|| clazz.getName( )
.equals( "org.eclipse.datatools.connectivity.oda.IBlob" ) )
return DataType.BLOB_TYPE;
else if ( clazz == Boolean.class )
return DataType.BOOLEAN_TYPE;
else if ( clazz == Object.class )
return DataType.JAVA_OBJECT_TYPE;
*/

switch ( apiDataType )
{
case DataType.ANY_TYPE:
return DataType.AnyType.class;
case DataType.INTEGER_TYPE:
return Integer.class;
case DataType.DOUBLE_TYPE:
return Double.class;
case DataType.STRING_TYPE:
return String.class;
case DataType.DECIMAL_TYPE:
return BigDecimal.class;
case DataType.SQL_DATE_TYPE:
return java.sql.Date.class;
case DataType.SQL_TIME_TYPE:
return java.sql.Time.class;
case DataType.DATE_TYPE:
return java.util.Date.class;
case DataType.BINARY_TYPE:
return byte[].class;
case DataType.BOOLEAN_TYPE:
return Boolean.class;
case DataType.JAVA_OBJECT_TYPE:
return Object.class;
case DataType.BLOB_TYPE:
try
{
Class c = Class.forName("org.eclipse.datatools.connectivity.oda.IBlob");
return c;
}catch(Exception exp)
{

}
default:
return DataType.AnyType.class;
}

}

/**
* Converts an ODA data type code to its
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,14 @@ public class DataEngineContext

public final static int QUERY_ID_BASED_VERSIONING_STREAM = 130;

public final static int DATAMODEL_TABULAR_CURSOR_DATA_STREAM = 131;

public final static int DATAMODEL_TABULAR_CURSOR_INDEX_STREAM = 132;

public final static int DATAMODEL_TABULAR_CURSOR_GROUP_INFO_STREAM = 133;

public final static int DATAMODEL_IV_STREAM = 134;

private static Logger logger = Logger.getLogger( DataEngineContext.class.getName( ) );

private ScriptContext scriptContext;
Expand Down Expand Up @@ -767,7 +775,18 @@ public static String getPath( String streamID, String subStreamID, int streamTyp
break;
case QUERY_ID_BASED_VERSIONING_STREAM:
return "/DataEngine/QueryIdBasedVersioningStream";

case DATAMODEL_TABULAR_CURSOR_DATA_STREAM:
relativePath = "TabularCursorData";
break;
case DATAMODEL_TABULAR_CURSOR_INDEX_STREAM:
relativePath = "TabularCursorDataIndex";
break;
case DATAMODEL_TABULAR_CURSOR_GROUP_INFO_STREAM:
relativePath = "TabularCursorDataRowId2BreakGroupLevel";
break;
case DATAMODEL_IV_STREAM:
relativePath = "IV";
break;
default :
assert false; // impossible
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,5 +39,7 @@ public interface IBaseQueryResults extends INamedObject
* @throws BirtException
*/
public void close( ) throws BirtException;

public void setID(String queryResultsId);

}
Original file line number Diff line number Diff line change
Expand Up @@ -144,4 +144,10 @@ public String getName( )
return name;
}

@Override
public void setID( String queryResultsId )
{
throw new UnsupportedOperationException();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -333,7 +333,7 @@ public String getID( )
/**
* @param queryResultID
*/
private void setID( String queryResultID )
public void setID( String queryResultID )
{
this.queryResultID = queryResultID;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ protected IQueryResults produceQueryResults(
IBaseQueryResults outerResults, Scriptable scope )
throws DataException
{
QueryResults queryResults = preparedQuery.doPrepare( outerResults,
IQueryResults queryResults = preparedQuery.doPrepare( outerResults,
scope,
newExecutor( ),
this );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,7 @@ protected IQueryResults produceQueryResults(
IBaseQueryResults outerResults, Scriptable scope )
throws DataException
{
QueryResults queryResults = preparedQuery.doPrepare( outerResults,
IQueryResults queryResults = preparedQuery.doPrepare( outerResults,
scope,
newExecutor( ),
this );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ protected IQueryResults produceQueryResults(
IBaseQueryResults outerResults, Scriptable scope )
throws DataException
{
QueryResults queryResults = preparedQuery.doPrepare( outerResults,
IQueryResults queryResults = preparedQuery.doPrepare( outerResults,
scope,
newExecutor( ),
this );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
import org.eclipse.birt.data.engine.api.IExpressionCollection;
import org.eclipse.birt.data.engine.api.IGroupDefinition;
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.ISubqueryDefinition;
import org.eclipse.birt.data.engine.api.querydefn.BaseExpression;
Expand Down Expand Up @@ -438,7 +439,7 @@ private IConditionalExpression transformConditionalExpression(
* @param executor
* @parem dataSourceQuery
*/
public QueryResults doPrepare( IBaseQueryResults outerResults,
public IQueryResults doPrepare( IBaseQueryResults outerResults,
Scriptable scope, QueryExecutor executor,
PreparedDataSourceQuery dataSourceQuery ) throws DataException
{
Expand All @@ -462,14 +463,30 @@ public QueryResults doPrepare( IBaseQueryResults outerResults,
logger.finer( "Start to prepare the execution." );
executor.prepareExecution( outerResults, scope );
logger.finer( "Finish preparing the execution." );
QueryResults result = new QueryResults( new ServiceForQueryResults( this.session,

// Give an opportunity to the QueryExecutor to construct and compose the instance of IQueryResults to use.
IQueryResults result = null;

result = executor.buildQueryResults(new ServiceForQueryResults( this.session,
executor.getQueryScope( ),
executor.getNestedLevel( ) + 1,
dataSourceQuery,
queryService,
executor,
this.baseQueryDefn,
this.exprManager ) );
this.exprManager ));

if (result == null)
{
result = new QueryResults( new ServiceForQueryResults( this.session,
executor.getQueryScope( ),
executor.getNestedLevel( ) + 1,
dataSourceQuery,
queryService,
executor,
this.baseQueryDefn,
this.exprManager ));
}
//Only the host query need the cache id.
if( this.baseQueryDefn.cacheQueryResults() && this.baseQueryDefn instanceof IQueryDefinition )
{
Expand Down Expand Up @@ -506,7 +523,7 @@ int getSubQueryLevel( String subQueryName )
* @return
* @throws DataException
*/
QueryResults execSubquery( IResultIterator iterator, IQueryExecutor executor, String subQueryName,
IQueryResults execSubquery( IResultIterator iterator, IQueryExecutor executor, String subQueryName,
Scriptable subScope ) throws DataException
{
assert subQueryName != null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -134,16 +134,19 @@ public static IPreparedQuery newInstance( DataEngineImpl dataEngine,
contextVisitor );
}

IPreparedQuery preparedQuery;
IPreparedQuery preparedQuery = null;
IBaseDataSetDesign dset = cloneDataSetDesign( dataEngine.getDataSetDesign( queryDefn.getDataSetName( ) ) , appContext);

if ( queryDefn.getQueryResultsID( ) != null && !dataEngine.getContext( ).isDashBoardEnabled( ) )
{
preparedQuery = QueryPrepareUtil.preparePresentationQuery( dataEngine,
if (dataEngine.getSession( ).getEngineContext( ).getMode( ) == DataEngineContext.MODE_PRESENTATION)
{
preparedQuery = QueryPrepareUtil.preparePresentationQuery( dataEngine,
queryDefn,
dset,
appContext,
contextVisitor );
}
if ( preparedQuery != null )
return preparedQuery;

Expand All @@ -162,8 +165,11 @@ public static IPreparedQuery newInstance( DataEngineImpl dataEngine,
? queryDefn.getQueryExecutionHints( )
.getTargetGroupInstances( ) : null );
}

return newIVInstance( dataEngine, queryDefn, appContext );
return QueryPrepareUtil.prepareIVGenerationQuery( dataEngine,
queryDefn,
dset,
appContext,
contextVisitor );
}

if( dset!= null )
Expand Down Expand Up @@ -655,61 +661,7 @@ public Object run()
return adaptedDesign;
}

/**
* @param dataEngine
* @param queryDefn
* @return
* @throws DataException
*/
private static IPreparedQuery newIVInstance( DataEngineImpl dataEngine,
IQueryDefinition queryDefn, Map appContext ) throws DataException
{
String queryResultID = queryDefn.getQueryResultsID( );

String rootQueryResultID = QueryResultIDUtil.get1PartID( queryResultID );
String parentQueryResultID = null;
if ( rootQueryResultID != null )
parentQueryResultID = QueryResultIDUtil.get2PartID( queryResultID );
else
rootQueryResultID = queryResultID;

QueryResultInfo queryResultInfo = new QueryResultInfo( rootQueryResultID,
parentQueryResultID,
null,
null,
-1 );
RDLoad rdLoad = RDUtil.newLoad( dataEngine.getSession( ).getTempDir( ), dataEngine.getContext( ),
queryResultInfo );

//Please Note We should use parent scope here, for the new query should be compared to the query being executed
//immediately behind it rather than the root query.
IBaseQueryDefinition previousQueryDefn = rdLoad.loadQueryDefn( StreamManager.ROOT_STREAM,
StreamManager.PARENT_SCOPE );

if( QueryCompUtil.isIVQueryDefnEqual( dataEngine.getContext( ).getMode( ), previousQueryDefn, queryDefn ))
{
return new DummyPreparedQuery( queryDefn,
dataEngine.getSession( ),
dataEngine.getContext( ),
PLSUtil.isPLSEnabled( queryDefn )? queryDefn.getQueryExecutionHints( )
.getTargetGroupInstances( ) : null );
}
else if ( NoRecalculateQueryUtil.isOptimizableIVQuery( previousQueryDefn, queryDefn, queryResultID ))
{
return NoRecalculateQueryUtil.getPreparedIVQuery( dataEngine, previousQueryDefn, queryDefn, queryResultID, appContext );
}
else
{
if ( queryDefn.isSummaryQuery( ) )
{
IResultClass rsMeta = rdLoad.loadResultClass( );
populateSummaryBinding( queryDefn, rsMeta );
}
return new PreparedIVDataSourceQuery( dataEngine, queryDefn, QueryContextVisitorUtil.createQueryContextVisitor( queryDefn,
appContext ) );
}
}

/**
* Whether query is running based on the result set of report document or
* the data set.
Expand Down Expand Up @@ -759,7 +711,8 @@ private static int runQueryOnRS( DataEngineImpl dataEngine,
}
}

private static void populateSummaryBinding( IQueryDefinition queryDefn, IResultClass rsMeta ) throws DataException

public static void populateSummaryBinding( IQueryDefinition queryDefn, IResultClass rsMeta ) throws DataException
{
Set<String> nameSet = new HashSet<String>( );

Expand Down Expand Up @@ -813,6 +766,7 @@ private static void populateSummaryBinding( IQueryDefinition queryDefn, IResultC
}
}


/**
* @throws DataException
*
Expand Down Expand Up @@ -1247,4 +1201,6 @@ else if ( configValue instanceof String )
}
return null;
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ int getGroupLevel( )
* @return
* @throws DataException
*/
QueryResults execute( IResultIterator parentIterator, IQueryExecutor parentExecutor, Scriptable scope )
IQueryResults execute( IResultIterator parentIterator, IQueryExecutor parentExecutor, Scriptable scope )
throws DataException
{
logger.logp( Level.FINER,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,9 @@
import org.eclipse.birt.data.engine.api.IDataScriptEngine;
import org.eclipse.birt.data.engine.api.IFilterDefinition;
import org.eclipse.birt.data.engine.api.IGroupDefinition;
import org.eclipse.birt.data.engine.api.IPreparedQuery;
import org.eclipse.birt.data.engine.api.IQueryDefinition;
import org.eclipse.birt.data.engine.api.IQueryResults;
import org.eclipse.birt.data.engine.api.IResultMetaData;
import org.eclipse.birt.data.engine.api.IScriptExpression;
import org.eclipse.birt.data.engine.api.ISortDefinition;
Expand Down Expand Up @@ -1499,4 +1501,20 @@ public DataEngineSession getSession()
{
return this.session;
}

/**
*
* @param serviceForQueryResults
* @param scope
* @param level
* @param preparedQuery
* @param queryService
* @param queryDefn
* @param exprManager
* @return
*/
public IQueryResults buildQueryResults(IServiceForQueryResults serviceForQueryResults)
{
return null;
}
}
Loading

0 comments on commit 5573830

Please sign in to comment.