diff --git a/db-engine/src/main/java/com/splicemachine/db/iapi/sql/dictionary/DataDictionary.java b/db-engine/src/main/java/com/splicemachine/db/iapi/sql/dictionary/DataDictionary.java index 54e2fffb6fd..b74d6d9328e 100644 --- a/db-engine/src/main/java/com/splicemachine/db/iapi/sql/dictionary/DataDictionary.java +++ b/db-engine/src/main/java/com/splicemachine/db/iapi/sql/dictionary/DataDictionary.java @@ -39,6 +39,8 @@ import com.splicemachine.db.iapi.sql.compile.Visitable; import com.splicemachine.db.iapi.sql.conn.LanguageConnectionContext; import com.splicemachine.db.iapi.sql.depend.DependencyManager; +import com.splicemachine.db.iapi.sql.depend.Dependent; +import com.splicemachine.db.iapi.sql.depend.Provider; import com.splicemachine.db.iapi.sql.execute.ExecRow; import com.splicemachine.db.iapi.sql.execute.ExecutionFactory; import com.splicemachine.db.iapi.store.access.TransactionController; @@ -2220,7 +2222,7 @@ PermDescriptor getGenericPermissions(UUID objectUUID, void deleteSnapshot(String snapshotName, long conglomeratenumber, TransactionController tc) throws StandardException; - boolean canUseDependencyManager(); + boolean canUseDependencyManager(Dependent d, Provider p); /** * Get default roles granted to a user diff --git a/db-engine/src/main/java/com/splicemachine/db/impl/sql/depend/BasicDependencyManager.java b/db-engine/src/main/java/com/splicemachine/db/impl/sql/depend/BasicDependencyManager.java index 88db096ec99..895c139c01d 100644 --- a/db-engine/src/main/java/com/splicemachine/db/impl/sql/depend/BasicDependencyManager.java +++ b/db-engine/src/main/java/com/splicemachine/db/impl/sql/depend/BasicDependencyManager.java @@ -110,25 +110,25 @@ public class BasicDependencyManager implements DependencyManager { // DependencyManager interface // - /** - adds a dependency from the dependent on the provider. - This will be considered to be the default type of - dependency, when dependency types show up. -
- Implementations of addDependency should be fast -- - performing alot of extra actions to add a dependency would - be a detriment. - - @param d the dependent - @param p the provider - - @exception StandardException thrown if something goes wrong - */ - public void addDependency(Dependent d, Provider p, ContextManager cm) throws StandardException { - if (dd.canUseDependencyManager()) { - addDependency(d, p, cm, null); - } - } + /** + adds a dependency from the dependent on the provider. + This will be considered to be the default type of + dependency, when dependency types show up. +
+ Implementations of checkAndAddDependency should be fast -- + performing alot of extra actions to add a dependency would + be a detriment. + + @param d the dependent + @param p the provider + + @exception StandardException thrown if something goes wrong + */ + public void addDependency(Dependent d, Provider p, ContextManager cm) throws StandardException { + if (dd.canUseDependencyManager(d, p)) { + addDependency(d, p, cm, null); + } + } /** * Adds the dependency to the data dictionary or the in-memory dependency @@ -147,13 +147,25 @@ public void addDependency(Dependent d, Provider p, ContextManager cm) throws Sta */ private void addDependency(Dependent d, Provider p, ContextManager cm, TransactionController tc) throws StandardException { // Dependencies are either in-memory or stored, but not both. - if (! d.isPersistent() || ! p.isPersistent()) { + if (!isPersistentDependency(d, p)) { addInMemoryDependency(d, p, cm); } else { addStoredDependency(d, p, cm, tc); } } + /** + * Tests whether a dependency is stored in the data dictionary + * or in the in-memory dependency map. + * + * @param d the dependent + * @param p the provider + * @return true if the dependent d, is stored in the data dictionary. + */ + public static boolean isPersistentDependency(Dependent d, Provider p) { + return d.isPersistent() && p.isPersistent(); + } + /** * Adds the dependency as an in-memory dependency. * diff --git a/db-engine/src/test/java/com/splicemachine/db/impl/sql/catalog/DataDictionaryImplTest.java b/db-engine/src/test/java/com/splicemachine/db/impl/sql/catalog/DataDictionaryImplTest.java index 46e66050355..072b333dba5 100644 --- a/db-engine/src/test/java/com/splicemachine/db/impl/sql/catalog/DataDictionaryImplTest.java +++ b/db-engine/src/test/java/com/splicemachine/db/impl/sql/catalog/DataDictionaryImplTest.java @@ -33,6 +33,8 @@ import com.splicemachine.db.catalog.UUID; import com.splicemachine.db.iapi.error.StandardException; +import com.splicemachine.db.iapi.sql.depend.Dependent; +import com.splicemachine.db.iapi.sql.depend.Provider; import com.splicemachine.db.iapi.sql.dictionary.*; import com.splicemachine.db.iapi.store.access.TransactionController; import com.splicemachine.db.iapi.types.DataTypeDescriptor; @@ -96,7 +98,7 @@ public boolean canReadCache(TransactionController xactMgr) throws StandardExcept } @Override - public boolean canUseDependencyManager() { + public boolean canUseDependencyManager(Dependent d, Provider p) { return false; } diff --git a/splice_machine/src/main/java/com/splicemachine/derby/impl/sql/catalog/SpliceDataDictionary.java b/splice_machine/src/main/java/com/splicemachine/derby/impl/sql/catalog/SpliceDataDictionary.java index 9f3361f7a7a..706863ea7a7 100644 --- a/splice_machine/src/main/java/com/splicemachine/derby/impl/sql/catalog/SpliceDataDictionary.java +++ b/splice_machine/src/main/java/com/splicemachine/derby/impl/sql/catalog/SpliceDataDictionary.java @@ -37,6 +37,7 @@ import com.splicemachine.db.iapi.services.sanity.SanityManager; import com.splicemachine.db.iapi.sql.conn.LanguageConnectionContext; import com.splicemachine.db.iapi.sql.depend.Dependent; +import com.splicemachine.db.iapi.sql.depend.Provider; import com.splicemachine.db.iapi.sql.dictionary.*; import com.splicemachine.db.iapi.sql.execute.ExecRow; import com.splicemachine.db.iapi.sql.execute.ScanQualifier; @@ -78,6 +79,7 @@ import java.util.stream.Collectors; import static com.splicemachine.db.impl.sql.catalog.SYSTABLESRowFactory.SYSTABLES_VIEW_IN_SYSIBM; +import static com.splicemachine.db.impl.sql.depend.BasicDependencyManager.isPersistentDependency; /** * @author Scott Fines @@ -1243,8 +1245,8 @@ public boolean canUseSPSCache() throws StandardException { } @Override - public boolean canUseDependencyManager() { - return !SpliceClient.isClient(); + public boolean canUseDependencyManager(Dependent d, Provider p) { + return !SpliceClient.isClient() || isPersistentDependency(d, p); } @Override diff --git a/splice_spark/src/test/scala/com/splicemachine/spark/splicemachine/triggers/TriggerIT.scala b/splice_spark/src/test/scala/com/splicemachine/spark/splicemachine/triggers/TriggerIT.scala index a2356597d71..44537f23aa4 100644 --- a/splice_spark/src/test/scala/com/splicemachine/spark/splicemachine/triggers/TriggerIT.scala +++ b/splice_spark/src/test/scala/com/splicemachine/spark/splicemachine/triggers/TriggerIT.scala @@ -70,8 +70,12 @@ class TriggerIT extends FunSuite with TestContext with Matchers { test("Test Insert with Trigger") { // Added for DB-10707 truncateTables createInsertTrigger + createUpdateStatementTrigger + splicemachineContext.insert( df, t1 ) + truncateTables splicemachineContext.insert( df, t1 ) dropInsertTrigger + dropUpdateStatementTrigger org.junit.Assert.assertEquals( contentOf(t1), contentOf(t2) ) } diff --git a/splice_spark2/src/test/scala/com/splicemachine/spark2/splicemachine/triggers/TriggerIT.scala b/splice_spark2/src/test/scala/com/splicemachine/spark2/splicemachine/triggers/TriggerIT.scala index b1f9480caaf..361cb151b05 100644 --- a/splice_spark2/src/test/scala/com/splicemachine/spark2/splicemachine/triggers/TriggerIT.scala +++ b/splice_spark2/src/test/scala/com/splicemachine/spark2/splicemachine/triggers/TriggerIT.scala @@ -70,8 +70,12 @@ class TriggerIT extends FunSuite with TestContext with Matchers { test("Test Insert with Trigger") { // Added for DB-10707 truncateTables createInsertTrigger + createUpdateStatementTrigger + splicemachineContext.insert( df, t1 ) + truncateTables splicemachineContext.insert( df, t1 ) dropInsertTrigger + dropUpdateStatementTrigger org.junit.Assert.assertEquals( contentOf(t1), contentOf(t2) ) }