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 $
*
* $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
* 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 )
{
const OSQLParseNode* pSqlParseNode = m_aSqlIterator.getParseTree();
m_aSqlIterator.setParseTree(NULL);
delete pSqlParseNode;
::rtl::OUString aErrorMsg;
pSqlParseNode = m_aSqlParser.parseTree(aErrorMsg,command);
if ( !pSqlParseNode )
const OSQLParseNode* pNewSqlParseNode = m_aSqlParser.parseTree(aErrorMsg,command);
if ( !pNewSqlParseNode )
{
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));
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();
if (( m_aSqlIterator.getStatementType() != SQL_STATEMENT_SELECT
&& 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());
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;
pSqlParseNode->getChild(1)->parseNodeToStr(m_aWorkSql,m_xMetaData);
pSqlParseNode->getChild(2)->parseNodeToStr(m_aWorkSql,m_xMetaData);
pNewSqlParseNode->getChild(1)->parseNodeToStr(m_aWorkSql,m_xMetaData);
pNewSqlParseNode->getChild(2)->parseNodeToStr(m_aWorkSql,m_xMetaData);
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();
getTables();
@@ -666,6 +666,8 @@ Reference< XNameAccess > SAL_CALL OSingleSelectQueryComposer::getColumns( ) thr
xProp->getPropertyValue(PROPERTY_NAME) >>= sName;
pColumn->setRealName(::comphelper::getString(xProp->getPropertyValue(PROPERTY_REALNAME)));
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;
}
}
@@ -822,6 +824,9 @@ sal_Int32 OSingleSelectQueryComposer::getPredicateType(OSQLParseNode * _pPredica
case SQL_NODE_EQUAL:
nPredicate = SQLFilterOperator::EQUAL;
break;
case SQL_NODE_NOTEQUAL:
nPredicate = SQLFilterOperator::NOT_EQUAL;
break;
case SQL_NODE_LESS:
nPredicate = SQLFilterOperator::LESS;
break;
@@ -876,6 +881,10 @@ sal_Bool OSingleSelectQueryComposer::setComparsionPredicate(OSQLParseNode * pCon
i--;
aItem.Handle = SQLFilterOperator::EQUAL;
break;
case SQL_NODE_NOTEQUAL:
i--;
aItem.Handle = SQLFilterOperator::NOT_EQUAL;
break;
case SQL_NODE_LESS:
// take the opposite as we change the order
i--;
@@ -1163,64 +1172,67 @@ namespace
const Sequence< PropertyValue >* pOrEnd = pOrIter + filter.getLength();
while ( pOrIter != pOrEnd )
{
sRet += L_BRACKET;
const PropertyValue* pAndIter = pOrIter->getConstArray();
const PropertyValue* pAndEnd = pAndIter + pOrIter->getLength();
while ( pAndIter != pAndEnd )
if ( pOrIter->getLength() )
{
sRet += pAndIter->Name;
::rtl::OUString sValue;
pAndIter->Value >>= sValue;
switch( pAndIter->Handle )
sRet += L_BRACKET;
const PropertyValue* pAndIter = pOrIter->getConstArray();
const PropertyValue* pAndEnd = pAndIter + pOrIter->getLength();
while ( pAndIter != pAndEnd )
{
case SQLFilterOperator::EQUAL:
sRet += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" = "));
sRet += sValue;
break;
case SQLFilterOperator::NOT_EQUAL:
sRet += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" <> "));
sRet += sValue;
break;
case SQLFilterOperator::LESS:
sRet += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" < "));
sRet += sValue;
break;
case SQLFilterOperator::GREATER:
sRet += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" > "));
sRet += sValue;
break;
case SQLFilterOperator::LESS_EQUAL:
sRet += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" <= "));
sRet += sValue;
break;
case SQLFilterOperator::GREATER_EQUAL:
sRet += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" >= "));
sRet += sValue;
break;
case SQLFilterOperator::LIKE:
sRet += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" LIKE "));
sRet += sValue;
break;
case SQLFilterOperator::NOT_LIKE:
sRet += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" NOT LIKE "));
sRet += sValue;
break;
case SQLFilterOperator::SQLNULL:
sRet += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" IS NULL")) ;
break;
case SQLFilterOperator::NOT_SQLNULL:
sRet += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" IS NOT NULL")) ;
break;
default:
throw IllegalArgumentException();
sRet += pAndIter->Name;
::rtl::OUString sValue;
pAndIter->Value >>= sValue;
switch( pAndIter->Handle )
{
case SQLFilterOperator::EQUAL:
sRet += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" = "));
sRet += sValue;
break;
case SQLFilterOperator::NOT_EQUAL:
sRet += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" <> "));
sRet += sValue;
break;
case SQLFilterOperator::LESS:
sRet += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" < "));
sRet += sValue;
break;
case SQLFilterOperator::GREATER:
sRet += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" > "));
sRet += sValue;
break;
case SQLFilterOperator::LESS_EQUAL:
sRet += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" <= "));
sRet += sValue;
break;
case SQLFilterOperator::GREATER_EQUAL:
sRet += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" >= "));
sRet += sValue;
break;
case SQLFilterOperator::LIKE:
sRet += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" LIKE "));
sRet += sValue;
break;
case SQLFilterOperator::NOT_LIKE:
sRet += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" NOT LIKE "));
sRet += sValue;
break;
case SQLFilterOperator::SQLNULL:
sRet += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" IS NULL")) ;
break;
case SQLFilterOperator::NOT_SQLNULL:
sRet += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" IS NOT NULL")) ;
break;
default:
throw IllegalArgumentException();
}
++pAndIter;
if ( pAndIter != pAndEnd )
sRet += STR_AND;
}
++pAndIter;
if ( pAndIter != pAndEnd )
sRet += STR_AND;
sRet += R_BRACKET;
}
sRet += R_BRACKET;
++pOrIter;
if ( pOrIter != pOrEnd )
if ( pOrIter != pOrEnd && sRet.getLength() )
sRet += STR_OR;
}
return sRet;
@@ -1269,6 +1281,7 @@ void OSingleSelectQueryComposer::setConditionByColumn( const Reference< XPropert
m_aCurrentColumns[SelectColumns]->getByName(aName) >>= xColumn;
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(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AggregateFunction"))),"Property AggregateFunctionnot available!");
::rtl::OUString sRealName,sTableName;
xColumn->getPropertyValue(PROPERTY_REALNAME) >>= sRealName;
@@ -1282,9 +1295,15 @@ void OSingleSelectQueryComposer::setConditionByColumn( const Reference< XPropert
else
sTableName = ::dbtools::quoteName(aQuote,sTableName);
aSql = sTableName;
aSql += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("."));
aSql += ::dbtools::quoteName(aQuote,sRealName);
if ( !::comphelper::getBOOL(xColumn->getPropertyValue(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Function")))) )
{
aSql = sTableName;
aSql += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("."));
aSql += ::dbtools::quoteName(aQuote,sRealName);
}
else
aSql += sRealName;
}
else
aSql = getTableAlias(column) + ::dbtools::quoteName(aQuote,aName);