xref: /trunk/main/connectivity/source/drivers/adabas/BDatabaseMetaData.cxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_connectivity.hxx"
30 
31 #ifndef _CONNECTIVITY_ADABAS_BDATABASEMETADATA_HXX_
32 #include "adabas/BDatabaseMetaData.hxx"
33 #endif
34 #include "FDatabaseMetaDataResultSet.hxx"
35 
36 using namespace connectivity::adabas;
37 using namespace ::com::sun::star::uno;
38 using namespace ::com::sun::star::beans;
39 //  using namespace ::com::sun::star::sdbcx;
40 using namespace ::com::sun::star::sdbc;
41 using namespace ::com::sun::star::container;
42 using namespace ::com::sun::star::lang;
43 
44 ::rtl::OUString SAL_CALL OAdabasDatabaseMetaData::getURL(  ) throw(SQLException, RuntimeException)
45 {
46     ::rtl::OUString aValue(RTL_CONSTASCII_USTRINGPARAM("sdbc:adabas:"));
47     aValue += OAdabasDatabaseMetaData_BASE::getURLImpl();
48     return aValue;
49 }
50 // -----------------------------------------------------------------------------
51 sal_Bool SAL_CALL OAdabasDatabaseMetaData::supportsIntegrityEnhancementFacility(  ) throw(SQLException, RuntimeException)
52 {
53     return sal_True;
54 }
55 // -----------------------------------------------------------------------------
56 Reference< XResultSet > OAdabasDatabaseMetaData::impl_getTypeInfo_throw(  )
57 {
58     ::connectivity::ODatabaseMetaDataResultSet* pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eTypeInfo);
59     Reference< XResultSet > xNewRes = pResult;
60     static ::connectivity::ODatabaseMetaDataResultSet::ORows aRows;
61     if(aRows.empty())
62     {
63         aRows.reserve(19);
64         Reference< XResultSet > xRes = OAdabasDatabaseMetaData_BASE::impl_getTypeInfo_throw();
65 
66         if(xRes.is())
67         {
68             ::connectivity::ODatabaseMetaDataResultSet::ORow aRow(19);
69 
70             Reference< XRow> xRow(xRes,UNO_QUERY);
71             while(xRes->next())
72             {
73                 sal_Int32 nPos = 1;
74                 aRow[nPos++] = new ::connectivity::ORowSetValueDecorator(xRow->getString    (1));
75                 if(xRow->wasNull())
76                     aRow[nPos-1]->setNull();
77                 aRow[nPos++] = new ::connectivity::ORowSetValueDecorator(xRow->getInt       (2));
78                 if(xRow->wasNull())
79                     aRow[nPos-1]->setNull();
80                 aRow[nPos++] = new ::connectivity::ORowSetValueDecorator(xRow->getInt       (3));
81                 if(xRow->wasNull())
82                     aRow[nPos-1]->setNull();
83                 aRow[nPos++] = new ::connectivity::ORowSetValueDecorator(xRow->getString    (4));
84                 if(xRow->wasNull())
85                     aRow[nPos-1]->setNull();
86                 aRow[nPos++] = new ::connectivity::ORowSetValueDecorator(xRow->getString    (5));
87                 if(xRow->wasNull())
88                     aRow[nPos-1]->setNull();
89                 aRow[nPos++] = new ::connectivity::ORowSetValueDecorator(xRow->getString    (6));
90                 if(xRow->wasNull())
91                     aRow[nPos-1]->setNull();
92                 aRow[nPos++] = new ::connectivity::ORowSetValueDecorator(xRow->getInt       (7));
93                 if(xRow->wasNull())
94                     aRow[nPos-1]->setNull();
95                 aRow[nPos++] = new ::connectivity::ORowSetValueDecorator(xRow->getBoolean   (8));
96                 if(xRow->wasNull())
97                     aRow[nPos-1]->setNull();
98                 aRow[nPos++] = new ::connectivity::ORowSetValueDecorator(xRow->getShort     (9));
99                 if(xRow->wasNull())
100                     aRow[nPos-1]->setNull();
101                 aRow[nPos++] = new ::connectivity::ORowSetValueDecorator(xRow->getBoolean   (10));
102                 if(xRow->wasNull())
103                     aRow[nPos-1]->setNull();
104                 aRow[nPos++] = new ::connectivity::ORowSetValueDecorator(xRow->getInt       (11));
105                 if(xRow->wasNull())
106                     aRow[nPos-1]->setNull();
107                 aRow[nPos++] = new ::connectivity::ORowSetValueDecorator(xRow->getBoolean   (12));
108                 if(xRow->wasNull())
109                     aRow[nPos-1]->setNull();
110                 aRow[nPos++] = new ::connectivity::ORowSetValueDecorator(xRow->getString    (13));
111                 if(xRow->wasNull())
112                     aRow[nPos-1]->setNull();
113                 aRow[nPos++] = new ::connectivity::ORowSetValueDecorator(xRow->getShort     (14));
114                 if(xRow->wasNull())
115                     aRow[nPos-1]->setNull();
116                 aRow[nPos++] = new ::connectivity::ORowSetValueDecorator(xRow->getShort     (15));
117                 if(xRow->wasNull())
118                     aRow[nPos-1]->setNull();
119                 aRow[nPos++] = new ::connectivity::ORowSetValueDecorator(xRow->getInt       (16));
120                 if(xRow->wasNull())
121                     aRow[nPos-1]->setNull();
122                 aRow[nPos++] = new ::connectivity::ORowSetValueDecorator(xRow->getInt       (17));
123                 if(xRow->wasNull())
124                     aRow[nPos-1]->setNull();
125                 aRow[nPos++] = new ::connectivity::ORowSetValueDecorator((sal_Int16)xRow->getInt(18));
126                 if(xRow->wasNull())
127                     aRow[nPos-1]->setNull();
128 
129                 // we have to fix some incorrect entries
130                 if(!aRow[2]->getValue().isNull())
131                 {
132                     switch((sal_Int32)aRow[2]->getValue())
133                     {
134                         case DataType::FLOAT:
135 //                          aRow[3] = sal_Int32(15);
136 //                          break;
137                         case DataType::REAL:
138 //                          aRow[3] = sal_Int32(16);
139 //                          break;
140                         case DataType::DOUBLE:
141                             aRow[2]->setValue(DataType::DOUBLE);
142                             aRow[3]->setValue(sal_Int32(18));
143                             break;
144                         case DataType::TIMESTAMP:
145                             aRow[3]->setValue(sal_Int32(27));
146                             break;
147                         default:
148                             break;
149                     }
150                 }
151                 aRows.push_back(aRow);
152             }
153         }
154     }
155     pResult->setRows(aRows);
156     return xNewRes;
157 }
158 // -----------------------------------------------------------------------------
159 
160 
161 
162