summaryrefslogtreecommitdiff
path: root/connectivity/source/drivers/postgresql/pq_xindexcolumns.cxx
diff options
context:
space:
mode:
authorLionel Elie Mamane <lionel@mamane.lu>2011-08-02 16:10:00 +0200
committerLionel Elie Mamane <lionel@mamane.lu>2011-11-17 21:15:13 +0100
commite28033fdfad9750ebe96885b9514adee629acf88 (patch)
tree799ec7b900dd9c6addcea9a3230f606c60feab18 /connectivity/source/drivers/postgresql/pq_xindexcolumns.cxx
parent7ce4bb76593f2116a5943cd8c5f1bd75c2105e29 (diff)
Apply sdbc-postgresql.diff
Diffstat (limited to 'connectivity/source/drivers/postgresql/pq_xindexcolumns.cxx')
-rw-r--r--connectivity/source/drivers/postgresql/pq_xindexcolumns.cxx322
1 files changed, 322 insertions, 0 deletions
diff --git a/connectivity/source/drivers/postgresql/pq_xindexcolumns.cxx b/connectivity/source/drivers/postgresql/pq_xindexcolumns.cxx
new file mode 100644
index 000000000000..4218cf5568ca
--- /dev/null
+++ b/connectivity/source/drivers/postgresql/pq_xindexcolumns.cxx
@@ -0,0 +1,322 @@
+/*************************************************************************
+ *
+ * $RCSfile: pq_xindexcolumns.cxx,v $
+ *
+ * $Revision: 1.1.2.2 $
+ *
+ * last change: $Author: jbu $ $Date: 2004/08/29 08:33:31 $
+ *
+ * The Contents of this file are made available subject to the terms of
+ * either of the following licenses
+ *
+ * - GNU Lesser General Public License Version 2.1
+ * - Sun Industry Standards Source License Version 1.1
+ *
+ * Sun Microsystems Inc., October, 2000
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2000 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ *
+ * Sun Industry Standards Source License Version 1.1
+ * =================================================
+ * The contents of this file are subject to the Sun Industry Standards
+ * Source License Version 1.1 (the "License"); You may not use this file
+ * except in compliance with the License. You may obtain a copy of the
+ * License at http://www.openoffice.org/license.html.
+ *
+ * Software provided under this License is provided on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ * See the License for the specific provisions governing your rights and
+ * obligations concerning the Software.
+ *
+ * The Initial Developer of the Original Code is: Joerg Budischewski
+ *
+ * Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ * All Rights Reserved.
+ *
+ * Contributor(s): Joerg Budischewski
+ *
+ *
+ ************************************************************************/
+
+#include <vector>
+
+#include <rtl/ustrbuf.hxx>
+#include <rtl/strbuf.hxx>
+
+#include <com/sun/star/sdbc/XRow.hpp>
+#include <com/sun/star/sdbc/XParameters.hpp>
+#include <com/sun/star/sdbc/DataType.hpp>
+#include <com/sun/star/sdbc/ColumnValue.hpp>
+
+#include "pq_xcolumns.hxx"
+#include "pq_xindexcolumns.hxx"
+#include "pq_xindexcolumn.hxx"
+#include "pq_statics.hxx"
+#include "pq_tools.hxx"
+
+using osl::MutexGuard;
+
+using rtl::OUString;
+using rtl::OUStringBuffer;
+using rtl::OUStringToOString;
+
+using com::sun::star::beans::XPropertySet;
+
+using com::sun::star::uno::Any;
+using com::sun::star::uno::makeAny;
+using com::sun::star::uno::UNO_QUERY;
+using com::sun::star::uno::Type;
+using com::sun::star::uno::XInterface;
+using com::sun::star::uno::Reference;
+using com::sun::star::uno::Sequence;
+using com::sun::star::uno::RuntimeException;
+
+using com::sun::star::container::NoSuchElementException;
+using com::sun::star::lang::WrappedTargetException;
+
+using com::sun::star::sdbc::XRow;
+using com::sun::star::sdbc::XCloseable;
+using com::sun::star::sdbc::XStatement;
+using com::sun::star::sdbc::XResultSet;
+using com::sun::star::sdbc::XParameters;
+using com::sun::star::sdbc::XPreparedStatement;
+using com::sun::star::sdbc::XDatabaseMetaData;
+using com::sun::star::sdbc::SQLException;
+
+namespace pq_sdbc_driver
+{
+#define ASCII_STR(x) OUString( RTL_CONSTASCII_USTRINGPARAM( x ) )
+
+IndexColumns::IndexColumns(
+ const ::rtl::Reference< RefCountedMutex > & refMutex,
+ const ::com::sun::star::uno::Reference< com::sun::star::sdbc::XConnection > & origin,
+ ConnectionSettings *pSettings,
+ const rtl::OUString &schemaName,
+ const rtl::OUString &tableName,
+ const rtl::OUString &indexName,
+ const com::sun::star::uno::Sequence< rtl::OUString > &columns )
+ : Container( refMutex, origin, pSettings, ASCII_STR( "INDEX_COLUMN" ) ),
+ m_schemaName( schemaName ),
+ m_tableName( tableName ),
+ m_columns( columns ),
+ m_indexName( indexName )
+{}
+
+IndexColumns::~IndexColumns()
+{}
+
+static sal_Int32 findInSequence( const Sequence< rtl::OUString > & seq , const rtl::OUString &str)
+{
+ int index;
+ for( index = 0 ; index < seq.getLength() ; index ++ )
+ {
+ if( str == seq[index] )
+ break;
+ }
+ return index;
+}
+
+void IndexColumns::refresh()
+ throw (::com::sun::star::uno::RuntimeException)
+{
+ try
+ {
+ if( isLog( m_pSettings, LogLevel::INFO ) )
+ {
+ rtl::OStringBuffer buf;
+ buf.append( "sdbcx.IndexColumns get refreshed for index " );
+ buf.append( OUStringToOString( m_indexName, m_pSettings->encoding ) );
+ log( m_pSettings, LogLevel::INFO, buf.makeStringAndClear().getStr() );
+ }
+
+ osl::MutexGuard guard( m_refMutex->mutex );
+
+ Statics &st = getStatics();
+ Reference< XDatabaseMetaData > meta = m_origin->getMetaData();
+
+ Reference< XResultSet > rs =
+ meta->getColumns( Any(), m_schemaName, m_tableName, st.cPERCENT );
+
+ DisposeGuard disposeIt( rs );
+ Reference< XRow > xRow( rs , UNO_QUERY );
+ m_values = Sequence< Any >( m_columns.getLength() );
+
+ while( rs->next() )
+ {
+ OUString columnName = xRow->getString( 4 );
+
+ sal_Int32 index = findInSequence( m_columns, columnName );
+ if( index >= m_columns.getLength() )
+ continue;
+
+ IndexColumn * pIndexColumn =
+ new IndexColumn( m_refMutex, m_origin, m_pSettings );
+ Reference< com::sun::star::beans::XPropertySet > prop = pIndexColumn;
+
+ columnMetaData2SDBCX( pIndexColumn, xRow );
+ pIndexColumn->setPropertyValue_NoBroadcast_public(
+ st.IS_ASCENDING , makeAny( (sal_Bool ) sal_False ) );
+
+ m_values[ index ] = makeAny( prop );
+ m_name2index[ columnName ] = index;
+ }
+ }
+ catch ( com::sun::star::sdbc::SQLException & e )
+ {
+ throw RuntimeException( e.Message , e.Context );
+ }
+
+ fire( RefreshedBroadcaster( *this ) );
+}
+
+
+void IndexColumns::appendByDescriptor(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& future )
+ throw (::com::sun::star::sdbc::SQLException,
+ ::com::sun::star::container::ElementExistException,
+ ::com::sun::star::uno::RuntimeException)
+{
+ OUString name = extractStringProperty( future, getStatics().NAME );
+ throw com::sun::star::sdbc::SQLException(
+ ASCII_STR( "SDBC-POSTGRESQL: IndexesColumns.appendByDescriptor not yet implemented" ),
+ *this, OUString(), 1, Any() );
+// osl::MutexGuard guard( m_refMutex->mutex );
+// Statics & st = getStatics();
+// Reference< XPropertySet > past = createDataDescriptor();
+// past->setPropertyValue( st.IS_NULLABLE, makeAny( com::sun::star::sdbc::ColumnValue::NULLABLE ) );
+// alterColumnByDescriptor(
+// m_schemaName, m_tableName, m_pSettings->encoding, m_origin->createStatement() , past, future );
+
+}
+
+void IndexColumns::dropByName( const ::rtl::OUString& elementName )
+ throw (::com::sun::star::sdbc::SQLException,
+ ::com::sun::star::container::NoSuchElementException,
+ ::com::sun::star::uno::RuntimeException)
+{
+ throw com::sun::star::sdbc::SQLException(
+ ASCII_STR( "SDBC-POSTGRESQL: IndexesColumns.dropByName not yet implemented" ),
+ *this, OUString(), 1, Any() );
+// String2IntMap::const_iterator ii = m_name2index.find( elementName );
+// if( ii == m_name2index.end() )
+// {
+// OUStringBuffer buf( 128 );
+// buf.appendAscii( "Column " );
+// buf.append( elementName );
+// buf.appendAscii( " is unknown in table " );
+// buf.append( m_schemaName );
+// buf.appendAscii( "." );
+// buf.append( m_tableName );
+// buf.appendAscii( ", so it can't be dropped" );
+// throw com::sun::star::container::NoSuchElementException(
+// buf.makeStringAndClear(), *this );
+// }
+// dropByIndex( ii->second );
+}
+
+void IndexColumns::dropByIndex( sal_Int32 index )
+ throw (::com::sun::star::sdbc::SQLException,
+ ::com::sun::star::lang::IndexOutOfBoundsException,
+ ::com::sun::star::uno::RuntimeException)
+{
+ throw com::sun::star::sdbc::SQLException(
+ ASCII_STR( "SDBC-POSTGRESQL: IndexesColumns.dropByIndex not yet implemented" ),
+ *this, OUString(), 1, Any() );
+// osl::MutexGuard guard( m_refMutex->mutex );
+// if( index < 0 || index >= m_values.getLength() )
+// {
+// OUStringBuffer buf( 128 );
+// buf.appendAscii( "COLUMNS: Index out of range (allowed 0 to " );
+// buf.append((sal_Int32)(m_values.getLength() -1) );
+// buf.appendAscii( ", got " );
+// buf.append( index );
+// buf.appendAscii( ")" );
+// throw com::sun::star::lang::IndexOutOfBoundsException(
+// buf.makeStringAndClear(), *this );
+// }
+
+// Reference< XPropertySet > set;
+// m_values[index] >>= set;
+// Statics &st = getStatics();
+// OUString name;
+// set->getPropertyValue( st.NAME ) >>= name;
+
+// OUStringBuffer update( 128 );
+// update.appendAscii( "ALTER TABLE ONLY");
+// bufferQuoteQualifiedIdentifier( update, m_schemaName, m_tableName );
+// update.appendAscii( "DROP COLUMN" );
+// bufferQuoteIdentifier( update, name );
+// Reference< XStatement > stmt = m_origin->createStatement( );
+// DisposeGuard disposeIt( stmt );
+// stmt->executeUpdate( update.makeStringAndClear() );
+
+}
+
+
+Reference< ::com::sun::star::beans::XPropertySet > IndexColumns::createDataDescriptor()
+ throw (::com::sun::star::uno::RuntimeException)
+{
+ return new IndexColumnDescriptor( m_refMutex, m_origin, m_pSettings );
+}
+
+Reference< com::sun::star::container::XNameAccess > IndexColumns::create(
+ const ::rtl::Reference< RefCountedMutex > & refMutex,
+ const ::com::sun::star::uno::Reference< com::sun::star::sdbc::XConnection > & origin,
+ ConnectionSettings *pSettings,
+ const rtl::OUString &schemaName,
+ const rtl::OUString &tableName,
+ const rtl::OUString &indexName,
+ const Sequence< rtl::OUString > &columns )
+{
+ IndexColumns *pIndexColumns = new IndexColumns(
+ refMutex, origin, pSettings, schemaName, tableName, indexName, columns );
+ Reference< com::sun::star::container::XNameAccess > ret = pIndexColumns;
+ pIndexColumns->refresh();
+
+ return ret;
+}
+
+//_________________________________________________________________________________________
+IndexColumnDescriptors::IndexColumnDescriptors(
+ const ::rtl::Reference< RefCountedMutex > & refMutex,
+ const ::com::sun::star::uno::Reference< com::sun::star::sdbc::XConnection > & origin,
+ ConnectionSettings *pSettings)
+ : Container( refMutex, origin, pSettings, getStatics().INDEX_COLUMN )
+{}
+
+Reference< com::sun::star::container::XNameAccess > IndexColumnDescriptors::create(
+ const ::rtl::Reference< RefCountedMutex > & refMutex,
+ const ::com::sun::star::uno::Reference< com::sun::star::sdbc::XConnection > & origin,
+ ConnectionSettings *pSettings)
+{
+ return new IndexColumnDescriptors( refMutex, origin, pSettings );
+}
+
+::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > IndexColumnDescriptors::createDataDescriptor()
+ throw (::com::sun::star::uno::RuntimeException)
+{
+ return new IndexColumnDescriptor( m_refMutex, m_origin, m_pSettings );
+}
+
+};