Coverage Report

Created: 2026-10-14 09:33

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libreoffice/connectivity/source/commontools/FDatabaseMetaDataResultSet.cxx
Line
Count
Source
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
21
#include <FDatabaseMetaDataResultSet.hxx>
22
#include <FDatabaseMetaDataResultSetMetaData.hxx>
23
#include <com/sun/star/sdbc/ColumnSearch.hpp>
24
#include <com/sun/star/beans/PropertyAttribute.hpp>
25
#include <cppuhelper/supportsservice.hxx>
26
#include <connectivity/dbexception.hxx>
27
#include <o3tl/safeint.hxx>
28
#include <TConnection.hxx>
29
30
using namespace connectivity;
31
using namespace dbtools;
32
using namespace cppu;
33
34
using namespace ::com::sun::star::beans;
35
using namespace ::com::sun::star::uno;
36
using namespace ::com::sun::star::sdbc;
37
using namespace ::com::sun::star::container;
38
using namespace ::com::sun::star::lang;
39
40
ODatabaseMetaDataResultSet::ODatabaseMetaDataResultSet()
41
    :
42
0
    m_nColPos(0)
43
0
    ,m_bBOF(true)
44
0
    ,m_bEOF(true)
45
0
{
46
0
    construct();
47
0
}
Unexecuted instantiation: connectivity::ODatabaseMetaDataResultSet::ODatabaseMetaDataResultSet()
Unexecuted instantiation: connectivity::ODatabaseMetaDataResultSet::ODatabaseMetaDataResultSet()
48
49
50
ODatabaseMetaDataResultSet::ODatabaseMetaDataResultSet( MetaDataResultSetType _eType )
51
    :
52
100k
    m_nColPos(0)
53
100k
    ,m_bBOF(true)
54
100k
    ,m_bEOF(true)
55
100k
{
56
100k
    construct();
57
58
100k
    setType(_eType);
59
100k
}
Unexecuted instantiation: connectivity::ODatabaseMetaDataResultSet::ODatabaseMetaDataResultSet(connectivity::ODatabaseMetaDataResultSet::MetaDataResultSetType)
connectivity::ODatabaseMetaDataResultSet::ODatabaseMetaDataResultSet(connectivity::ODatabaseMetaDataResultSet::MetaDataResultSetType)
Line
Count
Source
52
100k
    m_nColPos(0)
53
100k
    ,m_bBOF(true)
54
100k
    ,m_bEOF(true)
55
100k
{
56
100k
    construct();
57
58
100k
    setType(_eType);
59
100k
}
60
61
62
ODatabaseMetaDataResultSet::~ODatabaseMetaDataResultSet()
63
100k
{
64
100k
}
65
66
void ODatabaseMetaDataResultSet::construct()
67
100k
{
68
100k
    registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE),           PROPERTY_ID_FETCHSIZE,          0,&m_nFetchSize,        ::cppu::UnoType<sal_Int32>::get());
69
100k
    registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE),        PROPERTY_ID_RESULTSETTYPE,          PropertyAttribute::READONLY,&m_nResultSetType,       ::cppu::UnoType<sal_Int32>::get());
70
100k
    registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION),      PROPERTY_ID_FETCHDIRECTION,     0,  &m_nFetchDirection, ::cppu::UnoType<sal_Int32>::get());
71
100k
    registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY), PROPERTY_ID_RESULTSETCONCURRENCY,   PropertyAttribute::READONLY,&m_nResultSetConcurrency,                ::cppu::UnoType<sal_Int32>::get());
72
100k
}
73
74
void ODatabaseMetaDataResultSet::setType(MetaDataResultSetType _eType)
75
100k
{
76
100k
    switch( _eType )
77
100k
    {
78
0
        case eCatalogs:             setCatalogsMap(); break;
79
0
        case eSchemas:              setSchemasMap(); break;
80
0
        case eColumnPrivileges:     setColumnPrivilegesMap(); break;
81
11.1k
        case eColumns:              setColumnsMap(); break;
82
67.4k
        case eTables:               setTablesMap(); break;
83
0
        case eTableTypes:           setTableTypes(); break;
84
0
        case eProcedureColumns:     setProcedureColumnsMap(); break;
85
0
        case eProcedures:           setProceduresMap(); break;
86
0
        case eExportedKeys:         setExportedKeysMap(); break;
87
11.1k
        case eImportedKeys:         setImportedKeysMap(); break;
88
11.1k
        case ePrimaryKeys:          setPrimaryKeysMap(); break;
89
0
        case eIndexInfo:            setIndexInfoMap(); break;
90
0
        case eTablePrivileges:      setTablePrivilegesMap(); break;
91
0
        case eCrossReference:       setCrossReferenceMap(); break;
92
0
        case eTypeInfo:             setTypeInfoMap(); break;
93
0
        case eBestRowIdentifier:    setBestRowIdentifierMap(); break;
94
0
        case eVersionColumns:       setVersionColumnsMap(); break;
95
0
        case eUDTs:                 setUDTsMap(); break;
96
0
        default:
97
0
            OSL_FAIL("Wrong type!");
98
100k
    }
99
100k
}
100
101
void ODatabaseMetaDataResultSet::disposing(std::unique_lock<std::mutex>& rGuard)
102
56.0k
{
103
56.0k
    disposePropertySetListeners(rGuard);
104
105
56.0k
    m_xMetaData.clear();
106
56.0k
    m_aRowsIter = m_aRows.end();
107
56.0k
    m_aRows.clear();
108
56.0k
    m_aRowsIter = m_aRows.end();
109
56.0k
}
110
111
void ODatabaseMetaDataResultSet::setRows(ORows&& _rRows)
112
78.5k
{
113
78.5k
    m_aRows = std::move(_rRows);
114
78.5k
    m_bBOF = true;
115
78.5k
    m_bEOF = m_aRows.empty();
116
78.5k
}
117
118
sal_Int32 SAL_CALL ODatabaseMetaDataResultSet::findColumn( const OUString& columnName )
119
0
{
120
0
    std::unique_lock aGuard( m_aMutex );
121
0
    throwIfDisposed(aGuard);
122
123
0
    Reference< XResultSetMetaData > xMeta = getMetaData(aGuard);
124
0
    sal_Int32 nLen = xMeta->getColumnCount();
125
0
    sal_Int32 i = 1;
126
0
    for(;i<=nLen;++i)
127
0
    {
128
0
        if(xMeta->isCaseSensitive(i) ? columnName == xMeta->getColumnName(i) :
129
0
            columnName.equalsIgnoreAsciiCase(xMeta->getColumnName(i))
130
0
            )
131
0
            return i;
132
0
    }
133
134
0
    ::dbtools::throwInvalidColumnException( columnName, *this );
135
0
}
136
137
void ODatabaseMetaDataResultSet::checkIndex(std::unique_lock<std::mutex>& /*rGuard*/, sal_Int32 columnIndex )
138
3.02M
{
139
3.02M
    if(columnIndex < 1 || o3tl::make_unsigned(columnIndex) >= (*m_aRowsIter).size())
140
0
        ::dbtools::throwInvalidIndexException(*this);
141
3.02M
}
142
143
Reference< css::io::XInputStream > SAL_CALL ODatabaseMetaDataResultSet::getBinaryStream( sal_Int32 /*columnIndex*/ )
144
0
{
145
0
    return nullptr;
146
0
}
147
148
Reference< css::io::XInputStream > SAL_CALL ODatabaseMetaDataResultSet::getCharacterStream( sal_Int32 /*columnIndex*/ )
149
0
{
150
0
    return nullptr;
151
0
}
152
153
154
sal_Bool SAL_CALL ODatabaseMetaDataResultSet::getBoolean( sal_Int32 columnIndex )
155
0
{
156
0
    return getValue(columnIndex).getBool();
157
0
}
158
159
160
sal_Int8 SAL_CALL ODatabaseMetaDataResultSet::getByte( sal_Int32 columnIndex )
161
0
{
162
0
    return getValue(columnIndex).getInt8();
163
0
}
164
165
166
Sequence< sal_Int8 > SAL_CALL ODatabaseMetaDataResultSet::getBytes( sal_Int32 columnIndex )
167
0
{
168
0
    return getValue(columnIndex).getSequence();
169
0
}
170
171
172
css::util::Date SAL_CALL ODatabaseMetaDataResultSet::getDate( sal_Int32 columnIndex )
173
0
{
174
0
    return getValue(columnIndex).getDate();
175
0
}
176
177
178
double SAL_CALL ODatabaseMetaDataResultSet::getDouble( sal_Int32 columnIndex )
179
0
{
180
0
    return getValue(columnIndex).getDouble();
181
0
}
182
183
184
float SAL_CALL ODatabaseMetaDataResultSet::getFloat( sal_Int32 columnIndex )
185
0
{
186
0
    return getValue(columnIndex).getFloat();
187
0
}
188
189
190
sal_Int32 SAL_CALL ODatabaseMetaDataResultSet::getInt( sal_Int32 columnIndex )
191
1.61M
{
192
1.61M
    return getValue(columnIndex).getInt32();
193
1.61M
}
194
195
196
sal_Int32 SAL_CALL ODatabaseMetaDataResultSet::getRow(  )
197
0
{
198
0
    return 0;
199
0
}
200
201
202
sal_Int64 SAL_CALL ODatabaseMetaDataResultSet::getLong( sal_Int32 columnIndex )
203
0
{
204
0
    return getValue(columnIndex).getLong();
205
0
}
206
207
208
Reference< XResultSetMetaData > SAL_CALL ODatabaseMetaDataResultSet::getMetaData(  )
209
0
{
210
0
    std::unique_lock aGuard( m_aMutex );
211
0
    return getMetaData(aGuard);
212
0
}
213
214
Reference< XResultSetMetaData > ODatabaseMetaDataResultSet::getMetaData( std::unique_lock<std::mutex>& rGuard  )
215
0
{
216
0
    throwIfDisposed(rGuard);
217
218
0
    if(!m_xMetaData.is())
219
0
        m_xMetaData = new ODatabaseMetaDataResultSetMetaData();
220
221
0
    return m_xMetaData;
222
0
}
223
224
Reference< XArray > SAL_CALL ODatabaseMetaDataResultSet::getArray( sal_Int32 /*columnIndex*/ )
225
0
{
226
0
    return nullptr;
227
0
}
228
229
230
Reference< XClob > SAL_CALL ODatabaseMetaDataResultSet::getClob( sal_Int32 /*columnIndex*/ )
231
0
{
232
0
    return nullptr;
233
0
}
234
235
Reference< XBlob > SAL_CALL ODatabaseMetaDataResultSet::getBlob( sal_Int32 /*columnIndex*/ )
236
0
{
237
0
    return nullptr;
238
0
}
239
240
241
Reference< XRef > SAL_CALL ODatabaseMetaDataResultSet::getRef( sal_Int32 /*columnIndex*/ )
242
0
{
243
0
    return nullptr;
244
0
}
245
246
247
Any SAL_CALL ODatabaseMetaDataResultSet::getObject( sal_Int32 columnIndex, const Reference< css::container::XNameAccess >& /*typeMap*/ )
248
0
{
249
0
    return getValue(columnIndex).makeAny();
250
0
}
251
252
253
sal_Int16 SAL_CALL ODatabaseMetaDataResultSet::getShort( sal_Int32 columnIndex )
254
0
{
255
0
    return getValue(columnIndex).getInt16();
256
0
}
257
258
259
OUString SAL_CALL ODatabaseMetaDataResultSet::getString( sal_Int32 columnIndex )
260
1.40M
{
261
1.40M
    return getValue(columnIndex).getString();
262
1.40M
}
263
264
265
css::util::Time SAL_CALL ODatabaseMetaDataResultSet::getTime( sal_Int32 columnIndex )
266
0
{
267
0
    return getValue(columnIndex).getTime();
268
0
}
269
270
271
css::util::DateTime SAL_CALL ODatabaseMetaDataResultSet::getTimestamp( sal_Int32 columnIndex )
272
0
{
273
0
    return getValue(columnIndex).getDateTime();
274
0
}
275
276
277
sal_Bool SAL_CALL ODatabaseMetaDataResultSet::isAfterLast()
278
0
{
279
0
    return m_bEOF;
280
0
}
281
282
bool ODatabaseMetaDataResultSet::isAfterLast( std::unique_lock<std::mutex>& /*rGuard*/)
283
3.02M
{
284
3.02M
    return m_bEOF;
285
3.02M
}
286
287
sal_Bool SAL_CALL ODatabaseMetaDataResultSet::isFirst(  )
288
0
{
289
0
    ::dbtools::throwFunctionSequenceException(*this);
290
0
}
291
292
sal_Bool SAL_CALL ODatabaseMetaDataResultSet::isLast(  )
293
0
{
294
0
    ::dbtools::throwFunctionSequenceException(*this);
295
0
}
296
297
void SAL_CALL ODatabaseMetaDataResultSet::beforeFirst(  )
298
0
{
299
0
    ::dbtools::throwFunctionSequenceException(*this);
300
0
}
301
302
void SAL_CALL ODatabaseMetaDataResultSet::afterLast(  )
303
0
{
304
0
    ::dbtools::throwFunctionSequenceException(*this);
305
0
}
306
307
308
void SAL_CALL ODatabaseMetaDataResultSet::close(  )
309
0
{
310
0
    {
311
0
        std::unique_lock aGuard( m_aMutex );
312
0
        throwIfDisposed(aGuard);
313
0
    }
314
0
    dispose();
315
0
}
316
317
sal_Bool SAL_CALL ODatabaseMetaDataResultSet::first(  )
318
0
{
319
0
    ::dbtools::throwFunctionSequenceException(*this);
320
0
}
321
322
sal_Bool SAL_CALL ODatabaseMetaDataResultSet::last(  )
323
0
{
324
0
    ::dbtools::throwFunctionSequenceException(*this);
325
0
}
326
327
sal_Bool SAL_CALL ODatabaseMetaDataResultSet::absolute( sal_Int32 /*row*/ )
328
0
{
329
0
    ::dbtools::throwFunctionSequenceException(*this);
330
0
}
331
332
sal_Bool SAL_CALL ODatabaseMetaDataResultSet::relative( sal_Int32 /*row*/ )
333
0
{
334
0
    ::dbtools::throwFunctionSequenceException(*this);
335
0
}
336
337
sal_Bool SAL_CALL ODatabaseMetaDataResultSet::previous(  )
338
0
{
339
0
    ::dbtools::throwFunctionSequenceException(*this);
340
0
}
341
342
Reference< XInterface > SAL_CALL ODatabaseMetaDataResultSet::getStatement(  )
343
0
{
344
0
    return nullptr;
345
0
}
346
347
sal_Bool SAL_CALL ODatabaseMetaDataResultSet::rowDeleted(  )
348
0
{
349
0
    ::dbtools::throwFunctionSequenceException(*this);
350
0
}
351
352
sal_Bool SAL_CALL ODatabaseMetaDataResultSet::rowInserted(  )
353
0
{
354
0
    ::dbtools::throwFunctionSequenceException(*this);
355
0
}
356
357
sal_Bool SAL_CALL ODatabaseMetaDataResultSet::rowUpdated(  )
358
0
{
359
0
    ::dbtools::throwFunctionSequenceException(*this);
360
0
}
361
362
sal_Bool SAL_CALL ODatabaseMetaDataResultSet::isBeforeFirst()
363
0
{
364
0
    return m_bBOF;
365
0
}
366
367
bool ODatabaseMetaDataResultSet::isBeforeFirst(std::unique_lock<std::mutex>& /*rGuard*/)
368
3.02M
{
369
3.02M
    return m_bBOF;
370
3.02M
}
371
372
sal_Bool SAL_CALL ODatabaseMetaDataResultSet::next(  )
373
480k
{
374
480k
    std::unique_lock aGuard( m_aMutex );
375
480k
    return next(aGuard);
376
480k
}
377
378
bool ODatabaseMetaDataResultSet::next( std::unique_lock<std::mutex>& rGuard )
379
480k
{
380
480k
    throwIfDisposed(rGuard);
381
382
480k
    if ( m_bBOF )
383
100k
    {
384
100k
       m_aRowsIter = m_aRows.begin();
385
100k
       m_bBOF = false;
386
100k
    }
387
380k
    else
388
380k
    {
389
380k
        if ( m_bEOF )
390
0
            throwFunctionSequenceException( *this );
391
380k
        else
392
380k
            if ( m_aRowsIter != m_aRows.end() )
393
380k
                ++m_aRowsIter;
394
380k
    }
395
396
480k
    bool bSuccess = m_aRowsIter != m_aRows.end();
397
480k
    if ( !bSuccess )
398
89.4k
    {
399
89.4k
        m_bEOF = true;
400
89.4k
        m_bBOF = m_aRows.empty();
401
89.4k
    }
402
480k
    return bSuccess;
403
480k
}
404
405
406
sal_Bool SAL_CALL ODatabaseMetaDataResultSet::wasNull(  )
407
0
{
408
0
    std::unique_lock aGuard( m_aMutex );
409
0
    throwIfDisposed(aGuard);
410
411
0
    if(m_aRowsIter == m_aRows.end() || !(*m_aRowsIter)[m_nColPos].is())
412
0
        return true;
413
414
0
    return (*m_aRowsIter)[m_nColPos]->getValue().isNull();
415
0
}
416
417
void SAL_CALL ODatabaseMetaDataResultSet::refreshRow(  )
418
0
{
419
0
}
420
421
422
void SAL_CALL ODatabaseMetaDataResultSet::cancel(  )
423
0
{
424
0
}
425
426
void SAL_CALL ODatabaseMetaDataResultSet::clearWarnings(  )
427
0
{
428
0
}
429
430
Any SAL_CALL ODatabaseMetaDataResultSet::getWarnings(  )
431
0
{
432
0
    return Any();
433
0
}
434
435
::cppu::IPropertyArrayHelper* ODatabaseMetaDataResultSet::createArrayHelper( ) const
436
0
{
437
0
    Sequence< Property > aProps;
438
0
    describeProperties(aProps);
439
0
    return new ::cppu::OPropertyArrayHelper(aProps);
440
0
}
441
442
void ODatabaseMetaDataResultSet::setProceduresMap()
443
0
{
444
0
    m_xMetaData = new ODatabaseMetaDataResultSetMetaData();
445
0
    m_xMetaData->setProceduresMap();
446
0
}
447
448
void ODatabaseMetaDataResultSet::setCatalogsMap()
449
0
{
450
0
    m_xMetaData = new ODatabaseMetaDataResultSetMetaData();
451
0
    m_xMetaData->setCatalogsMap();
452
0
}
453
454
void ODatabaseMetaDataResultSet::setSchemasMap()
455
0
{
456
0
    m_xMetaData = new ODatabaseMetaDataResultSetMetaData();
457
0
    m_xMetaData->setSchemasMap();
458
0
}
459
460
void ODatabaseMetaDataResultSet::setColumnPrivilegesMap()
461
0
{
462
0
    m_xMetaData = new ODatabaseMetaDataResultSetMetaData();
463
0
    m_xMetaData->setColumnPrivilegesMap();
464
0
}
465
466
void ODatabaseMetaDataResultSet::setColumnsMap()
467
11.1k
{
468
11.1k
    m_xMetaData = new ODatabaseMetaDataResultSetMetaData();
469
11.1k
    m_xMetaData->setColumnsMap();
470
11.1k
}
471
472
void ODatabaseMetaDataResultSet::setTablesMap()
473
67.4k
{
474
67.4k
    m_xMetaData = new ODatabaseMetaDataResultSetMetaData();
475
67.4k
    m_xMetaData->setTablesMap();
476
67.4k
}
477
478
void ODatabaseMetaDataResultSet::setProcedureColumnsMap()
479
0
{
480
0
    m_xMetaData = new ODatabaseMetaDataResultSetMetaData();
481
0
    m_xMetaData->setProcedureColumnsMap();
482
0
}
483
484
void ODatabaseMetaDataResultSet::setPrimaryKeysMap()
485
11.1k
{
486
11.1k
    m_xMetaData = new ODatabaseMetaDataResultSetMetaData();
487
11.1k
    m_xMetaData->setPrimaryKeysMap();
488
11.1k
}
489
490
void ODatabaseMetaDataResultSet::setIndexInfoMap()
491
0
{
492
0
    m_xMetaData = new ODatabaseMetaDataResultSetMetaData();
493
0
    m_xMetaData->setIndexInfoMap();
494
0
}
495
496
void ODatabaseMetaDataResultSet::setTablePrivilegesMap()
497
0
{
498
0
    m_xMetaData = new ODatabaseMetaDataResultSetMetaData();
499
0
    m_xMetaData->setTablePrivilegesMap();
500
0
}
501
502
void ODatabaseMetaDataResultSet::setCrossReferenceMap()
503
0
{
504
0
    m_xMetaData = new ODatabaseMetaDataResultSetMetaData();
505
0
    m_xMetaData->setCrossReferenceMap();
506
0
}
507
508
void ODatabaseMetaDataResultSet::setVersionColumnsMap()
509
0
{
510
0
    m_xMetaData = new ODatabaseMetaDataResultSetMetaData();
511
0
    m_xMetaData->setVersionColumnsMap();
512
0
}
513
514
void ODatabaseMetaDataResultSet::setBestRowIdentifierMap()
515
0
{
516
0
    m_xMetaData = new ODatabaseMetaDataResultSetMetaData();
517
0
    m_xMetaData->setBestRowIdentifierMap();
518
0
}
519
520
void ODatabaseMetaDataResultSet::setTypeInfoMap()
521
0
{
522
0
    m_xMetaData = new ODatabaseMetaDataResultSetMetaData();
523
0
    m_xMetaData->setTypeInfoMap();
524
0
}
525
526
void ODatabaseMetaDataResultSet::setUDTsMap()
527
0
{
528
0
    m_xMetaData = new ODatabaseMetaDataResultSetMetaData();
529
0
    m_xMetaData->setUDTsMap();
530
0
}
531
532
void ODatabaseMetaDataResultSet::setTableTypes()
533
0
{
534
0
    m_xMetaData = new ODatabaseMetaDataResultSetMetaData();
535
0
    m_xMetaData->setTableTypes();
536
0
}
537
538
void ODatabaseMetaDataResultSet::setExportedKeysMap()
539
0
{
540
0
    m_xMetaData = new ODatabaseMetaDataResultSetMetaData();
541
0
    m_xMetaData->setExportedKeysMap();
542
0
}
543
544
void ODatabaseMetaDataResultSet::setImportedKeysMap()
545
11.1k
{
546
11.1k
    m_xMetaData = new ODatabaseMetaDataResultSetMetaData();
547
11.1k
    m_xMetaData->setImportedKeysMap();
548
11.1k
}
549
550
ORowSetValueDecorator& ORowSetValueDecorator::operator=(const ORowSetValue& _aValue)
551
7.21M
{
552
7.21M
    m_aValue = _aValue;
553
7.21M
    return *this;
554
7.21M
}
555
556
const ORowSetValue& ODatabaseMetaDataResultSet::getValue(sal_Int32 columnIndex)
557
3.02M
{
558
3.02M
    std::unique_lock aGuard( m_aMutex );
559
3.02M
    throwIfDisposed(aGuard);
560
561
3.02M
    if ( isBeforeFirst(aGuard) || isAfterLast(aGuard) )
562
0
        ::dbtools::throwFunctionSequenceException( *this );
563
564
3.02M
    checkIndex(aGuard, columnIndex);
565
3.02M
    m_nColPos = columnIndex;
566
567
3.02M
    if(m_aRowsIter != m_aRows.end() && (*m_aRowsIter)[columnIndex].is())
568
2.68M
        return *(*m_aRowsIter)[columnIndex];
569
346k
    return m_aEmptyValue;
570
3.02M
}
571
572
/// return an empty ORowSetValueDecorator
573
ORowSetValueDecoratorRef const & ODatabaseMetaDataResultSet::getEmptyValue()
574
67.4k
{
575
67.4k
    static ORowSetValueDecoratorRef aEmptyValueRef = new ORowSetValueDecorator();
576
67.4k
    return aEmptyValueRef;
577
67.4k
}
578
579
/// return an ORowSetValueDecorator with 0 as value
580
ORowSetValueDecoratorRef const & ODatabaseMetaDataResultSet::get0Value()
581
0
{
582
0
    static ORowSetValueDecoratorRef a0ValueRef = new ORowSetValueDecorator(sal_Int32(0));
583
0
    return a0ValueRef;
584
0
}
585
586
/// return an ORowSetValueDecorator with 1 as value
587
ORowSetValueDecoratorRef const & ODatabaseMetaDataResultSet::get1Value()
588
0
{
589
0
    static ORowSetValueDecoratorRef a1ValueRef = new ORowSetValueDecorator(sal_Int32(1));
590
0
    return a1ValueRef;
591
0
}
592
593
/// return an ORowSetValueDecorator with ColumnSearch::BASIC as value
594
ORowSetValueDecoratorRef const & ODatabaseMetaDataResultSet::getBasicValue()
595
0
{
596
0
    static ORowSetValueDecoratorRef aValueRef = new ORowSetValueDecorator(ColumnSearch::BASIC);
597
0
    return aValueRef;
598
0
}
599
600
ORowSetValueDecoratorRef const & ODatabaseMetaDataResultSet::getSelectValue()
601
0
{
602
0
    static ORowSetValueDecoratorRef aValueRef = new ORowSetValueDecorator(u"SELECT"_ustr);
603
0
    return aValueRef;
604
0
}
605
606
ORowSetValueDecoratorRef const & ODatabaseMetaDataResultSet::getInsertValue()
607
0
{
608
0
    static ORowSetValueDecoratorRef aValueRef = new ORowSetValueDecorator(u"INSERT"_ustr);
609
0
    return aValueRef;
610
0
}
611
612
ORowSetValueDecoratorRef const & ODatabaseMetaDataResultSet::getDeleteValue()
613
0
{
614
0
    static ORowSetValueDecoratorRef aValueRef = new ORowSetValueDecorator(u"DELETE"_ustr);
615
0
    return aValueRef;
616
0
}
617
618
ORowSetValueDecoratorRef const & ODatabaseMetaDataResultSet::getUpdateValue()
619
0
{
620
0
    static ORowSetValueDecoratorRef aValueRef = new ORowSetValueDecorator(u"UPDATE"_ustr);
621
0
    return aValueRef;
622
0
}
623
624
ORowSetValueDecoratorRef const & ODatabaseMetaDataResultSet::getCreateValue()
625
0
{
626
0
    static ORowSetValueDecoratorRef aValueRef = new ORowSetValueDecorator(u"CREATE"_ustr);
627
0
    return aValueRef;
628
0
}
629
630
ORowSetValueDecoratorRef const & ODatabaseMetaDataResultSet::getReadValue()
631
0
{
632
0
    static ORowSetValueDecoratorRef aValueRef = new ORowSetValueDecorator(u"READ"_ustr);
633
0
    return aValueRef;
634
0
}
635
636
ORowSetValueDecoratorRef const & ODatabaseMetaDataResultSet::getAlterValue()
637
0
{
638
0
    static ORowSetValueDecoratorRef aValueRef = new ORowSetValueDecorator(u"ALTER"_ustr);
639
0
    return aValueRef;
640
0
}
641
642
ORowSetValueDecoratorRef const & ODatabaseMetaDataResultSet::getDropValue()
643
0
{
644
0
    static ORowSetValueDecoratorRef aValueRef = new ORowSetValueDecorator(u"DROP"_ustr);
645
0
    return aValueRef;
646
0
}
647
648
ORowSetValueDecoratorRef const & ODatabaseMetaDataResultSet::getQuoteValue()
649
0
{
650
0
    static ORowSetValueDecoratorRef aValueRef = new ORowSetValueDecorator(u"'"_ustr);
651
0
    return aValueRef;
652
0
}
653
654
void SAL_CALL ODatabaseMetaDataResultSet::initialize( const Sequence< Any >& _aArguments )
655
0
{
656
0
    if ( _aArguments.getLength() != 2 )
657
0
        return;
658
659
0
    sal_Int32 nResultSetType = 0;
660
0
    if ( !(_aArguments[0] >>= nResultSetType))
661
0
        return;
662
663
0
    setType(static_cast<MetaDataResultSetType>(nResultSetType));
664
0
    Sequence< Sequence<Any> > aRows;
665
0
    if ( !(_aArguments[1] >>= aRows) )
666
0
        return;
667
668
0
    ORows aRowsToSet;
669
0
    for (auto& row : aRows)
670
0
    {
671
0
        ORow aRowToSet;
672
0
        for (auto& field : row)
673
0
        {
674
0
            ORowSetValueDecoratorRef aValue;
675
0
            switch (field.getValueTypeClass())
676
0
            {
677
0
                case TypeClass_BOOLEAN:
678
0
                    {
679
0
                        bool bValue = false;
680
0
                        field >>= bValue;
681
0
                        aValue = new ORowSetValueDecorator(ORowSetValue(bValue));
682
0
                    }
683
0
                    break;
684
0
                case TypeClass_BYTE:
685
0
                    {
686
0
                        sal_Int8 nValue(0);
687
0
                        field >>= nValue;
688
0
                        aValue = new ORowSetValueDecorator(ORowSetValue(nValue));
689
0
                    }
690
0
                    break;
691
0
                case TypeClass_SHORT:
692
0
                case TypeClass_UNSIGNED_SHORT:
693
0
                    {
694
0
                        sal_Int16 nValue(0);
695
0
                        field >>= nValue;
696
0
                        aValue = new ORowSetValueDecorator(ORowSetValue(nValue));
697
0
                    }
698
0
                    break;
699
0
                case TypeClass_LONG:
700
0
                case TypeClass_UNSIGNED_LONG:
701
0
                    {
702
0
                        sal_Int32 nValue(0);
703
0
                        field >>= nValue;
704
0
                        aValue = new ORowSetValueDecorator(ORowSetValue(nValue));
705
0
                    }
706
0
                    break;
707
0
                case TypeClass_HYPER:
708
0
                case TypeClass_UNSIGNED_HYPER:
709
0
                    {
710
0
                        sal_Int64 nValue(0);
711
0
                        field >>= nValue;
712
0
                        aValue = new ORowSetValueDecorator(ORowSetValue(nValue));
713
0
                    }
714
0
                    break;
715
0
                case TypeClass_FLOAT:
716
0
                    {
717
0
                        float nValue(0.0);
718
0
                        field >>= nValue;
719
0
                        aValue = new ORowSetValueDecorator(ORowSetValue(nValue));
720
0
                    }
721
0
                    break;
722
0
                case TypeClass_DOUBLE:
723
0
                    {
724
0
                        double nValue(0.0);
725
0
                        field >>= nValue;
726
0
                        aValue = new ORowSetValueDecorator(ORowSetValue(nValue));
727
0
                    }
728
0
                    break;
729
0
                case TypeClass_STRING:
730
0
                    {
731
0
                        OUString sValue;
732
0
                        field >>= sValue;
733
0
                        aValue = new ORowSetValueDecorator(ORowSetValue(sValue));
734
0
                    }
735
0
                    break;
736
0
                default:
737
0
                    break;
738
0
            }
739
0
            aRowToSet.push_back(aValue);
740
0
        }
741
0
        aRowsToSet.push_back(std::move(aRowToSet));
742
0
    } // for (; pRowsIter != pRowsEnd;++pRowsIter
743
0
    setRows(std::move(aRowsToSet));
744
0
}
745
// XServiceInfo
746
747
748
    OUString SAL_CALL ODatabaseMetaDataResultSet::getImplementationName(  )
749
0
    {
750
0
        return u"org.openoffice.comp.helper.DatabaseMetaDataResultSet"_ustr;
751
0
    }
752
753
    sal_Bool SAL_CALL ODatabaseMetaDataResultSet::supportsService( const OUString& _rServiceName )
754
0
    {
755
0
        return cppu::supportsService(this, _rServiceName);
756
0
    }
757
758
    Sequence< OUString > SAL_CALL ODatabaseMetaDataResultSet::getSupportedServiceNames(  )
759
0
    {
760
0
        return Sequence<OUString>{ u"com.sun.star.sdbc.ResultSet"_ustr };
761
0
    }
762
763
extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
764
connectivity_dbtools_ODatabaseMetaDataResultSet_get_implementation(
765
    css::uno::XComponentContext* , css::uno::Sequence<css::uno::Any> const&)
766
0
{
767
0
    return cppu::acquire(new ODatabaseMetaDataResultSet());
768
0
}
769
770
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */