Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/bugzilla/Bugzilla_351068_Test.java')
-rw-r--r--plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/bugzilla/Bugzilla_351068_Test.java224
1 files changed, 224 insertions, 0 deletions
diff --git a/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/bugzilla/Bugzilla_351068_Test.java b/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/bugzilla/Bugzilla_351068_Test.java
new file mode 100644
index 0000000000..3c8fa768ae
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/bugzilla/Bugzilla_351068_Test.java
@@ -0,0 +1,224 @@
+/*
+ * Copyright (c) 2012, 2013, 2016 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.db.bugzilla;
+
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.server.db.IDBStore;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.spi.server.InternalRepository;
+import org.eclipse.emf.cdo.tests.AbstractCDOTest;
+import org.eclipse.emf.cdo.tests.config.IRepositoryConfig;
+import org.eclipse.emf.cdo.tests.config.impl.ConfigTest.Skips;
+import org.eclipse.emf.cdo.tests.model1.Company;
+import org.eclipse.emf.cdo.tests.model1.Customer;
+import org.eclipse.emf.cdo.tests.model1.SalesOrder;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+import org.eclipse.emf.cdo.util.CDOUtil;
+import org.eclipse.emf.cdo.util.ObjectNotFoundException;
+
+import org.eclipse.net4j.db.DBUtil;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+/**
+ * Bug 351068 [DB] Consider deleting old revisions when audits disabled
+ *
+ * @author Eike Stepper
+ */
+@Skips({ IRepositoryConfig.CAPABILITY_AUDITING, "DB.inverse.lists" })
+public class Bugzilla_351068_Test extends AbstractCDOTest
+{
+ @CleanRepositoriesBefore(reason = "Row counting")
+ public void testDelete() throws Exception
+ {
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOResource resource = transaction.createResource(getResourcePath("/my/resource"));
+
+ Company company = getModel1Factory().createCompany();
+ resource.getContents().add(company);
+ transaction.commit();
+
+ assertEquals(1, countRows("MODEL1_COMPANY"));
+ assertEquals(5, countRows("CDO_OBJECTS"));
+
+ final URI uriC1 = EcoreUtil.getURI(company);
+ final CDOID id = CDOUtil.getCDOObject(company).cdoID();
+ assertEquals(company, transaction.getResourceSet().getEObject(uriC1, false));
+
+ resource.getContents().remove(company);
+ assertTransient(company);
+ assertSame(company, CDOUtil.getEObject(transaction.getObject(id)));
+ assertSame(company, transaction.getResourceSet().getEObject(uriC1, false));
+
+ transaction.commit();
+ assertTransient(company);
+
+ try
+ {
+ transaction.getObject(id);
+ fail("ObjectNotFoundException expected");
+ }
+ catch (ObjectNotFoundException expected)
+ {
+ // SUCCESS
+ }
+
+ assertNull(transaction.getResourceSet().getEObject(uriC1, false));
+ assertEquals(0, countRows("MODEL1_COMPANY"));
+ assertEquals(4, countRows("CDO_OBJECTS"));
+ }
+
+ @CleanRepositoriesBefore(reason = "Row counting")
+ public void testDeleteWithChildren() throws Exception
+ {
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOResource resource = transaction.createResource(getResourcePath("/my/resource"));
+
+ Company company = getModel1Factory().createCompany();
+ company.getCategories().add(getModel1Factory().createCategory());
+ company.getCategories().add(getModel1Factory().createCategory());
+ company.getCategories().add(getModel1Factory().createCategory());
+ resource.getContents().add(company);
+ transaction.commit();
+
+ assertEquals(1, countRows("MODEL1_COMPANY"));
+ assertEquals(3, countRows("MODEL1_COMPANY_CATEGORIES_LIST"));
+ assertEquals(3, countRows("MODEL1_CATEGORY"));
+ assertEquals(8, countRows("CDO_OBJECTS"));
+
+ final URI uriC1 = EcoreUtil.getURI(company);
+ final CDOID id = CDOUtil.getCDOObject(company).cdoID();
+ assertEquals(company, transaction.getResourceSet().getEObject(uriC1, false));
+
+ resource.getContents().remove(company);
+ assertTransient(company);
+ assertSame(company, CDOUtil.getEObject(transaction.getObject(id)));
+ assertSame(company, transaction.getResourceSet().getEObject(uriC1, false));
+
+ transaction.commit();
+ assertTransient(company);
+
+ try
+ {
+ transaction.getObject(id);
+ fail("ObjectNotFoundException expected");
+ }
+ catch (ObjectNotFoundException expected)
+ {
+ // SUCCESS
+ }
+
+ assertNull(transaction.getResourceSet().getEObject(uriC1, false));
+ assertEquals(0, countRows("MODEL1_COMPANY"));
+ assertEquals(0, countRows("MODEL1_COMPANY_CATEGORIES_LIST"));
+ assertEquals(0, countRows("MODEL1_CATEGORY"));
+ assertEquals(4, countRows("CDO_OBJECTS"));
+ }
+
+ @CleanRepositoriesBefore(reason = "Row counting")
+ public void testDeleteWithReferences() throws Exception
+ {
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOResource resource = transaction.createResource(getResourcePath("/my/resource"));
+
+ Company company = getModel1Factory().createCompany();
+ Customer customer = getModel1Factory().createCustomer();
+ SalesOrder salesOrder1 = getModel1Factory().createSalesOrder();
+ SalesOrder salesOrder2 = getModel1Factory().createSalesOrder();
+ SalesOrder salesOrder3 = getModel1Factory().createSalesOrder();
+
+ customer.getSalesOrders().add(salesOrder1);
+ customer.getSalesOrders().add(salesOrder2);
+ customer.getSalesOrders().add(salesOrder3);
+
+ company.getCustomers().add(customer);
+ company.getSalesOrders().add(salesOrder1);
+ company.getSalesOrders().add(salesOrder2);
+ company.getSalesOrders().add(salesOrder3);
+ resource.getContents().add(company);
+ transaction.commit();
+
+ assertEquals(1, countRows("MODEL1_COMPANY"));
+ assertEquals(1, countRows("MODEL1_CUSTOMER"));
+ assertEquals(3, countRows("MODEL1_CUSTOMER_SALESORDERS_LIST"));
+ assertEquals(3, countRows("MODEL1_SALESORDER"));
+ assertEquals(9, countRows("CDO_OBJECTS"));
+
+ final URI uriC1 = EcoreUtil.getURI(company);
+ final CDOID id = CDOUtil.getCDOObject(company).cdoID();
+ assertEquals(company, transaction.getResourceSet().getEObject(uriC1, false));
+
+ resource.getContents().remove(company);
+ assertTransient(company);
+ assertSame(company, CDOUtil.getEObject(transaction.getObject(id)));
+ assertSame(company, transaction.getResourceSet().getEObject(uriC1, false));
+
+ transaction.commit();
+ assertTransient(company);
+
+ try
+ {
+ transaction.getObject(id);
+ fail("ObjectNotFoundException expected");
+ }
+ catch (ObjectNotFoundException expected)
+ {
+ // SUCCESS
+ }
+
+ assertNull(transaction.getResourceSet().getEObject(uriC1, false));
+ assertEquals(0, countRows("MODEL1_COMPANY"));
+ assertEquals(0, countRows("MODEL1_CUSTOMER"));
+ assertEquals(0, countRows("MODEL1_CUSTOMER_SALESORDERS_LIST"));
+ assertEquals(0, countRows("MODEL1_SALESORDER"));
+ assertEquals(4, countRows("CDO_OBJECTS"));
+ }
+
+ private int countRows(String table) throws SQLException
+ {
+ Connection connection = null;
+ Statement statement = null;
+ ResultSet resultSet = null;
+
+ try
+ {
+ InternalRepository repository = getRepository();
+ IDBStore store = (IDBStore)repository.getStore();
+
+ connection = store.getConnection();
+ statement = connection.createStatement();
+ resultSet = statement.executeQuery("SELECT COUNT(1) FROM " + table);
+
+ if (resultSet.next())
+ {
+ return resultSet.getInt(1);
+ }
+
+ return 0;
+ }
+ finally
+ {
+ DBUtil.close(resultSet);
+ DBUtil.close(statement);
+ DBUtil.close(connection);
+ }
+ }
+}

Back to the top