1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_connectivity.hxx" 26 27 #include "MacabResultSetMetaData.hxx" 28 #include "MacabHeader.hxx" 29 #include "MacabRecords.hxx" 30 #include "MacabAddressBook.hxx" 31 #include "macabutilities.hxx" 32 #include "resource/macab_res.hrc" 33 34 using namespace connectivity::macab; 35 using namespace com::sun::star::uno; 36 using namespace com::sun::star::lang; 37 using namespace com::sun::star::sdbc; 38 39 MacabResultSetMetaData::MacabResultSetMetaData(MacabConnection* _pConnection, ::rtl::OUString _sTableName) 40 : m_pConnection(_pConnection), 41 m_sTableName(_sTableName), 42 m_aMacabFields() 43 { 44 } 45 // ------------------------------------------------------------------------- 46 MacabResultSetMetaData::~MacabResultSetMetaData() 47 { 48 } 49 // ------------------------------------------------------------------------- 50 void MacabResultSetMetaData::setMacabFields(const ::vos::ORef<connectivity::OSQLColumns> &xColumns) throw(SQLException) 51 { 52 OSQLColumns::Vector::const_iterator aIter; 53 static const ::rtl::OUString aName(::rtl::OUString::createFromAscii("Name")); 54 MacabRecords *aRecords; 55 MacabHeader *aHeader; 56 57 aRecords = m_pConnection->getAddressBook()->getMacabRecords(m_sTableName); 58 59 // In case, somehow, we don't have anything with the name m_sTableName 60 if(aRecords == NULL) 61 { 62 impl_throwError(STR_NO_TABLE); 63 } 64 65 aHeader = aRecords->getHeader(); 66 67 for (aIter = xColumns->get().begin(); aIter != xColumns->get().end(); ++aIter) 68 { 69 ::rtl::OUString aFieldName; 70 sal_uInt32 nFieldNumber; 71 72 (*aIter)->getPropertyValue(aName) >>= aFieldName; 73 nFieldNumber = aHeader->getColumnNumber(aFieldName); 74 m_aMacabFields.push_back(nFieldNumber); 75 } 76 77 } 78 // ------------------------------------------------------------------------- 79 sal_Int32 SAL_CALL MacabResultSetMetaData::getColumnDisplaySize(sal_Int32 column) throw(SQLException, RuntimeException) 80 { 81 // For now, all columns are the same size. 82 return 50; 83 } 84 // ------------------------------------------------------------------------- 85 sal_Int32 SAL_CALL MacabResultSetMetaData::getColumnType(sal_Int32 column) throw(SQLException, RuntimeException) 86 { 87 MacabRecords *aRecords; 88 MacabHeader *aHeader; 89 macabfield *aField; 90 91 aRecords = m_pConnection->getAddressBook()->getMacabRecords(m_sTableName); 92 93 // In case, somehow, we don't have anything with the name m_sTableName 94 if(aRecords == NULL) 95 { 96 impl_throwError(STR_NO_TABLE); 97 } 98 99 aHeader = aRecords->getHeader(); 100 aField = aHeader->get(column-1); 101 102 if(aField == NULL) 103 { 104 ::dbtools::throwInvalidIndexException(*this,Any()); 105 return -1; 106 } 107 108 return ABTypeToDataType(aField->type); 109 } 110 // ------------------------------------------------------------------------- 111 sal_Int32 SAL_CALL MacabResultSetMetaData::getColumnCount() throw(SQLException, RuntimeException) 112 { 113 return m_aMacabFields.size(); 114 } 115 // ------------------------------------------------------------------------- 116 sal_Bool SAL_CALL MacabResultSetMetaData::isCaseSensitive(sal_Int32) throw(SQLException, RuntimeException) 117 { 118 return sal_True; 119 } 120 // ------------------------------------------------------------------------- 121 ::rtl::OUString SAL_CALL MacabResultSetMetaData::getSchemaName(sal_Int32) throw(SQLException, RuntimeException) 122 { 123 return ::rtl::OUString(); 124 } 125 // ------------------------------------------------------------------------- 126 ::rtl::OUString SAL_CALL MacabResultSetMetaData::getColumnName(sal_Int32 column) throw(SQLException, RuntimeException) 127 { 128 sal_uInt32 nFieldNumber = m_aMacabFields[column - 1]; 129 MacabRecords *aRecords; 130 MacabHeader *aHeader; 131 132 aRecords = m_pConnection->getAddressBook()->getMacabRecords(m_sTableName); 133 134 // In case, somehow, we don't have anything with the name m_sTableName 135 if(aRecords == NULL) 136 { 137 impl_throwError(STR_NO_TABLE); 138 } 139 140 aHeader = aRecords->getHeader(); 141 ::rtl::OUString aName = aHeader->getString(nFieldNumber); 142 143 return aName; 144 } 145 // ------------------------------------------------------------------------- 146 ::rtl::OUString SAL_CALL MacabResultSetMetaData::getTableName(sal_Int32) throw(SQLException, RuntimeException) 147 { 148 return m_sTableName; 149 } 150 // ------------------------------------------------------------------------- 151 ::rtl::OUString SAL_CALL MacabResultSetMetaData::getCatalogName(sal_Int32) throw(SQLException, RuntimeException) 152 { 153 return ::rtl::OUString(); 154 } 155 // ------------------------------------------------------------------------- 156 ::rtl::OUString SAL_CALL MacabResultSetMetaData::getColumnTypeName(sal_Int32) throw(SQLException, RuntimeException) 157 { 158 return ::rtl::OUString(); 159 } 160 // ------------------------------------------------------------------------- 161 ::rtl::OUString SAL_CALL MacabResultSetMetaData::getColumnLabel(sal_Int32) throw(SQLException, RuntimeException) 162 { 163 return ::rtl::OUString(); 164 } 165 // ------------------------------------------------------------------------- 166 ::rtl::OUString SAL_CALL MacabResultSetMetaData::getColumnServiceName(sal_Int32) throw(SQLException, RuntimeException) 167 { 168 return ::rtl::OUString(); 169 } 170 // ------------------------------------------------------------------------- 171 sal_Bool SAL_CALL MacabResultSetMetaData::isCurrency(sal_Int32) throw(SQLException, RuntimeException) 172 { 173 return sal_False; 174 } 175 // ------------------------------------------------------------------------- 176 sal_Bool SAL_CALL MacabResultSetMetaData::isAutoIncrement(sal_Int32) throw(SQLException, RuntimeException) 177 { 178 return sal_False; 179 } 180 // ------------------------------------------------------------------------- 181 sal_Bool SAL_CALL MacabResultSetMetaData::isSigned(sal_Int32) throw(SQLException, RuntimeException) 182 { 183 return sal_False; 184 } 185 // ------------------------------------------------------------------------- 186 sal_Int32 SAL_CALL MacabResultSetMetaData::getPrecision(sal_Int32) throw(SQLException, RuntimeException) 187 { 188 return 0; 189 } 190 // ----------------------------------------------------------------------------- 191 sal_Int32 SAL_CALL MacabResultSetMetaData::getScale(sal_Int32) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException) 192 { 193 return 0; 194 } 195 // ------------------------------------------------------------------------- 196 sal_Int32 SAL_CALL MacabResultSetMetaData::isNullable(sal_Int32) throw(SQLException, RuntimeException) 197 { 198 return (sal_Int32) sal_True; 199 } 200 // ------------------------------------------------------------------------- 201 sal_Bool SAL_CALL MacabResultSetMetaData::isSearchable(sal_Int32) throw(SQLException, RuntimeException) 202 { 203 return sal_True; 204 } 205 // ------------------------------------------------------------------------- 206 sal_Bool SAL_CALL MacabResultSetMetaData::isReadOnly(sal_Int32) throw(SQLException, RuntimeException) 207 { 208 return sal_True; 209 } 210 // ------------------------------------------------------------------------- 211 sal_Bool SAL_CALL MacabResultSetMetaData::isDefinitelyWritable(sal_Int32) throw(SQLException, RuntimeException) 212 { 213 return sal_False; 214 } 215 // ------------------------------------------------------------------------- 216 sal_Bool SAL_CALL MacabResultSetMetaData::isWritable(sal_Int32) throw(SQLException, RuntimeException) 217 { 218 return sal_False; 219 } 220 // ------------------------------------------------------------------------- 221