Skip to content

Implements Jakarta Persistence 3.2#144

Open
cristof wants to merge 211 commits into
masterfrom
OPENJPA-2940
Open

Implements Jakarta Persistence 3.2#144
cristof wants to merge 211 commits into
masterfrom
OPENJPA-2940

Conversation

@cristof
Copy link
Copy Markdown
Contributor

@cristof cristof commented May 16, 2026

Hi! This work is an effort to implement JPA 3.2. I've started it a long time ago. Richard Zowalla picked it up and, with AI help (Claude), implemented the missing features, including some JPA <3.0 that weren't implemented.
I've tested it against default database, h2, mariadb(lts) e postgresql (18).
Please, check it against your favorite DB so we may fix some edge cases. It would be great if you can run TCK to be sure of the implementations.

solomax and others added 30 commits July 8, 2025 09:13
* Updated tentative version to 4.2.0-SNAPSHOT
* Updated java version to 17
* Updating project to exclude almost all java.security deprecated calls
* Passes default profile tests, but fails with postgres
* Fixed some non-deterministic tests that fail with postgresql
* Tested and passed XML support using postgresql-17 as target db
* Replacing string number constructors
* Removing dangling SecurityContext references
* removed TestSecurityContext because it is terminally deprecated since 17 and already removed in current JDK versions
* updated h2-2 test profile jdbc url to remove strict definition
* updated openjpa-slice and openjpa-xmlstore pom system variables definitions
* updated GH actions workflows to use test-h2-2 profiles
* Project passes tests on derby, h2-2, postgres:latest, mysql:lts,
mariadb:lts
* Updated dependency version
* Added API new methods to API implementation classes with methods that
throw UnsupportedOperationException, except for four methods in
EntityManagerImpl that required proper implementations to pass tests
* Project is still passing tests on derby and postgresql, at least
* Added XML JPA 3.2 schema and definitions
* Added configuration support by 3.2 version
* Added SchemaManager impl and corresponding methods in BrokerFactory
interface
* Added concrete working (not for h2-2) implementation of SchemaManager
methods for JDBCBrokerFactory
* Added concrete working impl for EMF#getName()
* Reverting unnecessary changes
* Fixing broken map synchronization
* Changing signature of BrokerFactory API on schema dealing validate method
* Adding test to check if validate operation throws exception when it fails
* Changing GH CI workflow to allow usage of both self-hosted and GH hosted runners
* Tested on derby, h2-2, postgresql:latest, mysql:lts, mariadb:lts
* Implementing emf creation passing PersistenceConfiguration
* Removing unused import in BrokerImpl
* Implemented new PersistenceUnitUtil load methods
* Moved PUU loading tests to test unit already present
* Updated test unit to junit 4.x format
rzo1 and others added 18 commits April 21, 2026 13:56
…testing

MariaDB uses 3306. Putting MySQL on 3307 externally (still 3306 inside the
container) lets both run simultaneously on the same host, enabling parallel
cross-DB test runs.
…orts on MariaDB

MariaDB changed batch-failure reporting semantics between server 11.4
and 11.8 (with Connector/J 3.5.4 unchanged): 11.4 reports the actual
duplicate row, 11.8 reports the first row of the failing batch, same
as Oracle/Postgres. Commit 83e933a assumed per-row was the future
behaviour and removed the MariaDB branch; that assumption does not
hold on 11.8.

Restore the isMariaDB flag and broaden the MariaDB assertion to accept
either outcome, using the same pattern already in place for Oracle 18.
Verified green against MariaDB 11.4 and 11.8 under Connector/J 3.5.4.
mariadb:lts now resolves to 11.8 while our compose was pinned to 11.4,
causing drift between local runs and what reviewers / CI pull with the
lts tag. Pin to 11.8 explicitly so TestBatchLimitException and
friends exercise the current LTS behaviour by default.
MySQL 8.4 defaults users to caching_sha2_password. Connector/J refuses
to fetch the server's RSA public key over a non-TLS (useSSL=false)
connection unless allowPublicKeyRetrieval=true is set, so every test
currently fails with "Public Key Retrieval is not allowed". Add the
flag to the test URL so test-mysql-docker works out of the box against
the mysql:8.4 image we ship in docker-compose-test-mysql.yml.
…build matrix

On PostgreSQL 17+, binding a Java boolean into a SMALLINT column is
rejected without an explicit cast. The create-postgresql.sql script
declared CUSTMAPPC.FEMALE as SMALLINT, which leaked into the DB when
TestSchemaGenerationProperties.testSchemaGenScriptCreate ran before
TestEJBCustomMapping (filesystem-order dependent). Change FEMALE to
BOOLEAN so the script matches what PostgresDictionary would produce at
runtime (bitTypeName="BOOL").

Also add scripts/run-build-matrix.sh, which drives the dockerised
mariadb/mysql/pg17/pg18 matrix. It exports TZ=UTC before invoking
Maven so the JVM and the docker DB sessions agree on wall clock.
This prevents TestEJBQLFunction.testExtractHourFromLocalTime from
flaking when the host JVM default TZ differs from the PG session TZ
(e.g. Europe/Berlin host vs UTC container).
The non-ORDER-BY query "select e from Employee e where e.id < 10" with
OFFSET 1 may return either id=1 or id=2 depending on PG row order. The
test asserted both 'first.1' or 'first.2' for the result but then
hardcoded em2.find(Employee.class, 2, ...) which only blocks when em1
locked id=2. Lock whichever employee survived the OFFSET and pass that
id to em2.find so the test no longer depends on flush-order side effects
(seen on PG17 with supportsLockingWithOuterJoin=false where
@SequenceGenerators metadata loading shifted HashMap iteration).
xmlstore tests sometimes stamp the JDBC URL into a literal directory
name (e.g. openjpa-xmlstore/jdbc:mariadb:/), leaving the working tree
dirty between matrix runs. Sweep them up after each flavor's teardown.
…ublic API @SInCE 4.2.0

Address PR #142 review feedback from @cristof:

- Move 7 Criteria tests (testCriteriaUnion/UnionAll/Except/Intersect,
  testCriteriaNullPrecedence, testCriteriaListPredicates,
  testCriteriaConcatList) from TestEJBQLFunction.java into
  TestTypesafeCriteria.java with a self-contained seedCompUsers() helper.
- Add @SInCE 4.2.0 to new public classes introduced on this branch
  (Left/Right/Replace/TypecastAsNumber/TypecastAsString expression vals,
  ConverterElement/ValueHandler, TypecastAsNumberPart, EntityGraphMetaData,
  AttributeNodeImpl, EntityGraphImpl, SubgraphImpl, SchemaManagerImpl,
  RecordPersistenceCapable, CriteriaSelectImpl).
- Add @SInCE 4.2.0 to new public interface methods on BrokerFactory
  (createPersistenceStructure/dropPersistenceStrucuture/
  validatePersistenceStruture/truncateData) plus javadoc, on
  JDBCConfiguration (getSyncMappingsExcludeTypes/setSyncMappingsExcludeTypes),
  on ExpressionFactory (newTypecastAsString/newTypecastAsNumber/left/right/
  replace/getNativeObjectId/version), on XROP.setCursorOutParams, and
  on PersistenceProviderImpl.createEntityManagerFactory(PersistenceConfiguration).
- Drop misleading @SInCE tags from package-private CriteriaDeleteImpl /
  CriteriaUpdateImpl.
Per PR #142 review feedback, drop the @ignore annotation that was
added during TCK stabilization so the scheduler test runs again.
…rsion

Per PR #142 review feedback, only switch off the legacy "store CHAR
values as numbers" behavior when connected to a PostgreSQL release
that natively supports CHAR storage. The override is now applied in
connectedConfiguration() once the server major version is known
(>= 9), so older deployments still get the DBDictionary default.
…ision

The previous seedCompUsers() helper advanced the shared AUTO id
generator far enough on H2 that testLeft's next Person.id collided
with id=551 left over from TestTypedResults' 'Test Result Shape'
row, breaking the H2 PR-validation build.

Rewrite the seven moved Criteria tests so none of them persist
shared-table data:
- testCriteriaUnion / unionAll / except / intersect just execute
  the cb.union/etc. CriteriaSelect queries and assert a non-null
  result list.
- testCriteriaNullPrecedence / testCriteriaListPredicates /
  testCriteriaConcatList use assertEquivalence against an equivalent
  JPQL string, matching the rest of TestTypesafeCriteria.

Standalone TestTypesafeCriteria still passes 123/123 on Derby and
H2.
…eness

Per PR #142 review feedback, the new getSingleResultOrNull() only
needs to distinguish zero, one or more-than-one rows. Without a
row cap, JPQL queries like em.createQuery("select e from Entity e")
.getSingleResultOrNull() load every matching row just to throw
NonUniqueResultException.

Save the current max-results, lower it to 2 for the duration of
the call (preserving any tighter user-supplied limit), and restore
in finally. Detection semantics are unchanged — size() > 1 still
fires when more than one row matches.

Verified: TestGetSingleResultOrNull (5/5), TestQueryResults (24/24)
and TestQueryConvertPositionalParameters (5/5) pass on Derby.
@solomax
Copy link
Copy Markdown
Contributor

solomax commented May 18, 2026

Hello @cristof, All

sorry for being silent for too long (burden at day -time job :(( )

I've noticed these WARNINGS:

Java Compiler Compiler Version 5.0 (Tree Builder)
(type "jjtree" with no arguments for help)
Warning: Bad option value in "-JDK_VERSION=17" will be ignored.
Reading from file /home/solomax/work/_oss/openjpa/openjpa-kernel/src/main/jjtree/org/apache/openjpa/kernel/jpql/JPQL.jjt . . .
File "Node.java" does not exist.  Will create one.
File "JPQLTreeConstants.java" does not exist.  Will create one.
File "JJTJPQLState.java" does not exist.  Will create one.
Annotated grammar generated successfully in /home/solomax/work/_oss/openjpa/openjpa-kernel/target/javacc-1779085259067/node/JPQL.jj
Java Compiler Compiler Version 5.0 (Parser Generator)
(type "javacc" with no arguments for help)
Warning: Bad option value in "-JDK_VERSION=17" will be ignored.
Reading from file /home/solomax/work/_oss/openjpa/openjpa-kernel/target/javacc-1779085259067/node/JPQL.jj . . .
Warning: Choice conflict in (...)* construct at line 1053, column 17.
         Expansion nested within construct and expansion following construct
         have common prefixes, one of which is: "+"
         Consider using a lookahead of 2 or more for nested expansion.
Warning: Choice conflict in (...)* construct at line 1062, column 17.
         Expansion nested within construct and expansion following construct
         have common prefixes, one of which is: "*"
         Consider using a lookahead of 2 or more for nested expansion.
Warning: Choice conflict involving two expansions at
         line 1533, column 12 and line 1534, column 12 respectively.
         A common prefix is: "AVG" "("
         Consider using a lookahead of 3 or more for earlier expansion.
Warning: Choice conflict involving two expansions at
         line 1533, column 34 and line 1534, column 12 respectively.
         A common prefix is: <IDENTIFIER>
         Consider using a lookahead of 2 for earlier expansion.
File "TokenMgrError.java" does not exist.  Will create one.
File "ParseException.java" does not exist.  Will create one.
File "Token.java" does not exist.  Will create one.
File "JavaCharStream.java" does not exist.  Will create one.
Parser generated with 0 errors and 4 warnings.

Maybe Choice conflict in above need to be addressed?

@solomax
Copy link
Copy Markdown
Contributor

solomax commented May 18, 2026

Dockerized tests in postgres 11 fails:

[ERROR] Errors: 
[ERROR]   TestInputStreamLob>AbstractPersistenceTestCase.run:212->AbstractPersistenceTestCase.runBare:552->AbstractPersistenceTestCase.runBare:576->AbstractPersistenceTestCase.runTest:589->AbstractLobTest.testDataCache:221 » Rollback The transaction has been rolled back.  See the nested exceptions for details on the errors that occurred.
[ERROR]   TestInputStreamLob>AbstractPersistenceTestCase.run:212->AbstractPersistenceTestCase.runBare:552->AbstractPersistenceTestCase.runBare:576->AbstractPersistenceTestCase.runTest:589->AbstractLobTest.testDelete:156->AbstractLobTest.insert:73 » Rollback The transaction has been rolled back.  See the nested exceptions for details on the errors that occurred.
[ERROR]   TestInputStreamLob>AbstractPersistenceTestCase.run:212->AbstractPersistenceTestCase.runBare:552->AbstractPersistenceTestCase.runBare:576->AbstractPersistenceTestCase.runTest:589->AbstractLobTest.testInsert:78->AbstractLobTest.insert:73 » Rollback The transaction has been rolled back.  See the nested exceptions for details on the errors that occurred.
[ERROR]   TestInputStreamLob>AbstractPersistenceTestCase.run:212->AbstractPersistenceTestCase.runBare:552->AbstractPersistenceTestCase.runBare:576->AbstractPersistenceTestCase.runTest:589->AbstractLobTest.testInsertAndSelect:83->AbstractLobTest.insert:73 » Rollback The transaction has been rolled back.  See the nested exceptions for details on the errors that occurred.
[ERROR]   TestInputStreamLob>AbstractPersistenceTestCase.run:212->AbstractPersistenceTestCase.runBare:552->AbstractPersistenceTestCase.runBare:576->AbstractPersistenceTestCase.runTest:589->AbstractLobTest.testLifeCycleInsertFlushModify:176 » Persistence The transaction has been rolled back.  See the nested exceptions for details on the errors that occurred.
[ERROR]   TestInputStreamLob>AbstractPersistenceTestCase.run:212->AbstractPersistenceTestCase.runBare:552->AbstractPersistenceTestCase.runBare:576->AbstractPersistenceTestCase.runTest:589->AbstractLobTest.testLifeCycleLoadFlushModifyFlush:183->AbstractLobTest.insert:73 » Rollback The transaction has been rolled back.  See the nested exceptions for details on the errors that occurred.
[ERROR]   TestInputStreamLob>AbstractPersistenceTestCase.run:212->AbstractPersistenceTestCase.runBare:552->AbstractPersistenceTestCase.runBare:576->AbstractPersistenceTestCase.runTest:589->AbstractLobTest.testReadingMultipleTimesWithASingleConnection:196->AbstractLobTest.insert:73 » Rollback The transaction has been rolled back.  See the nested exceptions for details on the errors that occurred.
[ERROR]   TestInputStreamLob>AbstractPersistenceTestCase.run:212->AbstractPersistenceTestCase.runBare:552->AbstractPersistenceTestCase.runBare:576->AbstractPersistenceTestCase.runTest:589->AbstractLobTest.testSetFlushAndReset:256 » Persistence The transaction has been rolled back.  See the nested exceptions for details on the errors that occurred.
[ERROR]   TestInputStreamLob>AbstractPersistenceTestCase.run:212->AbstractPersistenceTestCase.runBare:552->AbstractPersistenceTestCase.runBare:576->AbstractPersistenceTestCase.runTest:589->AbstractLobTest.testSetResetAndFlush:240 » Persistence The transaction has been rolled back.  See the nested exceptions for details on the errors that occurred.
[ERROR]   TestInputStreamLob>AbstractPersistenceTestCase.run:212->AbstractPersistenceTestCase.runBare:552->AbstractPersistenceTestCase.runBare:576->AbstractPersistenceTestCase.runTest:589->AbstractLobTest.testUpdate:106->AbstractLobTest.insert:73 » Rollback The transaction has been rolled back.  See the nested exceptions for details on the errors that occurred.
[ERROR]   TestInputStreamLob>AbstractPersistenceTestCase.run:212->AbstractPersistenceTestCase.runBare:552->AbstractPersistenceTestCase.runBare:576->AbstractPersistenceTestCase.runTest:589->AbstractLobTest.testUpdateANullObjectWithoutNull:145 » Rollback The transaction has been rolled back.  See the nested exceptions for details on the errors that occurred.
[ERROR]   TestInputStreamLob>AbstractPersistenceTestCase.run:212->AbstractPersistenceTestCase.runBare:552->AbstractPersistenceTestCase.runBare:576->AbstractPersistenceTestCase.runTest:589->AbstractLobTest.testUpdateWithNull:123->AbstractLobTest.insert:73 » Rollback The transaction has been rolled back.  See the nested exceptions for details on the errors that occurred.
[INFO] 
[ERROR] Tests run: 3603, Failures: 0, Errors: 12, Skipped: 0

with stacktrace like this:

[ERROR] org.apache.openjpa.jdbc.meta.strats.TestInputStreamLob.testLifeCycleInsertFlushModify -- Time elapsed: 0.104 s <<< ERROR!
<openjpa-4.2.0-SNAPSHOT-r6871746 fatal general error> org.apache.openjpa.persistence.PersistenceException: The transaction has been rolled back.  See the nested exceptions for details on the errors that occurred.
	at org.apache.openjpa.kernel.BrokerImpl.newFlushException(BrokerImpl.java:2471)
	at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:2306)
	at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:2197)
	at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1960)
	at org.apache.openjpa.kernel.DelegatingBroker.flush(DelegatingBroker.java:1161)
	at org.apache.openjpa.persistence.EntityManagerImpl.flush(EntityManagerImpl.java:1047)
	at org.apache.openjpa.jdbc.meta.strats.AbstractLobTest.testLifeCycleInsertFlushModify(AbstractLobTest.java:176)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:569)
	at junit.framework.TestCase.runTest(TestCase.java:177)
	at org.apache.openjpa.persistence.test.AbstractPersistenceTestCase.runTest(AbstractPersistenceTestCase.java:589)
	at junit.framework.TestCase.runBare(TestCase.java:142)
	at org.apache.openjpa.persistence.test.AbstractPersistenceTestCase.runBare(AbstractPersistenceTestCase.java:576)
	at org.apache.openjpa.persistence.test.AbstractPersistenceTestCase.runBare(AbstractPersistenceTestCase.java:552)
	at junit.framework.TestResult$1.protect(TestResult.java:122)
	at junit.framework.TestResult.runProtected(TestResult.java:142)
	at junit.framework.TestResult.run(TestResult.java:125)
	at junit.framework.TestCase.run(TestCase.java:130)
	at org.apache.openjpa.persistence.test.AbstractPersistenceTestCase.run(AbstractPersistenceTestCase.java:212)
	at junit.framework.TestSuite.runTest(TestSuite.java:241)
	at junit.framework.TestSuite.run(TestSuite.java:236)
	at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:90)
	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:316)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:240)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:214)
	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:155)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:385)
	at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:162)
	at org.apache.maven.surefire.booter.ForkedBooter.run(ForkedBooter.java:507)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:495)
Caused by: <openjpa-4.2.0-SNAPSHOT-r6871746 fatal general error> org.apache.openjpa.persistence.PersistenceException: Exception flushing output stream
	at org.apache.openjpa.jdbc.sql.DBDictionary.narrow(DBDictionary.java:5524)
	at org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:5484)
	at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:134)
	at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:107)
	at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:59)
	at org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.populateRowManager(AbstractUpdateManager.java:190)
	at org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:100)
	at org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:81)
	at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:762)
	at org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:146)
	at org.apache.openjpa.datacache.DataCacheStoreManager.flush(DataCacheStoreManager.java:675)
	at org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:146)
	... 31 more
Caused by: org.postgresql.util.PSQLException: Exception flushing output stream
	at org.postgresql.largeobject.LargeObject.close(LargeObject.java:176)
	at org.apache.openjpa.jdbc.sql.PostgresDictionary.insertPostgresBlob(PostgresDictionary.java:854)
	at org.apache.openjpa.jdbc.sql.PostgresDictionary.insertBlobForStreamingLoad(PostgresDictionary.java:833)
	at org.apache.openjpa.jdbc.meta.strats.LobFieldStrategy.insert(LobFieldStrategy.java:107)
	at org.apache.openjpa.jdbc.meta.FieldMapping.insert(FieldMapping.java:652)
	at org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.insert(AbstractUpdateManager.java:243)
	at org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.populateRowManager(AbstractUpdateManager.java:170)
	... 37 more
Caused by: java.io.IOException: Can not flush large object 16,611
	at org.postgresql.largeobject.BlobOutputStream.flush(BlobOutputStream.java:217)
	at org.postgresql.largeobject.LargeObject.close(LargeObject.java:174)
	... 43 more
Caused by: org.postgresql.util.PSQLException: This large object has been closed.
	at org.postgresql.largeobject.LargeObject.checkClosed(LargeObject.java:85)
	at org.postgresql.largeobject.LargeObject.write(LargeObject.java:256)
	at org.postgresql.largeobject.BlobOutputStream.flush(BlobOutputStream.java:212)
	... 44 more

@solomax
Copy link
Copy Markdown
Contributor

solomax commented May 18, 2026

Hmmm, postgres 11 seems to be EoLed loooong time ago ...
I'm now testing at postgres 16

@cristof
Copy link
Copy Markdown
Contributor Author

cristof commented May 18, 2026

@solomax , I tested against pg-18 and it passed.
I 've got some issues with mysql 9.4+ (lts) because LIBRARY became a reserved word and we got some tests where Library is the name of entity. Digging the code, found that DBDictionary has a namingRules field, but I couldn't find where exactly it is used. Adding LIBRARY to MySQLDictionary reservedWords list didn't do much. Can you give me some directions?

@solomax
Copy link
Copy Markdown
Contributor

solomax commented May 18, 2026

Unfortunately I'm not really expert in OpenJPA :(
I'll try to debug and will report back

@solomax
Copy link
Copy Markdown
Contributor

solomax commented May 18, 2026

Postgres 16 also fails :( Same exception
I'll try to check

@rzo1
Copy link
Copy Markdown

rzo1 commented May 18, 2026

@solomax Did you try the docker compose + scripts I added to the branch? My Linux VDI was happy with 17/18 but might be good to check older versions as well... - the complexity is in all of these different dbms versions, I guess :(

@solomax
Copy link
Copy Markdown
Contributor

solomax commented May 18, 2026

nope :(
I'll try to compare your script with what we have already :)
Thanks for the pointer

~800 files changed ... tests are the only hope :))

@solomax
Copy link
Copy Markdown
Contributor

solomax commented May 19, 2026

Hello @rzo1,
I've checked docker compose files, they seems to be very similar to existing dockerized VMs currently stored in pom.xml :)
IMO maven versions are better due to it is possible to change DB version in command line:
mvn -N -Ptest-postgresql-docker -Dpostgresql.server.version=16.4 docker:start
:)

All: I was able to fix my postgres issues, the build is green at postgres 11 (not sure why it is broken :( maybe due to postgres driver update ...)

I'll continue my testing and will report back

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants