author | lancea |
Wed, 11 Jul 2018 19:36:23 -0400 | |
branch | JDK-8188051-branch |
changeset 56828 | 64304e37e9b1 |
parent 56824 | 62e92191354d |
child 56832 | 4f7713e6a308 |
permissions | -rw-r--r-- |
56380 | 1 |
/* |
56475 | 2 |
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. |
56380 | 3 |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 |
* |
|
5 |
* This code is free software; you can redistribute it and/or modify it |
|
6 |
* under the terms of the GNU General Public License version 2 only, as |
|
7 |
* published by the Free Software Foundation. Oracle designates this |
|
8 |
* particular file as subject to the "Classpath" exception as provided |
|
9 |
* by Oracle in the LICENSE file that accompanied this code. |
|
10 |
* |
|
11 |
* This code is distributed in the hope that it will be useful, but WITHOUT |
|
12 |
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
13 |
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
14 |
* version 2 for more details (a copy is included in the LICENSE file that |
|
15 |
* accompanied this code). |
|
16 |
* |
|
17 |
* You should have received a copy of the GNU General Public License version |
|
18 |
* 2 along with this work; if not, write to the Free Software Foundation, |
|
19 |
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
|
20 |
* |
|
21 |
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
|
22 |
* or visit www.oracle.com if you need additional information or have any |
|
23 |
* questions. |
|
24 |
*/ |
|
25 |
package jdk.incubator.sql2; |
|
26 |
||
27 |
import java.time.Duration; |
|
28 |
import java.util.concurrent.CompletionStage; |
|
29 |
import java.util.function.Consumer; |
|
30 |
import java.util.logging.Logger; |
|
56828
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
31 |
import java.util.regex.Pattern; |
56380 | 32 |
import java.util.stream.Collector; |
33 |
||
34 |
/** |
|
56475 | 35 |
* <p> |
56380 | 36 |
* A set of {@link Operation}s that share certain properties, are managed as a |
37 |
* unit, and are executed as a unit. The {@link Operation}s created by an |
|
38 |
* {@link OperationGroup} and submitted are the member {@link Operation}s of |
|
39 |
* that {@link OperationGroup}. An {@link OperationGroup} is not a transaction |
|
56475 | 40 |
* and is not related to a transaction in any way.</p> |
56380 | 41 |
* |
56475 | 42 |
* <p> |
56380 | 43 |
* An {@link OperationGroup} conceptually has a collection of member |
44 |
* {@link Operation}s. When an {@link OperationGroup} is submitted it is placed |
|
45 |
* in the collection of the {@link OperationGroup} of which it is a member. The |
|
46 |
* member {@link OperationGroup} is executed according to the attributes of the |
|
47 |
* {@link OperationGroup} of which it is a member. The member {@link Operation}s |
|
48 |
* of an {@link OperationGroup} are executed according to the attributes of that |
|
56475 | 49 |
* {@link OperationGroup}.</p> |
56380 | 50 |
* |
56475 | 51 |
* <p> |
52 |
* How an {@link OperationGroup} is executed depends on its attributes.</p> |
|
56380 | 53 |
* |
56475 | 54 |
* <p> |
56380 | 55 |
* If an {@link OperationGroup} has a condition and the value of that condition |
56 |
* is {@link Boolean#TRUE} then execute the member {@link Operation}s as below. |
|
57 |
* If it is {@link Boolean#FALSE} then the {@link OperationGroup} is completed |
|
58 |
* with the value null. If the condition completed exceptionally then the |
|
59 |
* {@link OperationGroup} is completed exceptionally with a |
|
56475 | 60 |
* {@link SqlSkippedException} that has that exception as its cause.</p> |
61 |
* |
|
62 |
* <p> |
|
56380 | 63 |
* If the {@link OperationGroup} is sequential the member {@link Operation}s are |
64 |
* executed in the order they were submitted. If it is parallel, they may be |
|
56475 | 65 |
* executed in any order including simultaneously.</p> |
56380 | 66 |
* |
56475 | 67 |
* <p> |
56380 | 68 |
* If an {@link OperationGroup} is dependent and a member {@link Operation} |
69 |
* completes exceptionally the remaining member {@link Operation}s in the |
|
70 |
* collection are completed exceptionally with a {@link SqlSkippedException} |
|
71 |
* that has the initial {@link Exception} as its cause and the {@link OperationGroup} |
|
72 |
* is completed exceptionally with the initial {@link Exception}. A member |
|
73 |
* {@link Operation} in-flight may either complete normally or be completed |
|
56475 | 74 |
* exceptionally but must complete one way or the other. [NOTE: Too strong?]</p> |
56380 | 75 |
* |
56475 | 76 |
* <p> |
56479 | 77 |
* After a call to {@link OperationGroup#submitHoldingForMoreMembers} the |
56475 | 78 |
* {@link OperationGroup} is submitted and held. After a call to |
79 |
* {@link OperationGroup#releaseProhibitingMoreMembers} the {@link OperationGroup} |
|
80 |
* is no longer held and is still submitted. Holding permits member {@link Operation}s |
|
81 |
* to be executed at the same time additional member {@link Operation}s are |
|
56479 | 82 |
* submitted. Collecting the member {@link Operation}s' results does not begin |
56475 | 83 |
* until the {@link OperationGroup} is no longer held.</p> |
84 |
* |
|
85 |
* <p> |
|
56380 | 86 |
* If an {@link OperationGroup} is held additional member {@link Operation}s may |
56475 | 87 |
* be submitted. If an {@link OperationGroup} is not held, no additional member |
88 |
* {@link Operation}s may be submitted after the {@link OperationGroup} is |
|
89 |
* submitted. If an {@link OperationGroup} is held it will be completed only after |
|
90 |
* it is released or if conditional and the condition is not {@link Boolean#TRUE}. |
|
91 |
* If a {@link OperationGroup} is dependent, held, one of its member |
|
56380 | 92 |
* {@link Operation}s completed exceptionally, and its queue is empty then the |
56475 | 93 |
* {@link OperationGroup} is released.</p> |
56380 | 94 |
* |
56475 | 95 |
* <p> |
56380 | 96 |
* The result of this {@link OperationGroup} is the result of collecting the |
97 |
* results of its member {@link Operation}s. If the {@link OperationGroup} is |
|
98 |
* dependent and one of its member {@link Operation}s completes exceptionally, |
|
56475 | 99 |
* the {@link OperationGroup} is completed exceptionally.</p> |
100 |
* |
|
101 |
* <p> |
|
102 |
* An implementation of this class must be thread safe as result and error |
|
103 |
* handlers running asynchronously may be accessing an {@link OperationGroup} in |
|
104 |
* parallel with each other and with a user thread.</p> |
|
105 |
||
106 |
* <p> |
|
107 |
* ISSUE: Currently no way to create a nested {@link OperationGroup}. That is an |
|
108 |
* intentional limitation but may be a simplification we can live with. Or not.</p> |
|
56380 | 109 |
* |
110 |
* @param <S> The type of the result of the member {@link Operation}s |
|
111 |
* @param <T> The type of the collected results the member {@link Operation}s |
|
112 |
*/ |
|
113 |
public interface OperationGroup<S, T> extends Operation<T> { |
|
114 |
||
115 |
/** |
|
116 |
* Mark this {@link OperationGroup} as parallel. If this method is not called |
|
117 |
* the {@link OperationGroup} is sequential. If an {@link OperationGroup} is |
|
118 |
* parallel, member {@link Operation}s may be executed in any order including |
|
119 |
* in parallel. If an {@link OperationGroup} is sequential, the default, |
|
120 |
* member {@link Operation}s are executed strictly in the order they are |
|
121 |
* submitted. |
|
122 |
* |
|
56824 | 123 |
* Note: There is no covariant override of this method in {@link Session} |
56380 | 124 |
* as there is only a small likelihood of needing it. |
125 |
* |
|
126 |
* @return this {@link OperationGroup} |
|
127 |
* @throws IllegalStateException if this {@link OperationGroup} has been |
|
56475 | 128 |
* submitted, any member {@link Operation}s have been created, or this method |
129 |
* has been called previously |
|
56380 | 130 |
*/ |
131 |
public OperationGroup<S, T> parallel(); |
|
132 |
||
133 |
/** |
|
134 |
* Mark this {@link OperationGroup} as independent. If this method is not |
|
135 |
* called the {@link OperationGroup} is dependent, the default. If an |
|
136 |
* {@link OperationGroup} is independent then failure of one member |
|
137 |
* {@link Operation} does not affect the execution of other member |
|
138 |
* {@link Operation}s. If an {@link OperationGroup} is dependent then failure |
|
139 |
* of one member {@link Operation} will cause all member {@link Operation}s |
|
140 |
* remaining in the queue to be completed exceptionally with a |
|
141 |
* {@link SqlSkippedException} with the cause set to the original exception. |
|
142 |
* |
|
143 |
* The result of this {@link OperationGroup}'s execution is the result of collecting the |
|
144 |
* results of the member {@link Operation}s that complete normally. |
|
145 |
* |
|
56824 | 146 |
* Note: There is no covariant override of this method in {@link Session} |
56380 | 147 |
* as there is only a small likelihood of needing it. |
148 |
* |
|
149 |
* @return this {@link OperationGroup} |
|
56475 | 150 |
* @throws IllegalStateException if this {@link OperationGroup} has been |
151 |
* submitted, any member {@link Operation}s have been created, or this method |
|
152 |
* has been called previously |
|
56380 | 153 |
*/ |
154 |
public OperationGroup<S, T> independent(); |
|
155 |
||
156 |
/** |
|
157 |
* Define a condition that determines whether the member {@link Operation}s of |
|
158 |
* this {@link OperationGroup} are executed or not. If and when this |
|
159 |
* {@link OperationGroup} is executed then if the condition argument is |
|
160 |
* completed with {@link Boolean#TRUE} the member {@link Operation}s are |
|
161 |
* executed. If {@link Boolean#FALSE} or if it is completed exceptionally the |
|
162 |
* member {@link Operation}s are not executed but are removed from the queue. |
|
163 |
* After all member {@link Operation}s have been removed from the queue this |
|
164 |
* {@link OperationGroup} is completed with {@code null}. |
|
165 |
* |
|
56824 | 166 |
* Note: There is no covariant override of this method in Session as there |
56380 | 167 |
* is only a small likelihood of needing it. |
168 |
* |
|
169 |
* ISSUE: Should the member Operations be skipped or otherwise completed |
|
170 |
* exceptionally? |
|
171 |
* |
|
172 |
* @param condition a {@link CompletionStage} the value of which determines |
|
173 |
* whether this {@link OperationGroup} is executed or not |
|
174 |
* @return this OperationGroup |
|
56475 | 175 |
* @throws IllegalStateException if this {@link OperationGroup} has been |
176 |
* submitted, any member {@link Operation}s have been created, or this method |
|
177 |
* has been called previously |
|
56380 | 178 |
*/ |
179 |
public OperationGroup<S, T> conditional(CompletionStage<Boolean> condition); |
|
180 |
||
181 |
/** |
|
56475 | 182 |
* Mark this {@link OperationGroup} as submitted and held. It can be executed but cannot be |
56380 | 183 |
* completed. A {@link OperationGroup} that is held remains in the queue even |
184 |
* if all of its current member {@link Operation}s have completed. So long as |
|
185 |
* the {@link OperationGroup} is held new member {@link Operation}s can be |
|
186 |
* submitted. A {@link OperationGroup} that is held must be released before it |
|
187 |
* can be completed and removed from the queue. |
|
56475 | 188 |
* |
56479 | 189 |
* If the {@link OperationGroup} is dependent and one of its member {@link Operation}s |
56475 | 190 |
* completes exceptionally and its queue is empty the {@link OperationGroup} |
191 |
* is completed. |
|
56380 | 192 |
* |
56824 | 193 |
* Note: There is no covariant override of this method in Session as there |
56380 | 194 |
* is only a small likelihood of needing it. |
195 |
* |
|
196 |
* ISSUE: Need a better name. |
|
197 |
* |
|
56797 | 198 |
* @return a Submission for this OperationGroup |
56380 | 199 |
* @throws IllegalStateException if this {@link OperationGroup} has been |
200 |
* submitted |
|
201 |
*/ |
|
202 |
public Submission<T> submitHoldingForMoreMembers(); |
|
203 |
||
204 |
/** |
|
205 |
* Allow this {@link OperationGroup} to be completed and removed from the |
|
206 |
* queue once all of its member {@link Operation}s have been completed. After |
|
207 |
* this method is called no additional member {@link Operation}s can be |
|
208 |
* submitted. Once all member {@link Operation}s have been removed from the |
|
209 |
* queue this {@link OperationGroup} will be completed and removed from the |
|
210 |
* queue. |
|
211 |
* |
|
56824 | 212 |
* Note: There is no covariant override of this method in Session as there |
56380 | 213 |
* is only a small likelihood of needing it. |
214 |
* |
|
215 |
* ISSUE: Need a better name. |
|
216 |
* |
|
56797 | 217 |
* @return the same Submission that was returned by {@link OperationGroup#submitHoldingForMoreMembers} |
56380 | 218 |
* @throws IllegalStateException if this {@link OperationGroup} has been |
56475 | 219 |
* completed or is not held. |
56380 | 220 |
*/ |
56797 | 221 |
public Submission<T> releaseProhibitingMoreMembers(); |
56380 | 222 |
|
223 |
/** |
|
224 |
* Provides a {@link Collector} to reduce the results of the member |
|
225 |
* {@link Operation}s. The result of this {@link OperationGroup} is the result |
|
226 |
* of calling finisher on the final accumulated result.If the |
|
227 |
* {@link Collector} is {@link Collector.Characteristics#UNORDERED} the member |
|
228 |
* {@link Operation} results may be accumulated out of order.If the |
|
229 |
* {@link Collector} is {@link Collector.Characteristics#CONCURRENT} then the |
|
230 |
* member {@link Operation} results may be split into subsets that are reduced |
|
231 |
* separately and then combined. If this {@link OperationGroup} is sequential, |
|
232 |
* the characteristics of the {@link Collector} only affect how the results of |
|
233 |
* the member {@link Operation}s are collected; the member {@link Operation}s |
|
234 |
* are executed sequentially regardless. If this {@link OperationGroup} is |
|
235 |
* parallel the characteristics of the {@link Collector} may influence the |
|
236 |
* execution order of the member {@link Operation}s. |
|
237 |
* |
|
238 |
* The default value is |
|
239 |
* {@code Collector.of(()->null, (a,t)->{}, (l,r)->null, a->null)}. |
|
240 |
* |
|
241 |
* @param c the Collector. Not null. |
|
242 |
* @return This OperationGroup |
|
243 |
* @throws IllegalStateException if called more than once or if this |
|
244 |
* {@link OperationGroup} has been submitted |
|
245 |
*/ |
|
246 |
public OperationGroup<S, T> collect(Collector<S, ?, T> c); |
|
247 |
||
248 |
/** |
|
56475 | 249 |
* Return a new member {@link PrimitiveOperation} that is never skipped. |
56479 | 250 |
* Skipping of member {@link Operation}s stops with a catchOperation and the |
56475 | 251 |
* subsequent {@link Operation} is executed normally. The value of a |
252 |
* catchOperation is always null. Since a catchOperation is never completed |
|
253 |
* exceptionally, it has no error handler or timeout. |
|
254 |
* |
|
255 |
* @return an {@link PrimitiveOperation} that is never skipped; |
|
256 |
* @throws IllegalStateException if the {@link OperationGroup} has been |
|
257 |
* submitted and is not held or if the {@link OperationGroup} is parallel or |
|
258 |
* independent. |
|
56380 | 259 |
*/ |
56475 | 260 |
public PrimitiveOperation<S> catchOperation(); |
56380 | 261 |
|
262 |
/** |
|
263 |
* Creates and submits a catch Operation. Convenience method. |
|
264 |
* |
|
265 |
* @return this OperationGroup |
|
56475 | 266 |
* @throws IllegalStateException if the {@link OperationGroup} has been |
267 |
* submitted and is not held or if the {@link OperationGroup} is parallel or |
|
268 |
* independent. |
|
56380 | 269 |
*/ |
270 |
public default OperationGroup<S, T> catchErrors() { |
|
271 |
catchOperation().submit(); |
|
272 |
return this; |
|
273 |
} |
|
274 |
||
275 |
/** |
|
56797 | 276 |
* Return a new {@link ArrayRowCountOperation}. |
56380 | 277 |
* <p> |
278 |
* Usage Note: Frequently use of this method will require a type witness to |
|
279 |
* enable correct type inferencing. |
|
280 |
* <pre><code> |
|
56824 | 281 |
* session.<b><List<Integer>></b>arrayCountOperation(sql) |
56380 | 282 |
* .set ... |
283 |
* .collect ... |
|
284 |
* .submit ... |
|
285 |
* </code></pre> |
|
286 |
* |
|
56797 | 287 |
* @param <R> the result type of the returned {@link ArrayRowCountOperation} |
56380 | 288 |
* @param sql SQL to be executed. Must return an update count. |
56797 | 289 |
* @return a new {@link ArrayRowCountOperation} that is a member of this |
56380 | 290 |
* {@link OperationGroup} |
56475 | 291 |
* @throws IllegalStateException if the {@link OperationGroup} has been |
292 |
* submitted and is not held |
|
56380 | 293 |
*/ |
56797 | 294 |
public <R extends S> ArrayRowCountOperation<R> arrayRowCountOperation(String sql); |
56380 | 295 |
|
296 |
/** |
|
56797 | 297 |
* Return a new {@link ParameterizedRowCountOperation}. |
56380 | 298 |
* |
299 |
* @param <R> the result type of the returned {@link CountOperation} |
|
300 |
* @param sql SQL to be executed. Must return an update count. |
|
56797 | 301 |
* @return an new {@link ParameterizedRowCountOperation} that is a member of this |
56380 | 302 |
* {@link OperationGroup} |
56475 | 303 |
* @throws IllegalStateException if the {@link OperationGroup} has been |
304 |
* submitted and is not held |
|
56380 | 305 |
*/ |
56797 | 306 |
public <R extends S> ParameterizedRowCountOperation<R> rowCountOperation(String sql); |
56380 | 307 |
|
308 |
/** |
|
309 |
* Return a new {@link Operation} for a SQL that doesn't return any result, |
|
310 |
* for example DDL. The result of this Operation is always null. |
|
56797 | 311 |
* |
312 |
* The result of the returned Operation must be Void but specifying that here |
|
313 |
* causes problems. |
|
56380 | 314 |
* |
315 |
* @param sql SQL for the {@link Operation}. |
|
316 |
* @return a new {@link Operation} that is a member of this |
|
317 |
* {@link OperationGroup} |
|
56475 | 318 |
* @throws IllegalStateException if the {@link OperationGroup} has been |
319 |
* submitted and is not held |
|
56380 | 320 |
*/ |
321 |
public Operation<S> operation(String sql); |
|
322 |
||
323 |
/** |
|
56475 | 324 |
* Return a new {@link OutOperation} that is a member {@link Operation} of this |
325 |
* {@link OperationGroup}. The SQL must return a set of zero or more out |
|
326 |
* parameters or function results. |
|
56380 | 327 |
* |
328 |
* @param <R> the result type of the returned {@link OutOperation} |
|
329 |
* @param sql SQL for the {@link Operation}. Must return zero or more out |
|
330 |
* parameters or function results. |
|
331 |
* @return a new {@link OutOperation} that is a member of this |
|
332 |
* {@link OperationGroup} |
|
56475 | 333 |
* @throws IllegalStateException if the {@link OperationGroup} has been |
334 |
* submitted and is not held |
|
56380 | 335 |
*/ |
336 |
public <R extends S> OutOperation<R> outOperation(String sql); |
|
337 |
||
338 |
/** |
|
56475 | 339 |
* Return a new {@link ParameterizedRowOperation} that is a member |
340 |
* {@link Operation} of this {@link OperationGroup}. |
|
56380 | 341 |
* |
342 |
* @param <R> the type of the result of the returned |
|
343 |
* {@link ParameterizedRowOperation} |
|
344 |
* @param sql SQL for the {@link Operation}. Must return a row sequence. |
|
345 |
* @return a new {@link ParameterizedRowOperation} that is a member of this |
|
346 |
* {@link OperationGroup} |
|
56475 | 347 |
* @throws IllegalStateException if the {@link OperationGroup} has been |
348 |
* submitted and is not held |
|
56380 | 349 |
*/ |
350 |
public <R extends S> ParameterizedRowOperation<R> rowOperation(String sql); |
|
351 |
||
56475 | 352 |
/** |
56797 | 353 |
* Return a new {@link ParameterizedRowPublisherOperation} that is a member |
354 |
* {@link Operation} of this {@link OperationGroup}. |
|
355 |
* |
|
56475 | 356 |
* @param <R> the type of the result of the returned |
56797 | 357 |
* {@link ParameterizedRowPublisherOperation} |
56475 | 358 |
* @param sql SQL for the {@link Operation}. Must return a row sequence. |
56797 | 359 |
* @return a new {@link ParameterizedRowPublisherOperation} that is a member |
360 |
* of this {@link OperationGroup} |
|
56475 | 361 |
* @throws IllegalStateException if the {@link OperationGroup} has been |
362 |
* submitted and is not held |
|
363 |
*/ |
|
56797 | 364 |
public <R extends S> ParameterizedRowPublisherOperation<R> rowPublisherOperation(String sql); |
56380 | 365 |
|
366 |
/** |
|
56475 | 367 |
* Return a new {@link MultiOperation} that is a member |
368 |
* {@link Operation} of this {@link OperationGroup}. |
|
56380 | 369 |
* |
370 |
* @param <R> the type of the result of the returned |
|
56475 | 371 |
* {@link MultiOperation} |
56380 | 372 |
* @param sql SQL for the {@link Operation} |
56475 | 373 |
* @return a new {@link MultiOperation} that is a member of this |
56380 | 374 |
* {@link OperationGroup} |
56475 | 375 |
* @throws IllegalStateException if the {@link OperationGroup} has been |
376 |
* submitted and is not held |
|
56380 | 377 |
*/ |
56475 | 378 |
public <R extends S> MultiOperation<R> multiOperation(String sql); |
56380 | 379 |
|
380 |
/** |
|
56475 | 381 |
* Return a new {@link Operation} that ends the database transaction. This |
382 |
* {@link Operation} is a member of the {@link OperationGroup}. The |
|
56380 | 383 |
* transaction is ended with a commit unless the {@link Transaction} has been |
384 |
* {@link Transaction#setRollbackOnly} in which case the transaction is ended |
|
385 |
* with a rollback. |
|
56797 | 386 |
* |
387 |
* <p> |
|
388 |
* An endTransaction Operation may be skipped. To insure that it will not be |
|
389 |
* skipped it should immediately follow a catch Operation. All end transaction |
|
390 |
* convenience methods do so.</p> |
|
56380 | 391 |
* |
392 |
* The type argument {@link S} of the containing {@link OperationGroup} must |
|
393 |
* be a supertype of {@link TransactionOutcome}. |
|
394 |
* |
|
56828
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
395 |
* @param trans the TransactionCompletion that determines whether the Operation does a |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
396 |
database commit or a database rollback. |
56380 | 397 |
* @return an {@link Operation} that will end the database transaction. |
398 |
* @throws IllegalStateException if this {@link OperationGroup} has been |
|
399 |
* submitted and is not held or is parallel. |
|
400 |
*/ |
|
56828
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
401 |
public Operation<TransactionOutcome> endTransactionOperation(TransactionCompletion trans); |
56380 | 402 |
|
403 |
/** |
|
404 |
* Convenience method that creates and submits a endTransaction |
|
405 |
* {@link Operation} that commits by default but can be set to rollback by |
|
56828
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
406 |
* calling {@link TransactionCompletion#setRollbackOnly}. The endTransaction Operation |
56797 | 407 |
* is never skipped. |
56380 | 408 |
* |
56828
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
409 |
* @param trans the TransactionCompletion that determines whether the {@link Operation} is a |
56380 | 410 |
* database commit or a database rollback. |
56824 | 411 |
* @return a {@link CompletionStage} that is completed with the outcome of the |
412 |
* transaction |
|
56380 | 413 |
* @throws IllegalStateException if this {@link OperationGroup} has been |
414 |
* submitted and is not held or is parallel. |
|
415 |
*/ |
|
56828
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
416 |
public default CompletionStage<TransactionOutcome> commitMaybeRollback(TransactionCompletion trans) { |
56797 | 417 |
catchErrors(); |
56380 | 418 |
return this.endTransactionOperation(trans).submit().getCompletionStage(); |
419 |
} |
|
420 |
||
421 |
/** |
|
56475 | 422 |
* Return a new {@link LocalOperation} that is a member {@link Operation} of |
423 |
* this {@link OperationGroup}. |
|
56380 | 424 |
* |
56475 | 425 |
* @param <R> value type of the returned local {@link Operation} |
56380 | 426 |
* @return a LocalOperation |
56475 | 427 |
* @throws IllegalStateException if this {@link OperationGroup} has been submitted and |
56380 | 428 |
* is not held |
429 |
*/ |
|
430 |
public <R extends S> LocalOperation<R> localOperation(); |
|
431 |
||
432 |
/** |
|
433 |
* Supply a {@link Logger} for the implementation of this |
|
434 |
* {@link OperationGroup} to use to log significant events. Exactly what |
|
435 |
* events are logged, at what Level the events are logged and with what |
|
436 |
* parameters is implementation dependent. All member {@link Operation}s of |
|
437 |
* this {@link OperationGroup} will use the same {@link Logger} except a |
|
438 |
* member {@link OperationGroup} that is supplied with a different |
|
439 |
* {@link Logger} uses that {@link Logger}. |
|
440 |
* |
|
441 |
* Supplying a {@link Logger} configured with a |
|
442 |
* {@link java.util.logging.MemoryHandler} with the |
|
443 |
* {@link java.util.logging.MemoryHandler#pushLevel} set to |
|
444 |
* {@link java.util.logging.Level#WARNING} will result in no log output in |
|
445 |
* normal operation. In the event of an error the actions leading up to the |
|
446 |
* error will be logged. |
|
447 |
* |
|
448 |
* Implementation Note: Implementations are encouraged to log the creation of |
|
449 |
* this {@link OperationGroup} set to {@link java.util.logging.Level#INFO}, |
|
450 |
* the creation of member {@link Operation}s at the |
|
451 |
* {@link java.util.logging.Level#CONFIG} level, and execution of member |
|
452 |
* {@link Operation}s at the {@link java.util.logging.Level#FINE} level. |
|
453 |
* Detailed information about the execution of member {@link Operation}s may |
|
454 |
* be logged at the {@link java.util.logging.Level#FINER} and |
|
455 |
* {@link java.util.logging.Level#FINEST} levels. Errors in the execution of |
|
456 |
* user code should be logged at the {@link java.util.logging.Level#WARNING} |
|
457 |
* Level. Errors in the implementation code should be logged at the |
|
458 |
* {@link java.util.logging.Level#SEVERE} Level. |
|
459 |
* |
|
460 |
* @param logger used by the implementation to log significant events |
|
461 |
* @return this {@link OperationGroup} |
|
462 |
*/ |
|
463 |
public OperationGroup<S, T> logger(Logger logger); |
|
464 |
||
56828
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
465 |
/** |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
466 |
* Returns a {@code String} enclosed in single quotes. Any occurrence of a |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
467 |
* single quote within the string will be replaced by two single quotes. |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
468 |
* |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
469 |
* <blockquote> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
470 |
* <table class="striped"> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
471 |
* <caption>Examples of the conversion:</caption> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
472 |
* <thead> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
473 |
* <tr><th scope="col">Value</th><th scope="col">Result</th></tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
474 |
* </thead> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
475 |
* <tbody style="text-align:center"> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
476 |
* <tr> <th scope="row">Hello</th> <td>'Hello'</td> </tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
477 |
* <tr> <th scope="row">G'Day</th> <td>'G''Day'</td> </tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
478 |
* <tr> <th scope="row">'G''Day'</th> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
479 |
* <td>'''G''''Day'''</td> </tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
480 |
* <tr> <th scope="row">I'''M</th> <td>'I''''''M'</td> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
481 |
* </tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
482 |
* |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
483 |
* </tbody> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
484 |
* </table> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
485 |
* </blockquote> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
486 |
* |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
487 |
* @implNote JDBC driver implementations may need to provide their own |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
488 |
* implementation of this method in order to meet the requirements of the |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
489 |
* underlying datasource. |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
490 |
* @param val a character string. Not null |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
491 |
* @return A string enclosed by single quotes with every single quote |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
492 |
* converted to two single quotes. Not null |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
493 |
* @throws NullPointerException if {@code val} is {@code null} |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
494 |
* @throws IllegalArgumentException if {@code val} cannot be enquoted |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
495 |
*/ |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
496 |
default String enquoteLiteral(String val) { |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
497 |
return "'" + val.replace("'", "''") + "'"; |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
498 |
} |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
499 |
|
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
500 |
/** |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
501 |
* Returns a SQL identifier. If {@code identifier} is a simple SQL identifier: |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
502 |
* <ul> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
503 |
* <li>Return the original value if {@code alwaysQuote} is {@code false}</li> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
504 |
* <li>Return a delimited identifier if {@code alwaysQuote} is |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
505 |
* {@code true}</li> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
506 |
* </ul> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
507 |
* |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
508 |
* If {@code identifier} is not a simple SQL identifier, {@code identifier} |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
509 |
* will be enclosed in double quotes if not already present. If the datasource |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
510 |
* does not support double quotes for delimited identifiers, the identifier |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
511 |
* should be enclosed by the string returned from |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
512 |
* {@link DatabaseMetaData#getIdentifierQuoteString}. If the datasource does |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
513 |
* not support delimited identifiers, a |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
514 |
* {@code SQLFeatureNotSupportedException} should be thrown. |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
515 |
* <p> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
516 |
* A {@code SQLException} will be thrown if {@code identifier} contains any |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
517 |
* characters invalid in a delimited identifier or the identifier length is |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
518 |
* invalid for the datasource. |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
519 |
* |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
520 |
* @implSpec The default implementation uses the following criteria to |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
521 |
* determine a valid simple SQL identifier: |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
522 |
* <ul> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
523 |
* <li>The string is not enclosed in double quotes</li> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
524 |
* <li>The first character is an alphabetic character from a through z, or |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
525 |
* from A through Z</li> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
526 |
* <li>The name only contains alphanumeric characters or the character |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
527 |
* "_"</li> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
528 |
* </ul> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
529 |
* |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
530 |
* The default implementation will throw a {@code SQLException} if: |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
531 |
* <ul> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
532 |
* <li>{@code identifier} contains a {@code null} character or double quote |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
533 |
* and is not a simple SQL identifier.</li> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
534 |
* <li>The length of {@code identifier} is less than 1 or greater than 128 |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
535 |
* characters |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
536 |
* </ul> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
537 |
* <blockquote> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
538 |
* <table class="striped" > |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
539 |
* <caption>Examples of the conversion:</caption> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
540 |
* <thead> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
541 |
* <tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
542 |
* <th scope="col">identifier</th> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
543 |
* <th scope="col">alwaysQuote</th> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
544 |
* <th scope="col">Result</th></tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
545 |
* </thead> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
546 |
* <tbody> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
547 |
* <tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
548 |
* <th scope="row">Hello</th> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
549 |
* <td>false</td> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
550 |
* <td>Hello</td> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
551 |
* </tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
552 |
* <tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
553 |
* <th scope="row">Hello</th> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
554 |
* <td>true</td> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
555 |
* <td>"Hello"</td> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
556 |
* </tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
557 |
* <tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
558 |
* <th scope="row">G'Day</th> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
559 |
* <td>false</td> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
560 |
* <td>"G'Day"</td> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
561 |
* </tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
562 |
* <tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
563 |
* <th scope="row">"Bruce Wayne"</th> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
564 |
* <td>false</td> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
565 |
* <td>"Bruce Wayne"</td> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
566 |
* </tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
567 |
* <tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
568 |
* <th scope="row">"Bruce Wayne"</th> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
569 |
* <td>true</td> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
570 |
* <td>"Bruce Wayne"</td> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
571 |
* </tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
572 |
* <tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
573 |
* <th scope="row">GoodDay$</th> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
574 |
* <td>false</td> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
575 |
* <td>"GoodDay$"</td> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
576 |
* </tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
577 |
* <tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
578 |
* <th scope="row">Hello"World</th> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
579 |
* <td>false</td> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
580 |
* <td>SQLException</td> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
581 |
* </tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
582 |
* <tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
583 |
* <th scope="row">"Hello"World"</th> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
584 |
* <td>false</td> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
585 |
* <td>SQLException</td> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
586 |
* </tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
587 |
* </tbody> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
588 |
* </table> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
589 |
* </blockquote> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
590 |
* @implNote JDBC driver implementations may need to provide their own |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
591 |
* implementation of this method in order to meet the requirements of the |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
592 |
* underlying datasource. |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
593 |
* @param identifier a SQL identifier. Not null |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
594 |
* @param alwaysQuote indicates if a simple SQL identifier should be returned |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
595 |
* as a quoted identifier |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
596 |
* @return A simple SQL identifier or a delimited identifier. Not null |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
597 |
* @throws NullPointerException if identifier is {@code null} |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
598 |
* @throws IllegalArgumentException if {@code identifier} can not be converted |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
599 |
* to a valid identifier |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
600 |
*/ |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
601 |
default String enquoteIdentifier(String identifier, boolean alwaysQuote) { |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
602 |
int len = identifier.length(); |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
603 |
if (len < 1 || len > 128) { |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
604 |
throw new IllegalArgumentException("Invalid name"); |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
605 |
} |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
606 |
if (Pattern.compile("[\\p{Alpha}][\\p{Alnum}_]*").matcher(identifier).matches()) { |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
607 |
return alwaysQuote ? "\"" + identifier + "\"" : identifier; |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
608 |
} |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
609 |
if (identifier.matches("^\".+\"$")) { |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
610 |
identifier = identifier.substring(1, len - 1); |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
611 |
} |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
612 |
if (Pattern.compile("[^\u0000\"]+").matcher(identifier).matches()) { |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
613 |
return "\"" + identifier + "\""; |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
614 |
} |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
615 |
else { |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
616 |
throw new IllegalArgumentException("Invalid name"); |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
617 |
} |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
618 |
} |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
619 |
|
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
620 |
/** |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
621 |
* Retrieves whether {@code identifier} is a simple SQL identifier. |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
622 |
* |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
623 |
* @implSpec The default implementation uses the following criteria to |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
624 |
* determine a valid simple SQL identifier: |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
625 |
* <ul> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
626 |
* <li>The string is not enclosed in double quotes</li> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
627 |
* <li>The first character is an alphabetic character from a through z, or |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
628 |
* from A through Z</li> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
629 |
* <li>The string only contains alphanumeric characters or the character |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
630 |
* "_"</li> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
631 |
* <li>The string is between 1 and 128 characters in length inclusive</li> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
632 |
* </ul> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
633 |
* |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
634 |
* <blockquote> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
635 |
* <table class="striped" > |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
636 |
* <caption>Examples of the conversion:</caption> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
637 |
* <thead> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
638 |
* <tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
639 |
* <th scope="col">identifier</th> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
640 |
* <th scope="col">Simple Identifier</th> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
641 |
* </thead> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
642 |
* |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
643 |
* <tbody> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
644 |
* <tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
645 |
* <th scope="row">Hello</th> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
646 |
* <td>true</td> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
647 |
* </tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
648 |
* <tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
649 |
* <th scope="row">G'Day</th> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
650 |
* <td>false</td> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
651 |
* </tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
652 |
* <tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
653 |
* <th scope="row">"Bruce Wayne"</th> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
654 |
* <td>false</td> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
655 |
* </tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
656 |
* <tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
657 |
* <th scope="row">GoodDay$</th> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
658 |
* <td>false</td> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
659 |
* </tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
660 |
* <tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
661 |
* <th scope="row">Hello"World</th> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
662 |
* <td>false</td> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
663 |
* </tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
664 |
* <tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
665 |
* <th scope="row">"Hello"World"</th> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
666 |
* <td>false</td> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
667 |
* </tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
668 |
* </tbody> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
669 |
* </table> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
670 |
* </blockquote> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
671 |
* @implNote JDBC driver implementations may need to provide their own |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
672 |
* implementation of this method in order to meet the requirements of the |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
673 |
* underlying datasource. |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
674 |
* @param identifier a SQL identifier. Not null |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
675 |
* @return true if a simple SQL identifier, false otherwise |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
676 |
* @throws NullPointerException if identifier is {@code null} |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
677 |
*/ |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
678 |
default boolean isSimpleIdentifier(String identifier) { |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
679 |
int len = identifier.length(); |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
680 |
return len >= 1 && len <= 128 |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
681 |
&& Pattern.compile("[\\p{Alpha}][\\p{Alnum}_]*").matcher(identifier).matches(); |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
682 |
} |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
683 |
|
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
684 |
/** |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
685 |
* Returns a {@code String} representing a National Character Set Literal |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
686 |
* enclosed in single quotes and prefixed with a upper case letter N. Any |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
687 |
* occurrence of a single quote within the string will be replaced by two |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
688 |
* single quotes. |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
689 |
* |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
690 |
* <blockquote> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
691 |
* <table class="striped"> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
692 |
* <caption>Examples of the conversion:</caption> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
693 |
* <thead> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
694 |
* <tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
695 |
* <th scope="col">Value</th> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
696 |
* <th scope="col">Result</th> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
697 |
* </tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
698 |
* </thead> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
699 |
* <tbody> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
700 |
* <tr> <th scope="row">Hello</th> <td>N'Hello'</td> </tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
701 |
* <tr> <th scope="row">G'Day</th> <td>N'G''Day'</td> </tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
702 |
* <tr> <th scope="row">'G''Day'</th> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
703 |
* <td>N'''G''''Day'''</td> </tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
704 |
* <tr> <th scope="row">I'''M</th> <td>N'I''''''M'</td> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
705 |
* <tr> <th scope="row">N'Hello'</th> <td>N'N''Hello'''</td> </tr> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
706 |
* |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
707 |
* </tbody> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
708 |
* </table> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
709 |
* </blockquote> |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
710 |
* |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
711 |
* @implNote JDBC driver implementations may need to provide their own |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
712 |
* implementation of this method in order to meet the requirements of the |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
713 |
* underlying datasource. An implementation of enquoteNCharLiteral may accept |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
714 |
* a different set of characters than that accepted by the same drivers |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
715 |
* implementation of enquoteLiteral. |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
716 |
* @param val a character string. Not null |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
717 |
* @return the result of replacing every single quote character in the |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
718 |
* argument by two single quote characters where this entire result is then |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
719 |
* prefixed with 'N'. Not null. |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
720 |
* @throws NullPointerException if {@code val} is {@code null} |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
721 |
* @throws IllegalArgumentException if {@code val} cannot be enquoted |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
722 |
*/ |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
723 |
default String enquoteNCharLiteral(String val) { |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
724 |
return "N'" + val.replace("'", "''") + "'"; |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
725 |
} |
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
726 |
|
64304e37e9b1
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents:
56824
diff
changeset
|
727 |
// Covariant overrides |
56380 | 728 |
@Override |
729 |
public OperationGroup<S, T> timeout(Duration minTime); |
|
730 |
||
731 |
@Override |
|
732 |
public OperationGroup<S, T> onError(Consumer<Throwable> handler); |
|
56824 | 733 |
|
56380 | 734 |
} |