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 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_connectivity.hxx"
26 #include "NResultSetMetaData.hxx"
27 #include "NDatabaseMetaData.hxx"
28 #include "connectivity/dbexception.hxx"
29 #include <com/sun/star/sdbc/DataType.hpp>
30 #include "NDebug.hxx"
31 #include "resource/evoab2_res.hrc"
32 
33 using namespace connectivity::evoab;
34 using namespace com::sun::star::uno;
35 using namespace com::sun::star::lang;
36 using namespace com::sun::star::sdbc;
37 
OEvoabResultSetMetaData(const::rtl::OUString & _aTableName)38 OEvoabResultSetMetaData::OEvoabResultSetMetaData(const ::rtl::OUString& _aTableName)
39 	: m_aTableName(_aTableName),
40 	  m_aEvoabFields()
41 {
42 
43 }
44 // -------------------------------------------------------------------------
~OEvoabResultSetMetaData()45 OEvoabResultSetMetaData::~OEvoabResultSetMetaData()
46 {
47 }
48 // -------------------------------------------------------------------------
setEvoabFields(const::vos::ORef<connectivity::OSQLColumns> & xColumns)49 void OEvoabResultSetMetaData::setEvoabFields(const ::vos::ORef<connectivity::OSQLColumns> &xColumns) throw(SQLException)
50 {
51         OSQLColumns::Vector::const_iterator aIter;
52         static const ::rtl::OUString aName(::rtl::OUString::createFromAscii("Name"));
53 
54         for (aIter = xColumns->get().begin(); aIter != xColumns->get().end(); ++aIter)
55         {
56                 ::rtl::OUString aFieldName;
57 
58                 (*aIter)->getPropertyValue(aName) >>= aFieldName;
59                 guint nFieldNumber = findEvoabField(aFieldName);
60 		        if (nFieldNumber == (guint)-1)
61                 {
62                     connectivity::SharedResources aResource;
63                     const ::rtl::OUString sError( aResource.getResourceStringWithSubstitution(
64                             STR_INVALID_COLUMNNAME,
65                             "$columnname$", aFieldName
66                          ) );
67                     ::dbtools::throwGenericSQLException( sError, *this );
68                 }
69                 m_aEvoabFields.push_back(nFieldNumber);
70         }
71 }
72 
73 // -------------------------------------------------------------------------
getColumnDisplaySize(sal_Int32)74 sal_Int32 SAL_CALL OEvoabResultSetMetaData::getColumnDisplaySize( sal_Int32 /*nColumnNum*/ ) throw(SQLException, RuntimeException)
75 {
76 	return 50;
77 }
78 // -------------------------------------------------------------------------
getColumnType(sal_Int32 nColumnNum)79 sal_Int32 SAL_CALL OEvoabResultSetMetaData::getColumnType( sal_Int32 nColumnNum ) throw(SQLException, RuntimeException)
80 {
81         sal_uInt32 nField = m_aEvoabFields[nColumnNum - 1];
82 	return evoab::getFieldType (nField);
83 }
84 // -------------------------------------------------------------------------
getColumnCount()85 sal_Int32 SAL_CALL OEvoabResultSetMetaData::getColumnCount(  ) throw(SQLException, RuntimeException)
86 {
87 	return m_aEvoabFields.size();
88 }
89 // -------------------------------------------------------------------------
isCaseSensitive(sal_Int32)90 sal_Bool SAL_CALL OEvoabResultSetMetaData::isCaseSensitive( sal_Int32 /*nColumnNum*/ ) throw(SQLException, RuntimeException)
91 {
92 	return sal_True;
93 }
94 // -------------------------------------------------------------------------
getSchemaName(sal_Int32)95 ::rtl::OUString SAL_CALL OEvoabResultSetMetaData::getSchemaName( sal_Int32 /*nColumnNum*/ ) throw(SQLException, RuntimeException)
96 {
97 	return ::rtl::OUString();
98 }
99 // -------------------------------------------------------------------------
getColumnName(sal_Int32 nColumnNum)100 ::rtl::OUString SAL_CALL OEvoabResultSetMetaData::getColumnName( sal_Int32 nColumnNum ) throw(SQLException, RuntimeException)
101 {
102     sal_uInt32 nField = m_aEvoabFields[nColumnNum - 1];
103     return evoab::getFieldName( nField );
104 }
105 // -------------------------------------------------------------------------
getColumnTypeName(sal_Int32 nColumnNum)106 ::rtl::OUString SAL_CALL OEvoabResultSetMetaData::getColumnTypeName( sal_Int32 nColumnNum ) throw(SQLException, RuntimeException)
107 {
108     sal_uInt32 nField = m_aEvoabFields[nColumnNum - 1];
109 	return evoab::getFieldTypeName( nField );
110 }
111 // -------------------------------------------------------------------------
getColumnLabel(sal_Int32 nColumnNum)112 ::rtl::OUString SAL_CALL OEvoabResultSetMetaData::getColumnLabel( sal_Int32 nColumnNum ) throw(SQLException, RuntimeException)
113 {
114     sal_uInt32 nField = m_aEvoabFields[nColumnNum - 1];
115 	const ColumnProperty *pSpecs = getField(nField);
116 	GParamSpec *pSpec = pSpecs->pField;
117 	rtl::OUString aLabel;
118 
119 	if( pSpec )
120 			aLabel = rtl::OStringToOUString( g_param_spec_get_nick( (GParamSpec *) pSpec ),
121 											 RTL_TEXTENCODING_UTF8 );
122 	return aLabel;
123 }
124 // -------------------------------------------------------------------------
getColumnServiceName(sal_Int32)125 ::rtl::OUString SAL_CALL OEvoabResultSetMetaData::getColumnServiceName( sal_Int32 /*nColumnNum*/ ) throw(SQLException, RuntimeException)
126 {
127 	return ::rtl::OUString();
128 }
129 // -------------------------------------------------------------------------
getTableName(sal_Int32)130 ::rtl::OUString SAL_CALL OEvoabResultSetMetaData::getTableName( sal_Int32 /*nColumnNum*/ ) throw(SQLException, RuntimeException)
131 {
132 	return m_aTableName;//::rtl::OUString::createFromAscii("TABLE");
133 }
134 // -------------------------------------------------------------------------
getCatalogName(sal_Int32)135 ::rtl::OUString SAL_CALL OEvoabResultSetMetaData::getCatalogName( sal_Int32 /*nColumnNum*/ ) throw(SQLException, RuntimeException)
136 {
137 	return ::rtl::OUString();
138 }
139 // -------------------------------------------------------------------------
140 
isCurrency(sal_Int32)141 sal_Bool SAL_CALL OEvoabResultSetMetaData::isCurrency( sal_Int32 /*nColumnNum*/ ) throw(SQLException, RuntimeException)
142 {
143 	return sal_False;
144 }
145 // -------------------------------------------------------------------------
isAutoIncrement(sal_Int32)146 sal_Bool SAL_CALL OEvoabResultSetMetaData::isAutoIncrement( sal_Int32 /*nColumnNum*/ ) throw(SQLException, RuntimeException)
147 {
148 	return sal_False;
149 }
150 // -------------------------------------------------------------------------
isSigned(sal_Int32)151 sal_Bool SAL_CALL OEvoabResultSetMetaData::isSigned( sal_Int32 /*nColumnNum*/ ) throw(SQLException, RuntimeException)
152 {
153 	return sal_False;
154 }
155 // -------------------------------------------------------------------------
getPrecision(sal_Int32)156 sal_Int32 SAL_CALL OEvoabResultSetMetaData::getPrecision( sal_Int32 /*nColumnNum*/ ) throw(SQLException, RuntimeException)
157 {
158 	return 0;
159 }
160 // -----------------------------------------------------------------------------
getScale(sal_Int32)161 sal_Int32 SAL_CALL OEvoabResultSetMetaData::getScale( sal_Int32 /*nColumnNum*/ ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException)
162 {
163 	return 0;
164 }
165 // -------------------------------------------------------------------------
isNullable(sal_Int32)166 sal_Int32 SAL_CALL OEvoabResultSetMetaData::isNullable( sal_Int32 /*nColumnNum*/ ) throw(SQLException, RuntimeException)
167 {
168 	return 0;
169 }
170 // -------------------------------------------------------------------------
isSearchable(sal_Int32)171 sal_Bool SAL_CALL OEvoabResultSetMetaData::isSearchable( sal_Int32 /*nColumnNum*/ ) throw(SQLException, RuntimeException)
172 {
173 	return sal_True;
174 }
175 // -------------------------------------------------------------------------
isReadOnly(sal_Int32)176 sal_Bool SAL_CALL OEvoabResultSetMetaData::isReadOnly( sal_Int32 /*nColumnNum*/ ) throw(SQLException, RuntimeException)
177 {
178 	return sal_True;
179 }
180 // -------------------------------------------------------------------------
isDefinitelyWritable(sal_Int32)181 sal_Bool SAL_CALL OEvoabResultSetMetaData::isDefinitelyWritable( sal_Int32 /*nColumnNum*/ ) throw(SQLException, RuntimeException)
182 {
183 	return sal_False;
184 }
185 // -------------------------------------------------------------------------
isWritable(sal_Int32)186 sal_Bool SAL_CALL OEvoabResultSetMetaData::isWritable( sal_Int32 /*nColumnNum*/ ) throw(SQLException, RuntimeException)
187 {
188 	return sal_False;
189 }
190 // -------------------------------------------------------------------------
191