| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| // MARKER(update_precomp.py): autogen include statement, do not remove |
| #include "precompiled_connectivity.hxx" |
| #include "ado/ADatabaseMetaDataResultSetMetaData.hxx" |
| #include "ado/Awrapado.hxx" |
| #include "connectivity/dbexception.hxx" |
| |
| |
| using namespace connectivity; |
| using namespace connectivity::ado; |
| using namespace com::sun::star::uno; |
| using namespace com::sun::star::lang; |
| using namespace com::sun::star::beans; |
| using namespace com::sun::star::sdbc; |
| |
| // ------------------------------------------------------------------------- |
| ODatabaseMetaDataResultSetMetaData::~ODatabaseMetaDataResultSetMetaData() |
| { |
| if(m_pRecordSet) |
| m_pRecordSet->Release(); |
| } |
| // ------------------------------------------------------------------------- |
| sal_Int32 SAL_CALL ODatabaseMetaDataResultSetMetaData::getColumnDisplaySize( sal_Int32 column ) throw(SQLException, RuntimeException) |
| { |
| sal_Int32 nSize = 0; |
| if(m_mColumns.size() && (m_mColumnsIter = m_mColumns.find(column)) != m_mColumns.end()) |
| nSize = (*m_mColumnsIter).second.getColumnDisplaySize(); |
| else if(m_pRecordSet) |
| { |
| WpADOField aField = ADOS::getField(m_pRecordSet,m_vMapping[column]); |
| if(aField.IsValid()) |
| nSize = aField.GetActualSize(); |
| } |
| return nSize; |
| } |
| // ------------------------------------------------------------------------- |
| |
| sal_Int32 SAL_CALL ODatabaseMetaDataResultSetMetaData::getColumnType( sal_Int32 column ) throw(SQLException, RuntimeException) |
| { |
| sal_Int32 nType = 0; |
| if(m_mColumns.size() && (m_mColumnsIter = m_mColumns.find(column)) != m_mColumns.end()) |
| nType = (*m_mColumnsIter).second.getColumnType(); |
| else if(m_pRecordSet) |
| { |
| WpADOField aField = ADOS::getField(m_pRecordSet,m_vMapping[column]); |
| nType = ADOS::MapADOType2Jdbc(aField.GetADOType()); |
| } |
| return nType; |
| } |
| // ------------------------------------------------------------------------- |
| |
| sal_Int32 SAL_CALL ODatabaseMetaDataResultSetMetaData::getColumnCount( ) throw(SQLException, RuntimeException) |
| { |
| if(!m_pRecordSet) |
| return 0; |
| if(m_nColCount != -1) |
| return m_nColCount; |
| |
| if(m_vMapping.size()) |
| return m_mColumns.size(); |
| |
| ADOFields* pFields = NULL; |
| m_pRecordSet->get_Fields(&pFields); |
| WpOLEAppendCollection<ADOFields, ADOField, WpADOField> aFields(pFields); |
| m_nColCount = aFields.GetItemCount(); |
| return m_nColCount; |
| } |
| // ------------------------------------------------------------------------- |
| |
| ::rtl::OUString SAL_CALL ODatabaseMetaDataResultSetMetaData::getColumnName( sal_Int32 column ) throw(SQLException, RuntimeException) |
| { |
| if(m_mColumns.size() && (m_mColumnsIter = m_mColumns.find(column)) != m_mColumns.end()) |
| return (*m_mColumnsIter).second.getColumnName(); |
| if(!m_pRecordSet) |
| return ::rtl::OUString(); |
| WpADOField aField = ADOS::getField(m_pRecordSet,m_vMapping[column]); |
| if(aField.IsValid()) |
| return aField.GetName(); |
| |
| return ::rtl::OUString(); |
| } |
| // ------------------------------------------------------------------------- |
| ::rtl::OUString SAL_CALL ODatabaseMetaDataResultSetMetaData::getColumnLabel( sal_Int32 column ) throw(SQLException, RuntimeException) |
| { |
| if(m_mColumns.size() && (m_mColumnsIter = m_mColumns.find(column)) != m_mColumns.end()) |
| return (*m_mColumnsIter).second.getColumnLabel(); |
| return getColumnName(column); |
| } |
| // ------------------------------------------------------------------------- |
| |
| sal_Bool SAL_CALL ODatabaseMetaDataResultSetMetaData::isCurrency( sal_Int32 column ) throw(SQLException, RuntimeException) |
| { |
| if(m_mColumns.size() && (m_mColumnsIter = m_mColumns.find(column)) != m_mColumns.end()) |
| return (*m_mColumnsIter).second.isCurrency(); |
| if(!m_pRecordSet) |
| return 0; |
| WpADOField aField = ADOS::getField(m_pRecordSet,m_vMapping[column]); |
| if(aField.IsValid()) |
| { |
| return (aField.GetAttributes() & adFldFixed) == adFldFixed; |
| } |
| return sal_False; |
| } |
| // ------------------------------------------------------------------------- |
| |
| |
| sal_Bool SAL_CALL ODatabaseMetaDataResultSetMetaData::isSigned( sal_Int32 column ) throw(SQLException, RuntimeException) |
| { |
| if(m_mColumns.size() && (m_mColumnsIter = m_mColumns.find(column)) != m_mColumns.end()) |
| return (*m_mColumnsIter).second.isSigned(); |
| if(!m_pRecordSet) |
| return 0; |
| WpADOField aField = ADOS::getField(m_pRecordSet,m_vMapping[column]); |
| if(aField.IsValid()) |
| { |
| return (aField.GetAttributes() & adFldNegativeScale) == adFldNegativeScale; |
| } |
| return sal_False; |
| } |
| // ------------------------------------------------------------------------- |
| sal_Int32 SAL_CALL ODatabaseMetaDataResultSetMetaData::getPrecision( sal_Int32 column ) throw(SQLException, RuntimeException) |
| { |
| if(m_mColumns.size() && (m_mColumnsIter = m_mColumns.find(column)) != m_mColumns.end()) |
| return (*m_mColumnsIter).second.getPrecision(); |
| if(!m_pRecordSet) |
| return 0; |
| WpADOField aField = ADOS::getField(m_pRecordSet,m_vMapping[column]); |
| if(aField.IsValid()) |
| return aField.GetPrecision(); |
| return 0; |
| } |
| // ------------------------------------------------------------------------- |
| sal_Int32 SAL_CALL ODatabaseMetaDataResultSetMetaData::getScale( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException) |
| { |
| if(m_mColumns.size() && (m_mColumnsIter = m_mColumns.find(column)) != m_mColumns.end()) |
| return (*m_mColumnsIter).second.getScale(); |
| |
| if(!m_pRecordSet) |
| return 0; |
| |
| WpADOField aField = ADOS::getField(m_pRecordSet,m_vMapping[column]); |
| if(aField.IsValid()) |
| return aField.GetNumericScale(); |
| return 0; |
| } |
| // ------------------------------------------------------------------------- |
| |
| sal_Int32 SAL_CALL ODatabaseMetaDataResultSetMetaData::isNullable( sal_Int32 column ) throw(SQLException, RuntimeException) |
| { |
| if(m_mColumns.size() && (m_mColumnsIter = m_mColumns.find(column)) != m_mColumns.end()) |
| return (*m_mColumnsIter).second.isNullable(); |
| |
| if(!m_pRecordSet) |
| return 0; |
| |
| WpADOField aField = ADOS::getField(m_pRecordSet,m_vMapping[column]); |
| if(aField.IsValid()) |
| { |
| return (aField.GetAttributes() & adFldIsNullable) == adFldIsNullable; |
| } |
| return sal_False; |
| } |
| // ------------------------------------------------------------------------- |
| |
| sal_Bool SAL_CALL ODatabaseMetaDataResultSetMetaData::isReadOnly( sal_Int32 column ) throw(SQLException, RuntimeException) |
| { |
| if(m_mColumns.size() && (m_mColumnsIter = m_mColumns.find(column)) != m_mColumns.end()) |
| return (*m_mColumnsIter).second.isReadOnly(); |
| |
| if(!m_pRecordSet) |
| return 0; |
| |
| WpADOField aField = ADOS::getField(m_pRecordSet,m_vMapping[column]); |
| if(aField.IsValid()) |
| { |
| // return (aField.GetStatus() & adFieldReadOnly) == adFieldReadOnly; |
| } |
| return sal_False; |
| } |
| // ------------------------------------------------------------------------- |
| |
| sal_Bool SAL_CALL ODatabaseMetaDataResultSetMetaData::isDefinitelyWritable( sal_Int32 column ) throw(SQLException, RuntimeException) |
| { |
| if(m_mColumns.size() && (m_mColumnsIter = m_mColumns.find(column)) != m_mColumns.end()) |
| return (*m_mColumnsIter).second.isDefinitelyWritable(); |
| |
| if(!m_pRecordSet) |
| return 0; |
| |
| WpADOField aField = ADOS::getField(m_pRecordSet,m_vMapping[column]); |
| if(aField.IsValid()) |
| { |
| return (aField.GetAttributes() & adFldUpdatable) == adFldUpdatable; |
| } |
| return sal_False; |
| ; |
| } |
| // ------------------------------------------------------------------------- |
| sal_Bool SAL_CALL ODatabaseMetaDataResultSetMetaData::isWritable( sal_Int32 column ) throw(SQLException, RuntimeException) |
| { |
| if(m_mColumns.size() && (m_mColumnsIter = m_mColumns.find(column)) != m_mColumns.end()) |
| return (*m_mColumnsIter).second.isWritable(); |
| return isDefinitelyWritable(column); |
| } |
| // ----------------------------------------------------------------------------- |
| |
| |