Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DB-12303 Fix corrupted trigger after NSDS DML: DB-6516 regression #5694

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -2261,7 +2263,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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ public class BasicDependencyManager implements DependencyManager {
@exception StandardException thrown if something goes wrong
*/
public void addDependency(Dependent d, Provider p, ContextManager cm) throws StandardException {
if (dd.canUseDependencyManager()) {
if (dd.canUseDependencyManager(d, p)) {
addDependency(d, p, cm, null);
}
}
Expand All @@ -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.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -100,7 +102,7 @@ public boolean canReadCache(TransactionController xactMgr) throws StandardExcept
}

@Override
public boolean canUseDependencyManager() {
public boolean canUseDependencyManager(Dependent d, Provider p) {
return false;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@
import com.splicemachine.db.iapi.services.monitor.Monitor;
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.ExecutionContext;
Expand Down Expand Up @@ -74,6 +76,8 @@
import java.util.function.Function;
import java.util.stream.Collectors;

import static com.splicemachine.db.impl.sql.depend.BasicDependencyManager.isPersistentDependency;

/**
* @author Scott Fines
* Created on: 2/28/13
Expand Down Expand Up @@ -955,8 +959,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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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) )
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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) )
}

Expand Down