LibreOffice Module connectivity (master) 1
mysqlc_resultset.hxx
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#pragma once
21
23#include "mysqlc_statement.hxx"
25#include "mysqlc_connection.hxx"
26
27#include <com/sun/star/sdbc/XCloseable.hpp>
28#include <com/sun/star/sdbc/XColumnLocate.hpp>
29#include <com/sun/star/sdbc/XResultSet.hpp>
30#include <com/sun/star/sdbc/XResultSetMetaDataSupplier.hpp>
31#include <com/sun/star/sdbc/XResultSetUpdate.hpp>
32#include <com/sun/star/sdbc/XRow.hpp>
33#include <com/sun/star/sdbc/XRowUpdate.hpp>
34#include <com/sun/star/sdbc/XWarningsSupplier.hpp>
35#include <com/sun/star/sdbcx/XDeleteRows.hpp>
36#include <com/sun/star/sdbcx/XRowLocate.hpp>
37#include <com/sun/star/util/XCancellable.hpp>
38
40
42{
43using ::com::sun::star::uno::Any;
44
45/*
46 ** OResultSet
47 */
49 css::sdbc::XResultSet, css::sdbc::XRow, css::sdbc::XResultSetMetaDataSupplier,
50 css::util::XCancellable, css::sdbc::XWarningsSupplier, css::sdbc::XResultSetUpdate,
51 css::sdbc::XRowUpdate, css::sdbcx::XRowLocate, css::sdbcx::XDeleteRows, css::sdbc::XCloseable,
52 css::sdbc::XColumnLocate, css::lang::XServiceInfo>
54
55class OResultSet final : public cppu::BaseMutex,
56 public OResultSet_BASE,
58 public OPropertyArrayUsageHelper<OResultSet>
59{
60 using DataFields = std::vector<OString>;
61 std::vector<DataFields> m_aRows;
62 std::vector<OUString> m_aFields;
63 MYSQL* m_pMysql = nullptr;
64 css::uno::WeakReferenceHelper m_aStatement;
65 css::uno::Reference<css::sdbc::XResultSetMetaData> m_xMetaData;
66 MYSQL_RES* m_pResult;
67 rtl_TextEncoding m_encoding;
68 bool m_bWasNull = false; // did the last getXXX result null?
69
70 sal_Int32 getDataLength(sal_Int32 column)
71 {
72 return m_aRows[m_nRowPosition][column - 1].getLength();
73 }
74 bool checkNull(sal_Int32 column);
75
79 sal_Int32 m_nRowPosition = -1;
80 sal_Int32 m_nRowCount = 0;
81
82 // OPropertyArrayUsageHelper
84 // OPropertySetHelper
86
87 sal_Bool SAL_CALL convertFastPropertyValue(Any& rConvertedValue, Any& rOldValue,
88 sal_Int32 nHandle, const Any& rValue) override;
89
90 void SAL_CALL setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, const Any& rValue) override;
91
92 void SAL_CALL getFastPropertyValue(Any& rValue, sal_Int32 nHandle) const override;
93
94 virtual ~OResultSet() override = default;
95
100
107
114 void checkBordersAndEnsureFetched(sal_Int32 index);
115
120 void fetchResult();
121
122public:
123 virtual OUString SAL_CALL getImplementationName() override;
124
125 virtual sal_Bool SAL_CALL supportsService(OUString const& ServiceName) override;
126
127 virtual css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
128
129 OResultSet(OConnection& rConn, OCommonStatement* pStmt, MYSQL_RES* pResult,
130 rtl_TextEncoding _encoding);
131
132 // ::cppu::OComponentHelper
133 void SAL_CALL disposing() override;
134
135 // XInterface
136 Any SAL_CALL queryInterface(const css::uno::Type& rType) override;
137
138 void SAL_CALL acquire() noexcept override;
139 void SAL_CALL release() noexcept override;
140
141 //XTypeProvider
142 css::uno::Sequence<css::uno::Type> SAL_CALL getTypes() override;
143
144 // XPropertySet
145 css::uno::Reference<css::beans::XPropertySetInfo> SAL_CALL getPropertySetInfo() override;
146
147 // XResultSet
148 sal_Bool SAL_CALL next() override;
149 sal_Bool SAL_CALL isBeforeFirst() override;
150 sal_Bool SAL_CALL isAfterLast() override;
151 sal_Bool SAL_CALL isFirst() override;
152 sal_Bool SAL_CALL isLast() override;
153
154 void SAL_CALL beforeFirst() override;
155 void SAL_CALL afterLast() override;
156
157 sal_Bool SAL_CALL first() override;
158 sal_Bool SAL_CALL last() override;
159
160 sal_Int32 SAL_CALL getRow() override;
161
162 sal_Bool SAL_CALL absolute(sal_Int32 row) override;
163 sal_Bool SAL_CALL relative(sal_Int32 rows) override;
164 sal_Bool SAL_CALL previous() override;
165
166 void SAL_CALL refreshRow() override;
167
168 sal_Bool SAL_CALL rowUpdated() override;
169 sal_Bool SAL_CALL rowInserted() override;
170 sal_Bool SAL_CALL rowDeleted() override;
171
172 css::uno::Reference<css::uno::XInterface> SAL_CALL getStatement() override;
173 // XRow
174 sal_Bool SAL_CALL wasNull() override;
175
176 OUString SAL_CALL getString(sal_Int32 column) override;
177
178 sal_Bool SAL_CALL getBoolean(sal_Int32 column) override;
179 sal_Int8 SAL_CALL getByte(sal_Int32 column) override;
180 sal_Int16 SAL_CALL getShort(sal_Int32 column) override;
181 sal_Int32 SAL_CALL getInt(sal_Int32 column) override;
182 sal_Int64 SAL_CALL getLong(sal_Int32 column) override;
183
184 float SAL_CALL getFloat(sal_Int32 column) override;
185 double SAL_CALL getDouble(sal_Int32 column) override;
186
187 css::uno::Sequence<sal_Int8> SAL_CALL getBytes(sal_Int32 column) override;
188 css::util::Date SAL_CALL getDate(sal_Int32 column) override;
189 css::util::Time SAL_CALL getTime(sal_Int32 column) override;
190 css::util::DateTime SAL_CALL getTimestamp(sal_Int32 column) override;
191
192 css::uno::Reference<css::io::XInputStream> SAL_CALL getBinaryStream(sal_Int32 column) override;
193 css::uno::Reference<css::io::XInputStream>
194 SAL_CALL getCharacterStream(sal_Int32 column) override;
195
196 Any SAL_CALL getObject(
197 sal_Int32 column, const css::uno::Reference<css::container::XNameAccess>& typeMap) override;
198
199 css::uno::Reference<css::sdbc::XRef> SAL_CALL getRef(sal_Int32 column) override;
200 css::uno::Reference<css::sdbc::XBlob> SAL_CALL getBlob(sal_Int32 column) override;
201 css::uno::Reference<css::sdbc::XClob> SAL_CALL getClob(sal_Int32 column) override;
202 css::uno::Reference<css::sdbc::XArray> SAL_CALL getArray(sal_Int32 column) override;
203
204 // XResultSetMetaDataSupplier
205 css::uno::Reference<css::sdbc::XResultSetMetaData> SAL_CALL getMetaData() override;
206
207 // XCancellable
208 void SAL_CALL cancel() override;
209
210 // XCloseable
211 void SAL_CALL close() override;
212
213 // XWarningsSupplier
214 Any SAL_CALL getWarnings() override;
215
216 void SAL_CALL clearWarnings() override;
217
218 // XResultSetUpdate
219 void SAL_CALL insertRow() override;
220 void SAL_CALL updateRow() override;
221 void SAL_CALL deleteRow() override;
222 void SAL_CALL cancelRowUpdates() override;
223 void SAL_CALL moveToInsertRow() override;
224 void SAL_CALL moveToCurrentRow() override;
225
226 // XRowUpdate
227 void SAL_CALL updateNull(sal_Int32 column) override;
228 void SAL_CALL updateBoolean(sal_Int32 column, sal_Bool x) override;
229 void SAL_CALL updateByte(sal_Int32 column, sal_Int8 x) override;
230 void SAL_CALL updateShort(sal_Int32 column, sal_Int16 x) override;
231 void SAL_CALL updateInt(sal_Int32 column, sal_Int32 x) override;
232 void SAL_CALL updateLong(sal_Int32 column, sal_Int64 x) override;
233 void SAL_CALL updateFloat(sal_Int32 column, float x) override;
234 void SAL_CALL updateDouble(sal_Int32 column, double x) override;
235 void SAL_CALL updateString(sal_Int32 column, const OUString& x) override;
236 void SAL_CALL updateBytes(sal_Int32 column, const css::uno::Sequence<sal_Int8>& x) override;
237 void SAL_CALL updateDate(sal_Int32 column, const css::util::Date& x) override;
238 void SAL_CALL updateTime(sal_Int32 column, const css::util::Time& x) override;
239 void SAL_CALL updateTimestamp(sal_Int32 column, const css::util::DateTime& x) override;
240 void SAL_CALL updateBinaryStream(sal_Int32 column,
241 const css::uno::Reference<css::io::XInputStream>& x,
242 sal_Int32 length) override;
243 void SAL_CALL updateCharacterStream(sal_Int32 column,
244 const css::uno::Reference<css::io::XInputStream>& x,
245 sal_Int32 length) override;
246 void SAL_CALL updateObject(sal_Int32 column, const Any& x) override;
247 void SAL_CALL updateNumericObject(sal_Int32 column, const Any& x, sal_Int32 scale) override;
248
249 // XColumnLocate
250 sal_Int32 SAL_CALL findColumn(const OUString& columnName) override;
251
252 // XRowLocate
253 Any SAL_CALL getBookmark() override;
254
255 sal_Bool SAL_CALL moveToBookmark(const Any& bookmark) override;
256 sal_Bool SAL_CALL moveRelativeToBookmark(const Any& bookmark, sal_Int32 rows) override;
257 sal_Int32 SAL_CALL compareBookmarks(const Any& first, const Any& second) override;
258 sal_Bool SAL_CALL hasOrderedBookmarks() override;
259 sal_Int32 SAL_CALL hashBookmark(const Any& bookmark) override;
260
261 // XDeleteRows
262 css::uno::Sequence<sal_Int32> SAL_CALL deleteRows(const css::uno::Sequence<Any>& rows) override;
263
264 void checkColumnIndex(sal_Int32 index);
265 void checkRowIndex();
266
267private:
269};
270
271} /* connectivity::mysqlc */
272
273/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
std::vector< OUString > m_aFields
sal_Bool SAL_CALL getBoolean(sal_Int32 column) override
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo() override
sal_Bool SAL_CALL rowUpdated() override
void SAL_CALL updateNull(sal_Int32 column) override
sal_Bool SAL_CALL first() override
void ensureFieldInfoFetched()
Ensures that meta data of the corresponding result set has been already queried.
void ensureResultFetched()
Ensures that the results of the query has already been fetched.
void SAL_CALL updateByte(sal_Int32 column, sal_Int8 x) override
void SAL_CALL updateString(sal_Int32 column, const OUString &x) override
void SAL_CALL updateBinaryStream(sal_Int32 column, const css::uno::Reference< css::io::XInputStream > &x, sal_Int32 length) override
sal_Bool SAL_CALL absolute(sal_Int32 row) override
css::util::DateTime SAL_CALL getTimestamp(sal_Int32 column) override
void SAL_CALL updateFloat(sal_Int32 column, float x) override
sal_Bool SAL_CALL moveToBookmark(const Any &bookmark) override
sal_Int32 SAL_CALL getInt(sal_Int32 column) override
void SAL_CALL disposing() override
void SAL_CALL deleteRow() override
sal_Bool SAL_CALL relative(sal_Int32 rows) override
OResultSet(OConnection &rConn, OCommonStatement *pStmt, MYSQL_RES *pResult, rtl_TextEncoding _encoding)
void SAL_CALL updateDate(sal_Int32 column, const css::util::Date &x) override
void SAL_CALL clearWarnings() override
virtual ~OResultSet() override=default
void SAL_CALL close() override
sal_Bool SAL_CALL isLast() override
Any SAL_CALL getObject(sal_Int32 column, const css::uno::Reference< css::container::XNameAccess > &typeMap) override
void SAL_CALL updateNumericObject(sal_Int32 column, const Any &x, sal_Int32 scale) override
sal_Int32 SAL_CALL compareBookmarks(const Any &first, const Any &second) override
void checkColumnIndex(sal_Int32 index)
sal_Int32 getDataLength(sal_Int32 column)
sal_Bool SAL_CALL isFirst() override
::cppu::IPropertyArrayHelper * createArrayHelper() const override
used to implement the creation of the array helper which is shared amongst all instances of the class...
virtual OUString SAL_CALL getImplementationName() override
virtual sal_Bool SAL_CALL supportsService(OUString const &ServiceName) override
float SAL_CALL getFloat(sal_Int32 column) override
std::vector< OString > DataFields
sal_Bool SAL_CALL hasOrderedBookmarks() override
sal_Bool SAL_CALL convertFastPropertyValue(Any &rConvertedValue, Any &rOldValue, sal_Int32 nHandle, const Any &rValue) override
css::uno::Reference< css::sdbc::XArray > SAL_CALL getArray(sal_Int32 column) override
sal_Bool SAL_CALL next() override
void SAL_CALL beforeFirst() override
css::uno::WeakReferenceHelper m_aStatement
void SAL_CALL updateDouble(sal_Int32 column, double x) override
Any SAL_CALL getWarnings() override
css::uno::Sequence< sal_Int8 > SAL_CALL getBytes(sal_Int32 column) override
void SAL_CALL updateTime(sal_Int32 column, const css::util::Time &x) override
sal_Int32 m_nRowPosition
Position of cursor indexed from 0.
void SAL_CALL updateTimestamp(sal_Int32 column, const css::util::DateTime &x) override
void SAL_CALL moveToInsertRow() override
css::uno::Reference< css::sdbc::XRef > SAL_CALL getRef(sal_Int32 column) override
void SAL_CALL updateBytes(sal_Int32 column, const css::uno::Sequence< sal_Int8 > &x) override
Any SAL_CALL getBookmark() override
sal_Int32 SAL_CALL findColumn(const OUString &columnName) override
sal_Bool SAL_CALL isAfterLast() override
void SAL_CALL afterLast() override
void SAL_CALL release() noexcept override
Any SAL_CALL queryInterface(const css::uno::Type &rType) override
css::uno::Sequence< sal_Int32 > SAL_CALL deleteRows(const css::uno::Sequence< Any > &rows) override
sal_Bool SAL_CALL isBeforeFirst() override
sal_Int16 SAL_CALL getShort(sal_Int32 column) override
void SAL_CALL updateBoolean(sal_Int32 column, sal_Bool x) override
sal_Bool SAL_CALL last() override
void fetchResult()
Fetches all the data from the MYSQL_RES object related to the class.
::cppu::IPropertyArrayHelper &SAL_CALL getInfoHelper() override
void SAL_CALL insertRow() override
void SAL_CALL getFastPropertyValue(Any &rValue, sal_Int32 nHandle) const override
css::uno::Reference< css::uno::XInterface > SAL_CALL getStatement() override
void SAL_CALL acquire() noexcept override
void SAL_CALL updateRow() override
double SAL_CALL getDouble(sal_Int32 column) override
css::uno::Reference< css::sdbc::XBlob > SAL_CALL getBlob(sal_Int32 column) override
void SAL_CALL updateObject(sal_Int32 column, const Any &x) override
void SAL_CALL updateCharacterStream(sal_Int32 column, const css::uno::Reference< css::io::XInputStream > &x, sal_Int32 length) override
void SAL_CALL refreshRow() override
void SAL_CALL setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, const Any &rValue) override
sal_Bool SAL_CALL previous() override
void SAL_CALL updateShort(sal_Int32 column, sal_Int16 x) override
OUString SAL_CALL getString(sal_Int32 column) override
css::uno::Reference< css::io::XInputStream > SAL_CALL getCharacterStream(sal_Int32 column) override
css::uno::Reference< css::sdbc::XClob > SAL_CALL getClob(sal_Int32 column) override
sal_Int32 SAL_CALL hashBookmark(const Any &bookmark) override
sal_Bool SAL_CALL rowInserted() override
void SAL_CALL cancel() override
void SAL_CALL moveToCurrentRow() override
css::uno::Reference< css::sdbc::XResultSetMetaData > m_xMetaData
css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() override
std::vector< DataFields > m_aRows
sal_Bool SAL_CALL wasNull() override
bool checkNull(sal_Int32 column)
css::util::Time SAL_CALL getTime(sal_Int32 column) override
void SAL_CALL cancelRowUpdates() override
void SAL_CALL updateInt(sal_Int32 column, sal_Int32 x) override
sal_Bool SAL_CALL rowDeleted() override
css::uno::Reference< css::io::XInputStream > SAL_CALL getBinaryStream(sal_Int32 column) override
sal_Int32 SAL_CALL getRow() override
css::uno::Reference< css::sdbc::XResultSetMetaData > SAL_CALL getMetaData() override
sal_Int64 SAL_CALL getLong(sal_Int32 column) override
void checkBordersAndEnsureFetched(sal_Int32 index)
Check the following things:
css::util::Date SAL_CALL getDate(sal_Int32 column) override
void SAL_CALL updateLong(sal_Int32 column, sal_Int64 x) override
sal_Int8 SAL_CALL getByte(sal_Int32 column) override
sal_Bool SAL_CALL moveRelativeToBookmark(const Any &bookmark, sal_Int32 rows) override
Type
::cppu::WeakComponentImplHelper12< css::sdbc::XResultSet, css::sdbc::XRow, css::sdbc::XResultSetMetaDataSupplier, css::util::XCancellable, css::sdbc::XWarningsSupplier, css::sdbc::XResultSetUpdate, css::sdbc::XRowUpdate, css::sdbcx::XRowLocate, css::sdbcx::XDeleteRows, css::sdbc::XCloseable, css::sdbc::XColumnLocate, css::lang::XServiceInfo > OResultSet_BASE
sal_Int32 scale
Definition: pq_statics.cxx:62
const char * columnName
Definition: pq_statics.cxx:56
unsigned char sal_Bool
signed char sal_Int8