1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_connectivity.hxx"
26*b1cdbd2cSJim Jagielski #include "file/FResultSetMetaData.hxx"
27*b1cdbd2cSJim Jagielski #include "file/FTable.hxx"
28*b1cdbd2cSJim Jagielski #include <comphelper/extract.hxx>
29*b1cdbd2cSJim Jagielski #include "connectivity/dbexception.hxx"
30*b1cdbd2cSJim Jagielski #include <comphelper/types.hxx>
31*b1cdbd2cSJim Jagielski #include <rtl/logfile.hxx>
32*b1cdbd2cSJim Jagielski 
33*b1cdbd2cSJim Jagielski using namespace ::comphelper;
34*b1cdbd2cSJim Jagielski using namespace connectivity;
35*b1cdbd2cSJim Jagielski using namespace dbtools;
36*b1cdbd2cSJim Jagielski using namespace connectivity::file;
37*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::beans;
38*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
39*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::sdbcx;
40*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::sdbc;
41*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::container;
42*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::lang;
43*b1cdbd2cSJim Jagielski 
44*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
OResultSetMetaData(const::vos::ORef<connectivity::OSQLColumns> & _rxColumns,const::rtl::OUString & _aTableName,OFileTable * _pTable)45*b1cdbd2cSJim Jagielski OResultSetMetaData::OResultSetMetaData(const ::vos::ORef<connectivity::OSQLColumns>& _rxColumns,const ::rtl::OUString& _aTableName,OFileTable*	_pTable)
46*b1cdbd2cSJim Jagielski     :m_aTableName(_aTableName)
47*b1cdbd2cSJim Jagielski 	,m_xColumns(_rxColumns)
48*b1cdbd2cSJim Jagielski 	,m_pTable(_pTable)
49*b1cdbd2cSJim Jagielski {
50*b1cdbd2cSJim Jagielski     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OResultSetMetaData::OResultSetMetaData" );
51*b1cdbd2cSJim Jagielski }
52*b1cdbd2cSJim Jagielski 
53*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
~OResultSetMetaData()54*b1cdbd2cSJim Jagielski OResultSetMetaData::~OResultSetMetaData()
55*b1cdbd2cSJim Jagielski {
56*b1cdbd2cSJim Jagielski     m_xColumns = NULL;
57*b1cdbd2cSJim Jagielski }
58*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
checkColumnIndex(sal_Int32 column)59*b1cdbd2cSJim Jagielski void OResultSetMetaData::checkColumnIndex(sal_Int32 column)  throw(SQLException, RuntimeException)
60*b1cdbd2cSJim Jagielski {
61*b1cdbd2cSJim Jagielski     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OResultSetMetaData::checkColumnIndex" );
62*b1cdbd2cSJim Jagielski 	if(column <= 0 || column > (sal_Int32)(sal_Int32)m_xColumns->get().size())
63*b1cdbd2cSJim Jagielski 		throwInvalidIndexException(*this);
64*b1cdbd2cSJim Jagielski }
65*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
getColumnDisplaySize(sal_Int32 column)66*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL OResultSetMetaData::getColumnDisplaySize( sal_Int32 column ) throw(SQLException, RuntimeException)
67*b1cdbd2cSJim Jagielski {
68*b1cdbd2cSJim Jagielski     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OResultSetMetaData::getColumnDisplaySize" );
69*b1cdbd2cSJim Jagielski 	return getPrecision(column);
70*b1cdbd2cSJim Jagielski }
71*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
72*b1cdbd2cSJim Jagielski 
getColumnType(sal_Int32 column)73*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL OResultSetMetaData::getColumnType( sal_Int32 column ) throw(SQLException, RuntimeException)
74*b1cdbd2cSJim Jagielski {
75*b1cdbd2cSJim Jagielski     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OResultSetMetaData::getColumnType" );
76*b1cdbd2cSJim Jagielski 	checkColumnIndex(column);
77*b1cdbd2cSJim Jagielski 	return getINT32((m_xColumns->get())[column-1]->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPE)));
78*b1cdbd2cSJim Jagielski }
79*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
80*b1cdbd2cSJim Jagielski 
getColumnCount()81*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL OResultSetMetaData::getColumnCount(  ) throw(SQLException, RuntimeException)
82*b1cdbd2cSJim Jagielski {
83*b1cdbd2cSJim Jagielski     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OResultSetMetaData::getColumnCount" );
84*b1cdbd2cSJim Jagielski 	return (m_xColumns->get()).size();
85*b1cdbd2cSJim Jagielski }
86*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
87*b1cdbd2cSJim Jagielski 
isCaseSensitive(sal_Int32)88*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL OResultSetMetaData::isCaseSensitive( sal_Int32 /*column*/ ) throw(SQLException, RuntimeException)
89*b1cdbd2cSJim Jagielski {
90*b1cdbd2cSJim Jagielski     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OResultSetMetaData::isCaseSensitive" );
91*b1cdbd2cSJim Jagielski 	return sal_False;
92*b1cdbd2cSJim Jagielski }
93*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
94*b1cdbd2cSJim Jagielski 
getSchemaName(sal_Int32)95*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL OResultSetMetaData::getSchemaName( sal_Int32 /*column*/ ) throw(SQLException, RuntimeException)
96*b1cdbd2cSJim Jagielski {
97*b1cdbd2cSJim Jagielski     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OResultSetMetaData::getSchemaName" );
98*b1cdbd2cSJim Jagielski 	return ::rtl::OUString();
99*b1cdbd2cSJim Jagielski }
100*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
101*b1cdbd2cSJim Jagielski 
getColumnName(sal_Int32 column)102*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL OResultSetMetaData::getColumnName( sal_Int32 column ) throw(SQLException, RuntimeException)
103*b1cdbd2cSJim Jagielski {
104*b1cdbd2cSJim Jagielski     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OResultSetMetaData::getColumnName" );
105*b1cdbd2cSJim Jagielski 	checkColumnIndex(column);
106*b1cdbd2cSJim Jagielski 
107*b1cdbd2cSJim Jagielski 	Any aName((m_xColumns->get())[column-1]->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME)));
108*b1cdbd2cSJim Jagielski 	return aName.hasValue() ? getString(aName) : getString((m_xColumns->get())[column-1]->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME)));
109*b1cdbd2cSJim Jagielski }
110*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
getTableName(sal_Int32)111*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL OResultSetMetaData::getTableName( sal_Int32 /*column*/ ) throw(SQLException, RuntimeException)
112*b1cdbd2cSJim Jagielski {
113*b1cdbd2cSJim Jagielski     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OResultSetMetaData::getTableName" );
114*b1cdbd2cSJim Jagielski 	return m_aTableName;
115*b1cdbd2cSJim Jagielski }
116*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
getCatalogName(sal_Int32)117*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL OResultSetMetaData::getCatalogName( sal_Int32 /*column*/ ) throw(SQLException, RuntimeException)
118*b1cdbd2cSJim Jagielski {
119*b1cdbd2cSJim Jagielski     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OResultSetMetaData::getCatalogName" );
120*b1cdbd2cSJim Jagielski 	return ::rtl::OUString();
121*b1cdbd2cSJim Jagielski }
122*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
getColumnTypeName(sal_Int32 column)123*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL OResultSetMetaData::getColumnTypeName( sal_Int32 column ) throw(SQLException, RuntimeException)
124*b1cdbd2cSJim Jagielski {
125*b1cdbd2cSJim Jagielski     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OResultSetMetaData::getColumnTypeName" );
126*b1cdbd2cSJim Jagielski 	checkColumnIndex(column);
127*b1cdbd2cSJim Jagielski 	return getString((m_xColumns->get())[column-1]->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPENAME)));
128*b1cdbd2cSJim Jagielski }
129*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
getColumnLabel(sal_Int32 column)130*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL OResultSetMetaData::getColumnLabel( sal_Int32 column ) throw(SQLException, RuntimeException)
131*b1cdbd2cSJim Jagielski {
132*b1cdbd2cSJim Jagielski     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OResultSetMetaData::getColumnLabel" );
133*b1cdbd2cSJim Jagielski 	return getColumnName(column);
134*b1cdbd2cSJim Jagielski }
135*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
getColumnServiceName(sal_Int32)136*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL OResultSetMetaData::getColumnServiceName( sal_Int32 /*column*/ ) throw(SQLException, RuntimeException)
137*b1cdbd2cSJim Jagielski {
138*b1cdbd2cSJim Jagielski     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OResultSetMetaData::getColumnServiceName" );
139*b1cdbd2cSJim Jagielski 	return ::rtl::OUString();
140*b1cdbd2cSJim Jagielski }
141*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
142*b1cdbd2cSJim Jagielski 
isCurrency(sal_Int32 column)143*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL OResultSetMetaData::isCurrency( sal_Int32 column ) throw(SQLException, RuntimeException)
144*b1cdbd2cSJim Jagielski {
145*b1cdbd2cSJim Jagielski     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OResultSetMetaData::isCurrency" );
146*b1cdbd2cSJim Jagielski 	checkColumnIndex(column);
147*b1cdbd2cSJim Jagielski 	return getBOOL((m_xColumns->get())[column-1]->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISCURRENCY)));
148*b1cdbd2cSJim Jagielski }
149*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
150*b1cdbd2cSJim Jagielski 
isAutoIncrement(sal_Int32)151*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL OResultSetMetaData::isAutoIncrement( sal_Int32 /*setCatalogcolumn*/ ) throw(SQLException, RuntimeException)
152*b1cdbd2cSJim Jagielski {
153*b1cdbd2cSJim Jagielski     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OResultSetMetaData::isAutoIncrement" );
154*b1cdbd2cSJim Jagielski 	return sal_False;
155*b1cdbd2cSJim Jagielski }
156*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
isSigned(sal_Int32)157*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL OResultSetMetaData::isSigned( sal_Int32 /*column*/ ) throw(SQLException, RuntimeException)
158*b1cdbd2cSJim Jagielski {
159*b1cdbd2cSJim Jagielski     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OResultSetMetaData::isSigned" );
160*b1cdbd2cSJim Jagielski 	return sal_True;
161*b1cdbd2cSJim Jagielski }
162*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
getPrecision(sal_Int32 column)163*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL OResultSetMetaData::getPrecision( sal_Int32 column ) throw(SQLException, RuntimeException)
164*b1cdbd2cSJim Jagielski {
165*b1cdbd2cSJim Jagielski     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OResultSetMetaData::getPrecision" );
166*b1cdbd2cSJim Jagielski 	checkColumnIndex(column);
167*b1cdbd2cSJim Jagielski 	return getINT32((m_xColumns->get())[column-1]->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_PRECISION)));
168*b1cdbd2cSJim Jagielski }
169*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
getScale(sal_Int32 column)170*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL OResultSetMetaData::getScale( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException)
171*b1cdbd2cSJim Jagielski {
172*b1cdbd2cSJim Jagielski     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OResultSetMetaData::getScale" );
173*b1cdbd2cSJim Jagielski 	checkColumnIndex(column);
174*b1cdbd2cSJim Jagielski 	return getINT32((m_xColumns->get())[column-1]->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_SCALE)));
175*b1cdbd2cSJim Jagielski }
176*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
177*b1cdbd2cSJim Jagielski 
isNullable(sal_Int32 column)178*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL OResultSetMetaData::isNullable( sal_Int32 column ) throw(SQLException, RuntimeException)
179*b1cdbd2cSJim Jagielski {
180*b1cdbd2cSJim Jagielski     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OResultSetMetaData::isNullable" );
181*b1cdbd2cSJim Jagielski 	checkColumnIndex(column);
182*b1cdbd2cSJim Jagielski 	return getINT32((m_xColumns->get())[column-1]->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISNULLABLE)));
183*b1cdbd2cSJim Jagielski }
184*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
185*b1cdbd2cSJim Jagielski 
isSearchable(sal_Int32)186*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL OResultSetMetaData::isSearchable( sal_Int32 /*column*/ ) throw(SQLException, RuntimeException)
187*b1cdbd2cSJim Jagielski {
188*b1cdbd2cSJim Jagielski     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OResultSetMetaData::isSearchable" );
189*b1cdbd2cSJim Jagielski 	return sal_True;
190*b1cdbd2cSJim Jagielski }
191*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
192*b1cdbd2cSJim Jagielski 
isReadOnly(sal_Int32 column)193*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL OResultSetMetaData::isReadOnly( sal_Int32 column ) throw(SQLException, RuntimeException)
194*b1cdbd2cSJim Jagielski {
195*b1cdbd2cSJim Jagielski     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OResultSetMetaData::isReadOnly" );
196*b1cdbd2cSJim Jagielski 	checkColumnIndex(column);
197*b1cdbd2cSJim Jagielski 	return m_pTable->isReadOnly() || (
198*b1cdbd2cSJim Jagielski                             (m_xColumns->get())[column-1]->getPropertySetInfo()->hasPropertyByName(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FUNCTION)) &&
199*b1cdbd2cSJim Jagielski 						        ::cppu::any2bool((m_xColumns->get())[column-1]->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FUNCTION))));
200*b1cdbd2cSJim Jagielski }
201*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
202*b1cdbd2cSJim Jagielski 
isDefinitelyWritable(sal_Int32 column)203*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL OResultSetMetaData::isDefinitelyWritable( sal_Int32 column ) throw(SQLException, RuntimeException)
204*b1cdbd2cSJim Jagielski {
205*b1cdbd2cSJim Jagielski     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OResultSetMetaData::isDefinitelyWritable" );
206*b1cdbd2cSJim Jagielski 	return !isReadOnly(column);
207*b1cdbd2cSJim Jagielski }
208*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
isWritable(sal_Int32 column)209*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL OResultSetMetaData::isWritable( sal_Int32 column ) throw(SQLException, RuntimeException)
210*b1cdbd2cSJim Jagielski {
211*b1cdbd2cSJim Jagielski     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "file", "Ocke.Janssen@sun.com", "OResultSetMetaData::isWritable" );
212*b1cdbd2cSJim Jagielski 	return !isReadOnly(column);
213*b1cdbd2cSJim Jagielski }
214*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
215*b1cdbd2cSJim Jagielski 
216