From 40c239b483e82f359f1527f92aac04c9bb461301 Mon Sep 17 00:00:00 2001
From: Valery Kharseko <vharseko@3a-systems.ru>
Date: Thu, 20 Aug 2026 08:35:27 +0000
Subject: [PATCH] [#885] Ask the catalog for the table of a tree by name (#886)
---
opendj-server-legacy/src/test/java/org/opends/server/backends/jdbc/TestCase.java | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 51 insertions(+), 0 deletions(-)
diff --git a/opendj-server-legacy/src/test/java/org/opends/server/backends/jdbc/TestCase.java b/opendj-server-legacy/src/test/java/org/opends/server/backends/jdbc/TestCase.java
index 472f62f..f7ad4ec 100644
--- a/opendj-server-legacy/src/test/java/org/opends/server/backends/jdbc/TestCase.java
+++ b/opendj-server-legacy/src/test/java/org/opends/server/backends/jdbc/TestCase.java
@@ -139,6 +139,57 @@
}
/**
+ * openTree() and deleteTree() ask the catalog whether the table of a tree is there. The name is
+ * looked up in the form the catalog stores it - an unquoted identifier is folded to upper case
+ * on oracle and to lower case on postgresql - so getting that wrong makes a second open try to
+ * create a table that is already there, and a second delete drop one that is already gone (#885).
+ */
+ @Test
+ public void testTableOfATreeIsFoundByName() throws Exception {
+ final JDBCStorage storage = new JDBCStorage(createBackendCfg(), null);
+ final TreeName tree = new TreeName("testCatalogLookup", "tree");
+ try {
+ storage.open(AccessMode.READ_WRITE);
+ storage.write(new WriteOperation() {
+ @Override
+ public void run(WriteableTransaction txn) throws Exception {
+ txn.openTree(tree, true);
+ txn.put(tree, key(1), value(1));
+ }
+ });
+ // the table is there now: opening the tree again must find it, not create it a second time
+ storage.write(new WriteOperation() {
+ @Override
+ public void run(WriteableTransaction txn) throws Exception {
+ txn.openTree(tree, true);
+ }
+ });
+ assertEquals(storage.read(new ReadOperation<ByteString>() {
+ @Override
+ public ByteString run(ReadableTransaction txn) throws Exception {
+ return txn.read(tree, key(1));
+ }
+ }), value(1));
+
+ storage.write(new WriteOperation() {
+ @Override
+ public void run(WriteableTransaction txn) throws Exception {
+ txn.deleteTree(tree);
+ }
+ });
+ // and gone now: deleting it again must find nothing rather than drop what is not there
+ storage.write(new WriteOperation() {
+ @Override
+ public void run(WriteableTransaction txn) throws Exception {
+ txn.deleteTree(tree);
+ }
+ });
+ } finally {
+ storage.close();
+ }
+ }
+
+ /**
* Forward repositioning inside the already-fetched batch must be served from the buffer without SQL,
* and batch sizes must grow from "fetchsize.initial" to "fetchsize" on sequential reads (#860).
*/
--
Gitblit v1.10.0