1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
*/
#ifndef __com_sun_star_sdb_XSingleSelectQueryAnalyzer_idl__
#define __com_sun_star_sdb_XSingleSelectQueryAnalyzer_idl__
#include <com/sun/star/beans/XPropertySet.idl>
#include <com/sun/star/beans/PropertyValue.idl>
#include <com/sun/star/sdbc/SQLException.idl>
module com { module sun { module star { module container {
published interface XIndexAccess;
};};};};
module com { module sun { module star { module sdb {
/** simplifies the analyzing of single select statements.
<p>
The interface can be used for analyzing single SELECT statements without knowing the
structure of the used query.
</p>
*/
interface XSingleSelectQueryAnalyzer : com::sun::star::uno::XInterface
{
/** returns the query.
@returns
the query
*/
string getQuery();
/** sets a new query for the composer, which may be expanded by filters, group by, having
and sort criteria.
@param command
the single select statement to set
@throws com::sun::star::sdbc::SQLException
if a database access error occurs
or the statement isn't a single select statement
or the statement isn't valid
or the statement can not be parsed.
*/
void setQuery([in] string command )
raises (com::sun::star::sdbc::SQLException);
// FILTER
/** returns the used filter.
<p>
The filter criteria returned is part of the where condition of the
select command, but it does not contain the where token.
</p>
@returns
the filter
*/
string getFilter();
/** returns the currently used filter.
<p>
The filter criteria is split into levels. Each level represents the
OR criteria. Within each level, the filters are provided as an AND criteria
with the name of the column and the filter condition. The filter condition
is of type string. The operator used, is defined by com::sun::star::sdb::SQLFilterOperator.
</p>
@returns
the structured filter
*/
sequence< sequence<com::sun::star::beans::PropertyValue> >
getStructuredFilter();
// GROUP BY
/** returns the currently used GROUP BY.
<p>
The group criteria returned is part of the GROUP BY clause of the
select command, but it does not contain the GROUP BY keyword .
</p>
@returns
the group
*/
string getGroup();
/** returns the currently used group.
<p>
The columns returned form the GROUP BY clause.
</p>
@returns
a collection of com::sun::star::sdb::GroupColumn which form the GROUP BY.
*/
com::sun::star::container::XIndexAccess getGroupColumns();
// HAVING
/** returns the used HAVING filter.
<p>
The HAVING filter criteria returned is part of the HAVING condition of the
select command, but it does not contain the HAVING token.
</p>
@returns
the filter
*/
string getHavingClause();
/** returns the currently used HAVING filter.
<p>
The HAVING filter criteria is split into levels. Each level represents the
OR criteria. Within each level, the filters are provided as an AND criteria
with the name of the column and the filter condition. The filter condition
is of type string. The operator used, is defined by com::sun::star::sdb::SQLFilterOperator.
</p>
@returns
the structured HAVING filter
*/
sequence< sequence<com::sun::star::beans::PropertyValue> >
getStructuredHavingClause();
// ORDER BY
/** returns the currently used sort order.
<p>
The order criteria returned is part of the ORDER BY clause of the
select command, but it does not contain the ORDER BY keyword .
</p>
@returns
the order
*/
string getOrder();
/** returns the currently used sort order.
<p>
The order criteria returned is part of the ORDER BY clause of the
select command, but it does not contain the ORDER BY keyword .
</p>
@returns
a collection of com::sun::star::sdb::OrderColumn which form the ORDER BY.
*/
com::sun::star::container::XIndexAccess getOrderColumns();
/** returns the query previously set at the analyzer, with all application-level
features being substituted by their database-level counterparts.
<p>The XSingleSelectQueryAnalyzer is an application-level component,
which in some respect understands SQL features usually not present at the database
level. As a prominent example, you might pass a <code>SELECT</code> statement to the analyzer
which is based on another query.</p>
<p>While all other methods will handle those additional features transparently - e.g.
the query in the <code>FROM</code> part of a <code>SELECT</code> statement will be handled
as if it really is a table -, <code>getQueryWithSubstitution</code> gives you the SQL statement
where all those features have been stripped, and replaced with appropriate standard SQL.</p>
<p>For example, consider a database document which contains a client-side query named <code>All Orders</code>.
This query is not known to the underlying database, so an SQL statement like
<code>SELECT * from "All Orders"</code> would be rejected by the database. However, instantiating
a SingleSelectQueryAnalyzer at the Connection object, and passing it the above query,
you can then use <code>getQueryWithSubstitution</code> to retrieve a statement where <code>"All Orders"</code>
has been replaced with the <code>SELECT</code> statement which actually constitutes the <code>"All Orders"</code>
query.</p>
@throws com::sun::star::sdbc::SQLException
if the query represented cannot be completely substituted. A usual case for this is a recursion in
the sub queries: Consider a query named <code>foo</code>, which is defined as <code>SELECT * FROM "bar"</code>.
Now assume that <code>bar</code> is a query defined as <code>SELECT * FROM "foo"</code>. Passing either
of those statements to an analyzer, and calling getQueryWithSubstitution(), would result
in an exception being thrown, since it's impossible to substitute the sub queries with their
constituting statements.
@see Connection
@see XQueriesSupplier
@see DatabaseDocument
@since OOo 2.0.4
*/
string getQueryWithSubstitution()
raises (com::sun::star::sdbc::SQLException);
/** sets a new query for the composer, which may be expanded by filters, group by, having
and sort criteria.
@param Command
is the command which should be executed, the type of command depends
on the CommandType.
<p>In case of a #CommandType of <member>CommandType::COMMAND</member>,
means in case the #Command specifies an SQL statement, the inherited
<member scope="com::sun::star::sdbc">RowSet::EscapeProcessing</member>
becomes relevant:<br/>
It then can be to used to specify whether the SQL statement should be analyzed on the
client side before sending it to the database server.<br/>
The default value for <member scope="com::sun::star::sdbc">RowSet::EscapeProcessing</member>
is <TRUE/>. By switching it to <FALSE/>, you can pass backend-specific SQL statements,
which are not standard SQL, to your database.</p>
@see com::sun::star::sdb::CommandType
@see com::sun::star::sdbc::RowSet::EscapeProcessing
@param CommandType
is the type of the command.
@see com::sun::star::sdb::CommandType
@throws com::sun::star::sdbc::SQLException
if a database access error occurs
or the statement isn't a single select statement
or the statement isn't valid
or the statement can not be parsed.
*/
void setCommand([in] string Command ,[in] long CommandType)
raises (com::sun::star::sdbc::SQLException);
};
}; }; }; };
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|