When parsing does not give a table name, take it from the column
Change-Id: Ie8a2c7e473d717cc22c51205dd8cdc59934de8b1
This commit is contained in:
@@ -69,7 +69,7 @@ namespace connectivity
|
|||||||
|
|
||||||
::std::auto_ptr< OSQLParseTreeIteratorImpl > m_pImpl;
|
::std::auto_ptr< OSQLParseTreeIteratorImpl > m_pImpl;
|
||||||
|
|
||||||
void traverseParameter(const OSQLParseNode* _pParseNode,const OSQLParseNode* _pColumnRef,const ::rtl::OUString& _aColumnName,const ::rtl::OUString& _aTableRange, const ::rtl::OUString& _rColumnAlias);
|
void traverseParameter(const OSQLParseNode* _pParseNode,const OSQLParseNode* _pColumnRef,const ::rtl::OUString& _aColumnName, ::rtl::OUString& _aTableRange, const ::rtl::OUString& _rColumnAlias);
|
||||||
// inserts a table into the map
|
// inserts a table into the map
|
||||||
void traverseOneTableName( OSQLTables& _rTables,const OSQLParseNode * pTableName, const ::rtl::OUString & rTableRange );
|
void traverseOneTableName( OSQLTables& _rTables,const OSQLParseNode * pTableName, const ::rtl::OUString & rTableRange );
|
||||||
void traverseORCriteria(OSQLParseNode * pSearchCondition);
|
void traverseORCriteria(OSQLParseNode * pSearchCondition);
|
||||||
@@ -92,25 +92,25 @@ namespace connectivity
|
|||||||
@param rColumnName
|
@param rColumnName
|
||||||
the column name to look for
|
the column name to look for
|
||||||
@param rTableRange
|
@param rTableRange
|
||||||
the table alias name
|
the table alias name; if empty, look in all tables
|
||||||
@return
|
@return
|
||||||
the desired column object, or <NULL/> if no such column could be found
|
the desired column object, or <NULL/> if no such column could be found
|
||||||
*/
|
*/
|
||||||
static ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > findColumn(
|
static ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > findColumn(
|
||||||
const OSQLTables& _rTables, const ::rtl::OUString & rColumnName, const ::rtl::OUString & rTableRange );
|
const OSQLTables& _rTables, const ::rtl::OUString & rColumnName, ::rtl::OUString & rTableRange );
|
||||||
|
|
||||||
/** finds a column with a given name, belonging to a given table
|
/** finds a column with a given name, belonging to a given table
|
||||||
@param rColumnName
|
@param rColumnName
|
||||||
the column name to look for
|
the column name to look for
|
||||||
@param rTableRange
|
@param rTableRange
|
||||||
the table alias name
|
the table alias name; if empty, look in all tables
|
||||||
@param _bLookInSubTables
|
@param _bLookInSubTables
|
||||||
<TRUE/> if and only if not only our direct tables, but also our sub tables (from sub selects)
|
<TRUE/> if and only if not only our direct tables, but also our sub tables (from sub selects)
|
||||||
should be searched
|
should be searched
|
||||||
@return
|
@return
|
||||||
*/
|
*/
|
||||||
::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > findColumn(
|
::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > findColumn(
|
||||||
const ::rtl::OUString & rColumnName, const ::rtl::OUString & rTableRange, bool _bLookInSubTables );
|
const ::rtl::OUString & rColumnName, ::rtl::OUString & rTableRange, bool _bLookInSubTables );
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void setSelectColumnName(::rtl::Reference<OSQLColumns>& _rColumns,const ::rtl::OUString & rColumnName,const ::rtl::OUString & rColumnAlias, const ::rtl::OUString & rTableRange,sal_Bool bFkt=sal_False,sal_Int32 _nType = com::sun::star::sdbc::DataType::VARCHAR,sal_Bool bAggFkt=sal_False);
|
void setSelectColumnName(::rtl::Reference<OSQLColumns>& _rColumns,const ::rtl::OUString & rColumnName,const ::rtl::OUString & rColumnAlias, const ::rtl::OUString & rTableRange,sal_Bool bFkt=sal_False,sal_Int32 _nType = com::sun::star::sdbc::DataType::VARCHAR,sal_Bool bAggFkt=sal_False);
|
||||||
@@ -320,8 +320,8 @@ namespace connectivity
|
|||||||
*/
|
*/
|
||||||
void impl_getQueryParameterColumns( const OSQLTable& _rQuery );
|
void impl_getQueryParameterColumns( const OSQLTable& _rQuery );
|
||||||
|
|
||||||
void setOrderByColumnName(const ::rtl::OUString & rColumnName, const ::rtl::OUString & rTableRange, sal_Bool bAscending);
|
void setOrderByColumnName(const ::rtl::OUString & rColumnName, ::rtl::OUString & rTableRange, sal_Bool bAscending);
|
||||||
void setGroupByColumnName(const ::rtl::OUString & rColumnName, const ::rtl::OUString & rTableRange);
|
void setGroupByColumnName(const ::rtl::OUString & rColumnName, ::rtl::OUString & rTableRange);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/** appends an SQLException corresponding to the given error code to our error collection
|
/** appends an SQLException corresponding to the given error code to our error collection
|
||||||
|
@@ -1441,7 +1441,7 @@ void OSQLParseTreeIterator::traverseANDCriteria(OSQLParseNode * pSearchCondition
|
|||||||
void OSQLParseTreeIterator::traverseParameter(const OSQLParseNode* _pParseNode
|
void OSQLParseTreeIterator::traverseParameter(const OSQLParseNode* _pParseNode
|
||||||
,const OSQLParseNode* _pParentNode
|
,const OSQLParseNode* _pParentNode
|
||||||
,const ::rtl::OUString& _aColumnName
|
,const ::rtl::OUString& _aColumnName
|
||||||
,const ::rtl::OUString& _aTableRange
|
,::rtl::OUString& _aTableRange
|
||||||
,const ::rtl::OUString& _rColumnAlias)
|
,const ::rtl::OUString& _rColumnAlias)
|
||||||
{
|
{
|
||||||
RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "parse", "Ocke.Janssen@sun.com", "OSQLParseTreeIterator::traverseParameter" );
|
RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "parse", "Ocke.Janssen@sun.com", "OSQLParseTreeIterator::traverseParameter" );
|
||||||
@@ -1908,7 +1908,7 @@ void OSQLParseTreeIterator::setSelectColumnName(::rtl::Reference<OSQLColumns>& _
|
|||||||
return aAlias;
|
return aAlias;
|
||||||
}
|
}
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
void OSQLParseTreeIterator::setOrderByColumnName(const ::rtl::OUString & rColumnName, const ::rtl::OUString & rTableRange,sal_Bool bAscending)
|
void OSQLParseTreeIterator::setOrderByColumnName(const ::rtl::OUString & rColumnName, ::rtl::OUString & rTableRange, sal_Bool bAscending)
|
||||||
{
|
{
|
||||||
RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "parse", "Ocke.Janssen@sun.com", "OSQLParseTreeIterator::setOrderByColumnName" );
|
RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "parse", "Ocke.Janssen@sun.com", "OSQLParseTreeIterator::setOrderByColumnName" );
|
||||||
Reference<XPropertySet> xColumn = findColumn( rColumnName, rTableRange, false );
|
Reference<XPropertySet> xColumn = findColumn( rColumnName, rTableRange, false );
|
||||||
@@ -1930,7 +1930,7 @@ void OSQLParseTreeIterator::setOrderByColumnName(const ::rtl::OUString & rColumn
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
void OSQLParseTreeIterator::setGroupByColumnName(const ::rtl::OUString & rColumnName, const ::rtl::OUString & rTableRange)
|
void OSQLParseTreeIterator::setGroupByColumnName(const ::rtl::OUString & rColumnName, ::rtl::OUString & rTableRange)
|
||||||
{
|
{
|
||||||
RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "parse", "Ocke.Janssen@sun.com", "OSQLParseTreeIterator::setGroupByColumnName" );
|
RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "parse", "Ocke.Janssen@sun.com", "OSQLParseTreeIterator::setGroupByColumnName" );
|
||||||
Reference<XPropertySet> xColumn = findColumn( rColumnName, rTableRange, false );
|
Reference<XPropertySet> xColumn = findColumn( rColumnName, rTableRange, false );
|
||||||
@@ -2089,7 +2089,7 @@ const OSQLParseNode* OSQLParseTreeIterator::getSimpleHavingTree() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
Reference< XPropertySet > OSQLParseTreeIterator::findColumn( const ::rtl::OUString & rColumnName, const ::rtl::OUString & rTableRange, bool _bLookInSubTables )
|
Reference< XPropertySet > OSQLParseTreeIterator::findColumn( const ::rtl::OUString & rColumnName, ::rtl::OUString & rTableRange, bool _bLookInSubTables )
|
||||||
{
|
{
|
||||||
RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "parse", "Ocke.Janssen@sun.com", "OSQLParseTreeIterator::findColumn" );
|
RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "parse", "Ocke.Janssen@sun.com", "OSQLParseTreeIterator::findColumn" );
|
||||||
Reference< XPropertySet > xColumn = findColumn( *m_pImpl->m_pTables, rColumnName, rTableRange );
|
Reference< XPropertySet > xColumn = findColumn( *m_pImpl->m_pTables, rColumnName, rTableRange );
|
||||||
@@ -2099,7 +2099,7 @@ Reference< XPropertySet > OSQLParseTreeIterator::findColumn( const ::rtl::OUStri
|
|||||||
}
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
Reference< XPropertySet > OSQLParseTreeIterator::findColumn(const OSQLTables& _rTables,const ::rtl::OUString & rColumnName, const ::rtl::OUString & rTableRange)
|
Reference< XPropertySet > OSQLParseTreeIterator::findColumn(const OSQLTables& _rTables, const ::rtl::OUString & rColumnName, ::rtl::OUString & rTableRange)
|
||||||
{
|
{
|
||||||
RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "parse", "Ocke.Janssen@sun.com", "OSQLParseTreeIterator::findColumn" );
|
RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "parse", "Ocke.Janssen@sun.com", "OSQLParseTreeIterator::findColumn" );
|
||||||
Reference< XPropertySet > xColumn;
|
Reference< XPropertySet > xColumn;
|
||||||
@@ -2115,7 +2115,7 @@ Reference< XPropertySet > OSQLParseTreeIterator::findColumn(const OSQLTables& _r
|
|||||||
}
|
}
|
||||||
if ( !xColumn.is() )
|
if ( !xColumn.is() )
|
||||||
{
|
{
|
||||||
OSQLTables::const_iterator aEnd = _rTables.end();
|
const OSQLTables::const_iterator aEnd = _rTables.end();
|
||||||
for(OSQLTables::const_iterator aIter = _rTables.begin(); aIter != aEnd; ++aIter)
|
for(OSQLTables::const_iterator aIter = _rTables.begin(); aIter != aEnd; ++aIter)
|
||||||
{
|
{
|
||||||
if ( aIter->second.is() )
|
if ( aIter->second.is() )
|
||||||
@@ -2124,6 +2124,9 @@ Reference< XPropertySet > OSQLParseTreeIterator::findColumn(const OSQLTables& _r
|
|||||||
if( xColumns.is() && xColumns->hasByName(rColumnName) && (xColumns->getByName(rColumnName) >>= xColumn) )
|
if( xColumns.is() && xColumns->hasByName(rColumnName) && (xColumns->getByName(rColumnName) >>= xColumn) )
|
||||||
{
|
{
|
||||||
OSL_ENSURE(xColumn.is(),"Column isn't a propertyset!");
|
OSL_ENSURE(xColumn.is(),"Column isn't a propertyset!");
|
||||||
|
// Cannot take "rTableRange = aIter->first" because that is the fully composed name
|
||||||
|
// that is, catalogName.schemaName.tableName
|
||||||
|
rTableRange = getString(xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TABLENAME)));
|
||||||
break; // This column must only exits once
|
break; // This column must only exits once
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user