summaryrefslogtreecommitdiff
path: root/connectivity/source/drivers/file/FStatement.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'connectivity/source/drivers/file/FStatement.cxx')
-rw-r--r--connectivity/source/drivers/file/FStatement.cxx90
1 files changed, 43 insertions, 47 deletions
diff --git a/connectivity/source/drivers/file/FStatement.cxx b/connectivity/source/drivers/file/FStatement.cxx
index 08c4f7fdd844..ee260fdb33e5 100644
--- a/connectivity/source/drivers/file/FStatement.cxx
+++ b/connectivity/source/drivers/file/FStatement.cxx
@@ -32,11 +32,13 @@
#include <com/sun/star/sdbc/FetchDirection.hpp>
#include <com/sun/star/lang/DisposedException.hpp>
#include <comphelper/sequence.hxx>
+#include <comphelper/servicehelper.hxx>
#include <cppuhelper/typeprovider.hxx>
#include <comphelper/types.hxx>
#include <connectivity/dbexception.hxx>
#include <strings.hrc>
#include <algorithm>
+#include <cstddef>
namespace connectivity::file
{
@@ -91,7 +93,7 @@ void OStatement_Base::disposeResultSet()
{
SAL_INFO( "connectivity.drivers", "file Ocke.Janssen@sun.com OStatement_Base::disposeResultSet" );
// free the cursor if alive
- Reference< XComponent > xComp(m_xResultSet.get(), UNO_QUERY);
+ rtl::Reference< OResultSet > xComp(m_xResultSet.get());
assert(xComp.is() || !m_xResultSet.get().is());
if (xComp.is())
xComp->dispose();
@@ -128,12 +130,12 @@ void OStatement_BASE2::disposing()
OStatement_Base::disposing();
}
-void SAL_CALL OStatement_Base::acquire() throw()
+void SAL_CALL OStatement_Base::acquire() noexcept
{
OStatement_BASE::acquire();
}
-void SAL_CALL OStatement_BASE2::release() throw()
+void SAL_CALL OStatement_BASE2::release() noexcept
{
OStatement_BASE::release();
}
@@ -173,7 +175,7 @@ void OStatement_Base::closeResultSet()
::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(OStatement_BASE::rBHelper.bDisposed);
- Reference< XCloseable > xCloseable(m_xResultSet.get(), UNO_QUERY);
+ rtl::Reference< OResultSet > xCloseable(m_xResultSet.get());
assert(xCloseable.is() || !m_xResultSet.get().is());
if (xCloseable.is())
{
@@ -192,7 +194,7 @@ Any SAL_CALL OStatement_Base::getWarnings( )
::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(OStatement_BASE::rBHelper.bDisposed);
- return makeAny(m_aLastWarning);
+ return Any(m_aLastWarning);
}
void SAL_CALL OStatement_Base::clearWarnings( )
@@ -216,19 +218,19 @@ void SAL_CALL OStatement_Base::clearWarnings( )
return *getArrayHelper();
}
-OResultSet* OStatement::createResultSet()
+rtl::Reference<OResultSet> OStatement::createResultSet()
{
return new OResultSet(this,m_aSQLIterator);
}
-IMPLEMENT_SERVICE_INFO(OStatement,"com.sun.star.sdbc.driver.file.Statement","com.sun.star.sdbc.Statement");
+IMPLEMENT_SERVICE_INFO(OStatement,u"com.sun.star.sdbc.driver.file.Statement"_ustr,u"com.sun.star.sdbc.Statement"_ustr);
-void SAL_CALL OStatement::acquire() throw()
+void SAL_CALL OStatement::acquire() noexcept
{
OStatement_BASE2::acquire();
}
-void SAL_CALL OStatement::release() throw()
+void SAL_CALL OStatement::release() noexcept
{
OStatement_BASE2::release();
}
@@ -250,20 +252,18 @@ Reference< XResultSet > SAL_CALL OStatement::executeQuery( const OUString& sql )
checkDisposed(OStatement_BASE::rBHelper.bDisposed);
construct(sql);
- Reference< XResultSet > xRS;
- OResultSet* pResult = createResultSet();
- xRS = pResult;
- initializeResultSet(pResult);
- m_xResultSet = xRS;
+ rtl::Reference<OResultSet> pResult = createResultSet();
+ initializeResultSet(pResult.get());
+ m_xResultSet = pResult.get();
pResult->OpenImpl();
- return xRS;
+ return pResult;
}
Reference< XConnection > SAL_CALL OStatement::getConnection( )
{
- return Reference< XConnection >(m_pConnection.get());
+ return m_pConnection;
}
sal_Int32 SAL_CALL OStatement::executeUpdate( const OUString& sql )
@@ -302,9 +302,9 @@ Any SAL_CALL OStatement::queryInterface( const Type & rType )
return aRet.hasValue() ? aRet : OStatement_BASE2::queryInterface( rType);
}
-void OStatement_Base::anylizeSQL()
+void OStatement_Base::analyzeSQL()
{
- OSL_ENSURE(m_pSQLAnalyzer,"OResultSet::anylizeSQL: Analyzer isn't set!");
+ OSL_ENSURE(m_pSQLAnalyzer,"OResultSet::analyzeSQL: Analyzer isn't set!");
// start analysing the statement
m_pSQLAnalyzer->setOrigColumns(m_xColNames);
m_pSQLAnalyzer->start(m_pParseTree);
@@ -394,16 +394,19 @@ void OStatement_Base::construct(const OUString& sql)
case OSQLStatementType::Unknown:
m_pConnection->throwGenericSQLException(STR_QUERY_TOO_COMPLEX,*this);
break;
+ case OSQLStatementType::Select:
+ if(SQL_ISRULE(m_aSQLIterator.getParseTree(), union_statement))
+ {
+ m_pConnection->throwGenericSQLException(STR_QUERY_TOO_COMPLEX, *this);
+ }
+ assert(SQL_ISRULE(m_aSQLIterator.getParseTree(), select_statement));
+ break;
default:
break;
}
// at this moment we support only one table per select statement
- Reference< css::lang::XUnoTunnel> xTunnel(rTabs.begin()->second,UNO_QUERY);
- if(xTunnel.is())
- {
- m_pTable = reinterpret_cast<OFileTable*>(xTunnel->getSomething(OFileTable::getUnoTunnelId()));
- }
+ m_pTable = dynamic_cast<OFileTable*>(rTabs.begin()->second.get());
OSL_ENSURE(m_pTable.is(),"No table!");
if ( m_pTable.is() )
m_xColNames = m_pTable->getColumns();
@@ -428,7 +431,7 @@ void OStatement_Base::construct(const OUString& sql)
m_pSQLAnalyzer.reset( new OSQLAnalyzer(m_pConnection.get()) );
- anylizeSQL();
+ analyzeSQL();
}
void OStatement_Base::createColumnMapping()
@@ -436,7 +439,7 @@ void OStatement_Base::createColumnMapping()
// initialize the column index map (mapping select columns to table columns)
::rtl::Reference<connectivity::OSQLColumns> xColumns = m_aSQLIterator.getSelectColumns();
m_aColMapping.resize(xColumns->size() + 1);
- for (sal_Int32 i=0; i<static_cast<sal_Int32>(m_aColMapping.size()); ++i)
+ for (std::size_t i=0; i<m_aColMapping.size(); ++i)
m_aColMapping[i] = i;
Reference<XIndexAccess> xNames(m_xColNames,UNO_QUERY);
@@ -449,10 +452,10 @@ void OStatement_Base::initializeResultSet(OResultSet* _pResult)
GetAssignValues();
_pResult->setSqlAnalyzer(m_pSQLAnalyzer.get());
- _pResult->setOrderByColumns(m_aOrderbyColumnNumber);
- _pResult->setOrderByAscending(m_aOrderbyAscending);
+ _pResult->setOrderByColumns(std::vector(m_aOrderbyColumnNumber));
+ _pResult->setOrderByAscending(std::vector(m_aOrderbyAscending));
_pResult->setBindingRow(m_aRow);
- _pResult->setColumnMapping(m_aColMapping);
+ _pResult->setColumnMapping(std::vector(m_aColMapping));
_pResult->setEvaluationRow(m_aEvaluateRow);
_pResult->setAssignValues(m_aAssignValues);
_pResult->setSelectRow(m_aSelectRow);
@@ -494,11 +497,8 @@ void OStatement_Base::GetAssignValues()
OSL_ENSURE(SQL_ISRULE(pOptColumnCommalist,opt_column_commalist),"OResultSet: Error in Parse Tree");
if (pOptColumnCommalist->count() == 0)
{
- const Sequence< OUString>& aNames = m_xColNames->getElementNames();
- const OUString* pBegin = aNames.getConstArray();
- const OUString* pEnd = pBegin + aNames.getLength();
- for (; pBegin != pEnd; ++pBegin)
- aColumnNameList.push_back(*pBegin);
+ const Sequence< OUString> aNames = m_xColNames->getElementNames();
+ aColumnNameList.insert(aColumnNameList.end(), aNames.begin(), aNames.end());
}
else
{
@@ -574,7 +574,7 @@ void OStatement_Base::GetAssignValues()
OSL_ENSURE(m_pParseTree->count() >= 4,"OResultSet: Error in Parse Tree");
OSQLParseNode * pAssignmentCommalist = m_pParseTree->getChild(3);
- OSL_ENSURE(pAssignmentCommalist != nullptr,"OResultSet: pAssignmentCommalist == NULL");
+ assert(pAssignmentCommalist && "OResultSet: pAssignmentCommalist == NULL");
OSL_ENSURE(SQL_ISRULE(pAssignmentCommalist,assignment_commalist),"OResultSet: Error in Parse Tree");
OSL_ENSURE(pAssignmentCommalist->count() > 0,"OResultSet: pAssignmentCommalist->count() <= 0");
@@ -583,15 +583,15 @@ void OStatement_Base::GetAssignValues()
for (size_t i = 0; i < pAssignmentCommalist->count(); i++)
{
OSQLParseNode * pAssignment = pAssignmentCommalist->getChild(i);
- OSL_ENSURE(pAssignment != nullptr,"OResultSet: pAssignment == NULL");
+ assert(pAssignment && "OResultSet: pAssignment == NULL");
OSL_ENSURE(SQL_ISRULE(pAssignment,assignment),"OResultSet: Error in Parse Tree");
OSL_ENSURE(pAssignment->count() == 3,"OResultSet: pAssignment->count() != 3");
OSQLParseNode * pCol = pAssignment->getChild(0);
- OSL_ENSURE(pCol != nullptr,"OResultSet: pCol == NULL");
+ assert(pCol && "OResultSet: pCol == NULL");
OSQLParseNode * pComp = pAssignment->getChild(1);
- OSL_ENSURE(pComp != nullptr,"OResultSet: pComp == NULL");
+ assert(pComp && "OResultSet: pComp == NULL");
OSL_ENSURE(pComp->getNodeType() == SQLNodeType::Equal,"OResultSet: pComp->getNodeType() != SQLNodeType::Comparison");
if (pComp->getTokenValue().toChar() != '=')
{
@@ -610,9 +610,9 @@ void OStatement_Base::GetAssignValues()
void OStatement_Base::ParseAssignValues(const std::vector< OUString>& aColumnNameList,OSQLParseNode* pRow_Value_Constructor_Elem, sal_Int32 nIndex)
{
OSL_ENSURE(o3tl::make_unsigned(nIndex) <= aColumnNameList.size(),"SdbFileCursor::ParseAssignValues: nIndex > aColumnNameList.GetTokenCount()");
- OUString aColumnName(aColumnNameList[nIndex]);
+ const OUString& aColumnName(aColumnNameList[nIndex]);
OSL_ENSURE(aColumnName.getLength() > 0,"OResultSet: Column-Name not found");
- OSL_ENSURE(pRow_Value_Constructor_Elem != nullptr,"OResultSet: pRow_Value_Constructor_Elem must not be NULL!");
+ assert(pRow_Value_Constructor_Elem != nullptr && "OResultSet: pRow_Value_Constructor_Elem must not be NULL!");
if (pRow_Value_Constructor_Elem->getNodeType() == SQLNodeType::String ||
pRow_Value_Constructor_Elem->getNodeType() == SQLNodeType::IntNum ||
@@ -659,14 +659,6 @@ void OStatement_Base::SetAssignValue(const OUString& aColumnName,
{
switch (::comphelper::getINT32(xCol->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPE))))
{
- // put criteria depending on the Type as String or double in the variable
- case DataType::CHAR:
- case DataType::VARCHAR:
- case DataType::LONGVARCHAR:
- *(*m_aAssignValues)[nId] = ORowSetValue(aValue);
- //Characterset is already converted, since the entire statement was converted
- break;
-
case DataType::BIT:
if (aValue.equalsIgnoreAsciiCase("TRUE") || aValue[0] == '1')
*(*m_aAssignValues)[nId] = true;
@@ -675,6 +667,10 @@ void OStatement_Base::SetAssignValue(const OUString& aColumnName,
else
throwFunctionSequenceException(*this);
break;
+ case DataType::CHAR:
+ case DataType::VARCHAR:
+ case DataType::LONGVARCHAR:
+ //Characterset is already converted, since the entire statement was converted
case DataType::TINYINT:
case DataType::SMALLINT:
case DataType::INTEGER: