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 "adabas/BTables.hxx"
27 #include "adabas/BViews.hxx"
28 #include "adabas/BTable.hxx"
29 #include <com/sun/star/sdbc/XRow.hpp>
30 #include <com/sun/star/sdbc/XResultSet.hpp>
31 #include <com/sun/star/sdbc/ColumnValue.hpp>
32 #include <com/sun/star/sdbc/KeyRule.hpp>
33 #include <com/sun/star/sdbcx/KeyType.hpp>
34 #include "adabas/BCatalog.hxx"
35 #include "adabas/BConnection.hxx"
36 #include <comphelper/extract.hxx>
37 #include "connectivity/dbtools.hxx"
38 #include "connectivity/dbexception.hxx"
39 #include <cppuhelper/interfacecontainer.h>
40 #include <comphelper/types.hxx>
41 
42 using namespace ::comphelper;
43 using namespace connectivity;
44 using namespace ::cppu;
45 using namespace connectivity::adabas;
46 using namespace ::com::sun::star::uno;
47 using namespace ::com::sun::star::beans;
48 using namespace ::com::sun::star::sdbcx;
49 using namespace ::com::sun::star::sdbc;
50 using namespace ::com::sun::star::container;
51 using namespace ::com::sun::star::lang;
52 using namespace dbtools;
53 typedef connectivity::sdbcx::OCollection OCollection_TYPE;
54 
createObject(const::rtl::OUString & _rName)55 sdbcx::ObjectType OTables::createObject(const ::rtl::OUString& _rName)
56 {
57 	::rtl::OUString aName,aSchema;
58 	sal_Int32 nLen = _rName.indexOf('.');
59 	aSchema = _rName.copy(0,nLen);
60 	aName	= _rName.copy(nLen+1);
61 
62     Sequence< ::rtl::OUString > aTypes(1);
63 	aTypes[0] = ::rtl::OUString::createFromAscii("%");
64 	//	aTypes[0] = ::rtl::OUString::createFromAscii("TABLE");
65 	//	aTypes[1] = ::rtl::OUString::createFromAscii("SYSTEMTABLE");
66 
67     Reference< XResultSet > xResult = m_xMetaData->getTables(Any(),aSchema,aName,aTypes);
68 
69     sdbcx::ObjectType xRet = NULL;
70 	if(xResult.is())
71 	{
72         Reference< XRow > xRow(xResult,UNO_QUERY);
73 		if(xResult->next()) // there can be only one table with this name
74 		{
75 			OAdabasTable* pRet = new OAdabasTable(this,	static_cast<OAdabasCatalog&>(m_rParent).getConnection(),
76 										aName,xRow->getString(4),xRow->getString(5),aSchema);
77 			xRet = pRet;
78 		}
79 		::comphelper::disposeComponent(xResult);
80 	}
81 
82 	return xRet;
83 }
84 // -------------------------------------------------------------------------
impl_refresh()85 void OTables::impl_refresh(  ) throw(RuntimeException)
86 {
87 	static_cast<OAdabasCatalog&>(m_rParent).refreshTables();
88 }
89 // -------------------------------------------------------------------------
disposing(void)90 void OTables::disposing(void)
91 {
92 m_xMetaData.clear();
93 	OCollection::disposing();
94 }
95 // -------------------------------------------------------------------------
createDescriptor()96 Reference< XPropertySet > OTables::createDescriptor()
97 {
98 	return new OAdabasTable(this,static_cast<OAdabasCatalog&>(m_rParent).getConnection());
99 }
100 // -------------------------------------------------------------------------
101 // XAppend
appendObject(const::rtl::OUString & _rForName,const Reference<XPropertySet> & descriptor)102 sdbcx::ObjectType OTables::appendObject( const ::rtl::OUString& _rForName, const Reference< XPropertySet >& descriptor )
103 {
104 	createTable(descriptor);
105     return createObject( _rForName );
106 }
107 // -------------------------------------------------------------------------
setComments(const Reference<XPropertySet> & descriptor)108 void OTables::setComments(const Reference< XPropertySet >& descriptor ) throw(SQLException, RuntimeException)
109 {
110 	::rtl::OUString aSql	= ::rtl::OUString::createFromAscii("CREATE TABLE ");
111 	::rtl::OUString aQuote	= static_cast<OAdabasCatalog&>(m_rParent).getConnection()->getMetaData()->getIdentifierQuoteString(  );
112 	const ::rtl::OUString& sDot = OAdabasCatalog::getDot();
113 
114 	OAdabasConnection* pConnection = static_cast<OAdabasCatalog&>(m_rParent).getConnection();
115         Reference< XStatement > xStmt = pConnection->createStatement(  );
116 	aSql = ::rtl::OUString::createFromAscii("COMMENT ON TABLE ");
117     ::rtl::OUString sSchema;
118 	descriptor->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_SCHEMANAME)) >>= sSchema;
119 	if(sSchema.getLength())
120 		aSql += ::dbtools::quoteName(aQuote, sSchema) + sDot;
121 
122 	aSql += aQuote + getString(descriptor->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME))) + aQuote
123 			+ ::rtl::OUString::createFromAscii(" '")
124 			+ getString(descriptor->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_DESCRIPTION)))
125 			+ ::rtl::OUString::createFromAscii("'");
126 	xStmt->execute(aSql);
127 
128 	// columns
129 	Reference<XColumnsSupplier> xColumnSup(descriptor,UNO_QUERY);
130 	Reference<XIndexAccess> xColumns(xColumnSup->getColumns(),UNO_QUERY);
131 	Reference< XPropertySet > xColProp;
132 
133 	aSql = ::rtl::OUString::createFromAscii("COMMENT ON COLUMN ");
134 	if(sSchema.getLength())
135 		aSql += ::dbtools::quoteName(aQuote, sSchema) + sDot;
136 	aSql += aQuote + getString(descriptor->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME))) + aQuote  + sDot
137 			+ aQuote;
138 
139 	for(sal_Int32 i=0;i<xColumns->getCount();++i)
140 	{
141 		::cppu::extractInterface(xColProp,xColumns->getByIndex(i));
142 		if(xColProp.is())
143 		{
144 			::rtl::OUString aDescription = getString(xColProp->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_DESCRIPTION)));
145 			if(aDescription.getLength())
146 			{
147 				::rtl::OUString aCom = aSql + getString(xColProp->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME))) + aQuote
148 											+ ::rtl::OUString::createFromAscii(" '")
149 											+ aDescription
150 											+ ::rtl::OUString::createFromAscii("'");
151 				xStmt->execute(aSql);
152 				::comphelper::disposeComponent(xStmt);
153 			}
154 		}
155 	}
156 	::comphelper::disposeComponent(xStmt);
157 }
158 // -------------------------------------------------------------------------
159 // XDrop
dropObject(sal_Int32 _nPos,const::rtl::OUString _sElementName)160 void OTables::dropObject(sal_Int32 _nPos,const ::rtl::OUString _sElementName)
161 {
162     Reference< XInterface > xObject( getObject( _nPos ) );
163     sal_Bool bIsNew = connectivity::sdbcx::ODescriptor::isNew( xObject );
164 	if (!bIsNew)
165 	{
166 		OAdabasConnection* pConnection = static_cast<OAdabasCatalog&>(m_rParent).getConnection();
167         Reference< XStatement > xStmt = pConnection->createStatement(  );
168 
169 		::rtl::OUString aName,aSchema;
170 		sal_Int32 nLen = _sElementName.indexOf('.');
171 		aSchema = _sElementName.copy(0,nLen);
172 		aName	= _sElementName.copy(nLen+1);
173 		::rtl::OUString aSql = ::rtl::OUString::createFromAscii("DROP ");
174 		const ::rtl::OUString& sDot = OAdabasCatalog::getDot();
175 
176 		Reference<XPropertySet> xProp(xObject,UNO_QUERY);
177 		sal_Bool bIsView;
178 		if((bIsView = (xProp.is() && ::comphelper::getString(xProp->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPE))) == ::rtl::OUString::createFromAscii("VIEW")))) // here we have a view
179 			aSql += ::rtl::OUString::createFromAscii("VIEW ");
180 		else
181 			aSql += ::rtl::OUString::createFromAscii("TABLE ");
182 
183 		aSql += m_xMetaData->getIdentifierQuoteString(  ) + aSchema + m_xMetaData->getIdentifierQuoteString(  );
184 		aSql += sDot;
185 		aSql += m_xMetaData->getIdentifierQuoteString(  ) + aName + m_xMetaData->getIdentifierQuoteString(  );
186 		xStmt->execute(aSql);
187 		::comphelper::disposeComponent(xStmt);
188 		// if no exception was thrown we must delete it from the views
189 		if(bIsView)
190 		{
191 			OViews* pViews = static_cast<OViews*>(static_cast<OAdabasCatalog&>(m_rParent).getPrivateViews());
192 			if(pViews && pViews->hasByName(_sElementName))
193 				pViews->dropByNameImpl(_sElementName);
194 		}
195     }
196 }
197 // -------------------------------------------------------------------------
createTable(const Reference<XPropertySet> & descriptor)198 void OTables::createTable( const Reference< XPropertySet >& descriptor )
199 {
200 	::rtl::OUString aSql	= ::rtl::OUString::createFromAscii("CREATE TABLE ");
201 	::rtl::OUString aQuote	= static_cast<OAdabasCatalog&>(m_rParent).getConnection()->getMetaData()->getIdentifierQuoteString(  );
202 	const ::rtl::OUString& sDot = OAdabasCatalog::getDot();
203 	::rtl::OUString sSchema;
204 
205 	descriptor->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_SCHEMANAME)) >>= sSchema;
206 	if(sSchema.getLength())
207 		aSql += ::dbtools::quoteName(aQuote, sSchema) + sDot;
208 	else
209 		descriptor->setPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_SCHEMANAME),makeAny(static_cast<OAdabasCatalog&>(m_rParent).getConnection()->getUserName().
210 					toAsciiUpperCase()
211 					));
212 
213 	aSql += ::dbtools::quoteName(aQuote, getString(descriptor->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME))))
214 				+ ::rtl::OUString::createFromAscii(" (");
215 
216 	// columns
217     Reference<XColumnsSupplier> xColumnSup(descriptor,UNO_QUERY);
218     Reference<XIndexAccess> xColumns(xColumnSup->getColumns(),UNO_QUERY);
219     Reference< XPropertySet > xColProp;
220 
221     Any aTypeName;
222 	sal_Int32 nCount = xColumns->getCount();
223 	if(!nCount)
224 		::dbtools::throwFunctionSequenceException(static_cast<XTypeProvider*>(this));
225 
226 	for(sal_Int32 i=0;i<nCount;++i)
227 	{
228 		if(::cppu::extractInterface(xColProp,xColumns->getByIndex(i)) && xColProp.is())
229 		{
230 
231 			aSql += aQuote + getString(xColProp->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME))) + aQuote;
232 
233 			aSql += ::rtl::OUString::createFromAscii(" ");
234 			aSql += OTables::getColumnSqlType(xColProp);
235 			aSql += OTables::getColumnSqlNotNullDefault(xColProp);
236 			aSql += ::rtl::OUString::createFromAscii(",");
237 		}
238 	}
239 
240 	// keys
241 
242     Reference<XKeysSupplier> xKeySup(descriptor,UNO_QUERY);
243 
244     Reference<XIndexAccess> xKeys = xKeySup->getKeys();
245 	if(xKeys.is())
246 	{
247 		sal_Bool bPKey = sal_False;
248 		for( sal_Int32 key=0; key<xKeys->getCount(); ++key )
249 		{
250 			if(::cppu::extractInterface(xColProp,xKeys->getByIndex(key)) && xColProp.is())
251 			{
252 
253 				sal_Int32 nKeyType		= getINT32(xColProp->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPE)));
254 
255                 if(nKeyType == KeyType::PRIMARY)
256 				{
257 					if(bPKey)
258                         throw SQLException();
259 
260 					bPKey = sal_True;
261                     xColumnSup = Reference<XColumnsSupplier>(xColProp,UNO_QUERY);
262                     xColumns = Reference<XIndexAccess>(xColumnSup->getColumns(),UNO_QUERY);
263 					if(!xColumns->getCount())
264                         throw SQLException();
265 
266 					aSql += ::rtl::OUString::createFromAscii(" PRIMARY KEY (");
267 					for( sal_Int32 column=0; column<xColumns->getCount(); ++column )
268 					{
269 						if(::cppu::extractInterface(xColProp,xColumns->getByIndex(column)) && xColProp.is())
270 							aSql += aQuote + getString(xColProp->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME))) + aQuote
271 										+ 	::rtl::OUString::createFromAscii(",");
272 					}
273 
274 					aSql = aSql.replaceAt(aSql.getLength()-1,1,::rtl::OUString::createFromAscii(")"));
275 				}
276                 else if(nKeyType == KeyType::UNIQUE)
277 				{
278                     xColumnSup = Reference<XColumnsSupplier>(xColProp,UNO_QUERY);
279                     xColumns = Reference<XIndexAccess>(xColumnSup->getColumns(),UNO_QUERY);
280 					if(!xColumns->getCount())
281                         throw SQLException();
282 
283 					aSql += ::rtl::OUString::createFromAscii(" UNIQUE (");
284 					for( sal_Int32 column=0; column<xColumns->getCount(); ++column )
285 					{
286 						if(::cppu::extractInterface(xColProp,xColumns->getByIndex(column)) && xColProp.is())
287 							aSql += aQuote + getString(xColProp->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME))) + aQuote
288 										+ ::rtl::OUString::createFromAscii(",");
289 					}
290 
291 					aSql = aSql.replaceAt(aSql.getLength()-1,1,::rtl::OUString::createFromAscii(")"));
292 				}
293                 else if(nKeyType == KeyType::FOREIGN)
294 				{
295 					sal_Int32 nDeleteRule	= getINT32(xColProp->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_DELETERULE)));
296 
297                     xColumnSup = Reference<XColumnsSupplier>(xColProp,UNO_QUERY);
298                     xColumns = Reference<XIndexAccess>(xColumnSup->getColumns(),UNO_QUERY);
299 					if(!xColumns->getCount())
300                         throw SQLException();
301 
302 					aSql += ::rtl::OUString::createFromAscii(" FOREIGN KEY ");
303 					::rtl::OUString aName,aSchema,aRefTable = getString(xColProp->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_REFERENCEDTABLE)));
304 					sal_Int32 nLen = aRefTable.indexOf('.');
305 					aSchema = aRefTable.copy(0,nLen);
306 					aName	= aRefTable.copy(nLen+1);
307 
308 					aSql += aQuote + aSchema + aQuote + sDot
309 								+ aQuote + aName + aQuote
310 								+ ::rtl::OUString::createFromAscii(" (");
311 
312 					for ( sal_Int32 column=0; column<xColumns->getCount(); ++column )
313 					{
314 						if(::cppu::extractInterface(xColProp,xColumns->getByIndex(column)) && xColProp.is())
315 							aSql += aQuote + getString(xColProp->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME))) + aQuote
316 										+ ::rtl::OUString::createFromAscii(",");
317 					}
318 
319 					aSql = aSql.replaceAt(aSql.getLength()-1,1,::rtl::OUString::createFromAscii(")"));
320 
321 					switch(nDeleteRule)
322 					{
323                         case KeyRule::CASCADE:
324 							aSql += ::rtl::OUString::createFromAscii(" ON DELETE CASCADE ");
325 							break;
326                         case KeyRule::RESTRICT:
327 							aSql += ::rtl::OUString::createFromAscii(" ON DELETE RESTRICT ");
328 							break;
329                         case KeyRule::SET_NULL:
330 							aSql += ::rtl::OUString::createFromAscii(" ON DELETE SET NULL ");
331 							break;
332                         case KeyRule::SET_DEFAULT:
333 							aSql += ::rtl::OUString::createFromAscii(" ON DELETE SET DEFAULT ");
334 							break;
335 						default:
336 							;
337 					}
338 				}
339 			}
340 		}
341 	}
342 
343 	if(aSql.lastIndexOf(',') == (aSql.getLength()-1))
344 		aSql = aSql.replaceAt(aSql.getLength()-1,1,::rtl::OUString::createFromAscii(")"));
345 	else
346 		aSql += ::rtl::OUString::createFromAscii(")");
347 
348 	OAdabasConnection* pConnection = static_cast<OAdabasCatalog&>(m_rParent).getConnection();
349         Reference< XStatement > xStmt = pConnection->createStatement(  );
350 	xStmt->execute(aSql);
351 	::comphelper::disposeComponent(xStmt);
352 
353 	if(getString(descriptor->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_DESCRIPTION))).getLength())
354 		setComments(descriptor);
355 }
356 // -----------------------------------------------------------------------------
appendNew(const::rtl::OUString & _rsNewTable)357 void OTables::appendNew(const ::rtl::OUString& _rsNewTable)
358 {
359 	insertElement(_rsNewTable,NULL);
360 
361 	// notify our container listeners
362 	ContainerEvent aEvent(static_cast<XContainer*>(this), makeAny(_rsNewTable), Any(), Any());
363 	OInterfaceIteratorHelper aListenerLoop(m_aContainerListeners);
364 	while (aListenerLoop.hasMoreElements())
365 		static_cast<XContainerListener*>(aListenerLoop.next())->elementInserted(aEvent);
366 }
367 // -----------------------------------------------------------------------------
getColumnSqlType(const Reference<XPropertySet> & _rxColProp)368 ::rtl::OUString OTables::getColumnSqlType(const Reference<XPropertySet>& _rxColProp)
369 {
370 	::rtl::OUString sSql;
371 	sal_Int32 nDataType = 0;
372 	_rxColProp->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPE)) >>= nDataType;
373 	switch(nDataType)
374 	{
375 		case DataType::VARBINARY:
376 			sSql += ::rtl::OUString::createFromAscii("VAR");
377 			/* run through*/
378 		case DataType::BINARY:
379 			sSql += ::rtl::OUString::createFromAscii("CHAR");
380 			break;
381 		default:
382 			{
383 				Any aTypeName = _rxColProp->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPENAME));
384 				if(aTypeName.hasValue() && getString(aTypeName).getLength())
385 					sSql += getString(aTypeName);
386 				else
387 					sSql += OTables::getTypeString(_rxColProp) + ::rtl::OUString::createFromAscii(" ");
388 			}
389 	}
390 
391 	switch(nDataType)
392 	{
393         case DataType::CHAR:
394         case DataType::VARCHAR:
395 		case DataType::FLOAT:
396 		case DataType::REAL:
397 			sSql += ::rtl::OUString::createFromAscii("(")
398 						+ ::rtl::OUString::valueOf(getINT32(_rxColProp->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_PRECISION))))
399 						+ ::rtl::OUString::createFromAscii(")");
400 			break;
401 
402         case DataType::DECIMAL:
403         case DataType::NUMERIC:
404 			sSql += ::rtl::OUString::createFromAscii("(")
405 						+ ::rtl::OUString::valueOf(getINT32(_rxColProp->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_PRECISION))))
406 						+ ::rtl::OUString::createFromAscii(",")
407 						+ ::rtl::OUString::valueOf(getINT32(_rxColProp->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_SCALE))))
408 						+ ::rtl::OUString::createFromAscii(")");
409 			break;
410 		case DataType::BINARY:
411 		case DataType::VARBINARY:
412 			sSql += ::rtl::OUString::createFromAscii("(")
413 						+ ::rtl::OUString::valueOf(getINT32(_rxColProp->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_PRECISION))))
414 						+ ::rtl::OUString::createFromAscii(") BYTE");
415 			break;
416 	}
417 	return sSql;
418 }
419 // -----------------------------------------------------------------------------
getColumnSqlNotNullDefault(const Reference<XPropertySet> & _rxColProp)420 ::rtl::OUString OTables::getColumnSqlNotNullDefault(const Reference<XPropertySet>& _rxColProp)
421 {
422 	OSL_ENSURE(_rxColProp.is(),"OTables::getColumnSqlNotNullDefault: Column is null!");
423 	::rtl::OUString sSql;
424 	::rtl::OUString aDefault = getString(_rxColProp->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_DEFAULTVALUE)));
425     if(getINT32(_rxColProp->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISNULLABLE))) == ColumnValue::NO_NULLS)
426 	{
427 		sSql += ::rtl::OUString::createFromAscii(" NOT NULL");
428 		if(aDefault.getLength())
429 			sSql += ::rtl::OUString::createFromAscii(" WITH DEFAULT");
430 	}
431 	else if(aDefault.getLength())
432 	{
433 		sSql +=::rtl::OUString::createFromAscii(" DEFAULT '") + aDefault;
434 		sSql += ::rtl::OUString::createFromAscii("'");
435 	}
436 	return sSql;
437 }
438 // -----------------------------------------------------------------------------
getTypeString(const Reference<XPropertySet> & _rxColProp)439 ::rtl::OUString OTables::getTypeString(const Reference< XPropertySet >& _rxColProp)
440 {
441 	::rtl::OUString	aValue;
442 	switch(getINT32(_rxColProp->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPE))))
443 	{
444 		case DataType::BIT:
445 			aValue = ::rtl::OUString::createFromAscii("BOOLEAN");
446 			break;
447 		case DataType::TINYINT:
448 			aValue = ::rtl::OUString::createFromAscii("SMALLINT");
449 			break;
450         case DataType::SMALLINT:
451 			aValue = ::rtl::OUString::createFromAscii("SMALLINT");
452 			break;
453         case DataType::INTEGER:
454 			aValue = ::rtl::OUString::createFromAscii("INT");
455 			break;
456         case DataType::FLOAT:
457 			aValue = ::rtl::OUString::createFromAscii("FLOAT");
458 			break;
459         case DataType::REAL:
460 			aValue = ::rtl::OUString::createFromAscii("REAL");
461 			break;
462         case DataType::DOUBLE:
463 			aValue = ::rtl::OUString::createFromAscii("DOUBLE");
464 			break;
465         case DataType::NUMERIC:
466 			aValue = ::rtl::OUString::createFromAscii("DECIMAL");
467 			break;
468         case DataType::DECIMAL:
469 			aValue = ::rtl::OUString::createFromAscii("DECIMAL");
470 			break;
471         case DataType::CHAR:
472 			aValue = ::rtl::OUString::createFromAscii("CHAR");
473 			break;
474         case DataType::VARCHAR:
475 			aValue = ::rtl::OUString::createFromAscii("VARCHAR");
476 			break;
477         case DataType::LONGVARCHAR:
478 			aValue = ::rtl::OUString::createFromAscii("LONG VARCHAR");
479 			break;
480         case DataType::DATE:
481 			aValue = ::rtl::OUString::createFromAscii("DATE");
482 			break;
483         case DataType::TIME:
484 			aValue = ::rtl::OUString::createFromAscii("TIME");
485 			break;
486         case DataType::TIMESTAMP:
487 			aValue = ::rtl::OUString::createFromAscii("TIMESTAMP");
488 			break;
489         case DataType::BINARY:
490 			aValue = ::rtl::OUString::createFromAscii("CHAR () BYTE");
491 			break;
492         case DataType::VARBINARY:
493 			aValue = ::rtl::OUString::createFromAscii("VARCHAR () BYTE");
494 			break;
495         case DataType::LONGVARBINARY:
496 			aValue = ::rtl::OUString::createFromAscii("LONG BYTE");
497 			break;
498 	}
499 	return aValue;
500 }
501 // -----------------------------------------------------------------------------
getNameForObject(const sdbcx::ObjectType & _xObject)502 ::rtl::OUString OTables::getNameForObject(const sdbcx::ObjectType& _xObject)
503 {
504     OSL_ENSURE(_xObject.is(),"OTables::getNameForObject: Object is NULL!");
505     ::rtl::OUString sName,sTemp;
506     _xObject->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_SCHEMANAME)) >>= sName;
507     if( sName.getLength() )
508 	{
509 		const ::rtl::OUString& sDot = OAdabasCatalog::getDot();
510 		sName += sDot;
511 	}
512 
513     _xObject->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME)) >>= sTemp;
514     sName += sTemp;
515 
516     return sName;
517 }
518 // -----------------------------------------------------------------------------
519