From d996505674c1c47499d8e1b6c030209ec13c273a Mon Sep 17 00:00:00 2001 From: Tobias Hafner Date: Wed, 17 Jul 2024 22:53:25 +0200 Subject: [PATCH] Fix error on dropping document source --- .../org/polypheny/db/adapter/AdapterManager.java | 8 ++++++++ .../java/org/polypheny/db/ddl/DdlManagerImpl.java | 14 ++++++++++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/org/polypheny/db/adapter/AdapterManager.java b/core/src/main/java/org/polypheny/db/adapter/AdapterManager.java index ad7397fc39..384deed5b3 100644 --- a/core/src/main/java/org/polypheny/db/adapter/AdapterManager.java +++ b/core/src/main/java/org/polypheny/db/adapter/AdapterManager.java @@ -25,6 +25,7 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.NoSuchElementException; import java.util.Optional; import org.apache.calcite.linq4j.tree.Expression; import org.apache.calcite.linq4j.tree.Expressions; @@ -133,6 +134,13 @@ public Optional> getStore( long id ) { return getAdapter( id ).filter( a -> a instanceof DataStore ).map( a -> (DataStore) a ); } + public boolean isStore(long id) { + Optional> adapter = getAdapter( id ); + if (adapter.isEmpty()) { + throw new NoSuchElementException("No adapter registered under id: " + id); + } + return adapter.get() instanceof DataStore; + } public ImmutableMap> getStores() { Map> map = new HashMap<>(); diff --git a/dbms/src/main/java/org/polypheny/db/ddl/DdlManagerImpl.java b/dbms/src/main/java/org/polypheny/db/ddl/DdlManagerImpl.java index 09de8e24b3..0a65c17557 100644 --- a/dbms/src/main/java/org/polypheny/db/ddl/DdlManagerImpl.java +++ b/dbms/src/main/java/org/polypheny/db/ddl/DdlManagerImpl.java @@ -340,7 +340,9 @@ public void dropAdapter( String name, Statement statement ) { } if ( allocation.unwrap( AllocationCollection.class ).isPresent() ) { - dropCollection( catalog.getSnapshot().doc().getCollection( allocation.adapterId ).orElseThrow(), statement ); + //TODO: currently each document source creates its own namespace which can be disposed of together with the source + //dropNamespace( catalog.getSnapshot().doc().getCollection( allocation.logicalId ).orElseThrow().getNamespaceName(), true, statement); + dropCollection( catalog.getSnapshot().doc().getCollection( allocation.logicalId ).orElseThrow(), statement ); } else if ( allocation.unwrap( AllocationTable.class ).isPresent() ) { for ( LogicalForeignKey fk : catalog.getSnapshot().rel().getForeignKeys( allocation.logicalId ) ) { @@ -2232,6 +2234,7 @@ private void buildRelationalNamespace( long namespaceId, LogicalTable logical, A store.updateNamespace( logical.getNamespaceName(), namespaceId ); } + private void buildDocumentNamespace( long namespaceId, LogicalCollection logical, Adapter store ) { store.updateNamespace( logical.getNamespaceName(), namespaceId ); } @@ -2295,11 +2298,15 @@ public void dropCollection( LogicalCollection collection, Statement statement ) Snapshot snapshot = catalog.getSnapshot(); AdapterManager manager = AdapterManager.getInstance(); + boolean isSource = false; List allocations = snapshot.alloc().getFromLogical( collection.id ); for ( AllocationEntity allocation : allocations ) { - manager.getStore( allocation.adapterId ).orElseThrow().dropCollection( statement.getPrepareContext(), allocation.unwrap( AllocationCollection.class ).orElseThrow() ); - + if ( manager.isStore( allocation.adapterId ) ) { + manager.getStore( allocation.adapterId ).orElseThrow().dropCollection( statement.getPrepareContext(), allocation.unwrap( AllocationCollection.class ).orElseThrow() ); + } else { + manager.getSource( allocation.adapterId ).orElseThrow().dropCollection( statement.getPrepareContext(), allocation.unwrap( AllocationCollection.class ).orElseThrow() ); + } catalog.getAllocDoc( allocation.namespaceId ).removeAllocation( allocation.id ); catalog.getAllocDoc( allocation.namespaceId ).removePlacement( allocation.placementId ); } @@ -2307,7 +2314,6 @@ public void dropCollection( LogicalCollection collection, Statement statement ) catalog.getLogicalDoc( collection.namespaceId ).deleteCollection( collection.id ); catalog.updateSnapshot(); - // Reset plan cache implementation cache & routing cache statement.getQueryProcessor().resetCaches(); }