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 // -------------------------------------------------------------------------
~OResultSetMetaData()35 OResultSetMetaData::~OResultSetMetaData()
36 {
37 }
38 /* }}} */
39 
40 
41 /* {{{ OResultSetMetaData::getColumnDisplaySize() -I- */
getColumnDisplaySize(sal_Int32 column)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- */
getColumnType(sal_Int32 column)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- */
getColumnCount()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- */
isCaseSensitive(sal_Int32 column)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- */
getSchemaName(sal_Int32 column)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- */
getColumnName(sal_Int32 column)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- */
getTableName(sal_Int32 column)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- */
getCatalogName(sal_Int32 column)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- */
getColumnTypeName(sal_Int32 column)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- */
getColumnLabel(sal_Int32 column)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- */
getColumnServiceName(sal_Int32 column)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- */
isCurrency(sal_Int32 column)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- */
isAutoIncrement(sal_Int32 column)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- */
isSigned(sal_Int32 column)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- */
getPrecision(sal_Int32 column)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- */
getScale(sal_Int32 column)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- */
isNullable(sal_Int32 column)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- */
isSearchable(sal_Int32 column)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- */
isReadOnly(sal_Int32 column)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- */
isDefinitelyWritable(sal_Int32 column)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- */
isWritable(sal_Int32 column)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- */
checkColumnIndex(sal_Int32 columnIndex)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