1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_connectivity.hxx" 30*cdf0e10cSrcweir #include "ado/ADatabaseMetaData.hxx" 31*cdf0e10cSrcweir #include "ado/ADatabaseMetaDataResultSetMetaData.hxx" 32*cdf0e10cSrcweir #include "ado/Awrapado.hxx" 33*cdf0e10cSrcweir #include "ado/AGroup.hxx" 34*cdf0e10cSrcweir #include "ado/adoimp.hxx" 35*cdf0e10cSrcweir #include "ado/AIndex.hxx" 36*cdf0e10cSrcweir #include "ado/AKey.hxx" 37*cdf0e10cSrcweir #include "ado/ATable.hxx" 38*cdf0e10cSrcweir #include <com/sun/star/sdbc/DataType.hpp> 39*cdf0e10cSrcweir #include <com/sun/star/sdbc/ProcedureResult.hpp> 40*cdf0e10cSrcweir #include <com/sun/star/sdbc/ColumnValue.hpp> 41*cdf0e10cSrcweir #ifdef DELETE 42*cdf0e10cSrcweir #undef DELETE 43*cdf0e10cSrcweir #endif 44*cdf0e10cSrcweir #include <com/sun/star/sdbcx/Privilege.hpp> 45*cdf0e10cSrcweir #include <com/sun/star/sdbcx/PrivilegeObject.hpp> 46*cdf0e10cSrcweir #include <com/sun/star/sdbc/KeyRule.hpp> 47*cdf0e10cSrcweir #include <com/sun/star/sdbcx/KeyType.hpp> 48*cdf0e10cSrcweir 49*cdf0e10cSrcweir using namespace connectivity::ado; 50*cdf0e10cSrcweir using namespace ::com::sun::star::sdbc; 51*cdf0e10cSrcweir using namespace ::com::sun::star::sdbcx; 52*cdf0e10cSrcweir using namespace ::com::sun::star::uno; 53*cdf0e10cSrcweir 54*cdf0e10cSrcweir // ------------------------------------------------------------------------- 55*cdf0e10cSrcweir void ODatabaseMetaData::fillLiterals() 56*cdf0e10cSrcweir { 57*cdf0e10cSrcweir ADORecordset *pRecordset = NULL; 58*cdf0e10cSrcweir OLEVariant vtEmpty; 59*cdf0e10cSrcweir vtEmpty.setNoArg(); 60*cdf0e10cSrcweir m_pADOConnection->OpenSchema(adSchemaDBInfoLiterals,vtEmpty,vtEmpty,&pRecordset); 61*cdf0e10cSrcweir 62*cdf0e10cSrcweir ADOS::ThrowException(*m_pADOConnection,*this); 63*cdf0e10cSrcweir 64*cdf0e10cSrcweir OSL_ENSURE(pRecordset,"fillLiterals: no resultset!"); 65*cdf0e10cSrcweir if ( pRecordset ) 66*cdf0e10cSrcweir { 67*cdf0e10cSrcweir WpADORecordset aRecordset(pRecordset); 68*cdf0e10cSrcweir 69*cdf0e10cSrcweir aRecordset.MoveFirst(); 70*cdf0e10cSrcweir OLEVariant aValue; 71*cdf0e10cSrcweir LiteralInfo aInfo; 72*cdf0e10cSrcweir while(!aRecordset.IsAtEOF()) 73*cdf0e10cSrcweir { 74*cdf0e10cSrcweir WpOLEAppendCollection<ADOFields, ADOField, WpADOField> aFields(aRecordset.GetFields()); 75*cdf0e10cSrcweir WpADOField aField(aFields.GetItem(1)); 76*cdf0e10cSrcweir aInfo.pwszLiteralValue = aField.get_Value(); 77*cdf0e10cSrcweir aField = aFields.GetItem(5); 78*cdf0e10cSrcweir aInfo.fSupported = aField.get_Value(); 79*cdf0e10cSrcweir aField = aFields.GetItem(6); 80*cdf0e10cSrcweir aInfo.cchMaxLen = aField.get_Value().getUInt32(); 81*cdf0e10cSrcweir 82*cdf0e10cSrcweir aField = aFields.GetItem(4); 83*cdf0e10cSrcweir sal_uInt32 nId = aField.get_Value().getUInt32(); 84*cdf0e10cSrcweir m_aLiteralInfo[nId] = aInfo; 85*cdf0e10cSrcweir 86*cdf0e10cSrcweir aRecordset.MoveNext(); 87*cdf0e10cSrcweir } 88*cdf0e10cSrcweir aRecordset.Close(); 89*cdf0e10cSrcweir } 90*cdf0e10cSrcweir } 91*cdf0e10cSrcweir // ------------------------------------------------------------------------- 92*cdf0e10cSrcweir sal_Int32 ODatabaseMetaData::getMaxSize(sal_uInt32 _nId) 93*cdf0e10cSrcweir { 94*cdf0e10cSrcweir if(!m_aLiteralInfo.size()) 95*cdf0e10cSrcweir fillLiterals(); 96*cdf0e10cSrcweir 97*cdf0e10cSrcweir sal_Int32 nSize = 0; 98*cdf0e10cSrcweir ::std::map<sal_uInt32,LiteralInfo>::const_iterator aIter = m_aLiteralInfo.find(_nId); 99*cdf0e10cSrcweir if(aIter != m_aLiteralInfo.end() && (*aIter).second.fSupported) 100*cdf0e10cSrcweir nSize = ((*aIter).second.cchMaxLen == (-1)) ? 0 : (*aIter).second.cchMaxLen; 101*cdf0e10cSrcweir return nSize; 102*cdf0e10cSrcweir } 103*cdf0e10cSrcweir // ------------------------------------------------------------------------- 104*cdf0e10cSrcweir sal_Bool ODatabaseMetaData::isCapable(sal_uInt32 _nId) 105*cdf0e10cSrcweir { 106*cdf0e10cSrcweir if(!m_aLiteralInfo.size()) 107*cdf0e10cSrcweir fillLiterals(); 108*cdf0e10cSrcweir sal_Bool bSupported = sal_False; 109*cdf0e10cSrcweir ::std::map<sal_uInt32,LiteralInfo>::const_iterator aIter = m_aLiteralInfo.find(_nId); 110*cdf0e10cSrcweir if(aIter != m_aLiteralInfo.end()) 111*cdf0e10cSrcweir bSupported = (*aIter).second.fSupported; 112*cdf0e10cSrcweir return bSupported; 113*cdf0e10cSrcweir } 114*cdf0e10cSrcweir 115*cdf0e10cSrcweir // ------------------------------------------------------------------------- 116*cdf0e10cSrcweir ::rtl::OUString ODatabaseMetaData::getLiteral(sal_uInt32 _nId) 117*cdf0e10cSrcweir { 118*cdf0e10cSrcweir if(!m_aLiteralInfo.size()) 119*cdf0e10cSrcweir fillLiterals(); 120*cdf0e10cSrcweir ::rtl::OUString sStr; 121*cdf0e10cSrcweir ::std::map<sal_uInt32,LiteralInfo>::const_iterator aIter = m_aLiteralInfo.find(_nId); 122*cdf0e10cSrcweir if(aIter != m_aLiteralInfo.end() && (*aIter).second.fSupported) 123*cdf0e10cSrcweir sStr = (*aIter).second.pwszLiteralValue; 124*cdf0e10cSrcweir return sStr; 125*cdf0e10cSrcweir } 126*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 127*cdf0e10cSrcweir // ------------------------------------------------------------------------- 128*cdf0e10cSrcweir void ODatabaseMetaDataResultSetMetaData::setColumnPrivilegesMap() 129*cdf0e10cSrcweir { 130*cdf0e10cSrcweir m_mColumns[8] = OColumn(::rtl::OUString(),::rtl::OUString::createFromAscii("IS_GRANTABLE"), 131*cdf0e10cSrcweir ColumnValue::NULLABLE, 132*cdf0e10cSrcweir 3,3,0, 133*cdf0e10cSrcweir DataType::VARCHAR); 134*cdf0e10cSrcweir } 135*cdf0e10cSrcweir // ------------------------------------------------------------------------- 136*cdf0e10cSrcweir void ODatabaseMetaDataResultSetMetaData::setColumnsMap() 137*cdf0e10cSrcweir { 138*cdf0e10cSrcweir m_mColumns[6] = OColumn(::rtl::OUString(),::rtl::OUString::createFromAscii("TYPE_NAME"), 139*cdf0e10cSrcweir ColumnValue::NO_NULLS, 140*cdf0e10cSrcweir 0,0,0, 141*cdf0e10cSrcweir DataType::VARCHAR); 142*cdf0e10cSrcweir m_mColumns[11] = OColumn(::rtl::OUString(),::rtl::OUString::createFromAscii("NULLABLE"), 143*cdf0e10cSrcweir ColumnValue::NO_NULLS, 144*cdf0e10cSrcweir 1,1,0, 145*cdf0e10cSrcweir DataType::INTEGER); 146*cdf0e10cSrcweir m_mColumns[12] = OColumn(::rtl::OUString(),::rtl::OUString::createFromAscii("REMARKS"), 147*cdf0e10cSrcweir ColumnValue::NULLABLE, 148*cdf0e10cSrcweir 0,0,0, 149*cdf0e10cSrcweir DataType::VARCHAR); 150*cdf0e10cSrcweir m_mColumns[13] = OColumn(::rtl::OUString(),::rtl::OUString::createFromAscii("COLUMN_DEF"), 151*cdf0e10cSrcweir ColumnValue::NULLABLE, 152*cdf0e10cSrcweir 0,0,0, 153*cdf0e10cSrcweir DataType::VARCHAR); 154*cdf0e10cSrcweir m_mColumns[14] = OColumn(::rtl::OUString(),::rtl::OUString::createFromAscii("SQL_DATA_TYPE"), 155*cdf0e10cSrcweir ColumnValue::NO_NULLS, 156*cdf0e10cSrcweir 1,1,0, 157*cdf0e10cSrcweir DataType::INTEGER); 158*cdf0e10cSrcweir m_mColumns[15] = OColumn(::rtl::OUString(),::rtl::OUString::createFromAscii("SQL_DATETIME_SUB"), 159*cdf0e10cSrcweir ColumnValue::NO_NULLS, 160*cdf0e10cSrcweir 1,1,0, 161*cdf0e10cSrcweir DataType::INTEGER); 162*cdf0e10cSrcweir m_mColumns[16] = OColumn(::rtl::OUString(),::rtl::OUString::createFromAscii("CHAR_OCTET_LENGTH"), 163*cdf0e10cSrcweir ColumnValue::NO_NULLS, 164*cdf0e10cSrcweir 1,1,0, 165*cdf0e10cSrcweir DataType::INTEGER); 166*cdf0e10cSrcweir } 167*cdf0e10cSrcweir // ------------------------------------------------------------------------- 168*cdf0e10cSrcweir void ODatabaseMetaDataResultSetMetaData::setTablesMap() 169*cdf0e10cSrcweir { 170*cdf0e10cSrcweir m_mColumns[5] = OColumn(::rtl::OUString(),::rtl::OUString::createFromAscii("REMARKS"), 171*cdf0e10cSrcweir ColumnValue::NULLABLE, 172*cdf0e10cSrcweir 0,0,0, 173*cdf0e10cSrcweir DataType::VARCHAR); 174*cdf0e10cSrcweir } 175*cdf0e10cSrcweir // ------------------------------------------------------------------------- 176*cdf0e10cSrcweir void ODatabaseMetaDataResultSetMetaData::setProcedureColumnsMap() 177*cdf0e10cSrcweir { 178*cdf0e10cSrcweir m_mColumns[12] = OColumn(::rtl::OUString(),::rtl::OUString::createFromAscii("NULLABLE"), 179*cdf0e10cSrcweir ColumnValue::NO_NULLS, 180*cdf0e10cSrcweir 1,1,0, 181*cdf0e10cSrcweir DataType::INTEGER); 182*cdf0e10cSrcweir } 183*cdf0e10cSrcweir // ------------------------------------------------------------------------- 184*cdf0e10cSrcweir void ODatabaseMetaDataResultSetMetaData::setPrimaryKeysMap() 185*cdf0e10cSrcweir { 186*cdf0e10cSrcweir m_mColumns[5] = OColumn(::rtl::OUString(),::rtl::OUString::createFromAscii("KEY_SEQ"), 187*cdf0e10cSrcweir ColumnValue::NO_NULLS, 188*cdf0e10cSrcweir 1,1,0, 189*cdf0e10cSrcweir DataType::INTEGER); 190*cdf0e10cSrcweir m_mColumns[6] = OColumn(::rtl::OUString(),::rtl::OUString::createFromAscii("PK_NAME"), 191*cdf0e10cSrcweir ColumnValue::NULLABLE, 192*cdf0e10cSrcweir 0,0,0, 193*cdf0e10cSrcweir DataType::VARCHAR); 194*cdf0e10cSrcweir } 195*cdf0e10cSrcweir // ------------------------------------------------------------------------- 196*cdf0e10cSrcweir void ODatabaseMetaDataResultSetMetaData::setIndexInfoMap() 197*cdf0e10cSrcweir { 198*cdf0e10cSrcweir m_mColumns[4] = OColumn(::rtl::OUString(),::rtl::OUString::createFromAscii("NON_UNIQUE"), 199*cdf0e10cSrcweir ColumnValue::NO_NULLS, 200*cdf0e10cSrcweir 1,1,0, 201*cdf0e10cSrcweir DataType::BIT); 202*cdf0e10cSrcweir m_mColumns[5] = OColumn(::rtl::OUString(),::rtl::OUString::createFromAscii("INDEX_QUALIFIER"), 203*cdf0e10cSrcweir ColumnValue::NULLABLE, 204*cdf0e10cSrcweir 0,0,0, 205*cdf0e10cSrcweir DataType::VARCHAR); 206*cdf0e10cSrcweir m_mColumns[10] = OColumn(::rtl::OUString(),::rtl::OUString::createFromAscii("ASC_OR_DESC"), 207*cdf0e10cSrcweir ColumnValue::NULLABLE, 208*cdf0e10cSrcweir 0,0,0, 209*cdf0e10cSrcweir DataType::VARCHAR); 210*cdf0e10cSrcweir } 211*cdf0e10cSrcweir // ------------------------------------------------------------------------- 212*cdf0e10cSrcweir void ODatabaseMetaDataResultSetMetaData::setTablePrivilegesMap() 213*cdf0e10cSrcweir { 214*cdf0e10cSrcweir m_mColumns[6] = OColumn(::rtl::OUString(),::rtl::OUString::createFromAscii("PRIVILEGE"), 215*cdf0e10cSrcweir ColumnValue::NULLABLE, 216*cdf0e10cSrcweir 0,0,0, 217*cdf0e10cSrcweir DataType::VARCHAR); 218*cdf0e10cSrcweir m_mColumns[7] = OColumn(::rtl::OUString(),::rtl::OUString::createFromAscii("IS_GRANTABLE"), 219*cdf0e10cSrcweir ColumnValue::NULLABLE, 220*cdf0e10cSrcweir 0,0,0, 221*cdf0e10cSrcweir DataType::VARCHAR); 222*cdf0e10cSrcweir } 223*cdf0e10cSrcweir // ------------------------------------------------------------------------- 224*cdf0e10cSrcweir void ODatabaseMetaDataResultSetMetaData::setCrossReferenceMap() 225*cdf0e10cSrcweir { 226*cdf0e10cSrcweir m_mColumns[9] = OColumn(::rtl::OUString(),::rtl::OUString::createFromAscii("KEY_SEQ"), 227*cdf0e10cSrcweir ColumnValue::NO_NULLS, 228*cdf0e10cSrcweir 1,1,0, 229*cdf0e10cSrcweir DataType::INTEGER); 230*cdf0e10cSrcweir } 231*cdf0e10cSrcweir // ------------------------------------------------------------------------- 232*cdf0e10cSrcweir void ODatabaseMetaDataResultSetMetaData::setTypeInfoMap() 233*cdf0e10cSrcweir { 234*cdf0e10cSrcweir m_mColumns[3] = OColumn(::rtl::OUString(),::rtl::OUString::createFromAscii("PRECISION"), 235*cdf0e10cSrcweir ColumnValue::NO_NULLS, 236*cdf0e10cSrcweir 1,1,0, 237*cdf0e10cSrcweir DataType::INTEGER); 238*cdf0e10cSrcweir m_mColumns[7] = OColumn(::rtl::OUString(),::rtl::OUString::createFromAscii("NULLABLE"), 239*cdf0e10cSrcweir ColumnValue::NO_NULLS, 240*cdf0e10cSrcweir 1,1,0, 241*cdf0e10cSrcweir DataType::INTEGER); 242*cdf0e10cSrcweir m_mColumns[12] = OColumn(::rtl::OUString(),::rtl::OUString::createFromAscii("AUTO_INCREMENT"), 243*cdf0e10cSrcweir ColumnValue::NO_NULLS, 244*cdf0e10cSrcweir 1,1,0, 245*cdf0e10cSrcweir DataType::BIT); 246*cdf0e10cSrcweir m_mColumns[16] = OColumn(::rtl::OUString(),::rtl::OUString::createFromAscii("SQL_DATA_TYPE"), 247*cdf0e10cSrcweir ColumnValue::NO_NULLS, 248*cdf0e10cSrcweir 1,1,0, 249*cdf0e10cSrcweir DataType::INTEGER); 250*cdf0e10cSrcweir m_mColumns[17] = OColumn(::rtl::OUString(),::rtl::OUString::createFromAscii("SQL_DATETIME_SUB"), 251*cdf0e10cSrcweir ColumnValue::NO_NULLS, 252*cdf0e10cSrcweir 1,1,0, 253*cdf0e10cSrcweir DataType::INTEGER); 254*cdf0e10cSrcweir m_mColumns[18] = OColumn(::rtl::OUString(),::rtl::OUString::createFromAscii("NUM_PREC_RADIX"), 255*cdf0e10cSrcweir ColumnValue::NO_NULLS, 256*cdf0e10cSrcweir 1,1,0, 257*cdf0e10cSrcweir DataType::INTEGER); 258*cdf0e10cSrcweir } 259*cdf0e10cSrcweir // ------------------------------------------------------------------------- 260*cdf0e10cSrcweir void ODatabaseMetaDataResultSetMetaData::setProceduresMap() 261*cdf0e10cSrcweir { 262*cdf0e10cSrcweir m_mColumns[7] = OColumn(::rtl::OUString(),::rtl::OUString::createFromAscii("REMARKS"), 263*cdf0e10cSrcweir ColumnValue::NULLABLE, 264*cdf0e10cSrcweir 0,0,0, 265*cdf0e10cSrcweir DataType::VARCHAR); 266*cdf0e10cSrcweir } 267*cdf0e10cSrcweir // ------------------------------------------------------------------------- 268*cdf0e10cSrcweir sal_Bool SAL_CALL ODatabaseMetaDataResultSetMetaData::isSearchable( sal_Int32 column ) throw(SQLException, RuntimeException) 269*cdf0e10cSrcweir { 270*cdf0e10cSrcweir if(m_mColumns.size() && (m_mColumnsIter = m_mColumns.find(column)) != m_mColumns.end()) 271*cdf0e10cSrcweir return (*m_mColumnsIter).second.isSearchable(); 272*cdf0e10cSrcweir return sal_True; 273*cdf0e10cSrcweir } 274*cdf0e10cSrcweir // ------------------------------------------------------------------------- 275*cdf0e10cSrcweir sal_Bool SAL_CALL ODatabaseMetaDataResultSetMetaData::isAutoIncrement( sal_Int32 column ) throw(SQLException, RuntimeException) 276*cdf0e10cSrcweir { 277*cdf0e10cSrcweir if(m_mColumns.size() && (m_mColumnsIter = m_mColumns.find(column)) != m_mColumns.end()) 278*cdf0e10cSrcweir return (*m_mColumnsIter).second.isAutoIncrement(); 279*cdf0e10cSrcweir return sal_False; 280*cdf0e10cSrcweir } 281*cdf0e10cSrcweir // ------------------------------------------------------------------------- 282*cdf0e10cSrcweir ::rtl::OUString SAL_CALL ODatabaseMetaDataResultSetMetaData::getColumnServiceName( sal_Int32 column ) throw(SQLException, RuntimeException) 283*cdf0e10cSrcweir { 284*cdf0e10cSrcweir if(m_mColumns.size() && (m_mColumnsIter = m_mColumns.find(column)) != m_mColumns.end()) 285*cdf0e10cSrcweir return (*m_mColumnsIter).second.getColumnServiceName(); 286*cdf0e10cSrcweir return ::rtl::OUString(); 287*cdf0e10cSrcweir } 288*cdf0e10cSrcweir // ------------------------------------------------------------------------- 289*cdf0e10cSrcweir ::rtl::OUString SAL_CALL ODatabaseMetaDataResultSetMetaData::getTableName( sal_Int32 column ) throw(SQLException, RuntimeException) 290*cdf0e10cSrcweir { 291*cdf0e10cSrcweir if(m_mColumns.size() && (m_mColumnsIter = m_mColumns.find(column)) != m_mColumns.end()) 292*cdf0e10cSrcweir return (*m_mColumnsIter).second.getTableName(); 293*cdf0e10cSrcweir return ::rtl::OUString(); 294*cdf0e10cSrcweir } 295*cdf0e10cSrcweir // ------------------------------------------------------------------------- 296*cdf0e10cSrcweir ::rtl::OUString SAL_CALL ODatabaseMetaDataResultSetMetaData::getCatalogName( sal_Int32 column ) throw(SQLException, RuntimeException) 297*cdf0e10cSrcweir { 298*cdf0e10cSrcweir if(m_mColumns.size() && (m_mColumnsIter = m_mColumns.find(column)) != m_mColumns.end()) 299*cdf0e10cSrcweir return (*m_mColumnsIter).second.getCatalogName(); 300*cdf0e10cSrcweir return ::rtl::OUString(); 301*cdf0e10cSrcweir } 302*cdf0e10cSrcweir // ------------------------------------------------------------------------- 303*cdf0e10cSrcweir ::rtl::OUString SAL_CALL ODatabaseMetaDataResultSetMetaData::getColumnTypeName( sal_Int32 column ) throw(SQLException, RuntimeException) 304*cdf0e10cSrcweir { 305*cdf0e10cSrcweir if(m_mColumns.size() && (m_mColumnsIter = m_mColumns.find(column)) != m_mColumns.end()) 306*cdf0e10cSrcweir return (*m_mColumnsIter).second.getColumnTypeName(); 307*cdf0e10cSrcweir return ::rtl::OUString(); 308*cdf0e10cSrcweir } 309*cdf0e10cSrcweir // ------------------------------------------------------------------------- 310*cdf0e10cSrcweir 311*cdf0e10cSrcweir sal_Bool SAL_CALL ODatabaseMetaDataResultSetMetaData::isCaseSensitive( sal_Int32 column ) throw(SQLException, RuntimeException) 312*cdf0e10cSrcweir { 313*cdf0e10cSrcweir if(m_mColumns.size() && (m_mColumnsIter = m_mColumns.find(column)) != m_mColumns.end()) 314*cdf0e10cSrcweir return (*m_mColumnsIter).second.isCaseSensitive(); 315*cdf0e10cSrcweir return sal_True; 316*cdf0e10cSrcweir } 317*cdf0e10cSrcweir // ------------------------------------------------------------------------- 318*cdf0e10cSrcweir 319*cdf0e10cSrcweir ::rtl::OUString SAL_CALL ODatabaseMetaDataResultSetMetaData::getSchemaName( sal_Int32 column ) throw(SQLException, RuntimeException) 320*cdf0e10cSrcweir { 321*cdf0e10cSrcweir if(m_mColumns.size() && (m_mColumnsIter = m_mColumns.find(column)) != m_mColumns.end()) 322*cdf0e10cSrcweir return (*m_mColumnsIter).second.getSchemaName(); 323*cdf0e10cSrcweir return ::rtl::OUString(); 324*cdf0e10cSrcweir } 325*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 326*cdf0e10cSrcweir // ------------------------------------------------------------------------- 327*cdf0e10cSrcweir ObjectTypeEnum OAdoGroup::MapObjectType(sal_Int32 _ObjType) 328*cdf0e10cSrcweir { 329*cdf0e10cSrcweir ObjectTypeEnum eNumType= adPermObjTable; 330*cdf0e10cSrcweir switch(_ObjType) 331*cdf0e10cSrcweir { 332*cdf0e10cSrcweir case PrivilegeObject::TABLE: 333*cdf0e10cSrcweir break; 334*cdf0e10cSrcweir case PrivilegeObject::VIEW: 335*cdf0e10cSrcweir eNumType = adPermObjView; 336*cdf0e10cSrcweir break; 337*cdf0e10cSrcweir case PrivilegeObject::COLUMN: 338*cdf0e10cSrcweir eNumType = adPermObjColumn; 339*cdf0e10cSrcweir break; 340*cdf0e10cSrcweir } 341*cdf0e10cSrcweir return eNumType; 342*cdf0e10cSrcweir } 343*cdf0e10cSrcweir // ------------------------------------------------------------------------- 344*cdf0e10cSrcweir sal_Int32 OAdoGroup::MapRight(RightsEnum _eNum) 345*cdf0e10cSrcweir { 346*cdf0e10cSrcweir sal_Int32 nRight = 0; 347*cdf0e10cSrcweir if(_eNum & adRightRead) 348*cdf0e10cSrcweir nRight |= Privilege::SELECT; 349*cdf0e10cSrcweir if(_eNum & adRightInsert) 350*cdf0e10cSrcweir nRight |= Privilege::INSERT; 351*cdf0e10cSrcweir if(_eNum & adRightUpdate) 352*cdf0e10cSrcweir nRight |= Privilege::UPDATE; 353*cdf0e10cSrcweir if(_eNum & adRightDelete) 354*cdf0e10cSrcweir nRight |= Privilege::DELETE; 355*cdf0e10cSrcweir if(_eNum & adRightReadDesign) 356*cdf0e10cSrcweir nRight |= Privilege::READ; 357*cdf0e10cSrcweir if(_eNum & adRightCreate) 358*cdf0e10cSrcweir nRight |= Privilege::CREATE; 359*cdf0e10cSrcweir if(_eNum & adRightWriteDesign) 360*cdf0e10cSrcweir nRight |= Privilege::ALTER; 361*cdf0e10cSrcweir if(_eNum & adRightReference) 362*cdf0e10cSrcweir nRight |= Privilege::REFERENCE; 363*cdf0e10cSrcweir if(_eNum & adRightDrop) 364*cdf0e10cSrcweir nRight |= Privilege::DROP; 365*cdf0e10cSrcweir 366*cdf0e10cSrcweir return nRight; 367*cdf0e10cSrcweir } 368*cdf0e10cSrcweir // ------------------------------------------------------------------------- 369*cdf0e10cSrcweir RightsEnum OAdoGroup::Map2Right(sal_Int32 _eNum) 370*cdf0e10cSrcweir { 371*cdf0e10cSrcweir sal_Int32 nRight = adRightNone; 372*cdf0e10cSrcweir if(_eNum & Privilege::SELECT) 373*cdf0e10cSrcweir nRight |= adRightRead; 374*cdf0e10cSrcweir 375*cdf0e10cSrcweir if(_eNum & Privilege::INSERT) 376*cdf0e10cSrcweir nRight |= adRightInsert; 377*cdf0e10cSrcweir 378*cdf0e10cSrcweir if(_eNum & Privilege::UPDATE) 379*cdf0e10cSrcweir nRight |= adRightUpdate; 380*cdf0e10cSrcweir 381*cdf0e10cSrcweir if(_eNum & Privilege::DELETE) 382*cdf0e10cSrcweir nRight |= adRightDelete; 383*cdf0e10cSrcweir 384*cdf0e10cSrcweir if(_eNum & Privilege::READ) 385*cdf0e10cSrcweir nRight |= adRightReadDesign; 386*cdf0e10cSrcweir 387*cdf0e10cSrcweir if(_eNum & Privilege::CREATE) 388*cdf0e10cSrcweir nRight |= adRightCreate; 389*cdf0e10cSrcweir 390*cdf0e10cSrcweir if(_eNum & Privilege::ALTER) 391*cdf0e10cSrcweir nRight |= adRightWriteDesign; 392*cdf0e10cSrcweir 393*cdf0e10cSrcweir if(_eNum & Privilege::REFERENCE) 394*cdf0e10cSrcweir nRight |= adRightReference; 395*cdf0e10cSrcweir 396*cdf0e10cSrcweir if(_eNum & Privilege::DROP) 397*cdf0e10cSrcweir nRight |= adRightDrop; 398*cdf0e10cSrcweir 399*cdf0e10cSrcweir return (RightsEnum)nRight; 400*cdf0e10cSrcweir } 401*cdf0e10cSrcweir // ------------------------------------------------------------------------- 402*cdf0e10cSrcweir void WpADOIndex::Create() 403*cdf0e10cSrcweir { 404*cdf0e10cSrcweir HRESULT hr = -1; 405*cdf0e10cSrcweir 406*cdf0e10cSrcweir _ADOIndex* pIndex = NULL; 407*cdf0e10cSrcweir hr = CoCreateInstance(ADOS::CLSID_ADOINDEX_25, 408*cdf0e10cSrcweir NULL, 409*cdf0e10cSrcweir CLSCTX_INPROC_SERVER, 410*cdf0e10cSrcweir ADOS::IID_ADOINDEX_25, 411*cdf0e10cSrcweir (void**)&pIndex ); 412*cdf0e10cSrcweir 413*cdf0e10cSrcweir 414*cdf0e10cSrcweir if( !FAILED( hr ) ) 415*cdf0e10cSrcweir { 416*cdf0e10cSrcweir operator=( pIndex ); 417*cdf0e10cSrcweir pIndex->Release(); 418*cdf0e10cSrcweir } 419*cdf0e10cSrcweir } 420*cdf0e10cSrcweir // ------------------------------------------------------------------------- 421*cdf0e10cSrcweir void OAdoIndex::fillPropertyValues() 422*cdf0e10cSrcweir { 423*cdf0e10cSrcweir if(m_aIndex.IsValid()) 424*cdf0e10cSrcweir { 425*cdf0e10cSrcweir m_Name = m_aIndex.get_Name(); 426*cdf0e10cSrcweir m_IsUnique = m_aIndex.get_Unique(); 427*cdf0e10cSrcweir m_IsPrimaryKeyIndex = m_aIndex.get_PrimaryKey(); 428*cdf0e10cSrcweir m_IsClustered = m_aIndex.get_Clustered(); 429*cdf0e10cSrcweir } 430*cdf0e10cSrcweir } 431*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 432*cdf0e10cSrcweir void WpADOKey::Create() 433*cdf0e10cSrcweir { 434*cdf0e10cSrcweir HRESULT hr = -1; 435*cdf0e10cSrcweir _ADOKey* pKey = NULL; 436*cdf0e10cSrcweir hr = CoCreateInstance(ADOS::CLSID_ADOKEY_25, 437*cdf0e10cSrcweir NULL, 438*cdf0e10cSrcweir CLSCTX_INPROC_SERVER, 439*cdf0e10cSrcweir ADOS::IID_ADOKEY_25, 440*cdf0e10cSrcweir (void**)&pKey ); 441*cdf0e10cSrcweir 442*cdf0e10cSrcweir 443*cdf0e10cSrcweir if( !FAILED( hr ) ) 444*cdf0e10cSrcweir { 445*cdf0e10cSrcweir operator=( pKey ); 446*cdf0e10cSrcweir pKey->Release(); 447*cdf0e10cSrcweir } 448*cdf0e10cSrcweir } 449*cdf0e10cSrcweir // ------------------------------------------------------------------------- 450*cdf0e10cSrcweir void OAdoKey::fillPropertyValues() 451*cdf0e10cSrcweir { 452*cdf0e10cSrcweir if(m_aKey.IsValid()) 453*cdf0e10cSrcweir { 454*cdf0e10cSrcweir m_aProps->m_Type = MapKeyRule(m_aKey.get_Type()); 455*cdf0e10cSrcweir m_Name = m_aKey.get_Name(); 456*cdf0e10cSrcweir m_aProps->m_ReferencedTable = m_aKey.get_RelatedTable(); 457*cdf0e10cSrcweir m_aProps->m_UpdateRule = MapRule(m_aKey.get_UpdateRule()); 458*cdf0e10cSrcweir m_aProps->m_DeleteRule = MapRule(m_aKey.get_DeleteRule()); 459*cdf0e10cSrcweir } 460*cdf0e10cSrcweir } 461*cdf0e10cSrcweir // ------------------------------------------------------------------------- 462*cdf0e10cSrcweir sal_Int32 OAdoKey::MapRule(const RuleEnum& _eNum) 463*cdf0e10cSrcweir { 464*cdf0e10cSrcweir sal_Int32 eNum = KeyRule::NO_ACTION; 465*cdf0e10cSrcweir switch(_eNum) 466*cdf0e10cSrcweir { 467*cdf0e10cSrcweir case adRICascade: 468*cdf0e10cSrcweir eNum = KeyRule::CASCADE; 469*cdf0e10cSrcweir break; 470*cdf0e10cSrcweir case adRISetNull: 471*cdf0e10cSrcweir eNum = KeyRule::SET_NULL; 472*cdf0e10cSrcweir break; 473*cdf0e10cSrcweir case adRINone: 474*cdf0e10cSrcweir eNum = KeyRule::NO_ACTION; 475*cdf0e10cSrcweir break; 476*cdf0e10cSrcweir case adRISetDefault: 477*cdf0e10cSrcweir eNum = KeyRule::SET_DEFAULT; 478*cdf0e10cSrcweir break; 479*cdf0e10cSrcweir } 480*cdf0e10cSrcweir return eNum; 481*cdf0e10cSrcweir } 482*cdf0e10cSrcweir // ------------------------------------------------------------------------- 483*cdf0e10cSrcweir RuleEnum OAdoKey::Map2Rule(const sal_Int32& _eNum) 484*cdf0e10cSrcweir { 485*cdf0e10cSrcweir RuleEnum eNum = adRINone; 486*cdf0e10cSrcweir switch(_eNum) 487*cdf0e10cSrcweir { 488*cdf0e10cSrcweir case KeyRule::CASCADE: 489*cdf0e10cSrcweir eNum = adRICascade; 490*cdf0e10cSrcweir break; 491*cdf0e10cSrcweir case KeyRule::SET_NULL: 492*cdf0e10cSrcweir eNum = adRISetNull; 493*cdf0e10cSrcweir break; 494*cdf0e10cSrcweir case KeyRule::NO_ACTION: 495*cdf0e10cSrcweir eNum = adRINone; 496*cdf0e10cSrcweir break; 497*cdf0e10cSrcweir case KeyRule::SET_DEFAULT: 498*cdf0e10cSrcweir eNum = adRISetDefault; 499*cdf0e10cSrcweir break; 500*cdf0e10cSrcweir } 501*cdf0e10cSrcweir return eNum; 502*cdf0e10cSrcweir } 503*cdf0e10cSrcweir // ------------------------------------------------------------------------- 504*cdf0e10cSrcweir sal_Int32 OAdoKey::MapKeyRule(const KeyTypeEnum& _eNum) 505*cdf0e10cSrcweir { 506*cdf0e10cSrcweir sal_Int32 nKeyType = KeyType::PRIMARY; 507*cdf0e10cSrcweir switch(_eNum) 508*cdf0e10cSrcweir { 509*cdf0e10cSrcweir case adKeyPrimary: 510*cdf0e10cSrcweir nKeyType = KeyType::PRIMARY; 511*cdf0e10cSrcweir break; 512*cdf0e10cSrcweir case adKeyForeign: 513*cdf0e10cSrcweir nKeyType = KeyType::FOREIGN; 514*cdf0e10cSrcweir break; 515*cdf0e10cSrcweir case adKeyUnique: 516*cdf0e10cSrcweir nKeyType = KeyType::UNIQUE; 517*cdf0e10cSrcweir break; 518*cdf0e10cSrcweir } 519*cdf0e10cSrcweir return nKeyType; 520*cdf0e10cSrcweir } 521*cdf0e10cSrcweir // ------------------------------------------------------------------------- 522*cdf0e10cSrcweir KeyTypeEnum OAdoKey::Map2KeyRule(const sal_Int32& _eNum) 523*cdf0e10cSrcweir { 524*cdf0e10cSrcweir KeyTypeEnum eNum( adKeyPrimary ); 525*cdf0e10cSrcweir switch(_eNum) 526*cdf0e10cSrcweir { 527*cdf0e10cSrcweir case KeyType::PRIMARY: 528*cdf0e10cSrcweir eNum = adKeyPrimary; 529*cdf0e10cSrcweir break; 530*cdf0e10cSrcweir case KeyType::FOREIGN: 531*cdf0e10cSrcweir eNum = adKeyForeign; 532*cdf0e10cSrcweir break; 533*cdf0e10cSrcweir case KeyType::UNIQUE: 534*cdf0e10cSrcweir eNum = adKeyUnique; 535*cdf0e10cSrcweir break; 536*cdf0e10cSrcweir default: 537*cdf0e10cSrcweir OSL_ENSURE( false, "OAdoKey::Map2KeyRule: invalid key type!" ); 538*cdf0e10cSrcweir } 539*cdf0e10cSrcweir return eNum; 540*cdf0e10cSrcweir } 541*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 542*cdf0e10cSrcweir void WpADOTable::Create() 543*cdf0e10cSrcweir { 544*cdf0e10cSrcweir HRESULT hr = -1; 545*cdf0e10cSrcweir _ADOTable* pTable = NULL; 546*cdf0e10cSrcweir hr = CoCreateInstance(ADOS::CLSID_ADOTABLE_25, 547*cdf0e10cSrcweir NULL, 548*cdf0e10cSrcweir CLSCTX_INPROC_SERVER, 549*cdf0e10cSrcweir ADOS::IID_ADOTABLE_25, 550*cdf0e10cSrcweir (void**)&pTable ); 551*cdf0e10cSrcweir 552*cdf0e10cSrcweir 553*cdf0e10cSrcweir if( !FAILED( hr ) ) 554*cdf0e10cSrcweir { 555*cdf0e10cSrcweir operator=( pTable ); 556*cdf0e10cSrcweir pTable->Release(); 557*cdf0e10cSrcweir } 558*cdf0e10cSrcweir } 559*cdf0e10cSrcweir // ------------------------------------------------------------------------- 560*cdf0e10cSrcweir ::rtl::OUString WpADOCatalog::GetObjectOwner(const ::rtl::OUString& _rName, ObjectTypeEnum _eNum) 561*cdf0e10cSrcweir { 562*cdf0e10cSrcweir OLEVariant _rVar; 563*cdf0e10cSrcweir _rVar.setNoArg(); 564*cdf0e10cSrcweir OLEString aBSTR; 565*cdf0e10cSrcweir OLEString sStr1(_rName); 566*cdf0e10cSrcweir pInterface->GetObjectOwner(sStr1,_eNum,_rVar,&aBSTR); 567*cdf0e10cSrcweir return aBSTR; 568*cdf0e10cSrcweir } 569*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 570*cdf0e10cSrcweir void OAdoTable::fillPropertyValues() 571*cdf0e10cSrcweir { 572*cdf0e10cSrcweir if(m_aTable.IsValid()) 573*cdf0e10cSrcweir { 574*cdf0e10cSrcweir m_Name = m_aTable.get_Name(); 575*cdf0e10cSrcweir m_Type = m_aTable.get_Type(); 576*cdf0e10cSrcweir { 577*cdf0e10cSrcweir WpADOCatalog aCat(m_aTable.get_ParentCatalog()); 578*cdf0e10cSrcweir if(aCat.IsValid()) 579*cdf0e10cSrcweir m_CatalogName = aCat.GetObjectOwner(m_aTable.get_Name(),adPermObjTable); 580*cdf0e10cSrcweir } 581*cdf0e10cSrcweir { 582*cdf0e10cSrcweir WpADOProperties aProps = m_aTable.get_Properties(); 583*cdf0e10cSrcweir if(aProps.IsValid()) 584*cdf0e10cSrcweir m_Description = OTools::getValue(aProps,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Description"))); 585*cdf0e10cSrcweir } 586*cdf0e10cSrcweir } 587*cdf0e10cSrcweir } 588*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 589*cdf0e10cSrcweir void WpADOUser::Create() 590*cdf0e10cSrcweir { 591*cdf0e10cSrcweir HRESULT hr = -1; 592*cdf0e10cSrcweir _ADOUser* pUser = NULL; 593*cdf0e10cSrcweir hr = CoCreateInstance(ADOS::CLSID_ADOUSER_25, 594*cdf0e10cSrcweir NULL, 595*cdf0e10cSrcweir CLSCTX_INPROC_SERVER, 596*cdf0e10cSrcweir ADOS::IID_ADOUSER_25, 597*cdf0e10cSrcweir (void**)&pUser ); 598*cdf0e10cSrcweir 599*cdf0e10cSrcweir 600*cdf0e10cSrcweir if( !FAILED( hr ) ) 601*cdf0e10cSrcweir { 602*cdf0e10cSrcweir operator=( pUser ); 603*cdf0e10cSrcweir pUser->Release(); 604*cdf0e10cSrcweir } 605*cdf0e10cSrcweir } 606*cdf0e10cSrcweir // ------------------------------------------------------------------------- 607*cdf0e10cSrcweir 608*cdf0e10cSrcweir 609