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