LibreOffice Module dbaccess (master) 1
table.cxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
20#include <table.hxx>
21#include <definitioncolumn.hxx>
22#include <stringconstants.hxx>
23#include <strings.hxx>
24#include <core_resource.hxx>
25#include <strings.hrc>
26#include "CIndexes.hxx"
27
28#include <osl/diagnose.h>
30#include <com/sun/star/beans/PropertyAttribute.hpp>
31#include <com/sun/star/sdbc/SQLException.hpp>
32#include <com/sun/star/sdb/tools/XTableRename.hpp>
33#include <com/sun/star/sdb/tools/XTableAlteration.hpp>
34
37
38#include <ContainerMediator.hxx>
39
40using namespace dbaccess;
41using namespace connectivity;
42using namespace ::com::sun::star::uno;
43using namespace ::com::sun::star::util;
44using namespace ::com::sun::star::lang;
45using namespace ::com::sun::star::beans;
46using namespace ::com::sun::star::sdbc;
47using namespace ::com::sun::star::sdbcx;
48using namespace ::com::sun::star::container;
49using namespace ::osl;
50using namespace ::comphelper;
51using namespace ::cppu;
52
53// ODBTable
54
55ODBTable::ODBTable(connectivity::sdbcx::OCollection* _pTables
56 ,const Reference< XConnection >& _rxConn
57 ,const OUString& _rCatalog
58 ,const OUString& _rSchema
59 ,const OUString& _rName
60 ,const OUString& _rType
61 ,const OUString& _rDesc
62 ,const Reference< XNameAccess >& _xColumnDefinitions)
63 :OTable_Base(_pTables,_rxConn,_rxConn->getMetaData().is() && _rxConn->getMetaData()->supportsMixedCaseQuotedIdentifiers(), _rName, _rType, _rDesc, _rSchema, _rCatalog )
64 ,m_xColumnDefinitions(_xColumnDefinitions)
65 ,m_nPrivileges(0)
66{
67 OSL_ENSURE(getMetaData().is(), "ODBTable::ODBTable : invalid conn !");
68 OSL_ENSURE(!_rName.isEmpty(), "ODBTable::ODBTable : name !");
69 // TODO : think about collecting the privileges here, as we can't ensure that in getFastPropertyValue, where
70 // we do this at the moment, the statement needed can be supplied by the connection (for example the SQL-Server
71 // ODBC driver does not allow more than one statement per connection, and in getFastPropertyValue it's more
72 // likely that it's already used up than it's here.)
73}
74
75ODBTable::ODBTable(connectivity::sdbcx::OCollection* _pTables
76 ,const Reference< XConnection >& _rxConn)
77 :OTable_Base(_pTables,_rxConn, _rxConn->getMetaData().is() && _rxConn->getMetaData()->supportsMixedCaseQuotedIdentifiers())
78 ,m_nPrivileges(-1)
79{
80}
81
82ODBTable::~ODBTable()
83{
84}
85
87{
88 Reference<XPropertySet> xProp;
89 if ( m_xDriverColumns.is() && m_xDriverColumns->hasByName(_rName) )
90 {
91 xProp.set(m_xDriverColumns->getByName(_rName),UNO_QUERY);
92 }
93 else
94 {
95 OColumns* pColumns = static_cast<OColumns*>(m_xColumns.get());
96 xProp.set(pColumns->createBaseObject(_rName),UNO_QUERY);
97 }
98
99 Reference<XPropertySet> xColumnDefinition;
100 if ( m_xColumnDefinitions.is() && m_xColumnDefinitions->hasByName(_rName) )
101 xColumnDefinition.set(m_xColumnDefinitions->getByName(_rName),UNO_QUERY);
102 return new OTableColumnWrapper( xProp, xColumnDefinition, false );
103}
104
105void ODBTable::columnAppended( const Reference< XPropertySet >& /*_rxSourceDescriptor*/ )
106{
107 // not interested in
108}
109
110void ODBTable::columnDropped(const OUString& _sName)
111{
112 Reference<XDrop> xDrop(m_xColumnDefinitions,UNO_QUERY);
113 if ( xDrop.is() && m_xColumnDefinitions->hasByName(_sName) )
114 {
115 xDrop->dropByName(_sName);
116 }
117}
118
119Sequence< sal_Int8 > ODBTable::getImplementationId()
120{
121 return css::uno::Sequence<sal_Int8>();
122}
123
124// OComponentHelper
125void SAL_CALL ODBTable::disposing()
126{
129 m_xColumnDefinitions = nullptr;
130 m_xDriverColumns = nullptr;
131 m_pColumnMediator = nullptr;
132}
133
134void ODBTable::getFastPropertyValue(Any& _rValue, sal_Int32 _nHandle) const
135{
136 if ((PROPERTY_ID_PRIVILEGES == _nHandle) && (-1 == m_nPrivileges))
137 { // somebody is asking for the privileges and we do not know them, yet
138 const_cast<ODBTable*>(this)->m_nPrivileges = ::dbtools::getTablePrivileges(getMetaData(),m_CatalogName,m_SchemaName, m_Name);
139 }
140
141 OTable_Base::getFastPropertyValue(_rValue, _nHandle);
142}
143
145{
146 ::osl::MutexGuard aGuard(m_aMutex);
147
148 // we don't collect the privileges here, this is potentially expensive. Instead we determine them on request.
149 // (see getFastPropertyValue)
150 m_nPrivileges = -1;
151
153
154 registerProperty(PROPERTY_FILTER, PROPERTY_ID_FILTER, PropertyAttribute::BOUND,
156
157 registerProperty(PROPERTY_ORDER, PROPERTY_ID_ORDER, PropertyAttribute::BOUND,
159
160 registerProperty(PROPERTY_APPLYFILTER, PROPERTY_ID_APPLYFILTER, PropertyAttribute::BOUND,
162
163 registerProperty(PROPERTY_FONT, PROPERTY_ID_FONT, PropertyAttribute::BOUND,
165
166 registerMayBeVoidProperty(PROPERTY_ROW_HEIGHT, PROPERTY_ID_ROW_HEIGHT, PropertyAttribute::BOUND | PropertyAttribute::MAYBEVOID,
168
169 registerProperty(PROPERTY_AUTOGROW, PROPERTY_ID_AUTOGROW, PropertyAttribute::BOUND,
171
172 registerMayBeVoidProperty(PROPERTY_TEXTCOLOR, PROPERTY_ID_TEXTCOLOR, PropertyAttribute::BOUND | PropertyAttribute::MAYBEVOID,
174
175 registerProperty(PROPERTY_PRIVILEGES, PROPERTY_ID_PRIVILEGES, PropertyAttribute::BOUND | PropertyAttribute::READONLY,
177
178 registerMayBeVoidProperty(PROPERTY_TEXTLINECOLOR, PROPERTY_ID_TEXTLINECOLOR, PropertyAttribute::BOUND | PropertyAttribute::MAYBEVOID,
180
181 registerProperty(PROPERTY_TEXTEMPHASIS, PROPERTY_ID_TEXTEMPHASIS, PropertyAttribute::BOUND,
183
184 registerProperty(PROPERTY_TEXTRELIEF, PROPERTY_ID_TEXTRELIEF, PropertyAttribute::BOUND,
186
187 registerProperty(PROPERTY_FONTNAME, PROPERTY_ID_FONTNAME, PropertyAttribute::BOUND,&m_aFont.Name, cppu::UnoType<OUString>::get());
188 registerProperty(PROPERTY_FONTHEIGHT, PROPERTY_ID_FONTHEIGHT, PropertyAttribute::BOUND,&m_aFont.Height, cppu::UnoType<sal_Int16>::get());
189 registerProperty(PROPERTY_FONTWIDTH, PROPERTY_ID_FONTWIDTH, PropertyAttribute::BOUND,&m_aFont.Width, cppu::UnoType<sal_Int16>::get());
190 registerProperty(PROPERTY_FONTSTYLENAME, PROPERTY_ID_FONTSTYLENAME, PropertyAttribute::BOUND,&m_aFont.StyleName, cppu::UnoType<OUString>::get());
191 registerProperty(PROPERTY_FONTFAMILY, PROPERTY_ID_FONTFAMILY, PropertyAttribute::BOUND,&m_aFont.Family, cppu::UnoType<sal_Int16>::get());
192 registerProperty(PROPERTY_FONTCHARSET, PROPERTY_ID_FONTCHARSET, PropertyAttribute::BOUND,&m_aFont.CharSet, cppu::UnoType<sal_Int16>::get());
193 registerProperty(PROPERTY_FONTPITCH, PROPERTY_ID_FONTPITCH, PropertyAttribute::BOUND,&m_aFont.Pitch, cppu::UnoType<sal_Int16>::get());
194 registerProperty(PROPERTY_FONTCHARWIDTH, PROPERTY_ID_FONTCHARWIDTH, PropertyAttribute::BOUND,&m_aFont.CharacterWidth, cppu::UnoType<float>::get());
195 registerProperty(PROPERTY_FONTWEIGHT, PROPERTY_ID_FONTWEIGHT, PropertyAttribute::BOUND,&m_aFont.Weight, cppu::UnoType<float>::get());
196 registerProperty(PROPERTY_FONTSLANT, PROPERTY_ID_FONTSLANT, PropertyAttribute::BOUND,&m_aFont.Slant, cppu::UnoType<css::awt::FontSlant>::get());
197 registerProperty(PROPERTY_FONTUNDERLINE, PROPERTY_ID_FONTUNDERLINE, PropertyAttribute::BOUND,&m_aFont.Underline, cppu::UnoType<sal_Int16>::get());
198 registerProperty(PROPERTY_FONTSTRIKEOUT, PROPERTY_ID_FONTSTRIKEOUT, PropertyAttribute::BOUND,&m_aFont.Strikeout, cppu::UnoType<sal_Int16>::get());
199 registerProperty(PROPERTY_FONTORIENTATION, PROPERTY_ID_FONTORIENTATION, PropertyAttribute::BOUND,&m_aFont.Orientation, cppu::UnoType<float>::get());
200 registerProperty(PROPERTY_FONTKERNING, PROPERTY_ID_FONTKERNING, PropertyAttribute::BOUND,&m_aFont.Kerning, cppu::UnoType<sal_Bool>::get());
201 registerProperty(PROPERTY_FONTWORDLINEMODE, PROPERTY_ID_FONTWORDLINEMODE,PropertyAttribute::BOUND,&m_aFont.WordLineMode, cppu::UnoType<sal_Bool>::get());
202 registerProperty(PROPERTY_FONTTYPE, PROPERTY_ID_FONTTYPE, PropertyAttribute::BOUND,&m_aFont.Type, cppu::UnoType<sal_Int16>::get());
203
205}
206
208{
209 Sequence< Property > aProps;
210 describeProperties(aProps);
211 if(!_nId)
212 {
213 for(Property & prop : asNonConstRange(aProps))
214 {
215 if (prop.Name == PROPERTY_CATALOGNAME)
216 prop.Attributes = PropertyAttribute::READONLY;
217 else if (prop.Name == PROPERTY_SCHEMANAME)
218 prop.Attributes = PropertyAttribute::READONLY;
219 else if (prop.Name == PROPERTY_DESCRIPTION)
220 prop.Attributes = PropertyAttribute::READONLY;
221 else if (prop.Name == PROPERTY_NAME)
222 prop.Attributes = PropertyAttribute::READONLY;
223 }
224 }
225
226 return new ::cppu::OPropertyArrayHelper(aProps);
227}
228
230{
231 return *ODBTable_PROP::getArrayHelper(isNew() ? 1 : 0);
232}
233
234// XServiceInfo
235OUString SAL_CALL ODBTable::getImplementationName()
236 {
237 return "com.sun.star.sdb.dbaccess.ODBTable";
238 }
239sal_Bool SAL_CALL ODBTable::supportsService(const OUString& _rServiceName)
240 {
241 const css::uno::Sequence< OUString > aSupported(getSupportedServiceNames());
242 for (const OUString& s : aSupported)
243 if (s == _rServiceName)
244 return true;
245
246 return false;
247 }
248css::uno::Sequence< OUString > SAL_CALL ODBTable::getSupportedServiceNames()
249{
250 return { SERVICE_SDBCX_TABLE };
251}
252
253
254Any SAL_CALL ODBTable::queryInterface( const Type & rType )
255{
256 if(rType == cppu::UnoType<XRename>::get()&& !getRenameService().is() )
257 return Any();
258 if(rType == cppu::UnoType<XAlterTable>::get()&& !getAlterService().is() )
259 return Any();
260 return OTable_Base::queryInterface( rType);
261}
262
263Sequence< Type > SAL_CALL ODBTable::getTypes( )
264{
265 Type aRenameType = cppu::UnoType<XRename>::get();
267
268 Sequence< Type > aTypes(OTable_Base::getTypes());
269 std::vector<Type> aOwnTypes;
270 aOwnTypes.reserve(aTypes.getLength());
271
272 const Type* pIter = aTypes.getConstArray();
273 const Type* pEnd = pIter + aTypes.getLength();
274 for(;pIter != pEnd ;++pIter)
275 {
276 if( (*pIter != aRenameType || getRenameService().is()) && (*pIter != aAlterType || getAlterService().is()))
277 aOwnTypes.push_back(*pIter);
278 }
279
280 return Sequence< Type >(aOwnTypes.data(), aOwnTypes.size());
281}
282
283// XRename,
284void SAL_CALL ODBTable::rename( const OUString& _rNewName )
285{
286 ::osl::MutexGuard aGuard(m_aMutex);
287 checkDisposed(connectivity::sdbcx::OTableDescriptor_BASE::rBHelper.bDisposed);
288 if ( !getRenameService().is() )
289 throw SQLException(DBA_RES(RID_STR_NO_TABLE_RENAME),*this,SQLSTATE_GENERAL,1000,Any() );
290
291 Reference<XPropertySet> xTable(this);
292 getRenameService()->rename(xTable,_rNewName);
294}
295
296// XAlterTable,
297void SAL_CALL ODBTable::alterColumnByName( const OUString& _rName, const Reference< XPropertySet >& _rxDescriptor )
298{
299 ::osl::MutexGuard aGuard(m_aMutex);
300 checkDisposed(connectivity::sdbcx::OTableDescriptor_BASE::rBHelper.bDisposed);
301 if ( !getAlterService().is() )
302 throw SQLException(DBA_RES(RID_STR_NO_TABLE_RENAME),*this,SQLSTATE_GENERAL,1000,Any() );
303
304 if ( !m_xColumns->hasByName(_rName) )
305 throw SQLException(DBA_RES(RID_STR_COLUMN_NOT_VALID),*this,SQLSTATE_GENERAL,1000,Any() );
306
307 Reference<XPropertySet> xTable(this);
308 getAlterService()->alterColumnByName(xTable,_rName,_rxDescriptor);
309 m_xColumns->refresh();
310}
311
312Reference< XPropertySet > ODBTable::createColumnDescriptor()
313{
314 return new OTableColumnDescriptor( true );
315}
316
317sdbcx::OCollection* ODBTable::createColumns(const ::std::vector< OUString>& _rNames)
318{
319 Reference<XDatabaseMetaData> xMeta = getMetaData();
320 OColumns* pCol = new OColumns(*this, m_aMutex, nullptr, isCaseSensitive(), _rNames, this,this,
321 getAlterService().is() || (xMeta.is() && xMeta->supportsAlterTableWithAddColumn()),
322 getAlterService().is() || (xMeta.is() && xMeta->supportsAlterTableWithDropColumn()));
323 static_cast<OColumnsHelper*>(pCol)->setParent(this);
324 pCol->setParent(*this);
326 pCol->setMediator( m_pColumnMediator.get() );
327 return pCol;
328}
329
330sdbcx::OCollection* ODBTable::createKeys(const ::std::vector< OUString>& _rNames)
331{
332 return new connectivity::OKeysHelper(this,m_aMutex,_rNames);
333}
334
335sdbcx::OCollection* ODBTable::createIndexes(const ::std::vector< OUString>& _rNames)
336{
337 return new OIndexes(this,m_aMutex,_rNames,nullptr);
338}
339
340/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
::cppu::IPropertyArrayHelper * getArrayHelper(sal_Int32 nId)
void disposing(std::unique_lock< std::mutex > &rGuard)
virtual void SAL_CALL disposing() override
css::uno::Reference< css::sdb::tools::XTableRename > const & getRenameService() const
virtual css::uno::Reference< css::sdbc::XDatabaseMetaData > getMetaData() const override
virtual void refreshColumns() override
css::uno::Reference< css::sdb::tools::XTableAlteration > const & getAlterService() const
std::unique_ptr< OCollection > m_xColumns
virtual void SAL_CALL rename(const OUString &newName) override
virtual void construct() override
virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() override
virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type &rType) override
css::uno::Type const & get()
virtual void SAL_CALL setParent(const css::uno::Reference< css::uno::XInterface > &Parent) override
Definition: column.cxx:406
void setMediator(OContainerMediator *_pMediator)
Definition: column.hxx:157
connectivity::sdbcx::ObjectType createBaseObject(const OUString &_rName)
Definition: column.hxx:149
virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() override
Definition: table.cxx:263
virtual void SAL_CALL rename(const OUString &_rNewName) override
Definition: table.cxx:284
virtual ::connectivity::sdbcx::OCollection * createColumns(const ::std::vector< OUString > &_rNames) override
creates the column collection for the table
Definition: table.cxx:317
virtual void columnAppended(const css::uno::Reference< css::beans::XPropertySet > &_rxSourceDescriptor) override
notifies that a column, created from a column descriptor, has been appended
Definition: table.cxx:105
virtual css::uno::Reference< css::beans::XPropertySet > createColumnDescriptor() override
creates a column descriptor object.
Definition: table.cxx:312
virtual void SAL_CALL getFastPropertyValue(css::uno::Any &rValue, sal_Int32 nHandle) const override
Definition: table.cxx:134
virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type &aType) override
Definition: table.cxx:254
virtual ::connectivity::sdbcx::OCollection * createIndexes(const ::std::vector< OUString > &_rNames) override
creates the index collection for the table
Definition: table.cxx:335
virtual ::connectivity::sdbcx::OCollection * createKeys(const ::std::vector< OUString > &_rNames) override
creates the key collection for the table
Definition: table.cxx:330
virtual void SAL_CALL disposing() override
Definition: table.cxx:125
css::uno::Reference< css::container::XNameAccess > m_xDriverColumns
Definition: table.hxx:48
virtual void construct() override
Definition: table.cxx:144
::rtl::Reference< OContainerMediator > m_pColumnMediator
Definition: table.hxx:45
virtual rtl::Reference< OColumn > createColumn(const OUString &_rName) const override
creates an OColumn object which should represent the column with a given name
Definition: table.cxx:86
virtual void SAL_CALL alterColumnByName(const OUString &_rName, const css::uno::Reference< css::beans::XPropertySet > &_rxDescriptor) override
Definition: table.cxx:297
sal_Int32 m_nPrivileges
Definition: table.hxx:51
virtual void columnDropped(const OUString &_sName) override
notifies that a column with a given name has been dropped
Definition: table.cxx:110
virtual ::cppu::IPropertyArrayHelper &SAL_CALL getInfoHelper() override
Definition: table.cxx:229
virtual ::cppu::IPropertyArrayHelper * createArrayHelper(sal_Int32 _nId) const override
Definition: table.cxx:207
css::uno::Reference< css::container::XNameAccess > m_xColumnDefinitions
Definition: table.hxx:47
virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() override
Definition: table.cxx:119
css::awt::FontDescriptor m_aFont
provides the properties for description.
describes all properties for a columns of a table.
#define DBA_RES(id)
std::mutex m_aMutex
css::uno::Sequence< OUString > getSupportedServiceNames()
Type
void checkDisposed(bool _bThrow)
#define PROPERTY_ID_FONTFAMILY
#define PROPERTY_ID_TEXTEMPHASIS
#define PROPERTY_ID_TEXTRELIEF
#define PROPERTY_ID_PRIVILEGES
#define PROPERTY_ID_AUTOGROW
#define PROPERTY_ID_FONTWORDLINEMODE
#define PROPERTY_ID_FILTER
#define PROPERTY_ID_FONTHEIGHT
#define PROPERTY_ID_FONTSLANT
#define PROPERTY_ID_FONTSTYLENAME
#define PROPERTY_ID_FONTSTRIKEOUT
#define PROPERTY_ID_FONTUNDERLINE
#define PROPERTY_ID_FONTWIDTH
#define PROPERTY_ID_FONTWEIGHT
#define PROPERTY_ID_FONTNAME
#define PROPERTY_ID_ORDER
#define PROPERTY_ID_FONTTYPE
#define PROPERTY_ID_FONTCHARWIDTH
#define PROPERTY_ID_TEXTLINECOLOR
#define PROPERTY_ID_TEXTCOLOR
#define PROPERTY_ID_FONTKERNING
#define PROPERTY_ID_FONT
#define PROPERTY_ID_FONTORIENTATION
#define PROPERTY_ID_ROW_HEIGHT
#define PROPERTY_ID_FONTPITCH
#define PROPERTY_ID_APPLYFILTER
#define PROPERTY_ID_FONTCHARSET
constexpr OUStringLiteral PROPERTY_FONTHEIGHT(u"FontHeight")
constexpr OUStringLiteral PROPERTY_FONTCHARWIDTH(u"FontCharWidth")
constexpr OUStringLiteral PROPERTY_FONTORIENTATION(u"FontOrientation")
constexpr OUStringLiteral PROPERTY_TEXTCOLOR(u"TextColor")
constexpr OUStringLiteral PROPERTY_FONTUNDERLINE(u"FontUnderline")
constexpr OUStringLiteral PROPERTY_FONTKERNING(u"FontKerning")
constexpr OUStringLiteral PROPERTY_FONTSTRIKEOUT(u"FontStrikeout")
constexpr OUStringLiteral PROPERTY_SCHEMANAME(u"SchemaName")
constexpr OUStringLiteral PROPERTY_FONTPITCH(u"FontPitch")
constexpr OUStringLiteral PROPERTY_DESCRIPTION(u"Description")
constexpr OUStringLiteral PROPERTY_FONTSLANT(u"FontSlant")
constexpr OUStringLiteral PROPERTY_APPLYFILTER(u"ApplyFilter")
constexpr OUStringLiteral PROPERTY_TEXTEMPHASIS(u"FontEmphasisMark")
constexpr OUStringLiteral PROPERTY_AUTOGROW(u"AutoGrow")
constexpr OUStringLiteral PROPERTY_FILTER(u"Filter")
constexpr OUStringLiteral PROPERTY_FONTCHARSET(u"FontCharset")
constexpr OUStringLiteral PROPERTY_FONT(u"FontDescriptor")
constexpr OUStringLiteral PROPERTY_FONTNAME(u"FontName")
constexpr OUStringLiteral SQLSTATE_GENERAL
Definition: strings.hxx:267
constexpr OUStringLiteral PROPERTY_CATALOGNAME(u"CatalogName")
constexpr OUStringLiteral PROPERTY_TEXTLINECOLOR(u"TextLineColor")
constexpr OUStringLiteral PROPERTY_FONTSTYLENAME(u"FontStyleName")
constexpr OUStringLiteral PROPERTY_FONTWEIGHT(u"FontWeight")
constexpr OUStringLiteral PROPERTY_FONTFAMILY(u"FontFamily")
constexpr OUStringLiteral PROPERTY_NAME(u"Name")
constexpr OUStringLiteral PROPERTY_TEXTRELIEF(u"FontRelief")
constexpr OUStringLiteral PROPERTY_FONTTYPE(u"FontType")
constexpr OUStringLiteral PROPERTY_FONTWIDTH(u"FontWidth")
constexpr OUStringLiteral PROPERTY_FONTWORDLINEMODE(u"FontWordLineMode")
constexpr OUStringLiteral SERVICE_SDBCX_TABLE
Definition: strings.hxx:172
constexpr OUStringLiteral PROPERTY_ROW_HEIGHT(u"RowHeight")
constexpr OUStringLiteral PROPERTY_PRIVILEGES(u"Privileges")
constexpr OUStringLiteral PROPERTY_ORDER(u"Order")
unsigned char sal_Bool
const SvXMLTokenMapEntry aTypes[]