Skip to content

Commit 2191c6f

Browse files
vpavicrwinch
authored andcommitted
Use text blocks for SQL statements
With Java 17 now being the baseline, strings containing SQL statements can be managed more conveniently using text blocks.
1 parent 87bb3df commit 2191c6f

7 files changed

+125
-134
lines changed

spring-session-jdbc/src/main/java/org/springframework/session/jdbc/Db2JdbcIndexedSessionRepositoryCustomizer.java

+13-14
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2014-2020 the original author or authors.
2+
* Copyright 2014-2022 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -28,19 +28,18 @@
2828
public class Db2JdbcIndexedSessionRepositoryCustomizer
2929
implements SessionRepositoryCustomizer<JdbcIndexedSessionRepository> {
3030

31-
// @formatter:off
32-
private static final String CREATE_SESSION_ATTRIBUTE_QUERY = ""
33-
+ "MERGE INTO %TABLE_NAME%_ATTRIBUTES SA "
34-
+ "USING ( "
35-
+ " VALUES (?, ?, ?) "
36-
+ ") A (SESSION_PRIMARY_ID, ATTRIBUTE_NAME, ATTRIBUTE_BYTES) "
37-
+ "ON (SA.SESSION_PRIMARY_ID = A.SESSION_PRIMARY_ID and SA.ATTRIBUTE_NAME = A.ATTRIBUTE_NAME) "
38-
+ "WHEN MATCHED THEN "
39-
+ " UPDATE SET ATTRIBUTE_BYTES = A.ATTRIBUTE_BYTES "
40-
+ "WHEN NOT MATCHED THEN "
41-
+ " INSERT (SESSION_PRIMARY_ID, ATTRIBUTE_NAME, ATTRIBUTE_BYTES) "
42-
+ " VALUES (A.SESSION_PRIMARY_ID, A.ATTRIBUTE_NAME, A.ATTRIBUTE_BYTES)";
43-
// @formatter:on
31+
private static final String CREATE_SESSION_ATTRIBUTE_QUERY = """
32+
MERGE INTO %TABLE_NAME%_ATTRIBUTES SA
33+
USING (
34+
VALUES (?, ?, ?)
35+
) A (SESSION_PRIMARY_ID, ATTRIBUTE_NAME, ATTRIBUTE_BYTES)
36+
ON (SA.SESSION_PRIMARY_ID = A.SESSION_PRIMARY_ID and SA.ATTRIBUTE_NAME = A.ATTRIBUTE_NAME)
37+
WHEN MATCHED THEN
38+
UPDATE SET ATTRIBUTE_BYTES = A.ATTRIBUTE_BYTES
39+
WHEN NOT MATCHED THEN
40+
INSERT (SESSION_PRIMARY_ID, ATTRIBUTE_NAME, ATTRIBUTE_BYTES)
41+
VALUES (A.SESSION_PRIMARY_ID, A.ATTRIBUTE_NAME, A.ATTRIBUTE_BYTES)
42+
""";
4443

4544
@Override
4645
public void customize(JdbcIndexedSessionRepository sessionRepository) {

spring-session-jdbc/src/main/java/org/springframework/session/jdbc/JdbcIndexedSessionRepository.java

+53-62
Original file line numberDiff line numberDiff line change
@@ -140,68 +140,59 @@ public class JdbcIndexedSessionRepository
140140

141141
private static final String SPRING_SECURITY_CONTEXT = "SPRING_SECURITY_CONTEXT";
142142

143-
// @formatter:off
144-
private static final String CREATE_SESSION_QUERY = ""
145-
+ "INSERT INTO %TABLE_NAME% (PRIMARY_ID, SESSION_ID, CREATION_TIME, LAST_ACCESS_TIME, MAX_INACTIVE_INTERVAL, EXPIRY_TIME, PRINCIPAL_NAME) "
146-
+ "VALUES (?, ?, ?, ?, ?, ?, ?)";
147-
// @formatter:on
148-
149-
// @formatter:off
150-
private static final String CREATE_SESSION_ATTRIBUTE_QUERY = ""
151-
+ "INSERT INTO %TABLE_NAME%_ATTRIBUTES (SESSION_PRIMARY_ID, ATTRIBUTE_NAME, ATTRIBUTE_BYTES) "
152-
+ "VALUES (?, ?, ?)";
153-
// @formatter:on
154-
155-
// @formatter:off
156-
private static final String GET_SESSION_QUERY = ""
157-
+ "SELECT S.PRIMARY_ID, S.SESSION_ID, S.CREATION_TIME, S.LAST_ACCESS_TIME, S.MAX_INACTIVE_INTERVAL, SA.ATTRIBUTE_NAME, SA.ATTRIBUTE_BYTES "
158-
+ "FROM %TABLE_NAME% S "
159-
+ "LEFT JOIN %TABLE_NAME%_ATTRIBUTES SA ON S.PRIMARY_ID = SA.SESSION_PRIMARY_ID "
160-
+ "WHERE S.SESSION_ID = ?";
161-
// @formatter:on
162-
163-
// @formatter:off
164-
private static final String UPDATE_SESSION_QUERY = ""
165-
+ "UPDATE %TABLE_NAME% "
166-
+ "SET SESSION_ID = ?, LAST_ACCESS_TIME = ?, MAX_INACTIVE_INTERVAL = ?, EXPIRY_TIME = ?, PRINCIPAL_NAME = ? "
167-
+ "WHERE PRIMARY_ID = ?";
168-
// @formatter:on
169-
170-
// @formatter:off
171-
private static final String UPDATE_SESSION_ATTRIBUTE_QUERY = ""
172-
+ "UPDATE %TABLE_NAME%_ATTRIBUTES "
173-
+ "SET ATTRIBUTE_BYTES = ? "
174-
+ "WHERE SESSION_PRIMARY_ID = ? "
175-
+ "AND ATTRIBUTE_NAME = ?";
176-
// @formatter:on
177-
178-
// @formatter:off
179-
private static final String DELETE_SESSION_ATTRIBUTE_QUERY = ""
180-
+ "DELETE FROM %TABLE_NAME%_ATTRIBUTES "
181-
+ "WHERE SESSION_PRIMARY_ID = ? "
182-
+ "AND ATTRIBUTE_NAME = ?";
183-
// @formatter:on
184-
185-
// @formatter:off
186-
private static final String DELETE_SESSION_QUERY = ""
187-
+ "DELETE FROM %TABLE_NAME% "
188-
+ "WHERE SESSION_ID = ? "
189-
+ "AND MAX_INACTIVE_INTERVAL >= 0";
190-
// @formatter:on
191-
192-
// @formatter:off
193-
private static final String LIST_SESSIONS_BY_PRINCIPAL_NAME_QUERY = ""
194-
+ "SELECT S.PRIMARY_ID, S.SESSION_ID, S.CREATION_TIME, S.LAST_ACCESS_TIME, S.MAX_INACTIVE_INTERVAL, SA.ATTRIBUTE_NAME, SA.ATTRIBUTE_BYTES "
195-
+ "FROM %TABLE_NAME% S "
196-
+ "LEFT JOIN %TABLE_NAME%_ATTRIBUTES SA ON S.PRIMARY_ID = SA.SESSION_PRIMARY_ID "
197-
+ "WHERE S.PRINCIPAL_NAME = ?";
198-
// @formatter:on
199-
200-
// @formatter:off
201-
private static final String DELETE_SESSIONS_BY_EXPIRY_TIME_QUERY = ""
202-
+ "DELETE FROM %TABLE_NAME% "
203-
+ "WHERE EXPIRY_TIME < ?";
204-
// @formatter:on
143+
private static final String CREATE_SESSION_QUERY = """
144+
INSERT INTO %TABLE_NAME% (PRIMARY_ID, SESSION_ID, CREATION_TIME, LAST_ACCESS_TIME, MAX_INACTIVE_INTERVAL, EXPIRY_TIME, PRINCIPAL_NAME)
145+
VALUES (?, ?, ?, ?, ?, ?, ?)
146+
""";
147+
148+
private static final String CREATE_SESSION_ATTRIBUTE_QUERY = """
149+
INSERT INTO %TABLE_NAME%_ATTRIBUTES (SESSION_PRIMARY_ID, ATTRIBUTE_NAME, ATTRIBUTE_BYTES)
150+
VALUES (?, ?, ?)
151+
""";
152+
153+
private static final String GET_SESSION_QUERY = """
154+
SELECT S.PRIMARY_ID, S.SESSION_ID, S.CREATION_TIME, S.LAST_ACCESS_TIME, S.MAX_INACTIVE_INTERVAL, SA.ATTRIBUTE_NAME, SA.ATTRIBUTE_BYTES
155+
FROM %TABLE_NAME% S
156+
LEFT JOIN %TABLE_NAME%_ATTRIBUTES SA ON S.PRIMARY_ID = SA.SESSION_PRIMARY_ID
157+
WHERE S.SESSION_ID = ?
158+
""";
159+
160+
private static final String UPDATE_SESSION_QUERY = """
161+
UPDATE %TABLE_NAME%
162+
SET SESSION_ID = ?, LAST_ACCESS_TIME = ?, MAX_INACTIVE_INTERVAL = ?, EXPIRY_TIME = ?, PRINCIPAL_NAME = ?
163+
WHERE PRIMARY_ID = ?
164+
""";
165+
166+
private static final String UPDATE_SESSION_ATTRIBUTE_QUERY = """
167+
UPDATE %TABLE_NAME%_ATTRIBUTES
168+
SET ATTRIBUTE_BYTES = ?
169+
WHERE SESSION_PRIMARY_ID = ?
170+
AND ATTRIBUTE_NAME = ?
171+
""";
172+
173+
private static final String DELETE_SESSION_ATTRIBUTE_QUERY = """
174+
DELETE FROM %TABLE_NAME%_ATTRIBUTES
175+
WHERE SESSION_PRIMARY_ID = ?
176+
AND ATTRIBUTE_NAME = ?
177+
""";
178+
179+
private static final String DELETE_SESSION_QUERY = """
180+
DELETE FROM %TABLE_NAME%
181+
WHERE SESSION_ID = ?
182+
AND MAX_INACTIVE_INTERVAL >= 0
183+
""";
184+
185+
private static final String LIST_SESSIONS_BY_PRINCIPAL_NAME_QUERY = """
186+
SELECT S.PRIMARY_ID, S.SESSION_ID, S.CREATION_TIME, S.LAST_ACCESS_TIME, S.MAX_INACTIVE_INTERVAL, SA.ATTRIBUTE_NAME, SA.ATTRIBUTE_BYTES
187+
FROM %TABLE_NAME% S
188+
LEFT JOIN %TABLE_NAME%_ATTRIBUTES SA ON S.PRIMARY_ID = SA.SESSION_PRIMARY_ID
189+
WHERE S.PRINCIPAL_NAME = ?
190+
""";
191+
192+
private static final String DELETE_SESSIONS_BY_EXPIRY_TIME_QUERY = """
193+
DELETE FROM %TABLE_NAME%
194+
WHERE EXPIRY_TIME < ?
195+
""";
205196

206197
private static final Log logger = LogFactory.getLog(JdbcIndexedSessionRepository.class);
207198

spring-session-jdbc/src/main/java/org/springframework/session/jdbc/MySqlJdbcIndexedSessionRepositoryCustomizer.java

+6-7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2014-2020 the original author or authors.
2+
* Copyright 2014-2022 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -28,12 +28,11 @@
2828
public class MySqlJdbcIndexedSessionRepositoryCustomizer
2929
implements SessionRepositoryCustomizer<JdbcIndexedSessionRepository> {
3030

31-
// @formatter:off
32-
private static final String CREATE_SESSION_ATTRIBUTE_QUERY = ""
33-
+ "INSERT INTO %TABLE_NAME%_ATTRIBUTES (SESSION_PRIMARY_ID, ATTRIBUTE_NAME, ATTRIBUTE_BYTES) "
34-
+ "VALUES (?, ?, ?) "
35-
+ "ON DUPLICATE KEY UPDATE ATTRIBUTE_BYTES = VALUES(ATTRIBUTE_BYTES)";
36-
// @formatter:on
31+
private static final String CREATE_SESSION_ATTRIBUTE_QUERY = """
32+
INSERT INTO %TABLE_NAME%_ATTRIBUTES (SESSION_PRIMARY_ID, ATTRIBUTE_NAME, ATTRIBUTE_BYTES)
33+
VALUES (?, ?, ?)
34+
ON DUPLICATE KEY UPDATE ATTRIBUTE_BYTES = VALUES(ATTRIBUTE_BYTES)
35+
""";
3736

3837
@Override
3938
public void customize(JdbcIndexedSessionRepository sessionRepository) {

spring-session-jdbc/src/main/java/org/springframework/session/jdbc/OracleJdbcIndexedSessionRepositoryCustomizer.java

+14-15
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2014-2020 the original author or authors.
2+
* Copyright 2014-2022 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -28,20 +28,19 @@
2828
public class OracleJdbcIndexedSessionRepositoryCustomizer
2929
implements SessionRepositoryCustomizer<JdbcIndexedSessionRepository> {
3030

31-
// @formatter:off
32-
private static final String CREATE_SESSION_ATTRIBUTE_QUERY = ""
33-
+ "MERGE INTO %TABLE_NAME%_ATTRIBUTES SA "
34-
+ "USING ( "
35-
+ " SELECT ? AS SESSION_PRIMARY_ID, ? AS ATTRIBUTE_NAME, ? AS ATTRIBUTE_BYTES "
36-
+ " FROM DUAL "
37-
+ ") A "
38-
+ "ON (SA.SESSION_PRIMARY_ID = A.SESSION_PRIMARY_ID and SA.ATTRIBUTE_NAME = A.ATTRIBUTE_NAME) "
39-
+ "WHEN MATCHED THEN "
40-
+ " UPDATE SET ATTRIBUTE_BYTES = A.ATTRIBUTE_BYTES "
41-
+ "WHEN NOT MATCHED THEN "
42-
+ " INSERT (SESSION_PRIMARY_ID, ATTRIBUTE_NAME, ATTRIBUTE_BYTES) "
43-
+ " VALUES (A.SESSION_PRIMARY_ID, A.ATTRIBUTE_NAME, A.ATTRIBUTE_BYTES)";
44-
// @formatter:on
31+
private static final String CREATE_SESSION_ATTRIBUTE_QUERY = """
32+
MERGE INTO %TABLE_NAME%_ATTRIBUTES SA
33+
USING (
34+
SELECT ? AS SESSION_PRIMARY_ID, ? AS ATTRIBUTE_NAME, ? AS ATTRIBUTE_BYTES
35+
FROM DUAL
36+
) A
37+
ON (SA.SESSION_PRIMARY_ID = A.SESSION_PRIMARY_ID and SA.ATTRIBUTE_NAME = A.ATTRIBUTE_NAME)
38+
WHEN MATCHED THEN
39+
UPDATE SET ATTRIBUTE_BYTES = A.ATTRIBUTE_BYTES
40+
WHEN NOT MATCHED THEN
41+
INSERT (SESSION_PRIMARY_ID, ATTRIBUTE_NAME, ATTRIBUTE_BYTES)
42+
VALUES (A.SESSION_PRIMARY_ID, A.ATTRIBUTE_NAME, A.ATTRIBUTE_BYTES)
43+
""";
4544

4645
@Override
4746
public void customize(JdbcIndexedSessionRepository sessionRepository) {

spring-session-jdbc/src/main/java/org/springframework/session/jdbc/PostgreSqlJdbcIndexedSessionRepositoryCustomizer.java

+7-8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2014-2020 the original author or authors.
2+
* Copyright 2014-2022 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -28,13 +28,12 @@
2828
public class PostgreSqlJdbcIndexedSessionRepositoryCustomizer
2929
implements SessionRepositoryCustomizer<JdbcIndexedSessionRepository> {
3030

31-
// @formatter:off
32-
private static final String CREATE_SESSION_ATTRIBUTE_QUERY = ""
33-
+ "INSERT INTO %TABLE_NAME%_ATTRIBUTES (SESSION_PRIMARY_ID, ATTRIBUTE_NAME, ATTRIBUTE_BYTES) "
34-
+ "VALUES (?, ?, ?) "
35-
+ "ON CONFLICT (SESSION_PRIMARY_ID, ATTRIBUTE_NAME) "
36-
+ "DO UPDATE SET ATTRIBUTE_BYTES = EXCLUDED.ATTRIBUTE_BYTES";
37-
// @formatter:on
31+
private static final String CREATE_SESSION_ATTRIBUTE_QUERY = """
32+
INSERT INTO %TABLE_NAME%_ATTRIBUTES (SESSION_PRIMARY_ID, ATTRIBUTE_NAME, ATTRIBUTE_BYTES)
33+
VALUES (?, ?, ?)
34+
ON CONFLICT (SESSION_PRIMARY_ID, ATTRIBUTE_NAME)
35+
DO UPDATE SET ATTRIBUTE_BYTES = EXCLUDED.ATTRIBUTE_BYTES
36+
""";
3837

3938
@Override
4039
public void customize(JdbcIndexedSessionRepository sessionRepository) {

spring-session-jdbc/src/main/java/org/springframework/session/jdbc/SqlServerJdbcIndexedSessionRepositoryCustomizer.java

+13-14
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2014-2020 the original author or authors.
2+
* Copyright 2014-2022 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -28,19 +28,18 @@
2828
public class SqlServerJdbcIndexedSessionRepositoryCustomizer
2929
implements SessionRepositoryCustomizer<JdbcIndexedSessionRepository> {
3030

31-
// @formatter:off
32-
private static final String CREATE_SESSION_ATTRIBUTE_QUERY = ""
33-
+ "MERGE INTO %TABLE_NAME%_ATTRIBUTES SA "
34-
+ "USING ( "
35-
+ " VALUES (?, ?, ?) "
36-
+ ") A (SESSION_PRIMARY_ID, ATTRIBUTE_NAME, ATTRIBUTE_BYTES) "
37-
+ "ON (SA.SESSION_PRIMARY_ID = A.SESSION_PRIMARY_ID and SA.ATTRIBUTE_NAME = A.ATTRIBUTE_NAME) "
38-
+ "WHEN MATCHED THEN "
39-
+ " UPDATE SET ATTRIBUTE_BYTES = A.ATTRIBUTE_BYTES "
40-
+ "WHEN NOT MATCHED THEN "
41-
+ " INSERT (SESSION_PRIMARY_ID, ATTRIBUTE_NAME, ATTRIBUTE_BYTES) "
42-
+ " VALUES (A.SESSION_PRIMARY_ID, A.ATTRIBUTE_NAME, A.ATTRIBUTE_BYTES);";
43-
// @formatter:on
31+
private static final String CREATE_SESSION_ATTRIBUTE_QUERY = """
32+
MERGE INTO %TABLE_NAME%_ATTRIBUTES SA
33+
USING (
34+
VALUES (?, ?, ?)
35+
) A (SESSION_PRIMARY_ID, ATTRIBUTE_NAME, ATTRIBUTE_BYTES)
36+
ON (SA.SESSION_PRIMARY_ID = A.SESSION_PRIMARY_ID and SA.ATTRIBUTE_NAME = A.ATTRIBUTE_NAME)
37+
WHEN MATCHED THEN
38+
UPDATE SET ATTRIBUTE_BYTES = A.ATTRIBUTE_BYTES
39+
WHEN NOT MATCHED THEN
40+
INSERT (SESSION_PRIMARY_ID, ATTRIBUTE_NAME, ATTRIBUTE_BYTES)
41+
VALUES (A.SESSION_PRIMARY_ID, A.ATTRIBUTE_NAME, A.ATTRIBUTE_BYTES);
42+
""";
4443

4544
@Override
4645
public void customize(JdbcIndexedSessionRepository sessionRepository) {

0 commit comments

Comments
 (0)