blob: 82c87d0698a3ed23a4a5cd1d660013619fbc704f [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_connectivity.hxx"
#include <com/sun/star/sdbcx/Privilege.hpp>
#include <com/sun/star/sdbcx/PrivilegeObject.hpp>
#include "connectivity/dbexception.hxx"
#include "ado/Awrapado.hxx"
#include "ado/adoimp.hxx"
#include <osl/diagnose.h>
#include <com/sun/star/sdbc/DataType.hpp>
using namespace connectivity::ado;
using namespace com::sun::star::uno;
using namespace com::sun::star::sdbc;
using namespace com::sun::star::sdbcx;
#define MYADOID(l) {l, 0,0x10,0x80,0,0,0xAA,0,0x6D,0x2E,0xA4};
const CLSID ADOS::CLSID_ADOCONNECTION_21 = MYADOID(0x00000514);
const IID ADOS::IID_ADOCONNECTION_21 = MYADOID(0x00000550);
const CLSID ADOS::CLSID_ADOCOMMAND_21 = MYADOID(0x00000507);
const IID ADOS::IID_ADOCOMMAND_21 = MYADOID(0x0000054E);
const CLSID ADOS::CLSID_ADORECORDSET_21 = MYADOID(0x00000535);
const IID ADOS::IID_ADORECORDSET_21 = MYADOID(0x0000054F);
const CLSID ADOS::CLSID_ADOCATALOG_25 = MYADOID(0x00000602);
const IID ADOS::IID_ADOCATALOG_25 = MYADOID(0x00000603);
const CLSID ADOS::CLSID_ADOINDEX_25 = MYADOID(0x0000061E);
const IID ADOS::IID_ADOINDEX_25 = MYADOID(0x0000061F);
const CLSID ADOS::CLSID_ADOTABLE_25 = MYADOID(0x00000609);
const IID ADOS::IID_ADOTABLE_25 = MYADOID(0x00000610);
const CLSID ADOS::CLSID_ADOKEY_25 = MYADOID(0x00000621);
const IID ADOS::IID_ADOKEY_25 = MYADOID(0x00000622);
const CLSID ADOS::CLSID_ADOCOLUMN_25 = MYADOID(0x0000061B);
const IID ADOS::IID_ADOCOLUMN_25 = MYADOID(0x0000061C);
const CLSID ADOS::CLSID_ADOGROUP_25 = MYADOID(0x00000615);
const IID ADOS::IID_ADOGROUP_25 = MYADOID(0x00000616);
const CLSID ADOS::CLSID_ADOUSER_25 = MYADOID(0x00000618);
const IID ADOS::IID_ADOUSER_25 = MYADOID(0x00000619);
const CLSID ADOS::CLSID_ADOVIEW_25 = MYADOID(0x00000612);
const IID ADOS::IID_ADOVIEW_25 = MYADOID(0x00000613);
OLEString& ADOS::GetKeyStr()
{
static OLEString sKeyStr(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("gxwaezucfyqpwjgqbcmtsncuhwsnyhiohwxz")));
return sKeyStr;
}
// -------------------------------------------------------------------------
sal_Int32 ADOS::MapADOType2Jdbc(DataTypeEnum eType)
{
sal_Int32 nType = DataType::VARCHAR;;
switch (eType)
{
case adUnsignedSmallInt:
case adSmallInt: nType = DataType::SMALLINT; break;
case adUnsignedInt:
case adInteger: nType = DataType::INTEGER; break;
case adUnsignedBigInt:
case adBigInt: nType = DataType::BIGINT; break;
case adSingle: nType = DataType::FLOAT; break;
case adDouble: nType = DataType::DOUBLE; break;
case adCurrency: nType = DataType::DOUBLE; break;
case adVarNumeric:
case adNumeric: nType = DataType::NUMERIC; break;
case adDecimal: nType = DataType::DECIMAL; break;
case adDBDate: nType = DataType::DATE; break;
case adDBTime: nType = DataType::TIME; break;
case adDate:
case adDBTimeStamp: nType = DataType::TIMESTAMP; break;
case adBoolean: nType = DataType::BOOLEAN; break;
// case adArray: nType = DataType::ARRAY; break;
case adBinary: nType = DataType::BINARY; break;
case adGUID: nType = DataType::OBJECT; break;
case adBSTR:
case adVarWChar:
case adWChar:
case adVarChar: nType = DataType::VARCHAR; break;
case adLongVarWChar:
case adLongVarChar: nType = DataType::LONGVARCHAR; break;
case adVarBinary: nType = DataType::VARBINARY; break;
case adLongVarBinary: nType = DataType::LONGVARBINARY;break;
case adChar: nType = DataType::CHAR; break;
case adUnsignedTinyInt:
case adTinyInt: nType = DataType::TINYINT; break;
case adEmpty: nType = DataType::SQLNULL; break;
case adUserDefined:
case adPropVariant:
case adFileTime:
case adChapter:
case adIDispatch:
case adIUnknown:
case adError:
case adVariant:
nType = DataType::OTHER; break;
default:
OSL_ENSURE(0,"MapADOType2Jdbc: Unknown Type!");
;
}
return nType;
}
// -------------------------------------------------------------------------
DataTypeEnum ADOS::MapJdbc2ADOType(sal_Int32 _nType,sal_Int32 _nJetEngine)
{
switch (_nType)
{
case DataType::SMALLINT: return adSmallInt; break;
case DataType::INTEGER: return adInteger; break;
case DataType::BIGINT: return adBigInt; break;
case DataType::FLOAT: return adSingle; break;
case DataType::DOUBLE: return adDouble; break;
case DataType::NUMERIC: return adNumeric; break;
case DataType::DECIMAL: return adDecimal; break;
case DataType::DATE: return isJetEngine(_nJetEngine) ? adDate : adDBDate; break;
case DataType::TIME: return adDBTime; break;
case DataType::TIMESTAMP: return isJetEngine(_nJetEngine) ? adDate : adDBTimeStamp; break;
case DataType::BOOLEAN:
case DataType::BIT: return adBoolean; break;
case DataType::BINARY: return adBinary; break;
case DataType::VARCHAR: return adVarWChar; break;
case DataType::CLOB:
case DataType::LONGVARCHAR: return adLongVarWChar; break;
case DataType::VARBINARY: return adVarBinary; break;
case DataType::BLOB:
case DataType::LONGVARBINARY: return adLongVarBinary; break;
case DataType::CHAR: return adWChar; break;
case DataType::TINYINT: return isJetEngine(_nJetEngine) ? adUnsignedTinyInt : adTinyInt;break;
case DataType::OBJECT: return adGUID; break;
default:
OSL_ENSURE(0,"MapJdbc2ADOType: Unknown Type!");
;
}
return adEmpty;
}
// -----------------------------------------------------------------------------
const int JET_ENGINETYPE_UNKNOWN = 0;
const int JET_ENGINETYPE_JET10 = 1;
const int JET_ENGINETYPE_JET11 = 2;
const int JET_ENGINETYPE_JET20 = 3;
const int JET_ENGINETYPE_JET3X = 4;
const int JET_ENGINETYPE_JET4X = 5;
const int JET_ENGINETYPE_DBASE3 = 10;
const int JET_ENGINETYPE_DBASE4 = 11;
const int JET_ENGINETYPE_DBASE5 = 12;
const int JET_ENGINETYPE_EXCEL30 = 20;
const int JET_ENGINETYPE_EXCEL40 = 21;
const int JET_ENGINETYPE_EXCEL50 = 22;
const int JET_ENGINETYPE_EXCEL80 = 23;
const int JET_ENGINETYPE_EXCEL90 = 24;
const int JET_ENGINETYPE_EXCHANGE4 = 30;
const int JET_ENGINETYPE_LOTUSWK1 = 40;
const int JET_ENGINETYPE_LOTUSWK3 = 41;
const int JET_ENGINETYPE_LOTUSWK4 = 42;
const int JET_ENGINETYPE_PARADOX3X = 50;
const int JET_ENGINETYPE_PARADOX4X = 51;
const int JET_ENGINETYPE_PARADOX5X = 52;
const int JET_ENGINETYPE_PARADOX7X = 53;
const int JET_ENGINETYPE_TEXT1X = 60;
const int JET_ENGINETYPE_HTML1X = 70;
sal_Bool ADOS::isJetEngine(sal_Int32 _nEngineType)
{
sal_Bool bRet = sal_False;
switch(_nEngineType)
{
case JET_ENGINETYPE_UNKNOWN:
case JET_ENGINETYPE_JET10:
case JET_ENGINETYPE_JET11:
case JET_ENGINETYPE_JET20:
case JET_ENGINETYPE_JET3X:
case JET_ENGINETYPE_JET4X:
case JET_ENGINETYPE_DBASE3:
case JET_ENGINETYPE_DBASE4:
case JET_ENGINETYPE_DBASE5:
case JET_ENGINETYPE_EXCEL30:
case JET_ENGINETYPE_EXCEL40:
case JET_ENGINETYPE_EXCEL50:
case JET_ENGINETYPE_EXCEL80:
case JET_ENGINETYPE_EXCEL90:
case JET_ENGINETYPE_EXCHANGE4:
case JET_ENGINETYPE_LOTUSWK1:
case JET_ENGINETYPE_LOTUSWK3:
case JET_ENGINETYPE_LOTUSWK4:
case JET_ENGINETYPE_PARADOX3X:
case JET_ENGINETYPE_PARADOX4X:
case JET_ENGINETYPE_PARADOX5X:
case JET_ENGINETYPE_PARADOX7X:
case JET_ENGINETYPE_TEXT1X:
case JET_ENGINETYPE_HTML1X:
bRet = sal_True;
break;
}
return bRet;
}
// -----------------------------------------------------------------------------
ObjectTypeEnum ADOS::mapObjectType2Ado(sal_Int32 objType)
{
ObjectTypeEnum eType = adPermObjTable;
switch(objType)
{
case PrivilegeObject::TABLE:
eType = adPermObjTable;
break;
case PrivilegeObject::VIEW:
eType = adPermObjView;
break;
case PrivilegeObject::COLUMN:
eType = adPermObjColumn;
break;
}
return eType;
}
// -----------------------------------------------------------------------------
sal_Int32 ADOS::mapAdoType2Object(ObjectTypeEnum objType)
{
sal_Int32 nType = PrivilegeObject::TABLE;
switch(objType)
{
case adPermObjTable:
nType = PrivilegeObject::TABLE;
break;
case adPermObjView:
nType = PrivilegeObject::VIEW;
break;
case adPermObjColumn:
nType = PrivilegeObject::COLUMN;
break;
default:
OSL_ENSURE( false, "ADOS::mapAdoType2Object: privilege type cannot be translated!" );
break;
}
return nType;
}
#ifdef DELETE
#undef DELETE
#endif
// -----------------------------------------------------------------------------
sal_Int32 ADOS::mapAdoRights2Sdbc(RightsEnum eRights)
{
sal_Int32 nRights = 0;
if((eRights & adRightInsert) == adRightInsert)
nRights |= Privilege::INSERT;
if((eRights & adRightDelete) == adRightDelete)
nRights |= ::com::sun::star::sdbcx::Privilege::DELETE;
if((eRights & adRightUpdate) == adRightUpdate)
nRights |= Privilege::UPDATE;
if((eRights & adRightWriteDesign) == adRightWriteDesign)
nRights |= Privilege::ALTER;
if((eRights & adRightRead) == adRightRead)
nRights |= Privilege::SELECT;
if((eRights & adRightReference) == adRightReference)
nRights |= Privilege::REFERENCE;
if((eRights & adRightDrop) == adRightDrop)
nRights |= Privilege::DROP;
return nRights;
}
// -----------------------------------------------------------------------------
sal_Int32 ADOS::mapRights2Ado(sal_Int32 nRights)
{
sal_Int32 eRights = adRightNone;
if((nRights & Privilege::INSERT) == Privilege::INSERT)
eRights |= adRightInsert;
if((nRights & Privilege::DELETE) == Privilege::DELETE)
eRights |= adRightDelete;
if((nRights & Privilege::UPDATE) == Privilege::UPDATE)
eRights |= adRightUpdate;
if((nRights & Privilege::ALTER) == Privilege::ALTER)
eRights |= adRightWriteDesign;
if((nRights & Privilege::SELECT) == Privilege::SELECT)
eRights |= adRightRead;
if((nRights & Privilege::REFERENCE) == Privilege::REFERENCE)
eRights |= adRightReference;
if((nRights & Privilege::DROP) == Privilege::DROP)
eRights |= adRightDrop;
return eRights;
}
// -----------------------------------------------------------------------------
WpADOField ADOS::getField(ADORecordset* _pRecordSet,sal_Int32 _nColumnIndex) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException)
{
if ( !_pRecordSet )
return WpADOField();
ADOFields* pFields = NULL;
_pRecordSet->get_Fields(&pFields);
WpOLEAppendCollection<ADOFields, ADOField, WpADOField> aFields(pFields);
if(_nColumnIndex <= 0 || _nColumnIndex > aFields.GetItemCount())
::dbtools::throwInvalidIndexException(NULL);
WpADOField aField(aFields.GetItem(_nColumnIndex-1));
if(!aField.IsValid())
::dbtools::throwInvalidIndexException(NULL);
return aField;
}
// -----------------------------------------------------------------------------