INTEGRATION: CWS dba16 (1.5.10); FILE MERGED

2004/10/11 11:38:19 oj 1.5.10.2: #i30220# enable having, group by for queries
2004/08/16 13:13:23 oj 1.5.10.1: #i32715# add not_equal
This commit is contained in:
Rüdiger Timm
2004-10-22 07:55:36 +00:00
parent 09922f2e00
commit 67aa7ef815

View File

@@ -2,9 +2,9 @@
* *
* $RCSfile: SingleSelectQueryComposer.cxx,v $ * $RCSfile: SingleSelectQueryComposer.cxx,v $
* *
* $Revision: 1.5 $ * $Revision: 1.6 $
* *
* last change: $Author: hr $ $Date: 2004-08-02 15:01:24 $ * last change: $Author: rt $ $Date: 2004-10-22 08:55:36 $
* *
* The Contents of this file are made available subject to the terms of * The Contents of this file are made available subject to the terms of
* either of the following licenses * either of the following licenses
@@ -294,24 +294,24 @@ void SAL_CALL OSingleSelectQueryComposer::setQuery( const ::rtl::OUString& comma
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void OSingleSelectQueryComposer::setQuery_Impl( const ::rtl::OUString& command ) void OSingleSelectQueryComposer::setQuery_Impl( const ::rtl::OUString& command )
{ {
const OSQLParseNode* pSqlParseNode = m_aSqlIterator.getParseTree();
m_aSqlIterator.setParseTree(NULL);
delete pSqlParseNode;
::rtl::OUString aErrorMsg; ::rtl::OUString aErrorMsg;
pSqlParseNode = m_aSqlParser.parseTree(aErrorMsg,command); const OSQLParseNode* pNewSqlParseNode = m_aSqlParser.parseTree(aErrorMsg,command);
if ( !pSqlParseNode ) if ( !pNewSqlParseNode )
{ {
SQLException aError2(aErrorMsg,*this,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HY000")),1000,Any()); SQLException aError2(aErrorMsg,*this,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HY000")),1000,Any());
SQLException aError1(command,*this,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HY000")),1000,makeAny(aError2)); SQLException aError1(command,*this,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HY000")),1000,makeAny(aError2));
throw SQLException(m_aSqlParser.getContext().getErrorMessage(OParseContext::ERROR_GENERAL),*this,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HY000")),1000,makeAny(aError1)); throw SQLException(m_aSqlParser.getContext().getErrorMessage(OParseContext::ERROR_GENERAL),*this,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HY000")),1000,makeAny(aError1));
} }
m_aSqlIterator.setParseTree(pSqlParseNode); const OSQLParseNode* pSqlParseNode = m_aSqlIterator.getParseTree();
m_aSqlIterator.setParseTree(NULL);
delete pSqlParseNode;
m_aSqlIterator.setParseTree(pNewSqlParseNode);
m_aSqlIterator.traverseAll(); m_aSqlIterator.traverseAll();
if (( m_aSqlIterator.getStatementType() != SQL_STATEMENT_SELECT if (( m_aSqlIterator.getStatementType() != SQL_STATEMENT_SELECT
&& m_aSqlIterator.getStatementType() != SQL_STATEMENT_SELECT_COUNT) && m_aSqlIterator.getStatementType() != SQL_STATEMENT_SELECT_COUNT)
|| SQL_ISRULE(pSqlParseNode,union_statement) ) // #i4229# OJ || SQL_ISRULE(pNewSqlParseNode,union_statement) ) // #i4229# OJ
{ {
SQLException aError1(command,*this,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HY000")),1000,Any()); SQLException aError1(command,*this,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HY000")),1000,Any());
throw SQLException(DBACORE_RESSTRING(RID_STR_ONLY_QUERY),*this, throw SQLException(DBACORE_RESSTRING(RID_STR_ONLY_QUERY),*this,
@@ -319,10 +319,10 @@ void OSingleSelectQueryComposer::setQuery_Impl( const ::rtl::OUString& command )
} }
m_aWorkSql = STR_SELECT; m_aWorkSql = STR_SELECT;
pSqlParseNode->getChild(1)->parseNodeToStr(m_aWorkSql,m_xMetaData); pNewSqlParseNode->getChild(1)->parseNodeToStr(m_aWorkSql,m_xMetaData);
pSqlParseNode->getChild(2)->parseNodeToStr(m_aWorkSql,m_xMetaData); pNewSqlParseNode->getChild(2)->parseNodeToStr(m_aWorkSql,m_xMetaData);
m_aWorkSql += STR_FROM; m_aWorkSql += STR_FROM;
pSqlParseNode->getChild(3)->getChild(0)->getChild(1)->parseNodeToStr(m_aWorkSql,m_xMetaData); pNewSqlParseNode->getChild(3)->getChild(0)->getChild(1)->parseNodeToStr(m_aWorkSql,m_xMetaData);
getColumns(); getColumns();
getTables(); getTables();
@@ -666,6 +666,8 @@ Reference< XNameAccess > SAL_CALL OSingleSelectQueryComposer::getColumns( ) thr
xProp->getPropertyValue(PROPERTY_NAME) >>= sName; xProp->getPropertyValue(PROPERTY_NAME) >>= sName;
pColumn->setRealName(::comphelper::getString(xProp->getPropertyValue(PROPERTY_REALNAME))); pColumn->setRealName(::comphelper::getString(xProp->getPropertyValue(PROPERTY_REALNAME)));
pColumn->setTableName(::comphelper::getString(xProp->getPropertyValue(PROPERTY_TABLENAME))); pColumn->setTableName(::comphelper::getString(xProp->getPropertyValue(PROPERTY_TABLENAME)));
pColumn->setFunction(::comphelper::getBOOL(xProp->getPropertyValue(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Function")))));
pColumn->setAggregateFunction(::comphelper::getBOOL(xProp->getPropertyValue(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AggregateFunction")))));
(*aCols)[i-1] = pColumn; (*aCols)[i-1] = pColumn;
} }
} }
@@ -822,6 +824,9 @@ sal_Int32 OSingleSelectQueryComposer::getPredicateType(OSQLParseNode * _pPredica
case SQL_NODE_EQUAL: case SQL_NODE_EQUAL:
nPredicate = SQLFilterOperator::EQUAL; nPredicate = SQLFilterOperator::EQUAL;
break; break;
case SQL_NODE_NOTEQUAL:
nPredicate = SQLFilterOperator::NOT_EQUAL;
break;
case SQL_NODE_LESS: case SQL_NODE_LESS:
nPredicate = SQLFilterOperator::LESS; nPredicate = SQLFilterOperator::LESS;
break; break;
@@ -876,6 +881,10 @@ sal_Bool OSingleSelectQueryComposer::setComparsionPredicate(OSQLParseNode * pCon
i--; i--;
aItem.Handle = SQLFilterOperator::EQUAL; aItem.Handle = SQLFilterOperator::EQUAL;
break; break;
case SQL_NODE_NOTEQUAL:
i--;
aItem.Handle = SQLFilterOperator::NOT_EQUAL;
break;
case SQL_NODE_LESS: case SQL_NODE_LESS:
// take the opposite as we change the order // take the opposite as we change the order
i--; i--;
@@ -1162,6 +1171,8 @@ namespace
const Sequence< PropertyValue >* pOrIter = filter.getConstArray(); const Sequence< PropertyValue >* pOrIter = filter.getConstArray();
const Sequence< PropertyValue >* pOrEnd = pOrIter + filter.getLength(); const Sequence< PropertyValue >* pOrEnd = pOrIter + filter.getLength();
while ( pOrIter != pOrEnd ) while ( pOrIter != pOrEnd )
{
if ( pOrIter->getLength() )
{ {
sRet += L_BRACKET; sRet += L_BRACKET;
const PropertyValue* pAndIter = pOrIter->getConstArray(); const PropertyValue* pAndIter = pOrIter->getConstArray();
@@ -1219,8 +1230,9 @@ namespace
sRet += STR_AND; sRet += STR_AND;
} }
sRet += R_BRACKET; sRet += R_BRACKET;
}
++pOrIter; ++pOrIter;
if ( pOrIter != pOrEnd ) if ( pOrIter != pOrEnd && sRet.getLength() )
sRet += STR_OR; sRet += STR_OR;
} }
return sRet; return sRet;
@@ -1269,6 +1281,7 @@ void OSingleSelectQueryComposer::setConditionByColumn( const Reference< XPropert
m_aCurrentColumns[SelectColumns]->getByName(aName) >>= xColumn; m_aCurrentColumns[SelectColumns]->getByName(aName) >>= xColumn;
OSL_ENSURE(xColumn->getPropertySetInfo()->hasPropertyByName(PROPERTY_REALNAME),"Property REALNAME not available!"); OSL_ENSURE(xColumn->getPropertySetInfo()->hasPropertyByName(PROPERTY_REALNAME),"Property REALNAME not available!");
OSL_ENSURE(xColumn->getPropertySetInfo()->hasPropertyByName(PROPERTY_TABLENAME),"Property TABLENAME not available!"); OSL_ENSURE(xColumn->getPropertySetInfo()->hasPropertyByName(PROPERTY_TABLENAME),"Property TABLENAME not available!");
OSL_ENSURE(xColumn->getPropertySetInfo()->hasPropertyByName(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AggregateFunction"))),"Property AggregateFunctionnot available!");
::rtl::OUString sRealName,sTableName; ::rtl::OUString sRealName,sTableName;
xColumn->getPropertyValue(PROPERTY_REALNAME) >>= sRealName; xColumn->getPropertyValue(PROPERTY_REALNAME) >>= sRealName;
@@ -1282,10 +1295,16 @@ void OSingleSelectQueryComposer::setConditionByColumn( const Reference< XPropert
else else
sTableName = ::dbtools::quoteName(aQuote,sTableName); sTableName = ::dbtools::quoteName(aQuote,sTableName);
if ( !::comphelper::getBOOL(xColumn->getPropertyValue(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Function")))) )
{
aSql = sTableName; aSql = sTableName;
aSql += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".")); aSql += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("."));
aSql += ::dbtools::quoteName(aQuote,sRealName); aSql += ::dbtools::quoteName(aQuote,sRealName);
} }
else
aSql += sRealName;
}
else else
aSql = getTableAlias(column) + ::dbtools::quoteName(aQuote,aName); aSql = getTableAlias(column) + ::dbtools::quoteName(aQuote,aName);