connectivity/source/drivers/postgresql/pq_preparedstatement.cxx | 12 ++++--- connectivity/source/drivers/postgresql/pq_statement.cxx | 17 +++++++--- 2 files changed, 21 insertions(+), 8 deletions(-)
New commits: commit aa41e17e809a5398974b3b5f53a41c6632df284c Author: Lionel Elie Mamane <lio...@mamane.lu> AuthorDate: Tue Dec 18 22:12:06 2018 +0100 Commit: Lionel Elie Mamane <lio...@mamane.lu> CommitDate: Tue Dec 18 22:18:12 2018 +0100 postgresql: any execute should close previous ResultSet not only executeQuery. Change-Id: I2ee72078c48f622484dba46436f53990a45da364 diff --git a/connectivity/source/drivers/postgresql/pq_preparedstatement.cxx b/connectivity/source/drivers/postgresql/pq_preparedstatement.cxx index a976d7e3dfc4..3f721bf7f1ab 100644 --- a/connectivity/source/drivers/postgresql/pq_preparedstatement.cxx +++ b/connectivity/source/drivers/postgresql/pq_preparedstatement.cxx @@ -278,10 +278,6 @@ void PreparedStatement::raiseSQLException( const char * errorMsg ) Reference< XResultSet > PreparedStatement::executeQuery( ) { - Reference< XCloseable > lastResultSet = m_lastResultset; - if( lastResultSet.is() ) - lastResultSet->close(); - if( ! execute( ) ) { raiseSQLException( "not a query" ); @@ -357,6 +353,10 @@ sal_Bool PreparedStatement::execute( ) m_executedStatement = buf.makeStringAndClear(); + Reference< XCloseable > lastResultSet = m_lastResultset; + if( lastResultSet.is() ) + lastResultSet->close(); + m_lastResultset.clear(); m_lastTableInserted.clear(); diff --git a/connectivity/source/drivers/postgresql/pq_statement.cxx b/connectivity/source/drivers/postgresql/pq_statement.cxx index a95a48674607..471bded3330c 100644 --- a/connectivity/source/drivers/postgresql/pq_statement.cxx +++ b/connectivity/source/drivers/postgresql/pq_statement.cxx @@ -235,10 +235,6 @@ void Statement::raiseSQLException( Reference< XResultSet > Statement::executeQuery(const OUString& sql ) { - Reference< XCloseable > lastResultSetHolder = m_lastResultset; - if( lastResultSetHolder.is() ) - lastResultSetHolder->close(); - if( ! execute( sql ) ) { raiseSQLException( sql, "not a query" ); @@ -805,6 +801,10 @@ sal_Bool Statement::execute( const OUString& sql ) checkClosed(); OString cmd = OUStringToOString( sql, m_pSettings ); + Reference< XCloseable > lastResultSetHolder = m_lastResultset; + if( lastResultSetHolder.is() ) + lastResultSetHolder->close(); + m_lastResultset.clear(); m_lastTableInserted.clear(); commit a9d4f2bebda3380a3b6843f9df1204c9b062b3a8 Author: Lionel Elie Mamane <lio...@mamane.lu> AuthorDate: Tue Dec 18 22:04:18 2018 +0100 Commit: Lionel Elie Mamane <lio...@mamane.lu> CommitDate: Tue Dec 18 22:18:12 2018 +0100 postgresql: correctly implement XMultipleResults interface note that we implement it in a very limited way, since we will always return only a single result. Change-Id: Idc7927d1a6896b78f6de8627ba857982821ac629 diff --git a/connectivity/source/drivers/postgresql/pq_preparedstatement.cxx b/connectivity/source/drivers/postgresql/pq_preparedstatement.cxx index 865222cbcc83..a976d7e3dfc4 100644 --- a/connectivity/source/drivers/postgresql/pq_preparedstatement.cxx +++ b/connectivity/source/drivers/postgresql/pq_preparedstatement.cxx @@ -741,6 +741,10 @@ sal_Int32 PreparedStatement::getUpdateCount( ) } sal_Bool PreparedStatement::getMoreResults( ) { + Reference< XCloseable > lastResultSet = m_lastResultset; + if( lastResultSet.is() ) + lastResultSet->close(); + m_multipleResultUpdateCount = -1; return false; } diff --git a/connectivity/source/drivers/postgresql/pq_statement.cxx b/connectivity/source/drivers/postgresql/pq_statement.cxx index db99a20910b0..a95a48674607 100644 --- a/connectivity/source/drivers/postgresql/pq_statement.cxx +++ b/connectivity/source/drivers/postgresql/pq_statement.cxx @@ -936,6 +936,15 @@ sal_Int32 Statement::getUpdateCount( ) sal_Bool Statement::getMoreResults( ) { + // The PostgreSQL C interface always returns a single result, + // so we will never have multiple ones. + // Implicitly close the open resultset (if any) as per spec, + // and setup to signal "no more result, neither as resultset, + // nor as update count". + Reference< XCloseable > lastResultSetHolder = m_lastResultset; + if( lastResultSetHolder.is() ) + lastResultSetHolder->close(); + m_multipleResultUpdateCount = -1; return false; } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits