Skip to content

Commit 72a6447

Browse files
committed
QUARKUS-3363 - Disable JDBC Metadata Defaults in quarkus
Handle Hibernate's `DialectSpecificSettings` as supported Quarkus settings - test for mariadb
1 parent efb106e commit 72a6447

File tree

5 files changed

+128
-0
lines changed

5 files changed

+128
-0
lines changed
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package io.quarkus.it.jpa.mariadb;
2+
3+
import org.hibernate.dialect.MariaDBDialect;
4+
5+
public class OfflineDialectDescriptor {
6+
private Integer bytesPerCharacter;
7+
private Boolean noBackslashEscapes;
8+
private String storageEngine;
9+
10+
public OfflineDialectDescriptor(MariaDBDialect dialect, String storageEngine) {
11+
this(
12+
determineBytesPerCharacter(dialect),
13+
dialect.isNoBackslashEscapesEnabled(),
14+
storageEngine);
15+
}
16+
17+
private static Integer determineBytesPerCharacter(MariaDBDialect dialect) {
18+
if (dialect.getMaxVarcharLength() == 65_535) {
19+
return 1;
20+
}
21+
if (dialect.getMaxVarcharLength() == 32_767) {
22+
return 2;
23+
}
24+
if (dialect.getMaxVarcharLength() == 21_844) {
25+
return 3;
26+
}
27+
return 4;
28+
}
29+
30+
public OfflineDialectDescriptor(Integer bytesPerCharacter, Boolean noBackslashEscapes, String storageEngine) {
31+
this.bytesPerCharacter = bytesPerCharacter;
32+
this.noBackslashEscapes = noBackslashEscapes;
33+
this.storageEngine = storageEngine;
34+
}
35+
36+
public Integer getBytesPerCharacter() {
37+
return bytesPerCharacter;
38+
}
39+
40+
public void setBytesPerCharacter(Integer bytesPerCharacter) {
41+
this.bytesPerCharacter = bytesPerCharacter;
42+
}
43+
44+
public Boolean getNoBackslashEscapes() {
45+
return noBackslashEscapes;
46+
}
47+
48+
public void setNoBackslashEscapes(Boolean noBackslashEscapes) {
49+
this.noBackslashEscapes = noBackslashEscapes;
50+
}
51+
52+
public String getStorageEngine() {
53+
return storageEngine;
54+
}
55+
56+
public void setStorageEngine(String storageEngine) {
57+
this.storageEngine = storageEngine;
58+
}
59+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package io.quarkus.it.jpa.mariadb;
2+
3+
import java.io.IOException;
4+
5+
import jakarta.inject.Inject;
6+
import jakarta.ws.rs.GET;
7+
import jakarta.ws.rs.Path;
8+
import jakarta.ws.rs.Produces;
9+
import jakarta.ws.rs.core.MediaType;
10+
11+
import org.hibernate.SessionFactory;
12+
import org.hibernate.cfg.AvailableSettings;
13+
import org.hibernate.dialect.MariaDBDialect;
14+
import org.hibernate.engine.spi.SessionFactoryImplementor;
15+
16+
import io.quarkus.hibernate.orm.PersistenceUnit;
17+
18+
@Path("/offline/dialect")
19+
@Produces(MediaType.APPLICATION_JSON)
20+
public class OfflineDialectEndpoint {
21+
@Inject
22+
@PersistenceUnit("offline")
23+
SessionFactory sessionFactory;
24+
25+
@GET
26+
public OfflineDialectDescriptor test() throws IOException {
27+
return new OfflineDialectDescriptor(
28+
(MariaDBDialect) sessionFactory.unwrap(SessionFactoryImplementor.class).getJdbcServices().getDialect(),
29+
(String) sessionFactory.unwrap(SessionFactoryImplementor.class)
30+
.getProperties()
31+
.get(AvailableSettings.STORAGE_ENGINE));
32+
}
33+
}

integration-tests/jpa-mariadb/src/main/resources/application.properties

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,12 @@ quarkus.datasource.password=hibernate_orm_test
44
quarkus.datasource.jdbc.url=${mariadb.url}
55
quarkus.datasource.jdbc.max-size=2
66
quarkus.hibernate-orm.database.generation=drop-and-create
7+
quarkus.hibernate-orm.packages=io.quarkus.it.jpa.mariadb
8+
9+
quarkus.datasource."offline".db-kind=mariadb
10+
quarkus.datasource."offline".db-version=12.0
11+
quarkus.hibernate."offline".mariadb.bytesPerCharacter=1
12+
quarkus.hibernate."offline".mariadb.noBackslashEscapes=true
13+
quarkus.hibernate."offline".mariadb.storageEngine=MY_CUSTOM_ENGINE
14+
quarkus.hibernate-orm."offline".datasource=offline
15+
quarkus.hibernate-orm."offline".packages=io.quarkus.it.jpa.mariadb
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package io.quarkus.it.jpa.mariadb;
2+
3+
import io.quarkus.test.junit.QuarkusIntegrationTest;
4+
5+
@QuarkusIntegrationTest
6+
public class OfflineInGraalITCase extends OfflineTest {
7+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package io.quarkus.it.jpa.mariadb;
2+
3+
import static org.hamcrest.Matchers.containsString;
4+
5+
import org.junit.jupiter.api.Test;
6+
7+
import io.quarkus.test.junit.QuarkusTest;
8+
import io.restassured.RestAssured;
9+
10+
@QuarkusTest
11+
public class OfflineTest {
12+
13+
@Test
14+
public void testJPAFunctionalityFromServlet() throws Exception {
15+
RestAssured.when().get("/offline/dialect").then().body(
16+
containsString("bytesPerCharacter: 1"),
17+
containsString("noBackslashEscapes: true"),
18+
containsString("storageEngine: MY_CUSTOM_ENGINE"));
19+
}
20+
}

0 commit comments

Comments
 (0)