User: kz Date: 2008-06-25 12:53:02+0000 Modified: dba/dbaccess/source/ui/querydesign/QueryDesignView.cxx
Log: INTEGRATION: CWS dba30d (1.92.8); FILE MERGED 2008/06/10 06:41:33 fs 1.92.8.4: RESYNC: (1.92-1.93); FILE MERGED 2008/06/02 13:46:11 oj 1.92.8.3: #i90244# handle group by and having 2008/05/29 11:30:21 fs 1.92.8.2: during #i80943#: refactoring: IController now passed around as reference, not as pointer 2008/05/28 11:36:04 oj 1.92.8.1: #i78725# new method for column alias in order by File Changes: Directory: /dba/dbaccess/source/ui/querydesign/ =============================================== File [changed]: QueryDesignView.cxx Url: http://dba.openoffice.org/source/browse/dba/dbaccess/source/ui/querydesign/QueryDesignView.cxx?r1=1.94&r2=1.95 Delta lines: +147 -144 ----------------------- --- QueryDesignView.cxx 2008-06-16 12:33:33+0000 1.94 +++ QueryDesignView.cxx 2008-06-25 12:52:59+0000 1.95 @@ -206,7 +206,7 @@ //------------------------------------------------------------------------------ ::rtl::OUString getTableRange(const OQueryDesignView* _pView,const ::connectivity::OSQLParseNode* _pTableRef) { - Reference< XConnection> xConnection = static_cast<OQueryController*>(_pView->getController())->getConnection(); + Reference< XConnection> xConnection = static_cast<OQueryController&>(_pView->getController()).getConnection(); ::rtl::OUString sTableRange; if ( _pTableRef ) { @@ -279,24 +279,24 @@ } } //------------------------------------------------------------------------------ - ::rtl::OUString ParseCondition( OQueryController* pController + ::rtl::OUString ParseCondition( OQueryController& rController ,const ::connectivity::OSQLParseNode* pCondition ,const ::rtl::OUString _sDecimal ,const ::com::sun::star::lang::Locale& _rLocale ,sal_uInt32 _nStartIndex) { ::rtl::OUString aCondition; - Reference< XConnection> xConnection = pController->getConnection(); + Reference< XConnection> xConnection = rController.getConnection(); if ( xConnection.is() ) { sal_uInt32 nCount = pCondition->count(); for(sal_uInt32 i = _nStartIndex ; i < nCount ; ++i) pCondition->getChild(i)->parseNodeToPredicateStr(aCondition, xConnection, - pController->getNumberFormatter(), + rController.getNumberFormatter(), _rLocale, static_cast<sal_Char>(_sDecimal.toChar()), - &pController->getParser().getContext()); + &rController.getParser().getContext()); } return aCondition; } @@ -346,7 +346,7 @@ return rValue; } - Reference< XConnection> xConnection = static_cast<OQueryController*>(_pView->getController())->getConnection(); + Reference< XConnection> xConnection = static_cast<OQueryController&>(_pView->getController()).getConnection(); Reference< XDatabaseMetaData > xMetaData; if(xConnection.is()) xMetaData = xConnection->getMetaData(); @@ -425,7 +425,7 @@ ::rtl::OUString aTableRange,aColumnName; sal_uInt16 nCntAccount; - ::connectivity::OSQLParseTreeIterator& rParseIter = static_cast<OQueryController*>(_pView->getController())->getParseIterator(); + ::connectivity::OSQLParseTreeIterator& rParseIter = static_cast<OQueryController&>(_pView->getController()).getParseIterator(); rParseIter.getColumnRange( pColumnRef, aColumnName, aTableRange ); if ( aTableRange.getLength() ) @@ -440,13 +440,13 @@ eErrorCode = eColumnNotFound; String sError(ModuleRes(STR_QRY_COLUMN_NOT_FOUND)); sError.SearchAndReplaceAscii("$name$",aColumnName); - _pView->getController()->appendError(SQLException(sError,NULL,getStandardSQLState( SQL_GENERAL_ERROR ),1000,Any())); + _pView->getController().appendError(SQLException(sError,NULL,getStandardSQLState( SQL_GENERAL_ERROR ),1000,Any())); try { - Reference<XDatabaseMetaData> xMeta = _pView->getController()->getConnection()->getMetaData(); + Reference<XDatabaseMetaData> xMeta = _pView->getController().getConnection()->getMetaData(); if ( xMeta.is() && xMeta->supportsMixedCaseQuotedIdentifiers() ) - _pView->getController()->appendError(SQLException(String(ModuleRes(STR_QRY_CHECK_CASESENSITIVE)),NULL,getStandardSQLState( SQL_GENERAL_ERROR ),1000,Any())); + _pView->getController().appendError(SQLException(String(ModuleRes(STR_QRY_CHECK_CASESENSITIVE)),NULL,getStandardSQLState( SQL_GENERAL_ERROR ),1000,Any())); } catch(Exception&) { @@ -526,7 +526,7 @@ { ::rtl::OUString aDBName(pEntryTab->GetComposedName()); - // Reference< XConnection> xConnection = static_cast<OQueryController*>(_pView->getController())->getConnection(); + // Reference< XConnection> xConnection = static_cast<OQueryController&>(_pView->getController()).getConnection(); if( _xConnection.is() ) { try @@ -632,7 +632,7 @@ if ( pEntryConnData->GetJoinType() == INNER_JOIN && !pEntryConnData->isNatural() ) return; - // Reference< XConnection> xConnection = static_cast<OQueryController*>(_pView->getController())->getConnection(); + // Reference< XConnection> xConnection = static_cast<OQueryController&>(_pView->getController()).getConnection(); if(!aJoin.getLength()) { @@ -719,7 +719,7 @@ pNode->getChild(1)->getNodeType() == SQL_NODE_EQUAL)) { String sError(ModuleRes(STR_QRY_JOIN_COLUMN_COMPARE)); - _pView->getController()->appendError(SQLException(sError,NULL,getStandardSQLState( SQL_GENERAL_ERROR ),1000,Any())); + _pView->getController().appendError(SQLException(sError,NULL,getStandardSQLState( SQL_GENERAL_ERROR ),1000,Any())); return eIllegalJoin; } @@ -764,7 +764,7 @@ if(nVis == 1) bAsterix = sal_False; - Reference< XConnection> xConnection = static_cast<OQueryController*>(_pView->getController())->getConnection(); + Reference< XConnection> xConnection = static_cast<OQueryController&>(_pView->getController()).getConnection(); if(!xConnection.is()) return aFieldListStr; @@ -867,14 +867,14 @@ { nMaxCriteria = ::std::max<sal_uInt16>(nMaxCriteria,(sal_uInt16)(*aIter)->GetCriteria().size()); } - Reference< XConnection> xConnection = static_cast<OQueryController*>(_pView->getController())->getConnection(); + Reference< XConnection> xConnection = static_cast<OQueryController&>(_pView->getController()).getConnection(); if(!xConnection.is()) return FALSE; try { Reference< XDatabaseMetaData > xMetaData = xConnection->getMetaData(); ::rtl::OUString aQuote = xMetaData->getIdentifierQuoteString(); - const IParseContext& rContext = static_cast<OQueryController*>(_pView->getController())->getParser().getContext(); + const IParseContext& rContext = static_cast<OQueryController&>(_pView->getController()).getParser().getContext(); for (sal_uInt16 i=0 ; i < nMaxCriteria ; i++) { @@ -930,8 +930,8 @@ ::rtl::OUString aTmp = aCriteria; ::rtl::OUString aErrorMsg; Reference<XPropertySet> xColumn; - ::connectivity::OSQLParseNode* pParseNode = _pView->getPredicateTreeFromEntry(pEntryField,aTmp,aErrorMsg,xColumn); - if (pParseNode) + ::std::auto_ptr< ::connectivity::OSQLParseNode> pParseNode(_pView->getPredicateTreeFromEntry(pEntryField,aTmp,aErrorMsg,xColumn)); + if (pParseNode.get()) { if (bMulti && !(pEntryField->isOtherFunction() || (aFieldName.toChar() == '*'))) pParseNode->replaceNodeValue(pEntryField->GetAlias(),aFieldName); @@ -945,7 +945,6 @@ sal_False, !pEntryField->isOtherFunction()); aHavingStr = sHavingStr; - delete pParseNode; } else aHavingStr += aCriteria; @@ -962,8 +961,8 @@ ::rtl::OUString aTmp = aCriteria; ::rtl::OUString aErrorMsg; Reference<XPropertySet> xColumn; - ::connectivity::OSQLParseNode* pParseNode = _pView->getPredicateTreeFromEntry(pEntryField,aTmp,aErrorMsg,xColumn); - if (pParseNode) + ::std::auto_ptr< ::connectivity::OSQLParseNode> pParseNode( _pView->getPredicateTreeFromEntry(pEntryField,aTmp,aErrorMsg,xColumn)); + if (pParseNode.get()) { if (bMulti && !(pEntryField->isOtherFunction() || (aFieldName.toChar() == '*'))) pParseNode->replaceNodeValue(pEntryField->GetAlias(),aFieldName); @@ -974,7 +973,6 @@ sal_False, !pEntryField->isOtherFunction() ); aWhereStr = aWhere; - delete pParseNode; } else { @@ -1031,7 +1029,8 @@ sal_Bool bMulti, ::rtl::OUString& _rsRet) { - Reference< XConnection> xConnection = static_cast<OQueryController*>(_pView->getController())->getConnection(); + const OQueryController& rController = static_cast<OQueryController&>(_pView->getController()); + Reference< XConnection> xConnection = rController.getConnection(); if ( !xConnection.is() ) return eNoConnection; @@ -1041,6 +1040,7 @@ ::rtl::OUString aWorkStr; try { + const bool bColumnAliasInOrderBy = rController.getSdbMetaData().supportsColumnAliasInOrderBy(); Reference< XDatabaseMetaData > xMetaData = xConnection->getMetaData(); ::rtl::OUString aQuote = xMetaData->getIdentifierQuoteString(); // * darf keine Filter enthalten : habe ich die entsprechende Warnung schon angezeigt ? @@ -1066,7 +1066,7 @@ continue; } - if ( pEntryField->GetFieldAlias().getLength() ) + if ( bColumnAliasInOrderBy && pEntryField->GetFieldAlias().getLength() ) { aWorkStr += ::dbtools::quoteName(aQuote, pEntryField->GetFieldAlias()); } @@ -1107,7 +1107,7 @@ if ( aWorkStr.getLength() ) { - sal_Int32 nMaxOrder = xMetaData->getMaxColumnsInOrderBy(); + const sal_Int32 nMaxOrder = xMetaData->getMaxColumnsInOrderBy(); String sToken(aWorkStr); if ( nMaxOrder && nMaxOrder < sToken.GetTokenCount(',') ) eErrorCode = eStatementTooLong; @@ -1264,17 +1264,18 @@ //------------------------------------------------------------------------------ ::rtl::OUString GenerateGroupBy(const OQueryDesignView* _pView,OTableFields& _rFieldList, sal_Bool bMulti ) { - - OQueryController* pController = static_cast<OQueryController*>(_pView->getController()); - Reference< XConnection> xConnection = pController->getConnection(); + OQueryController& rController = static_cast<OQueryController&>(_pView->getController()); + const Reference< XConnection> xConnection = rController.getConnection(); if(!xConnection.is()) return ::rtl::OUString(); + ::std::map< rtl::OUString,bool> aGroupByNames; + ::rtl::OUString aGroupByStr; try { - Reference< XDatabaseMetaData > xMetaData = xConnection->getMetaData(); - ::rtl::OUString aQuote = xMetaData->getIdentifierQuoteString(); + const Reference< XDatabaseMetaData > xMetaData = xConnection->getMetaData(); + const ::rtl::OUString aQuote = xMetaData->getIdentifierQuoteString(); OTableFields::iterator aIter = _rFieldList.begin(); for(;aIter != _rFieldList.end();++aIter) @@ -1283,34 +1284,40 @@ if ( pEntryField->IsGroupBy() ) { DBG_ASSERT(pEntryField->GetField().getLength(),"Kein FieldName vorhanden!;-("); - aGroupByStr += quoteTableAlias(bMulti,pEntryField->GetAlias(),aQuote); + ::rtl::OUString sGroupByPart = quoteTableAlias(bMulti,pEntryField->GetAlias(),aQuote); // only quote the field name when it isn't calculated if ( pEntryField->isNoneFunction() ) - aGroupByStr += ::dbtools::quoteName(aQuote, pEntryField->GetField()); + { + sGroupByPart += ::dbtools::quoteName(aQuote, pEntryField->GetField()); + } else { ::rtl::OUString aTmp = pEntryField->GetField(); ::rtl::OUString aErrorMsg; Reference<XPropertySet> xColumn; - ::connectivity::OSQLParseNode* pParseNode = _pView->getPredicateTreeFromEntry(pEntryField,aTmp,aErrorMsg,xColumn); - if (pParseNode) + ::std::auto_ptr< ::connectivity::OSQLParseNode> pParseNode(_pView->getPredicateTreeFromEntry(pEntryField,aTmp,aErrorMsg,xColumn)); + if (pParseNode.get()) { ::rtl::OUString sGroupBy; pParseNode->parseNodeToStr( sGroupBy, xConnection, - &pController->getParser().getContext(), + &rController.getParser().getContext(), sal_False, !pEntryField->isOtherFunction()); - aGroupByStr += sGroupBy; - delete pParseNode; + sGroupByPart += sGroupBy; } else - aGroupByStr += pEntryField->GetField(); + sGroupByPart += pEntryField->GetField(); } + if ( aGroupByNames.find(sGroupByPart) == aGroupByNames.end() ) + { + aGroupByNames.insert(::std::map< rtl::OUString,bool>::value_type(sGroupByPart,true)); + aGroupByStr += sGroupByPart; aGroupByStr += ::rtl::OUString(','); } } + } if ( aGroupByStr.getLength() ) { aGroupByStr = aGroupByStr.replaceAt(aGroupByStr.getLength()-1,1, ::rtl::OUString(' ') ); @@ -1449,11 +1456,11 @@ sal_Bool bHaving, bool bAddOrOnOneLine) { - ::com::sun::star::lang::Locale aLocale = _pView->getLocale(); - ::rtl::OUString sDecimal = _pView->getDecimalSeparator(); + const ::com::sun::star::lang::Locale aLocale = _pView->getLocale(); + const ::rtl::OUString sDecimal = _pView->getDecimalSeparator(); // ich werde ein paar Mal einen gecasteten Pointer auf meinen ::com::sun::star::sdbcx::Container brauchen - OQueryController* pController = static_cast<OQueryController*>(_pView->getController()); + OQueryController& rController = static_cast<OQueryController&>(_pView->getController()); SqlParseError eErrorCode = eOk; // Runde Klammern @@ -1482,24 +1489,24 @@ { ::rtl::OUString aColumnName; ::rtl::OUString aCondition; - Reference< XConnection> xConnection = pController->getConnection(); + Reference< XConnection> xConnection = rController.getConnection(); if ( xConnection.is() ) { Reference< XDatabaseMetaData > xMetaData = xConnection->getMetaData(); // the international doesn't matter I have a string pCondition->parseNodeToPredicateStr(aCondition, xConnection, - pController->getNumberFormatter(), + rController.getNumberFormatter(), aLocale, static_cast<sal_Char>(sDecimal.toChar()), - &pController->getParser().getContext()); + &rController.getParser().getContext()); pValueExp->parseNodeToPredicateStr( aColumnName, xConnection, - pController->getNumberFormatter(), + rController.getNumberFormatter(), aLocale, static_cast<sal_Char>(sDecimal.toChar()), - &pController->getParser().getContext()); + &rController.getParser().getContext()); // don't display the column name aCondition = aCondition.copy(aColumnName.getLength()); @@ -1530,7 +1537,7 @@ { eErrorCode = eNoColumnInLike; String sError(ModuleRes(STR_QRY_LIKE_LEFT_NO_COLUMN)); - _pView->getController()->appendError(SQLException(sError,NULL,getStandardSQLState( SQL_GENERAL_ERROR ),1000,Any())); + _pView->getController().appendError(SQLException(sError,NULL,getStandardSQLState( SQL_GENERAL_ERROR ),1000,Any())); } } else if( SQL_ISRULEOR2(pCondition,test_for_null,in_predicate) @@ -1548,7 +1555,7 @@ else if ( SQL_ISRULE(pCondition->getChild(0), column_ref ) ) { // parse condition - ::rtl::OUString sCondition = ParseCondition(pController,pCondition,sDecimal,aLocale,1); + ::rtl::OUString sCondition = ParseCondition(rController,pCondition,sDecimal,aLocale,1); OTableFieldDescRef aDragLeft = new OTableFieldDesc(); if ( eOk == ( eErrorCode = FillDragInfo(_pView,pCondition->getChild(0),aDragLeft)) ) { @@ -1562,7 +1569,7 @@ { // Funktions-Bedingung parsen - ::rtl::OUString aCondition = ParseCondition(pController,pCondition,sDecimal,aLocale,0); + ::rtl::OUString aCondition = ParseCondition(rController,pCondition,sDecimal,aLocale,0); OTableFieldDescRef aDragLeft = new OTableFieldDesc(); aDragLeft->SetField(aCondition); @@ -1584,7 +1591,7 @@ bool bAddOrOnOneLine) { SqlParseError eErrorCode = eOk; - OQueryController* pController = static_cast<OQueryController*>(_pView->getController()); + OQueryController& rController = static_cast<OQueryController&>(_pView->getController()); OSQLParseNode* pFunction = pCondition->getChild(0); @@ -1596,29 +1603,29 @@ OTableFieldDescRef aDragLeft = new OTableFieldDesc(); ::rtl::OUString aColumnName; - Reference< XConnection> xConnection = pController->getConnection(); + Reference< XConnection> xConnection = rController.getConnection(); if(xConnection.is()) { Reference< XDatabaseMetaData > xMetaData = xConnection->getMetaData(); pCondition->parseNodeToPredicateStr(aCondition, xConnection, - pController->getNumberFormatter(), + rController.getNumberFormatter(), _pView->getLocale(), static_cast<sal_Char>(_pView->getDecimalSeparator().toChar()), - &pController->getParser().getContext()); + &rController.getParser().getContext()); pFunction->parseNodeToStr( aColumnName, xConnection, - &pController->getParser().getContext(), + &rController.getParser().getContext(), sal_True, sal_True); // quote is to true because we need quoted elements inside the function // i75557 //pFunction->parseNodeToPredicateStr(aColumnName, // xConnection, - // pController->getNumberFormatter(), + // rController.getNumberFormatter(), // _pView->getLocale(), // static_cast<sal_Char>(_pView->getDecimalSeparator().toChar()), - // &pController->getParser().getContext()); + // &rController.getParser().getContext()); // don't display the column name aCondition = aCondition.copy(aColumnName.getLength()); aCondition = aCondition.trim(); @@ -1651,7 +1658,7 @@ ::rtl::OUString sParameterValue; pParamNode->parseNodeToStr( sParameterValue, xConnection, - &pController->getParser().getContext()); + &rController.getParser().getContext()); nFunctionType |= FKT_NUMERIC; aDragLeft->SetField(sParameterValue); eErrorCode = eOk; @@ -1684,7 +1691,7 @@ ,bool bAddOrOnOneLine) { SqlParseError eErrorCode = eOk; - OQueryController* pController = static_cast<OQueryController*>(_pView->getController()); + OQueryController& rController = static_cast<OQueryController&>(_pView->getController()); DBG_ASSERT(SQL_ISRULE( pCondition, comparison_predicate),"ComparisonPredicate: pCondition ist kein ComparisonPredicate"); if ( SQL_ISRULE(pCondition->getChild(0), column_ref ) @@ -1730,7 +1737,7 @@ i++; // Bedingung parsen - aCondition = ParseCondition(pController + aCondition = ParseCondition(rController ,pCondition ,_pView->getDecimalSeparator() ,_pView->getLocale() @@ -1772,17 +1779,17 @@ } // go backward - Reference< XConnection> xConnection = pController->getConnection(); + Reference< XConnection> xConnection = rController.getConnection(); if(xConnection.is()) { Reference< XDatabaseMetaData > xMetaData = xConnection->getMetaData(); for (; i >= 0; i--) pCondition->getChild(i)->parseNodeToPredicateStr(aCondition, xConnection, - pController->getNumberFormatter(), + rController.getNumberFormatter(), _pView->getLocale(), static_cast<sal_Char>(_pView->getDecimalSeparator().toChar()), - &pController->getParser().getContext()); + &rController.getParser().getContext()); } } // else ??? @@ -1811,21 +1818,21 @@ ::connectivity::OSQLParseNode *pLhs = pCondition->getChild(0); ::connectivity::OSQLParseNode *pRhs = pCondition->getChild(2); // Feldnamen - Reference< XConnection> xConnection = pController->getConnection(); + Reference< XConnection> xConnection = rController.getConnection(); if(xConnection.is()) { pLhs->parseNodeToStr(aName, xConnection, - &pController->getParser().getContext(), + &rController.getParser().getContext(), sal_True); // Kriterium aCondition = pCondition->getChild(1)->getTokenValue(); pRhs->parseNodeToPredicateStr(aCondition, xConnection, - pController->getNumberFormatter(), + rController.getNumberFormatter(), _pView->getLocale(), static_cast<sal_Char>(_pView->getDecimalSeparator().toChar()), - &pController->getParser().getContext()); + &rController.getParser().getContext()); } OTableFieldDescRef aDragLeft = new OTableFieldDesc(); @@ -1864,7 +1871,7 @@ { // Tabellennamen zusammen setzen - ::connectivity::OSQLParseTreeIterator& rParseIter = static_cast<OQueryController*>(_pView->getController())->getParseIterator(); + ::connectivity::OSQLParseTreeIterator& rParseIter = static_cast<OQueryController&>(_pView->getController()).getParseIterator(); rParseIter.getColumnRange( pColumnRef, aColumnName, aTableRange ); sal_Bool bFound(sal_False); @@ -1999,8 +2006,8 @@ void insertUnUsedFields(OQueryDesignView* _pView,OSelectionBrowseBox* _pSelectionBrw) { // now we have to insert the fields which aren't in the statement - OQueryController* pController = static_cast<OQueryController*>(_pView->getController()); - OTableFields& rUnUsedFields = pController->getUnUsedFields(); + OQueryController& rController = static_cast<OQueryController&>(_pView->getController()); + OTableFields& rUnUsedFields = rController.getUnUsedFields(); for(OTableFields::iterator aIter = rUnUsedFields.begin();aIter != rUnUsedFields.end();++aIter) if(_pSelectionBrw->InsertField(*aIter,BROWSER_INVALIDID,sal_False,sal_False).isValid()) (*aIter) = NULL; @@ -2011,14 +2018,14 @@ { SqlParseError eErrorCode = eOk; - OQueryController* pController = static_cast<OQueryController*>(_pView->getController()); + OQueryController& rController = static_cast<OQueryController&>(_pView->getController()); _pSelectionBrw->PreFill(); - _pSelectionBrw->SetReadOnly(pController->isReadOnly()); + _pSelectionBrw->SetReadOnly(rController.isReadOnly()); _pSelectionBrw->Fill(); - ::connectivity::OSQLParseTreeIterator& aIterator = pController->getParseIterator(); + ::connectivity::OSQLParseTreeIterator& aIterator = rController.getParseIterator(); const ::connectivity::OSQLParseNode* pParseTree = aIterator.getParseTree(); do @@ -2030,7 +2037,7 @@ break; } - if ( !pController->isEsacpeProcessing() ) // not allowed in this mode + if ( !rController.isEsacpeProcessing() ) // not allowed in this mode { eErrorCode = eNativeMode; break; @@ -2042,7 +2049,7 @@ break; } - Reference< XConnection> xConnection = pController->getConnection(); + Reference< XConnection> xConnection = rController.getConnection(); if ( !xConnection.is() ) { DBG_ERROR( "InitFromParseNodeImpl: no connection? no connection!" ); @@ -2126,8 +2133,8 @@ // check if we have a distinct statement if(SQL_ISTOKEN(pParseTree->getChild(1),DISTINCT)) { - pController->setDistinct(sal_True); - pController->InvalidateFeature(SID_QUERY_DISTINCT_VALUES); + rController.setDistinct(sal_True); + rController.InvalidateFeature(SID_QUERY_DISTINCT_VALUES); } if ( (eErrorCode = InstallFields(_pView,pParseTree, pTableView->GetTabWinMap())) == eOk ) { @@ -2156,7 +2163,7 @@ while ( false ); // Durch das Neuerzeugen wurden wieder Undo-Actions in den Manager gestellt - pController->getUndoMgr()->Clear(); + rController.getUndoMgr()->Clear(); _pSelectionBrw->Invalidate(); return eErrorCode; } @@ -2193,7 +2200,7 @@ ,OTableFieldDescRef& aInfo) { // get the type out of the funtion name - OQueryController* pController = static_cast<OQueryController*>(_pView->getController()); + OQueryController& rController = static_cast<OQueryController&>(_pView->getController()); sal_Int32 nDataType = DataType::DOUBLE; ::rtl::OUString sFieldName = sFunctionTerm; OSQLParseNode* pFunctionName = pNode->getChild(0); @@ -2208,7 +2215,7 @@ nDataType = OSQLParser::getFunctionReturnType( sFunctionName - ,&pController->getParser().getContext()); + ,&rController.getParser().getContext()); } aInfo->SetDataType(nDataType); aInfo->SetFieldType(TAB_NORMAL_FIELD); @@ -2236,8 +2243,8 @@ else if (SQL_ISRULE(pParseTree,scalar_exp_commalist) ) { // SELECT column, ... - OQueryController* pController = static_cast<OQueryController*>(_pView->getController()); - Reference< XConnection> xConnection = pController->getConnection(); + OQueryController& rController = static_cast<OQueryController&>(_pView->getController()); + Reference< XConnection> xConnection = rController.getConnection(); ::rtl::OUString aColumnName,aTableRange; for (sal_uInt32 i = 0; i < pParseTree->count() && eOk == eErrorCode ; ++i) @@ -2257,7 +2264,7 @@ if ( !xConnection.is() ) break; - ::rtl::OUString aColumnAlias(pController->getParseIterator().getColumnAlias(pColumnRef)); // kann leer sein + ::rtl::OUString aColumnAlias(rController.getParseIterator().getColumnAlias(pColumnRef)); // kann leer sein pColumnRef = pColumnRef->getChild(0); OTableFieldDescRef aInfo = new OTableFieldDesc(); @@ -2281,7 +2288,7 @@ ::rtl::OUString aColumns; pColumnRef->parseNodeToStr( aColumns, xConnection, - &pController->getParser().getContext(), + &rController.getParser().getContext(), sal_True, sal_True); // quote is to true because we need quoted elements inside the function @@ -2323,7 +2330,7 @@ sFieldName = ::rtl::OUString(); pParamRef->parseNodeToStr( sFieldName, xConnection, - &pController->getParser().getContext(), + &rController.getParser().getContext(), sal_True, sal_True); // quote is to true because we need quoted elements inside the function } @@ -2357,7 +2364,7 @@ ::rtl::OUString aColumns; pColumnRef->parseNodeToStr( aColumns, xConnection, - &pController->getParser().getContext(), + &rController.getParser().getContext(), sal_True, sal_True); // quote is to true because we need quoted elements inside the function @@ -2406,7 +2413,7 @@ ::connectivity::OSQLParseNode* pNode = pParseRoot->getChild(3)->getChild(4)->getChild(2); ::connectivity::OSQLParseNode* pParamRef = NULL; - OQueryController* pController = static_cast<OQueryController*>(_pView->getController()); + OQueryController& rController = static_cast<OQueryController&>(_pView->getController()); EOrderDir eOrderDir; OTableFieldDescRef aDragLeft = new OTableFieldDesc(); for( sal_uInt32 i=0 ; i<pNode->count() ; i++ ) @@ -2426,10 +2433,10 @@ else // it could be a alias name for a field { ::rtl::OUString aTableRange,aColumnName; - ::connectivity::OSQLParseTreeIterator& rParseIter = pController->getParseIterator(); + ::connectivity::OSQLParseTreeIterator& rParseIter = rController.getParseIterator(); rParseIter.getColumnRange( pArgument, aColumnName, aTableRange ); - OTableFields& aList = pController->getTableFieldDesc(); + OTableFields& aList = rController.getTableFieldDesc(); OTableFields::iterator aIter = aList.begin(); for(;aIter != aList.end();++aIter) { @@ -2446,16 +2453,16 @@ else if( SQL_ISRULE(pArgument, set_fct_spec ) ) { - Reference< XConnection> xConnection = pController->getConnection(); + Reference< XConnection> xConnection = rController.getConnection(); if(xConnection.is()) { ::rtl::OUString sCondition; pArgument->parseNodeToPredicateStr(sCondition, xConnection, - pController->getNumberFormatter(), + rController.getNumberFormatter(), _pView->getLocale(), static_cast<sal_Char>(_pView->getDecimalSeparator().toChar()), - &pController->getParser().getContext()); + &rController.getParser().getContext()); fillFunctionInfo(_pView,pArgument,sCondition,aDragLeft); aDragLeft->SetFunctionType(FKT_OTHER); aDragLeft->SetOrderDir(eOrderDir); @@ -2490,7 +2497,7 @@ SqlParseError eErrorCode = eOk; if (!pSelectRoot->getChild(3)->getChild(2)->isLeaf()) { - OQueryController* pController = static_cast<OQueryController*>(_pView->getController()); + OQueryController& rController = static_cast<OQueryController&>(_pView->getController()); ::connectivity::OSQLParseNode* pGroupBy = pSelectRoot->getChild(3)->getChild(2)->getChild(2); OTableFieldDescRef aDragInfo = new OTableFieldDesc(); for( sal_uInt32 i=0 ; i < pGroupBy->count() && eOk == eErrorCode; ++i ) @@ -2514,13 +2521,13 @@ } else if( SQL_ISRULE(pArgument, set_fct_spec ) ) { - Reference< XConnection> xConnection = pController->getConnection(); + Reference< XConnection> xConnection = rController.getConnection(); if(xConnection.is()) { ::rtl::OUString sGroupByExpression; pArgument->parseNodeToStr( sGroupByExpression, xConnection, - &pController->getParser().getContext(), + &rController.getParser().getContext(), sal_True, sal_True); // quote is to true because we need quoted elements inside the function fillFunctionInfo(_pView,pArgument,sGroupByExpression,aDragInfo); @@ -2537,7 +2544,7 @@ return eErrorCode; } //------------------------------------------------------------------------------ - void showParseError(IEnvironment* _pEnvironment,SqlParseError _eErrorCode) + void showParseError(IEnvironment& _rEnvironment,SqlParseError _eErrorCode) { USHORT nResId; switch(_eErrorCode) @@ -2585,7 +2592,7 @@ // ErrorBox( _pWindow, ModuleRes( nResId ) ).Execute(); ModuleRes aRes(nResId); String sError(aRes); - _pEnvironment->appendError(SQLException(sError,NULL,getStandardSQLState( SQL_GENERAL_ERROR ),1000,Any())); + _rEnvironment.appendError(SQLException(sError,NULL,getStandardSQLState( SQL_GENERAL_ERROR ),1000,Any())); } // ----------------------------------------------------------------------------- @@ -2596,9 +2603,9 @@ DBG_NAME(OQueryDesignView) OQueryDesignView::OQueryDesignView( OQueryContainerWindow* _pParent, - OQueryController* _pController, + OQueryController& _rController, const Reference< XMultiServiceFactory >& _rFactory) - :OQueryView(_pParent,_pController,_rFactory) + :OQueryView( _pParent, _rController, _rFactory ) ,m_aSplitter( this ) ,m_eChildFocus(NONE) ,m_bInKeyEvent(sal_False) @@ -2618,7 +2625,7 @@ m_pSelectionBox = new OSelectionBrowseBox(this); - setNoneVisbleRow(static_cast<OQueryController*>(getController())->getVisibleRows()); + setNoneVisbleRow(static_cast<OQueryController&>(getController()).getVisibleRows()); m_pSelectionBox->Show(); // Splitter einrichten m_aSplitter.SetSplitHdl(LINK(this, OQueryDesignView,SplitHdl)); @@ -2638,12 +2645,12 @@ //------------------------------------------------------------------------------ IMPL_LINK( OQueryDesignView, SplitHdl, void*, /*p*/ ) { - if (!getController()->isReadOnly()) + if (!getController().isReadOnly()) { m_bInSplitHandler = sal_True; m_aSplitter.SetPosPixel( Point( m_aSplitter.GetPosPixel().X(),m_aSplitter.GetSplitPosPixel() ) ); - static_cast<OQueryController*>(getController())->setSplitPos(m_aSplitter.GetSplitPosPixel()); - static_cast<OQueryController*>(getController())->setModified(); + static_cast<OQueryController&>(getController()).setSplitPos(m_aSplitter.GetSplitPosPixel()); + static_cast<OQueryController&>(getController()).setModified(); Resize(); m_bInSplitHandler = sal_True; } @@ -2659,10 +2666,10 @@ // ----------------------------------------------------------------------------- void OQueryDesignView::initialize() { - if(static_cast<OQueryController*>(getController())->getSplitPos() != -1) + if(static_cast<OQueryController&>(getController()).getSplitPos() != -1) { - m_aSplitter.SetPosPixel( Point( m_aSplitter.GetPosPixel().X(),static_cast<OQueryController*>(getController())->getSplitPos() ) ); - m_aSplitter.SetSplitPosPixel(static_cast<OQueryController*>(getController())->getSplitPos()); + m_aSplitter.SetPosPixel( Point( m_aSplitter.GetPosPixel().X(),static_cast<OQueryController&>(getController()).getSplitPos() ) ); + m_aSplitter.SetSplitPosPixel(static_cast<OQueryController&>(getController()).getSplitPos()); } m_pSelectionBox->initialize(); reset(); @@ -2674,7 +2681,7 @@ Size aPlaygroundSize( _rPlayground.GetSize() ); // calc the split pos, and forward it to the controller - sal_Int32 nSplitPos = static_cast<OQueryController*>(getController())->getSplitPos(); + sal_Int32 nSplitPos = static_cast<OQueryController&>(getController()).getSplitPos(); if ( 0 != aPlaygroundSize.Height() ) { if ( ( -1 == nSplitPos ) @@ -2688,7 +2695,7 @@ if ( nSplitPos == -1 || nSplitPos >= aPlaygroundSize.Height() ) nSplitPos = sal_Int32(aPlaygroundSize.Height()*0.6); - static_cast<OQueryController*>(getController())->setSplitPos(nSplitPos); + static_cast<OQueryController&>(getController()).setSplitPos(nSplitPos); } if ( !m_bInSplitHandler ) @@ -2707,7 +2714,7 @@ nSplitPos = aPlaygroundSize.Height() - m_aSplitter.GetSizePixel().Height() - aSelBoxOptSize.Height(); } - static_cast< OQueryController* >(getController())->setSplitPos( nSplitPos ); + static_cast< OQueryController& >(getController()).setSplitPos( nSplitPos ); } } } @@ -2799,7 +2806,7 @@ if( m_eChildFocus == SELECTION) { m_pSelectionBox->cut(); - static_cast<OQueryController*>(getController())->setModified(sal_True); + static_cast<OQueryController&>(getController()).setModified(sal_True); } } // ----------------------------------------------------------------------------- @@ -2808,7 +2815,7 @@ if( m_eChildFocus == SELECTION) { m_pSelectionBox->paste(); - static_cast<OQueryController*>(getController())->setModified(sal_True); + static_cast<OQueryController&>(getController()).setModified(sal_True); } } // ----------------------------------------------------------------------------- @@ -2816,7 +2823,7 @@ { // Nachricht, dass Tabelle aus dem Fenster gel"oscht wurde DeleteFields(rAliasName); - static_cast<OQueryController*>(getController())->InvalidateFeature(ID_BROWSER_ADDTABLE); // view nochmal bescheid sagen + static_cast<OQueryController&>(getController()).InvalidateFeature(ID_BROWSER_ADDTABLE); // view nochmal bescheid sagen } //------------------------------------------------------------------------------ void OQueryDesignView::DeleteFields( const ::rtl::OUString& rAliasName ) @@ -2831,7 +2838,7 @@ // ----------------------------------------------------------------------------- sal_Bool OQueryDesignView::getColWidth( const ::rtl::OUString& rAliasName, const ::rtl::OUString& rFieldName, sal_uInt32& nWidth ) { - OTableFields& aFields = static_cast<OQueryController*>(getController())->getTableFieldDesc(); + OTableFields& aFields = static_cast<OQueryController&>(getController()).getTableFieldDesc(); OTableFields::iterator aIter = aFields.begin(); for(;aIter != aFields.end();++aIter) { @@ -2919,15 +2926,15 @@ //------------------------------------------------------------------------------- ::rtl::OUString OQueryDesignView::getStatement() { - OQueryController* pController = static_cast<OQueryController*>(getController()); - m_pController->clearError(); + OQueryController& rController = static_cast<OQueryController&>(getController()); + m_rController.clearError(); // used for fields which aren't any longer in the statement - OTableFields& rUnUsedFields = pController->getUnUsedFields(); + OTableFields& rUnUsedFields = rController.getUnUsedFields(); OTableFields().swap( rUnUsedFields ); // create the select columns sal_uInt32 nFieldcount = 0; - OTableFields& rFieldList = pController->getTableFieldDesc(); + OTableFields& rFieldList = rController.getTableFieldDesc(); OTableFields::iterator aIter = rFieldList.begin(); for(;aIter != rFieldList.end();++aIter) { @@ -2960,7 +2967,7 @@ // ----------------- Tabellenliste aufbauen ---------------------- const ::std::vector<OTableConnection*>* pConnList = m_pTableView->getTableConnections(); - Reference< XConnection> xConnection = pController->getConnection(); + Reference< XConnection> xConnection = rController.getConnection(); ::rtl::OUString aTableListStr(GenerateFromClause(xConnection,pTabList,pConnList)); DBG_ASSERT(aTableListStr.getLength(), "OQueryDesignView::getStatement() : unerwartet : habe Felder, aber keine Tabellen !"); // wenn es Felder gibt, koennen die nur durch Einfuegen aus einer schon existenten Tabelle entstanden sein; wenn andererseits @@ -2987,7 +2994,7 @@ } // ----------------- Statement aufbauen ---------------------- ::rtl::OUString aSqlCmd(::rtl::OUString::createFromAscii("SELECT ")); - if(static_cast<OQueryController*>(getController())->isDistinct()) + if(static_cast<OQueryController&>(getController()).isDistinct()) aSqlCmd += ::rtl::OUString::createFromAscii(" DISTINCT "); aSqlCmd += aFieldListStr; aSqlCmd += ::rtl::OUString::createFromAscii(" FROM "); @@ -3020,17 +3027,17 @@ aSqlCmd += sOrder; else { - if ( !m_pController->hasError() ) // fill generell error string - showParseError(m_pController,eErrorCode); + if ( !m_rController.hasError() ) // fill generell error string + showParseError(m_rController,eErrorCode); SQLException aError; - m_pController->getError(aError); - m_pController->showError(aError); + m_rController.getError(aError); + m_rController.showError(aError); } if ( xConnection.is() ) { - ::connectivity::OSQLParser& rParser( pController->getParser() ); + ::connectivity::OSQLParser& rParser( rController.getParser() ); ::rtl::OUString sErrorMessage; ::std::auto_ptr<OSQLParseNode> pParseNode( rParser.parseTree( sErrorMessage, aSqlCmd, sal_True ) ); if ( pParseNode.get() ) @@ -3100,15 +3107,12 @@ // ----------------------------------------------------------------------------- void OQueryDesignView::SaveUIConfig() { - OQueryController* pCtrl = static_cast<OQueryController*>(getController()); - if (pCtrl) - { - pCtrl->SaveTabWinsPosSize( m_pTableView->GetTabWinMap(), m_pScrollWindow->GetHScrollBar()->GetThumbPos(), m_pScrollWindow->GetVScrollBar()->GetThumbPos() ); - // pCtrl->SaveTabFieldsWidth( m_pSelectionBox ); - pCtrl->setVisibleRows( m_pSelectionBox->GetNoneVisibleRows() ); + OQueryController& rCtrl = static_cast<OQueryController&>(getController()); + rCtrl.SaveTabWinsPosSize( m_pTableView->GetTabWinMap(), m_pScrollWindow->GetHScrollBar()->GetThumbPos(), m_pScrollWindow->GetVScrollBar()->GetThumbPos() ); + // rCtrl.SaveTabFieldsWidth( m_pSelectionBox ); + rCtrl.setVisibleRows( m_pSelectionBox->GetNoneVisibleRows() ); if ( m_aSplitter.GetSplitPosPixel() != 0 ) - pCtrl->setSplitPos( m_aSplitter.GetSplitPosPixel() ); - } + rCtrl.setSplitPos( m_aSplitter.GetSplitPosPixel() ); } // ----------------------------------------------------------------------------- OSQLParseNode* OQueryDesignView::getPredicateTreeFromEntry(OTableFieldDescRef pEntry, @@ -3119,11 +3123,11 @@ OSL_ENSURE(pEntry.isValid(),"Entry is null!"); if(!pEntry.isValid()) return NULL; - Reference< XConnection> xConnection = static_cast<OQueryController*>(getController())->getConnection(); + Reference< XConnection> xConnection = static_cast<OQueryController&>(getController()).getConnection(); if(!xConnection.is()) return NULL; - ::connectivity::OSQLParser& rParser( static_cast<OQueryController*>(getController())->getParser() ); + ::connectivity::OSQLParser& rParser( static_cast<OQueryController&>(getController()).getParser() ); OQueryTableWindow* pWin = static_cast<OQueryTableWindow*>(pEntry->GetTabWindow()); String sTest(_sCriteria); @@ -3150,9 +3154,9 @@ sSql += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" FROM x WHERE ")); sSql += pEntry->GetField(); sSql += _sCriteria; - OSQLParseNode* pParseNode = rParser.parseTree( _rsErrorMessage, sSql, sal_True ); + ::std::auto_ptr<OSQLParseNode> pParseNode( rParser.parseTree( _rsErrorMessage, sSql, sal_True ) ); nType = DataType::DOUBLE; - if ( pParseNode ) + if ( pParseNode.get() ) { OSQLParseNode* pColumnRef = pParseNode->getByRule(OSQLParseNode::column_ref); if ( pColumnRef ) @@ -3163,7 +3167,6 @@ nType = aField->GetDataType(); } } - delete pParseNode; } } @@ -3194,7 +3197,7 @@ OSQLParseNode* pParseNode = rParser.predicateTree( _rsErrorMessage, sTest, - static_cast<OQueryController*>(getController())->getNumberFormatter(), + static_cast<OQueryController&>(getController()).getNumberFormatter(), _rxColumn); return pParseNode; } @@ -3225,17 +3228,17 @@ sal_Bool OQueryDesignView::InitFromParseNode() { SqlParseError eErrorCode = eNativeMode; - m_pController->clearError(); + m_rController.clearError(); try { if ( (eErrorCode = InitFromParseNodeImpl(this,m_pSelectionBox)) != eOk ) { - if ( !m_pController->hasError() ) // fill generell error string - showParseError(m_pController,eErrorCode); + if ( !m_rController.hasError() ) // fill generell error string + showParseError(m_rController,eErrorCode); SQLException aError; - m_pController->getError(aError); - m_pController->showError(aError); + m_rController.getError(aError); + m_rController.showError(aError); } } catch(Exception&) --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]