Analysis Software
Documentation for sPHENIX simulation software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
ODBCResultSetMetaData.cxx
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file ODBCResultSetMetaData.cxx
1 // $Id: ODBCResultSetMetaData.cxx,v 1.1.1.1 2004/02/18 20:58:02 dave Exp $
2 //*-- Author : Valeriy Onuchin 14/02/2000
3 //
4 
5 /**************************************************************************
6 
7  ROOT wrappers of libodbc++ library
8 
9  Copyright (C) 1999-2000 Manush Dodunekov <manush@stendahls.net>
10 
11  This library is free software; you can redistribute it and/or
12  modify it under the terms of the GNU Library General Public
13  License as published by the Free Software Foundation; either
14  version 2 of the License, or (at your option) any later version.
15 
16  This library is distributed in the hope that it will be useful,
17  but WITHOUT ANY WARRANTY; without even the implied warranty of
18  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19  Library General Public License for more details.
20 
21  You should have received a copy of the GNU Library General Public License
22  along with this library; see the file COPYING. If not, write to
23  the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
24  Boston, MA 02111-1307, USA.
25 
26 **************************************************************************/
27 
29 //
30 // An object that can be used to find out about the
31 // types and properties of the columns in a TSQLResultSet.
32 //
33 // See also:
34 // TSQLResultSet TSQLDatabaseMetaData
35 //
37 
38 #include "ODBCResultSetMetaData.h"
39 #include "ODBCResultSet.h"
41 
42 using namespace odbc;
43 
45 
46 
47 //___________________________________________________________________
49  TSQLResultSetMetaData(rs,imp)
50 {
51  // ctor
52 
53  fResultSet = rs;
54 }
55 
56 //___________________________________________________________________
58 {
59  // dtor
60 
61  fResultSet = 0;
62 // odbc::ResultSetMetaData* imp = (odbc::ResultSetMetaData*)fImp;
63  fImp = 0;
64 
65  try {
66  //
67  // delete imp; // !!! private dtor, deleted by result set
68  } catch(odbc::SQLException& e) {
71  e.getErrorCode()) );
72  }
73 }
74 
75 //___________________________________________________________________
77 {
78  // Returns the number of columns in this TSQLResultSet
79  // If there are no columns in the result set, zero is
80  // returned.
81  //
82  // Returns:
83  // the number of columns
84  // Throws:
85  // TSQLException - if a database access error occurs
86 
87  Int_t return_value = 0;
88 
89  if(!fImp) { Destroyed(); return return_value; }
91 
92  try {
93  return_value = imp->getColumnCount();
94  } catch(odbc::SQLException& e) {
97  e.getErrorCode()) );
98  return 0;
99  }
100  return return_value;
101 }
102 
103 //___________________________________________________________________
105 {
106  // Indicates whether the column is automatically numbered,
107  // thus read-only.
108  //
109  // Parameters:
110  // column - the first column is 1, the second is 2, ...
111  // Returns:
112  // kTRUE - the column's data type is an auto increment data
113  // type
114  // kFALSE - the column's data type is not an auto increment
115  // data type or the column does not contain numeric
116  // data
117  // Throws:
118  // TSQLException - if a database access error occurs
119  //
120  //
121 
122  Bool_t return_value = kFALSE;
123 
124  if(!fImp) { Destroyed(); return return_value; }
126 
127  try {
128  return_value = imp->isAutoIncrement(column);
129  } catch(odbc::SQLException& e) {
132  e.getErrorCode()) );
133  return kFALSE;
134  }
135  return return_value;
136 }
137 
138 //___________________________________________________________________
140 {
141  // Indicates whether a column's case sensitive for collations
142  // and comparisons.
143  //
144  // Parameters:
145  // column - the first column is 1, the second is 2, ...
146  // Returns:
147  // kTRUE if so
148  // Throws:
149  // TSQLException - if a database access error occurs
150 
151  Bool_t return_value = kFALSE;
152 
153  if(!fImp) { Destroyed(); return return_value; }
155 
156  try {
157  return_value = imp->isCaseSensitive(column);
158  } catch(odbc::SQLException& e) {
161  e.getErrorCode()) );
162  return kFALSE;
163  }
164  return return_value;
165 }
166 
167 //___________________________________________________________________
168 Bool_t ODBCResultSetMetaData::IsSearchable( Int_t column )
169 {
170  // Indicates whether the column can be used in a 'WHERE' clause.
171  //
172  // Parameters:
173  // column - the first column is 1, the second is 2, ...
174  // Returns:
175  // kTRUE if so
176  // Throws:
177  // TSQLException - if a database access error occurs
178 
179  Bool_t return_value = kFALSE;
180 
181  if(!fImp) { Destroyed(); return return_value; }
183 
184  try {
185  return_value = imp->isSearchable(column);
186  } catch(odbc::SQLException& e) {
189  e.getErrorCode()) );
190  return kFALSE;
191  }
192  return return_value;
193 }
194 
195 //___________________________________________________________________
196 Bool_t ODBCResultSetMetaData::IsCurrency( Int_t column )
197 {
198  // Indicates whether the column is a cash value ( money data
199  // type ).
200  //
201  // Parameters:
202  // column - the first column is 1, the second is 2, ...
203  // Returns:
204  // kTRUE if so
205  // Throws:
206  // TSQLException - if a database access error occurs
207 
208  Bool_t return_value = kFALSE;
209 
210  if(!fImp) { Destroyed(); return return_value; }
212 
213  try {
214  return_value = imp->isCurrency(column);
215  } catch(odbc::SQLException& e) {
218  e.getErrorCode()) );
219  return kFALSE;
220  }
221  return return_value;
222 }
223 
224 //___________________________________________________________________
225 Bool_t ODBCResultSetMetaData::IsNullable( Int_t column )
226 {
227  // Indicates the nullability of values in the designated column.
228  //
229  // Parameters:
230  // column - the first column is 1, the second is 2, ...
231  // Returns:
232  // the nullability status of the given column;
233  // one of columnNoNulls, columnNullable or
234  // columnNullableUnknown
235  // Throws:
236  // TSQLException - if a database access error occurs
237 
238  Bool_t return_value = kFALSE;
239 
240  if(!fImp) { Destroyed(); return return_value; }
242 
243  try {
244  return_value = imp->isNullable(column);
245  } catch(odbc::SQLException& e) {
248  e.getErrorCode()) );
249  return kFALSE;
250  }
251  return return_value;
252 }
253 
254 //___________________________________________________________________
255 Bool_t ODBCResultSetMetaData::IsSigned( Int_t column )
256 {
257  // Indicates whether values in the column are signed numbers
258  //
259  // Parameters:
260  // column - the first column is 1, the second is 2, ...
261  // Returns:
262  // kTRUE if so
263  // Throws:
264  // TSQLException - if a database access error occurs
265 
266  Bool_t return_value = kFALSE;
267 
268  if(!fImp) { Destroyed(); return return_value; }
270 
271  try {
272  return_value = imp->isSigned(column);
273  } catch(odbc::SQLException& e) {
276  e.getErrorCode()) );
277  return kFALSE;
278  }
279  return return_value;
280 }
281 
282 //___________________________________________________________________
284 {
285  // Indicates the column's normal max width in chars.
286  //
287  // Parameters:
288  // column - the first column is 1, the second is 2, ...
289  // Returns:
290  // the normal maximum number of characteimp allowed as
291  // the width of the designated column
292  // Throws:
293  // TSQLException - if a database access error occurs
294 
295  Int_t return_value = 0;
296 
297  if(!fImp) { Destroyed(); return return_value; }
299 
300  try {
301  return_value = imp->getColumnDisplaySize(column);
302  } catch(odbc::SQLException& e) {
305  e.getErrorCode()) );
306  return 0;
307  }
308  return return_value;
309 }
310 
311 //___________________________________________________________________
313 {
314  // Gets the suggested column title for use in printouts
315  // and displays.
316  //
317  // Parameters:
318  // column - the first column is 1, the second is 2, ...
319  // Returns:
320  // the suggested column title
321  // Throws:
322  // TSQLException - if a database access error occurs
323 
324  TString str;
325 
326  if(!fImp) { Destroyed(); return str; }
328 
329  try {
330  str = ODBCXX_STRING_CSTR( imp->getColumnLabel(column) );
331  } catch(odbc::SQLException& e) {
334  e.getErrorCode()) );
335  return "";
336  }
337  return str;
338 }
339 
340 //___________________________________________________________________
342 {
343  // Gets a column's name.
344  //
345  // Parameters:
346  // column - the first column is 1, the second is 2, ...
347  // Returns:
348  // column name
349  // Throws:
350  // TSQLException - if a database access error occurs
351 
352  TString str;
353 
354  if(!fImp) { Destroyed(); return str; }
356 
357  try {
358  str = ODBCXX_STRING_CSTR( imp->getColumnName(column) );
359  } catch(odbc::SQLException& e) {
362  e.getErrorCode()) );
363  return "";
364  }
365  return str;
366 }
367 
368 //___________________________________________________________________
370 {
371  // Gets a column's table's schema.
372  //
373  // Parameters:
374  // column - the first column is 1, the second is 2, ...
375  // Returns:
376  // schema name or "" if not applicable
377  // Throws:
378  // TSQLException - if a database access error occurs
379 
380  TString str;
381 
382  if(!fImp) { Destroyed(); return str; }
384 
385  try {
386  str = ODBCXX_STRING_CSTR( imp->getSchemaName(column) );
387  } catch(odbc::SQLException& e) {
390  e.getErrorCode()) );
391  return "";
392  }
393  return str;
394 }
395 
396 //___________________________________________________________________
398 {
399  // Gets a column's number of decimal digits.
400  //
401  // Parameters:
402  // column - the first column is 1, the second is 2, ...
403  // Returns:
404  // precIsion
405  // Throws:
406  // TSQLException - if a database access error occurs
407 
408  Int_t return_value = 0;
409 
410  if(!fImp) { Destroyed(); return return_value; }
412 
413  try {
414  return_value = imp->getPrecision(column);
415  } catch(odbc::SQLException& e) {
418  e.getErrorCode()) );
419  return 0;
420  }
421  return return_value;
422 }
423 
424 //___________________________________________________________________
425 Int_t ODBCResultSetMetaData::GetScale( Int_t column )
426 {
427  // Gets a column's number of digits to right of the decimal point.
428  //
429  // Parameters:
430  // column - the first column is 1, the second is 2, ...
431  // Returns:
432  // scale
433  // Throws:
434  // TSQLException - if a database access error occurs
435 
436  Int_t return_value = 0;
437 
438  if(!fImp) { Destroyed(); return return_value; }
440 
441  try {
442  return_value = imp->getScale(column);
443  } catch(odbc::SQLException& e) {
446  e.getErrorCode()) );
447  return 0;
448  }
449  return return_value;
450 }
451 
452 //___________________________________________________________________
453 TString ODBCResultSetMetaData::GetTableName( Int_t column )
454 {
455  // Gets a column's table name.
456  //
457  // Parameters:
458  // column - the first column is 1, the second is 2, ...
459  // Returns:
460  // table name or "" if not applicable
461  // Throws:
462  // TSQLException - if a database access error occurs
463 
464  TString str;
465 
466  if(!fImp) { Destroyed(); return str; }
468 
469  try {
470  str = ODBCXX_STRING_CSTR( imp->getTableName(column) );
471  } catch(odbc::SQLException& e) {
474  e.getErrorCode()) );
475  return "";
476  }
477  return str;
478 }
479 
480 //___________________________________________________________________
482 {
483  // Gets a column's table's catalog name.
484  //
485  // Parameters:
486  // column - the first column is 1, the second is 2, ...
487  // Returns:
488  // column name or "" if not applicable.
489  // Throws:
490  // TSQLException - if a database access error occurs
491 
492  TString str;
493 
494  if(!fImp) { Destroyed(); return str; }
496 
497  try {
498  str = ODBCXX_STRING_CSTR( imp->getCatalogName(column) );
499  } catch(odbc::SQLException& e) {
502  e.getErrorCode()) );
503  return "";
504  }
505  return str;
506 }
507 
508 //___________________________________________________________________
510 {
511  // Retrieves a column's SQL type.
512  //
513  // enum ESQLTypes {
514  // kBIGINT = -5,
515  // kBINARY = -2,
516  // kBIT = -7,
517  // kCHAR = 1,
518  // #ifdef ODBC_VER_LESS_30
519  // kDATE = 9,
520  // kTIME = 10,
521  // kTIMESTAMP = 11,
522  // #endif
523  // kDATE = 91,
524  // kTIME = 92,
525  // kTIMESTAMP = 93,
526  // kSMALLINT = 5,
527  // kDECIMAL = 3,
528  // kDOUBLE = 8,
529  // kFLOAT = 6,
530  // kINTEGER = 4,
531  // kLONGVARBINARY = -4,
532  // kLONGVARCHAR = -1,
533  // kNUMERIC = 2,
534  // kREAL = 7,
535  // kTINYINT = -6,
536  // kVARBINARY = -3,
537  // kVARCHAR = 12
538  // };
539  //
540  // Parameters:
541  // column - the first column is 1, the second is 2, ...
542  // Returns:
543  // SQL type from TSQLTypes
544  // Throws:
545  // TSQLException - if a database access error occurs
546 
547  Int_t return_value = 0;
548 
549  if(!fImp) { Destroyed(); return return_value; }
551 
552  try {
553  return_value = imp->getColumnType(column);
554  } catch(odbc::SQLException& e) {
557  e.getErrorCode()) );
558  return 0;
559  }
560  return return_value;
561 }
562 
563 //___________________________________________________________________
565 {
566  // Retrieves a column's database-specific type name.
567  // See TSQLTypes.h
568  //
569  // Parameters:
570  // column - the first column is 1, the second is 2, ...
571  // Returns:
572  // type name used by the database. If the column type is
573  // a user-defined type, then a fully-qualified type name
574  // is returned.
575  // Throws:
576  // TSQLException - if a database access error occurs
577 
578  TString str;
579 
580  if(!fImp) { Destroyed(); return str; }
582 
583  try {
584  str = ODBCXX_STRING_CSTR( imp->getColumnTypeName(column) );
585  } catch(odbc::SQLException& e) {
588  e.getErrorCode()) );
589  return "";
590  }
591  return str;
592 }
593 
594 //___________________________________________________________________
595 Bool_t ODBCResultSetMetaData::IsReadOnly( Int_t column )
596 {
597  // Indicates whether a column Is definitely not writable.
598  //
599  // Parameters:
600  // column - the first column is 1, the second is 2, ...
601  // Returns:
602  // kTRUE if so
603  // Throws:
604  // TSQLException - if a database access error occurs
605 
606  Bool_t return_value = kTRUE;
607 
608  if(!fImp) { Destroyed(); return return_value; }
610 
611  try {
612  return_value = imp->isReadOnly(column);
613  } catch(odbc::SQLException& e) {
616  e.getErrorCode()) );
617  return kTRUE;
618  }
619  return return_value;
620 }
621 
622 //___________________________________________________________________
623 Bool_t ODBCResultSetMetaData::IsWritable( Int_t column )
624 {
625  // Indicates whether it is possible for a write on the column
626  // to succeed.
627  //
628  // Parameters:
629  // column - the first column is 1, the second is 2, ...
630  // Returns:
631  // kTRUE if so
632  // Throws:
633  // TSQLException - if a database access error occurs
634 
635  Bool_t return_value = kFALSE;
636 
637  if(!fImp) { Destroyed(); return return_value; }
639 
640  try {
641  return_value = imp->isWritable(column);
642  } catch(odbc::SQLException& e) {
645  e.getErrorCode()) );
646  return kFALSE;
647  }
648  return return_value;
649 }
650 
651 //___________________________________________________________________
653 {
654  // Indicates whether a write on the column will definitely succeed.
655  //
656  // Parameters:
657  // column - the first column is 1, the second is 2, ...
658  // Returns:
659  // kTRUE if so
660  // Throws:
661  // TSQLException - if a database access error occurs
662 
663  Bool_t return_value = kFALSE;
664 
665  if(!fImp) { Destroyed(); return return_value; }
667 
668  try {
669  return_value = imp->isDefinitelyWritable(column);
670  } catch(odbc::SQLException& e) {
673  e.getErrorCode()) );
674  return kFALSE;
675  }
676  return return_value;
677 }