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 #include "mysqlc_resultsetmetadata.hxx" 23 #include "mysqlc_general.hxx" 24 #include "cppconn/exception.h" 25 26 #include <rtl/ustrbuf.hxx> 27 28 using namespace connectivity::mysqlc; 29 using namespace com::sun::star::uno; 30 using namespace com::sun::star::lang; 31 using namespace com::sun::star::sdbc; 32 using ::rtl::OUString; 33 34 // ------------------------------------------------------------------------- 35 OResultSetMetaData::~OResultSetMetaData() 36 { 37 } 38 /* }}} */ 39 40 41 /* {{{ OResultSetMetaData::getColumnDisplaySize() -I- */ 42 sal_Int32 SAL_CALL OResultSetMetaData::getColumnDisplaySize(sal_Int32 column) 43 throw(SQLException, RuntimeException) 44 { 45 OSL_TRACE("OResultSetMetaData::getColumnDisplaySize"); 46 47 try { 48 meta->getColumnDisplaySize(column); 49 } catch (sql::MethodNotImplementedException) { 50 mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSetMetaData::getColumnDisplaySize", *this); 51 } catch (sql::SQLException &e) { 52 mysqlc_sdbc_driver::translateAndThrow(e, *this, m_encoding); 53 } 54 return 0; // fool compiler 55 } 56 /* }}} */ 57 58 59 /* {{{ OResultSetMetaData::getColumnType() -I- */ 60 sal_Int32 SAL_CALL OResultSetMetaData::getColumnType(sal_Int32 column) 61 throw(SQLException, RuntimeException) 62 { 63 OSL_TRACE("OResultSetMetaData::getColumnType"); 64 checkColumnIndex(column); 65 66 try { 67 return mysqlc_sdbc_driver::mysqlToOOOType(meta->getColumnType(column)); 68 } catch (sql::MethodNotImplementedException) { 69 mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSetMetaData::getMetaData", *this); 70 } catch (sql::SQLException &e) { 71 mysqlc_sdbc_driver::translateAndThrow(e, *this, m_encoding); 72 } 73 return 0; // fool compiler 74 } 75 /* }}} */ 76 77 /* 78 XXX: This method doesn't throw exceptions at all. 79 Should it declare that it throws ?? What if throw() is removed? 80 Does it change the API, the open-close principle? 81 */ 82 /* {{{ OResultSetMetaData::getColumnCount() -I- */ 83 sal_Int32 SAL_CALL OResultSetMetaData::getColumnCount() 84 throw(SQLException, RuntimeException) 85 { 86 OSL_TRACE("OResultSetMetaData::getColumnCount"); 87 try { 88 return meta->getColumnCount(); 89 } catch (sql::MethodNotImplementedException) { 90 mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSetMetaData::getMetaData", *this); 91 } catch (sql::SQLException &e) { 92 mysqlc_sdbc_driver::translateAndThrow(e, *this, m_encoding); 93 } 94 return 0; // fool compiler 95 } 96 /* }}} */ 97 98 99 /* {{{ OResultSetMetaData::isCaseSensitive() -I- */ 100 sal_Bool SAL_CALL OResultSetMetaData::isCaseSensitive(sal_Int32 column) 101 throw(SQLException, RuntimeException) 102 { 103 OSL_TRACE("OResultSetMetaData::isCaseSensitive"); 104 checkColumnIndex(column); 105 106 try { 107 return meta->isCaseSensitive(column); 108 } catch (sql::MethodNotImplementedException) { 109 mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSetMetaData::getMetaData", *this); 110 } catch (sql::SQLException &e) { 111 mysqlc_sdbc_driver::translateAndThrow(e, *this, m_encoding); 112 } 113 return sal_False; // fool compiler 114 } 115 /* }}} */ 116 117 118 /* {{{ OResultSetMetaData::getSchemaName() -I- */ 119 OUString SAL_CALL OResultSetMetaData::getSchemaName(sal_Int32 column) 120 throw(SQLException, RuntimeException) 121 { 122 OSL_TRACE("OResultSetMetaData::getSchemaName"); 123 checkColumnIndex(column); 124 125 try { 126 return convert(meta->getSchemaName(column)); 127 } catch (sql::MethodNotImplementedException) { 128 mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSetMetaData::getMetaData", *this); 129 } catch (sql::SQLException &e) { 130 mysqlc_sdbc_driver::translateAndThrow(e, *this, m_encoding); 131 } 132 return OUString(); // fool compiler 133 } 134 /* }}} */ 135 136 137 /* {{{ OResultSetMetaData::getColumnName() -I- */ 138 OUString SAL_CALL OResultSetMetaData::getColumnName(sal_Int32 column) 139 throw(SQLException, RuntimeException) 140 { 141 OSL_TRACE("OResultSetMetaData::getColumnName"); 142 checkColumnIndex(column); 143 144 try { 145 return convert( meta->getColumnName( column ) ); 146 } catch (sql::MethodNotImplementedException) { 147 mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSetMetaData::getMetaData", *this); 148 } catch (sql::SQLException &e) { 149 mysqlc_sdbc_driver::translateAndThrow(e, *this, m_encoding); 150 } 151 return OUString(); // fool compiler 152 } 153 /* }}} */ 154 155 156 /* {{{ OResultSetMetaData::getTableName() -I- */ 157 OUString SAL_CALL OResultSetMetaData::getTableName(sal_Int32 column) 158 throw(SQLException, RuntimeException) 159 { 160 OSL_TRACE("OResultSetMetaData::getTableName"); 161 checkColumnIndex(column); 162 163 try { 164 return convert(meta->getTableName(column)); 165 } catch (sql::MethodNotImplementedException) { 166 mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSetMetaData::getMetaData", *this); 167 } catch (sql::SQLException &e) { 168 mysqlc_sdbc_driver::translateAndThrow(e, *this, m_encoding); 169 } 170 return OUString(); // fool compiler 171 } 172 /* }}} */ 173 174 175 /* {{{ OResultSetMetaData::getCatalogName() -I- */ 176 OUString SAL_CALL OResultSetMetaData::getCatalogName(sal_Int32 column) 177 throw(SQLException, RuntimeException) 178 { 179 OSL_TRACE("OResultSetMetaData::getCatalogName"); 180 checkColumnIndex(column); 181 182 try { 183 return convert(meta->getCatalogName(column)); 184 } catch (sql::MethodNotImplementedException) { 185 mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSetMetaData::getMetaData", *this); 186 } catch (sql::SQLException &e) { 187 mysqlc_sdbc_driver::translateAndThrow(e, *this, m_encoding); 188 } 189 return OUString(); // fool compiler 190 } 191 /* }}} */ 192 193 194 /* {{{ OResultSetMetaData::getColumnTypeName() -I- */ 195 OUString SAL_CALL OResultSetMetaData::getColumnTypeName(sal_Int32 column) 196 throw(SQLException, RuntimeException) 197 { 198 OSL_TRACE("OResultSetMetaData::getColumnTypeName"); 199 checkColumnIndex(column); 200 201 try { 202 return convert(meta->getColumnTypeName(column)); 203 } catch (sql::MethodNotImplementedException) { 204 mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSetMetaData::getMetaData", *this); 205 } catch (sql::SQLException &e) { 206 mysqlc_sdbc_driver::translateAndThrow(e, *this, m_encoding); 207 } 208 return OUString(); // fool compiler 209 } 210 /* }}} */ 211 212 213 /* {{{ OResultSetMetaData::getColumnLabel() -I- */ 214 OUString SAL_CALL OResultSetMetaData::getColumnLabel(sal_Int32 column) 215 throw(SQLException, RuntimeException) 216 { 217 OSL_TRACE("OResultSetMetaData::getColumnLabel"); 218 checkColumnIndex(column); 219 220 try { 221 return convert(meta->getColumnLabel(column)); 222 } catch (sql::MethodNotImplementedException) { 223 mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSetMetaData::getMetaData", *this); 224 } catch (sql::SQLException &e) { 225 mysqlc_sdbc_driver::translateAndThrow(e, *this, m_encoding); 226 } 227 return OUString(); // fool compiler 228 } 229 /* }}} */ 230 231 232 /* {{{ OResultSetMetaData::getColumnServiceName() -I- */ 233 OUString SAL_CALL OResultSetMetaData::getColumnServiceName(sal_Int32 column) 234 throw(SQLException, RuntimeException) 235 { 236 OSL_TRACE("OResultSetMetaData::getColumnServiceName"); 237 checkColumnIndex(column); 238 239 OUString aRet = OUString(); 240 return aRet; 241 } 242 /* }}} */ 243 244 245 /* {{{ OResultSetMetaData::isCurrency() -I- */ 246 sal_Bool SAL_CALL OResultSetMetaData::isCurrency(sal_Int32 column) 247 throw(SQLException, RuntimeException) 248 { 249 OSL_TRACE("OResultSetMetaData::isCurrency"); 250 checkColumnIndex(column); 251 252 try { 253 return meta->isCurrency(column)? sal_True:sal_False; 254 } catch (sql::MethodNotImplementedException) { 255 mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSetMetaData::getMetaData", *this); 256 } catch (sql::SQLException &e) { 257 mysqlc_sdbc_driver::translateAndThrow(e, *this, m_encoding); 258 } 259 return sal_False; // fool compiler 260 } 261 /* }}} */ 262 263 264 /* {{{ OResultSetMetaData::isAutoIncrement() -I- */ 265 sal_Bool SAL_CALL OResultSetMetaData::isAutoIncrement(sal_Int32 column) 266 throw(SQLException, RuntimeException) 267 { 268 OSL_TRACE("OResultSetMetaData::isAutoIncrement"); 269 checkColumnIndex(column); 270 271 try { 272 return meta->isAutoIncrement(column)? sal_True:sal_False; 273 } catch (sql::MethodNotImplementedException) { 274 mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSetMetaData::getMetaData", *this); 275 } catch (sql::SQLException &e) { 276 mysqlc_sdbc_driver::translateAndThrow(e, *this, m_encoding); 277 } 278 return sal_False; // fool compiler 279 } 280 /* }}} */ 281 282 283 /* {{{ OResultSetMetaData::isSigned() -I- */ 284 sal_Bool SAL_CALL OResultSetMetaData::isSigned(sal_Int32 column) 285 throw(SQLException, RuntimeException) 286 { 287 OSL_TRACE("OResultSetMetaData::isSigned"); 288 checkColumnIndex(column); 289 290 try { 291 return meta->isSigned(column)? sal_True:sal_False; 292 } catch (sql::MethodNotImplementedException) { 293 mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSetMetaData::getMetaData", *this); 294 } catch (sql::SQLException &e) { 295 mysqlc_sdbc_driver::translateAndThrow(e, *this, m_encoding); 296 } 297 return sal_False; // fool compiler 298 } 299 /* }}} */ 300 301 302 /* {{{ OResultSetMetaData::getPrecision() -I- */ 303 sal_Int32 SAL_CALL OResultSetMetaData::getPrecision(sal_Int32 column) 304 throw(SQLException, RuntimeException) 305 { 306 OSL_TRACE("OResultSetMetaData::getPrecision"); 307 checkColumnIndex(column); 308 309 try { 310 return meta->getPrecision(column); 311 } catch (sql::MethodNotImplementedException) { 312 mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSetMetaData::getPrecision", *this); 313 } catch (sql::SQLException &e) { 314 mysqlc_sdbc_driver::translateAndThrow(e, *this, m_encoding); 315 } 316 return 0; // fool compiler 317 } 318 /* }}} */ 319 320 321 /* {{{ OResultSetMetaData::getScale() -I- */ 322 sal_Int32 SAL_CALL OResultSetMetaData::getScale(sal_Int32 column) 323 throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException) 324 { 325 OSL_TRACE("OResultSetMetaData::getScale"); 326 checkColumnIndex(column); 327 try { 328 return meta->getScale(column); 329 } catch (sql::MethodNotImplementedException) { 330 mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSetMetaData::getScale", *this); 331 } catch (sql::SQLException &e) { 332 mysqlc_sdbc_driver::translateAndThrow(e, *this, m_encoding); 333 } 334 return 0; // fool compiler 335 } 336 /* }}} */ 337 338 339 /* {{{ OResultSetMetaData::isNullable() -I- */ 340 sal_Int32 SAL_CALL OResultSetMetaData::isNullable(sal_Int32 column) 341 throw(SQLException, RuntimeException) 342 { 343 OSL_TRACE("OResultSetMetaData::isNullable"); 344 checkColumnIndex(column); 345 346 try { 347 return meta->isNullable(column)? sal_True:sal_False; 348 } catch (sql::MethodNotImplementedException) { 349 mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSetMetaData::getMetaData", *this); 350 } catch (sql::SQLException &e) { 351 mysqlc_sdbc_driver::translateAndThrow(e, *this, m_encoding); 352 } 353 return sal_False; // fool compiler 354 } 355 /* }}} */ 356 357 358 /* {{{ OResultSetMetaData::isSearchable() -I- */ 359 sal_Bool SAL_CALL OResultSetMetaData::isSearchable(sal_Int32 column) 360 throw(SQLException, RuntimeException) 361 { 362 OSL_TRACE("OResultSetMetaData::isSearchable"); 363 checkColumnIndex(column); 364 365 try { 366 return meta->isSearchable(column)? sal_True:sal_False; 367 } catch (sql::MethodNotImplementedException) { 368 mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSetMetaData::getMetaData", *this); 369 } catch (sql::SQLException &e) { 370 mysqlc_sdbc_driver::translateAndThrow(e, *this, m_encoding); 371 } 372 return sal_False; // fool compiler 373 } 374 /* }}} */ 375 376 377 /* {{{ OResultSetMetaData::isReadOnly() -I- */ 378 sal_Bool SAL_CALL OResultSetMetaData::isReadOnly(sal_Int32 column) 379 throw(SQLException, RuntimeException) 380 { 381 OSL_TRACE("OResultSetMetaData::isReadOnly"); 382 checkColumnIndex(column); 383 384 try { 385 return meta->isReadOnly(column)? sal_True:sal_False; 386 } catch (sql::MethodNotImplementedException) { 387 mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSetMetaData::getMetaData", *this); 388 } catch (sql::SQLException &e) { 389 mysqlc_sdbc_driver::translateAndThrow(e, *this, m_encoding); 390 } 391 return sal_False; // fool compiler 392 } 393 /* }}} */ 394 395 396 /* {{{ OResultSetMetaData::isDefinitelyWritable() -I- */ 397 sal_Bool SAL_CALL OResultSetMetaData::isDefinitelyWritable(sal_Int32 column) 398 throw(SQLException, RuntimeException) 399 { 400 OSL_TRACE("OResultSetMetaData::isDefinitelyWritable"); 401 checkColumnIndex(column); 402 403 try { 404 return meta->isDefinitelyWritable(column)? sal_True:sal_False; 405 } catch (sql::MethodNotImplementedException) { 406 mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSetMetaData::getMetaData", *this); 407 } catch (sql::SQLException &e) { 408 mysqlc_sdbc_driver::translateAndThrow(e, *this, m_encoding); 409 } 410 return sal_False; // fool compiler 411 } 412 /* }}} */ 413 414 415 /* {{{ OResultSetMetaData::isWritable() -I- */ 416 sal_Bool SAL_CALL OResultSetMetaData::isWritable(sal_Int32 column) 417 throw(SQLException, RuntimeException) 418 { 419 OSL_TRACE("OResultSetMetaData::isWritable"); 420 checkColumnIndex(column); 421 422 try { 423 return meta->isWritable(column)? sal_True:sal_False; 424 } catch (sql::MethodNotImplementedException) { 425 mysqlc_sdbc_driver::throwFeatureNotImplementedException("OResultSetMetaData::getMetaData", *this); 426 } catch (sql::SQLException &e) { 427 mysqlc_sdbc_driver::translateAndThrow(e, *this, m_encoding); 428 } 429 return sal_False; // fool compiler 430 } 431 /* }}} */ 432 433 434 /* {{{ OResultSetMetaData::checkColumnIndex() -I- */ 435 void OResultSetMetaData::checkColumnIndex(sal_Int32 columnIndex) 436 throw (SQLException, RuntimeException) 437 { 438 OSL_TRACE("OResultSetMetaData::checkColumnIndex"); 439 if (columnIndex < 1 || columnIndex > (sal_Int32) meta->getColumnCount()) { 440 441 ::rtl::OUStringBuffer buf; 442 buf.appendAscii( "Column index out of range (expected 1 to " ); 443 buf.append( sal_Int32( meta->getColumnCount() ) ); 444 buf.appendAscii( ", got " ); 445 buf.append( sal_Int32( columnIndex ) ); 446 buf.append( sal_Unicode( '.' ) ); 447 throw SQLException( buf.makeStringAndClear(), *this, OUString(), 1, Any() ); 448 } 449 } 450 /* }}} */ 451 452 /* 453 * Local variables: 454 * tab-width: 4 455 * c-basic-offset: 4 456 * End: 457 * vim600: noet sw=4 ts=4 fdm=marker 458 * vim<600: noet sw=4 ts=4 459 */ 460 461