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 #include "java/sql/ResultSetMetaData.hxx"
31 #include "java/sql/Connection.hxx"
32 #include "java/tools.hxx"
33 #include <rtl/logfile.hxx>
34 
35 using namespace connectivity;
36 using namespace ::com::sun::star::uno;
37 using namespace ::com::sun::star::beans;
38 //	using namespace ::com::sun::star::sdbcx;
39 using namespace ::com::sun::star::sdbc;
40 using namespace ::com::sun::star::container;
41 using namespace ::com::sun::star::lang;
42 
43 #define NULLABLE_UNDEFINED  99
44 //**************************************************************
45 //************ Class: java.sql.ResultSetMetaData
46 //**************************************************************
47 
48 jclass java_sql_ResultSetMetaData::theClass = 0;
49 java_sql_ResultSetMetaData::java_sql_ResultSetMetaData( JNIEnv * pEnv, jobject myObj, const java::sql::ConnectionLog& _rResultSetLogger, java_sql_Connection& _rCon  )
50     :java_lang_Object( pEnv, myObj )
51     ,m_aLogger( _rResultSetLogger )
52     ,m_pConnection( &_rCon )
53     ,m_nColumnCount(-1)
54 {
55     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "jdbc", "Ocke.Janssen@sun.com", "java_sql_ResultSetMetaData::java_sql_ResultSetMetaData" );
56 	SDBThreadAttach::addRef();
57 }
58 java_sql_ResultSetMetaData::~java_sql_ResultSetMetaData()
59 {
60 	SDBThreadAttach::releaseRef();
61 }
62 
63 jclass java_sql_ResultSetMetaData::getMyClass() const
64 {
65     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "jdbc", "Ocke.Janssen@sun.com", "java_sql_ResultSetMetaData::getMyClass" );
66 	// die Klasse muss nur einmal geholt werden, daher statisch
67 	if( !theClass )
68         theClass = findMyClass("java/sql/ResultSetMetaData");
69 	return theClass;
70 }
71 // -------------------------------------------------------------------------
72 
73 sal_Int32 SAL_CALL java_sql_ResultSetMetaData::getColumnDisplaySize( sal_Int32 column ) throw(SQLException, RuntimeException)
74 {
75     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "jdbc", "Ocke.Janssen@sun.com", "java_sql_ResultSetMetaData::getColumnDisplaySize" );
76     static jmethodID mID(NULL);
77     return callIntMethodWithIntArg("getColumnDisplaySize",mID,column);
78 }
79 // -------------------------------------------------------------------------
80 
81 sal_Int32 SAL_CALL java_sql_ResultSetMetaData::getColumnType( sal_Int32 column ) throw(SQLException, RuntimeException)
82 {
83     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "jdbc", "Ocke.Janssen@sun.com", "java_sql_ResultSetMetaData::getColumnType" );
84     static jmethodID mID(NULL);
85     return callIntMethodWithIntArg("getColumnType",mID,column);
86 }
87 // -------------------------------------------------------------------------
88 
89 sal_Int32 SAL_CALL java_sql_ResultSetMetaData::getColumnCount(  ) throw(SQLException, RuntimeException)
90 {
91     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "jdbc", "Ocke.Janssen@sun.com", "java_sql_ResultSetMetaData::getColumnCount" );
92     if ( m_nColumnCount == -1 )
93     {
94         static jmethodID mID(NULL);
95         m_nColumnCount = callIntMethod("getColumnCount",mID);
96     } // if ( m_nColumnCount == -1 )
97 	return m_nColumnCount;
98 
99 }
100 // -------------------------------------------------------------------------
101 
102 sal_Bool SAL_CALL java_sql_ResultSetMetaData::isCaseSensitive( sal_Int32 column ) throw(SQLException, RuntimeException)
103 {
104     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "jdbc", "Ocke.Janssen@sun.com", "java_sql_ResultSetMetaData::isCaseSensitive" );
105     static jmethodID mID(NULL);
106     return callBooleanMethodWithIntArg( "isCaseSensitive", mID,column );
107 }
108 // -------------------------------------------------------------------------
109 ::rtl::OUString SAL_CALL java_sql_ResultSetMetaData::getSchemaName( sal_Int32 column ) throw(SQLException, RuntimeException)
110 {
111     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "jdbc", "Ocke.Janssen@sun.com", "java_sql_ResultSetMetaData::getSchemaName" );
112     static jmethodID mID(NULL);
113     return callStringMethodWithIntArg("getSchemaName",mID,column);
114 }
115 // -------------------------------------------------------------------------
116 
117 ::rtl::OUString SAL_CALL java_sql_ResultSetMetaData::getColumnName( sal_Int32 column ) throw(SQLException, RuntimeException)
118 {
119     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "jdbc", "Ocke.Janssen@sun.com", "java_sql_ResultSetMetaData::getColumnName" );
120     static jmethodID mID(NULL);
121     return callStringMethodWithIntArg("getColumnName",mID,column);
122 }
123 // -------------------------------------------------------------------------
124 ::rtl::OUString SAL_CALL java_sql_ResultSetMetaData::getTableName( sal_Int32 column ) throw(SQLException, RuntimeException)
125 {
126     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "jdbc", "Ocke.Janssen@sun.com", "java_sql_ResultSetMetaData::getTableName" );
127     static jmethodID mID(NULL);
128     return callStringMethodWithIntArg("getTableName",mID,column);
129 }
130 // -------------------------------------------------------------------------
131 ::rtl::OUString SAL_CALL java_sql_ResultSetMetaData::getCatalogName( sal_Int32 column ) throw(SQLException, RuntimeException)
132 {
133     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "jdbc", "Ocke.Janssen@sun.com", "java_sql_ResultSetMetaData::getCatalogName" );
134     static jmethodID mID(NULL);
135     return callStringMethodWithIntArg("getCatalogName",mID,column);
136 }
137 // -------------------------------------------------------------------------
138 ::rtl::OUString SAL_CALL java_sql_ResultSetMetaData::getColumnTypeName( sal_Int32 column ) throw(SQLException, RuntimeException)
139 {
140     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "jdbc", "Ocke.Janssen@sun.com", "java_sql_ResultSetMetaData::getColumnTypeName" );
141     static jmethodID mID(NULL);
142     return callStringMethodWithIntArg("getColumnTypeName",mID,column);
143 }
144 // -------------------------------------------------------------------------
145 ::rtl::OUString SAL_CALL java_sql_ResultSetMetaData::getColumnLabel( sal_Int32 column ) throw(SQLException, RuntimeException)
146 {
147     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "jdbc", "Ocke.Janssen@sun.com", "java_sql_ResultSetMetaData::getColumnLabel" );
148     static jmethodID mID(NULL);
149     return callStringMethodWithIntArg("getColumnLabel",mID,column);
150 }
151 // -------------------------------------------------------------------------
152 ::rtl::OUString SAL_CALL java_sql_ResultSetMetaData::getColumnServiceName( sal_Int32 column ) throw(SQLException, RuntimeException)
153 {
154     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "jdbc", "Ocke.Janssen@sun.com", "java_sql_ResultSetMetaData::getColumnServiceName" );
155     static jmethodID mID(NULL);
156     return callStringMethodWithIntArg("getColumnClassName",mID,column);
157 }
158 // -------------------------------------------------------------------------
159 
160 sal_Bool SAL_CALL java_sql_ResultSetMetaData::isCurrency( sal_Int32 column ) throw(SQLException, RuntimeException)
161 {
162     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "jdbc", "Ocke.Janssen@sun.com", "java_sql_ResultSetMetaData::isCurrency" );
163     if ( m_pConnection->isIgnoreCurrencyEnabled() )
164         return sal_False;
165     static jmethodID mID(NULL);
166     return callBooleanMethodWithIntArg( "isCurrency", mID,column );
167 }
168 // -------------------------------------------------------------------------
169 
170 sal_Bool SAL_CALL java_sql_ResultSetMetaData::isAutoIncrement( sal_Int32 column ) throw(SQLException, RuntimeException)
171 {
172     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "jdbc", "Ocke.Janssen@sun.com", "java_sql_ResultSetMetaData::isAutoIncrement" );
173     static jmethodID mID(NULL);
174     return callBooleanMethodWithIntArg( "isAutoIncrement", mID,column );
175 }
176 // -------------------------------------------------------------------------
177 
178 
179 sal_Bool SAL_CALL java_sql_ResultSetMetaData::isSigned( sal_Int32 column ) throw(SQLException, RuntimeException)
180 {
181     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "jdbc", "Ocke.Janssen@sun.com", "java_sql_ResultSetMetaData::isSigned" );
182     static jmethodID mID(NULL);
183     return callBooleanMethodWithIntArg( "isSigned", mID,column );
184 }
185 // -------------------------------------------------------------------------
186 sal_Int32 SAL_CALL java_sql_ResultSetMetaData::getPrecision( sal_Int32 column ) throw(SQLException, RuntimeException)
187 {
188     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "jdbc", "Ocke.Janssen@sun.com", "java_sql_ResultSetMetaData::getPrecision" );
189     static jmethodID mID(NULL);
190     return callIntMethodWithIntArg("getPrecision",mID,column);
191 }
192 // -------------------------------------------------------------------------
193 sal_Int32 SAL_CALL java_sql_ResultSetMetaData::getScale( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException)
194 {
195     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "jdbc", "Ocke.Janssen@sun.com", "java_sql_ResultSetMetaData::getScale" );
196     static jmethodID mID(NULL);
197     return callIntMethodWithIntArg("getScale",mID,column);
198 }
199 // -------------------------------------------------------------------------
200 sal_Int32 SAL_CALL java_sql_ResultSetMetaData::isNullable( sal_Int32 column ) throw(SQLException, RuntimeException)
201 {
202     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "jdbc", "Ocke.Janssen@sun.com", "java_sql_ResultSetMetaData::isNullable" );
203     static jmethodID mID(NULL);
204     return callIntMethodWithIntArg("isNullable",mID,column);
205 }
206 // -------------------------------------------------------------------------
207 
208 sal_Bool SAL_CALL java_sql_ResultSetMetaData::isSearchable( sal_Int32 column ) throw(SQLException, RuntimeException)
209 {
210     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "jdbc", "Ocke.Janssen@sun.com", "java_sql_ResultSetMetaData::isSearchable" );
211     static jmethodID mID(NULL);
212     return callBooleanMethodWithIntArg( "isSearchable", mID,column );
213 }
214 // -------------------------------------------------------------------------
215 
216 sal_Bool SAL_CALL java_sql_ResultSetMetaData::isReadOnly( sal_Int32 column ) throw(SQLException, RuntimeException)
217 {
218     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "jdbc", "Ocke.Janssen@sun.com", "java_sql_ResultSetMetaData::isReadOnly" );
219     static jmethodID mID(NULL);
220     return callBooleanMethodWithIntArg( "isReadOnly", mID,column );
221 }
222 // -------------------------------------------------------------------------
223 
224 sal_Bool SAL_CALL java_sql_ResultSetMetaData::isDefinitelyWritable( sal_Int32 column ) throw(SQLException, RuntimeException)
225 {
226     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "jdbc", "Ocke.Janssen@sun.com", "java_sql_ResultSetMetaData::isDefinitelyWritable" );
227     static jmethodID mID(NULL);
228     return callBooleanMethodWithIntArg( "isDefinitelyWritable", mID,column );
229 }
230 // -------------------------------------------------------------------------
231 sal_Bool SAL_CALL java_sql_ResultSetMetaData::isWritable( sal_Int32 column ) throw(SQLException, RuntimeException)
232 {
233     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "jdbc", "Ocke.Janssen@sun.com", "java_sql_ResultSetMetaData::isWritable" );
234     static jmethodID mID(NULL);
235     return callBooleanMethodWithIntArg( "isWritable", mID,column );
236 }
237 // -------------------------------------------------------------------------
238 
239