/** * @param meta * @throws BirtException */ private void addResultSetColumn(DataSetHandle dataSetHandle, IResultMetaData meta) throws BirtException { if (meta == null || !(dataSetHandle instanceof OdaDataSetHandle)) return; Set computedColumnNameSet = new HashSet(); Iterator computedIter = dataSetHandle.computedColumnsIterator(); while (computedIter.hasNext()) { ComputedColumnHandle handle = (ComputedColumnHandle) computedIter.next(); computedColumnNameSet.add(handle.getName()); } HashSet orgColumnNameSet = new HashSet(); HashSet uniqueColumnNameSet = new HashSet(); PropertyHandle handle = dataSetHandle.getPropertyHandle(DataSetHandle.RESULT_SET_PROP); for (int i = 1; i <= meta.getColumnCount(); i++) { OdaResultSetColumn rsColumn = new OdaResultSetColumn(); String uniqueName; if (!computedColumnNameSet.contains(meta.getColumnName(i))) { uniqueName = MetaDataPopulator.getUniqueName( orgColumnNameSet, uniqueColumnNameSet, meta.getColumnName(i), i - 1); rsColumn.setColumnName(uniqueName); if (meta.getColumnType(i) != DataType.ANY_TYPE) rsColumn.setDataType(DataAdapterUtil.adapterToModelDataType(meta.getColumnType(i))); rsColumn.setNativeName(meta.getColumnName(i)); rsColumn.setPosition(Integer.valueOf(i)); handle.addItem(rsColumn); uniqueColumnNameSet.add(uniqueName); } } }
/** * @param dataSetName * @return * @throws BirtException */ private IResultMetaData getRealMetaData(DataSetHandle dataSetHandle) throws BirtException { IResultMetaData metaData = MetaDataPopulator.retrieveResultMetaData(dataSetHandle); if (metaData == null) metaData = getRuntimeMetaData(dataSetHandle); if (metaData != null && !(dataSetHandle instanceof ScriptDataSetHandle)) clearUnusedData(dataSetHandle, metaData); return metaData; }
private IResultMetaData getRuntimeMetaData(DataSetHandle dataSetHandle) throws BirtException { Map dataSetBindingMap = new HashMap(); Map dataSourceBindingMap = new HashMap(); DataSetHandle handle = null; if (sessionContext.getModuleHandle() != null && sessionContext.getModuleHandle().getAllDataSets() != null) { for (Object o : sessionContext.getModuleHandle().getAllDataSets()) { DataSetHandle dsh = (DataSetHandle) o; if (dsh.getQualifiedName().equals(dataSetHandle.getQualifiedName())) { handle = dsh; break; } } } // First clear all property bindings so that the data set can be executed against design time // properties clearPropertyBindingMap(handle, dataSetBindingMap, dataSourceBindingMap); try { QueryDefinition query = new QueryDefinition(); query.setDataSetName(dataSetHandle.getQualifiedName()); query.setMaxRows(1); query.setAutoBinding(true); IResultMetaData metaData = new QueryExecutionHelper(dataEngine, modelAdaptor, sessionContext, false, this.session) .executeQuery(query) .getResultMetaData(); addResultSetColumn(dataSetHandle, metaData); if (MetaDataPopulator.needsUseResultHint(dataSetHandle, metaData)) { metaData = new QueryExecutionHelper(dataEngine, modelAdaptor, sessionContext, true, this.session) .executeQuery(query) .getResultMetaData(); } return metaData; } finally { // restore property bindings resetPropertyBinding(handle, dataSetBindingMap, dataSourceBindingMap); } }