dba33d: #i69262# allow functions to be grouped
This commit is contained in:
@@ -186,11 +186,6 @@ namespace
|
||||
sal_Bool bHaving,
|
||||
bool _bAddOrOnOneLine);
|
||||
|
||||
void fillFunctionInfo( OQueryDesignView* _pView
|
||||
,const ::connectivity::OSQLParseNode* pNode
|
||||
,const ::rtl::OUString& sFunctionTerm
|
||||
,OTableFieldDescRef& aInfo);
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
::rtl::OUString quoteTableAlias(sal_Bool _bQuote, const ::rtl::OUString& _sAliasName, const ::rtl::OUString& _sQuote)
|
||||
{
|
||||
@@ -2262,35 +2257,6 @@ namespace
|
||||
return eErrorCode;
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
void fillFunctionInfo( OQueryDesignView* _pView
|
||||
,const ::connectivity::OSQLParseNode* pNode
|
||||
,const ::rtl::OUString& sFunctionTerm
|
||||
,OTableFieldDescRef& aInfo)
|
||||
{
|
||||
// get the type out of the funtion name
|
||||
OQueryController& rController = static_cast<OQueryController&>(_pView->getController());
|
||||
sal_Int32 nDataType = DataType::DOUBLE;
|
||||
::rtl::OUString sFieldName = sFunctionTerm;
|
||||
OSQLParseNode* pFunctionName = pNode->getChild(0);
|
||||
if ( !SQL_ISPUNCTUATION(pFunctionName,"{") )
|
||||
{
|
||||
if ( SQL_ISRULEOR2(pNode,length_exp,char_value_fct) )
|
||||
pFunctionName = pFunctionName->getChild(0);
|
||||
|
||||
::rtl::OUString sFunctionName = pFunctionName->getTokenValue();
|
||||
if ( !sFunctionName.getLength() )
|
||||
sFunctionName = ::rtl::OStringToOUString(OSQLParser::TokenIDToStr(pFunctionName->getTokenID()),RTL_TEXTENCODING_UTF8);
|
||||
|
||||
nDataType = OSQLParser::getFunctionReturnType(
|
||||
sFunctionName
|
||||
,&rController.getParser().getContext());
|
||||
}
|
||||
aInfo->SetDataType(nDataType);
|
||||
aInfo->SetFieldType(TAB_NORMAL_FIELD);
|
||||
aInfo->SetField(sFieldName);
|
||||
aInfo->SetTabWindow(NULL);
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
SqlParseError InstallFields(OQueryDesignView* _pView,
|
||||
const ::connectivity::OSQLParseNode* pNode,
|
||||
OJoinTableView::OTableWindowMap* pTabList )
|
||||
@@ -2298,7 +2264,7 @@ namespace
|
||||
if( pNode==0 || !SQL_ISRULE(pNode,select_statement))
|
||||
return eNoSelectStatement;
|
||||
|
||||
::connectivity::OSQLParseNode* pParseTree = pNode->getChild(2);
|
||||
::connectivity::OSQLParseNode* pParseTree = pNode->getChild(2); // selection
|
||||
sal_Bool bFirstField = sal_True; // bei der Initialisierung mu<6D> auf alle Faelle das erste Feld neu aktiviert werden
|
||||
|
||||
SqlParseError eErrorCode = eOk;
|
||||
@@ -2329,9 +2295,6 @@ namespace
|
||||
|
||||
if ( SQL_ISRULE(pColumnRef,derived_column) )
|
||||
{
|
||||
if ( !xConnection.is() )
|
||||
break;
|
||||
|
||||
::rtl::OUString aColumnAlias(rController.getParseIterator().getColumnAlias(pColumnRef)); // kann leer sein
|
||||
pColumnRef = pColumnRef->getChild(0);
|
||||
OTableFieldDescRef aInfo = new OTableFieldDesc();
|
||||
@@ -2412,7 +2375,7 @@ namespace
|
||||
}
|
||||
else
|
||||
{
|
||||
fillFunctionInfo(_pView,pColumnRef,aColumns,aInfo);
|
||||
_pView->fillFunctionInfo(pColumnRef,aColumns,aInfo);
|
||||
aInfo->SetFieldAlias(aColumnAlias);
|
||||
}
|
||||
|
||||
@@ -2533,7 +2496,7 @@ namespace
|
||||
_pView->getLocale(),
|
||||
static_cast<sal_Char>(_pView->getDecimalSeparator().toChar()),
|
||||
&rController.getParser().getContext());
|
||||
fillFunctionInfo(_pView,pArgument,sCondition,aDragLeft);
|
||||
_pView->fillFunctionInfo(pArgument,sCondition,aDragLeft);
|
||||
aDragLeft->SetFunctionType(FKT_OTHER);
|
||||
aDragLeft->SetOrderDir(eOrderDir);
|
||||
aDragLeft->SetVisible(sal_False);
|
||||
@@ -2565,7 +2528,7 @@ namespace
|
||||
const ::connectivity::OSQLParseNode* pSelectRoot )
|
||||
{
|
||||
SqlParseError eErrorCode = eOk;
|
||||
if (!pSelectRoot->getChild(3)->getChild(2)->isLeaf())
|
||||
if (!pSelectRoot->getChild(3)->getChild(2)->isLeaf()) // opt_group_by_clause
|
||||
{
|
||||
OQueryController& rController = static_cast<OQueryController&>(_pView->getController());
|
||||
::connectivity::OSQLParseNode* pGroupBy = pSelectRoot->getChild(3)->getChild(2)->getChild(2);
|
||||
@@ -2600,7 +2563,7 @@ namespace
|
||||
&rController.getParser().getContext(),
|
||||
sal_True,
|
||||
sal_True); // quote is to true because we need quoted elements inside the function
|
||||
fillFunctionInfo(_pView,pArgument,sGroupByExpression,aDragInfo);
|
||||
_pView->fillFunctionInfo(pArgument,sGroupByExpression,aDragInfo);
|
||||
aDragInfo->SetFunctionType(FKT_OTHER);
|
||||
aDragInfo->SetGroupBy(sal_True);
|
||||
aDragInfo->SetVisible(sal_False);
|
||||
@@ -3324,4 +3287,32 @@ bool OQueryDesignView::initByParseIterator( ::dbtools::SQLExceptionInfo* _pError
|
||||
}
|
||||
return eErrorCode == eOk;
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
void OQueryDesignView::fillFunctionInfo( const ::connectivity::OSQLParseNode* pNode
|
||||
,const ::rtl::OUString& sFunctionTerm
|
||||
,OTableFieldDescRef& aInfo)
|
||||
{
|
||||
// get the type out of the funtion name
|
||||
OQueryController& rController = static_cast<OQueryController&>(getController());
|
||||
sal_Int32 nDataType = DataType::DOUBLE;
|
||||
::rtl::OUString sFieldName = sFunctionTerm;
|
||||
OSQLParseNode* pFunctionName = pNode->getChild(0);
|
||||
if ( !SQL_ISPUNCTUATION(pFunctionName,"{") )
|
||||
{
|
||||
if ( SQL_ISRULEOR2(pNode,length_exp,char_value_fct) )
|
||||
pFunctionName = pFunctionName->getChild(0);
|
||||
|
||||
::rtl::OUString sFunctionName = pFunctionName->getTokenValue();
|
||||
if ( !sFunctionName.getLength() )
|
||||
sFunctionName = ::rtl::OStringToOUString(OSQLParser::TokenIDToStr(pFunctionName->getTokenID()),RTL_TEXTENCODING_UTF8);
|
||||
|
||||
nDataType = OSQLParser::getFunctionReturnType(
|
||||
sFunctionName
|
||||
,&rController.getParser().getContext());
|
||||
}
|
||||
aInfo->SetDataType(nDataType);
|
||||
aInfo->SetFieldType(TAB_NORMAL_FIELD);
|
||||
aInfo->SetField(sFieldName);
|
||||
aInfo->SetTabWindow(NULL);
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
Reference in New Issue
Block a user