| /* |
| * Copyright (c) 2009-2013 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: |
| * Stefan Winkler - initial API and implementation |
| * Eike Stepper - maintenance |
| */ |
| package org.eclipse.emf.cdo.tests.db; |
| |
| import org.eclipse.emf.cdo.common.model.EMFUtil; |
| import org.eclipse.emf.cdo.eresource.CDOResource; |
| import org.eclipse.emf.cdo.session.CDOSession; |
| import org.eclipse.emf.cdo.tests.AbstractCDOTest; |
| import org.eclipse.emf.cdo.tests.model1.Company; |
| import org.eclipse.emf.cdo.tests.model1.Model1Factory; |
| import org.eclipse.emf.cdo.tests.model1.PurchaseOrder; |
| import org.eclipse.emf.cdo.transaction.CDOTransaction; |
| import org.eclipse.emf.cdo.util.CDOUtil; |
| import org.eclipse.emf.cdo.util.CommitException; |
| import org.eclipse.emf.cdo.view.CDOView; |
| |
| import org.eclipse.net4j.db.DBUtil; |
| import org.eclipse.net4j.db.jdbc.DelegatingConnection; |
| import org.eclipse.net4j.util.WrappedException; |
| import org.eclipse.net4j.util.security.IUserAware; |
| |
| import org.eclipse.emf.ecore.EAttribute; |
| import org.eclipse.emf.ecore.EClass; |
| import org.eclipse.emf.ecore.EDataType; |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.emf.ecore.EPackage; |
| import org.eclipse.emf.ecore.EcoreFactory; |
| import org.eclipse.emf.ecore.EcorePackage; |
| import org.eclipse.emf.ecore.util.EcoreUtil; |
| |
| import java.sql.Connection; |
| import java.util.GregorianCalendar; |
| import java.util.List; |
| |
| import oracle.jdbc.pool.OracleDataSource; |
| |
| /** |
| * @author Stefan Winkler |
| */ |
| public class DBStoreTest extends AbstractCDOTest |
| { |
| public static void main(String[] args) throws Exception |
| { |
| Connection connection = null; |
| |
| try |
| { |
| final String userName = "test_repo1"; |
| OracleDataSource dataSource = OracleConfig.createDataSourceForUser(userName); |
| |
| class UserConnection extends DelegatingConnection.Default implements IUserAware |
| { |
| public UserConnection(Connection delegate) |
| { |
| super(delegate); |
| } |
| |
| public String getUserID() |
| { |
| return userName; |
| } |
| } |
| |
| connection = new UserConnection(dataSource.getConnection()); |
| |
| List<String> names = DBUtil.getAllTableNames(connection, null); |
| System.out.println(names); |
| } |
| finally |
| { |
| DBUtil.close(connection); |
| } |
| } |
| |
| // Bug 256462 |
| public void testInsertNull() throws Exception |
| { |
| CDOSession s = openSession(); |
| CDOTransaction t = s.openTransaction(); |
| CDOResource r = t.createResource(getResourcePath("/dbStoreTest")); |
| |
| Company c = Model1Factory.eINSTANCE.createCompany(); |
| c.setName(null); |
| r.getContents().add(c); |
| |
| t.commit(); |
| } |
| |
| public void testStoreStringTrailingBackslash() |
| { |
| storeRetrieve("foobar\\"); |
| } |
| |
| public void testStoreStringContainingBackslash() |
| { |
| storeRetrieve("foo\\bar"); |
| } |
| |
| public void testStoreStringTrailingSingleQuote() |
| { |
| storeRetrieve("foobar'"); |
| } |
| |
| public void testStoreStringContainingSingleQuote() |
| { |
| storeRetrieve("foo'bar"); |
| } |
| |
| public void testStoreStringTrailingDoubleQuote() |
| { |
| storeRetrieve("foobar\""); |
| } |
| |
| public void testStoreStringContainingDoubleQuote() |
| { |
| storeRetrieve("foo\"bar"); |
| } |
| |
| public void testStoreStringTrailingTwoSingleQuote() |
| { |
| storeRetrieve("foobar''"); |
| } |
| |
| public void testStoreStringContainingTwoSingleQuote() |
| { |
| storeRetrieve("foo''bar"); |
| } |
| |
| // Bug 217255 |
| public void testStoreDate() throws CommitException |
| { |
| CDOSession session = openSession(); |
| CDOTransaction transaction = session.openTransaction(); |
| CDOResource resource = transaction.getOrCreateResource(getResourcePath("/test")); |
| |
| PurchaseOrder o = Model1Factory.eINSTANCE.createPurchaseOrder(); |
| o.setDate(new GregorianCalendar(2008, 11, 24, 12, 34, 56).getTime()); |
| |
| resource.getContents().add(o); |
| transaction.commit(); |
| |
| transaction.close(); |
| session.close(); |
| clearCache(getRepository().getRevisionManager()); |
| |
| session = openSession(); |
| CDOView view = session.openView(); |
| resource = view.getResource(getResourcePath("/test")); |
| |
| assertEquals(1, resource.getContents().size()); |
| o = (PurchaseOrder)resource.getContents().get(0); |
| assertEquals(new GregorianCalendar(2008, 11, 24, 12, 34, 56).getTime(), o.getDate()); |
| } |
| |
| public void testStoreCustom() throws CommitException |
| { |
| EPackage pkg = createUniquePackage(); |
| |
| EDataType dt = EcoreFactory.eINSTANCE.createEDataType(); |
| dt.setName("custom"); |
| dt.setInstanceClass(Custom.class); |
| pkg.getEClassifiers().add(dt); |
| |
| EClass clz = EMFUtil.createEClass(pkg, "customClass", false, false); |
| EAttribute att = EMFUtil.createEAttribute(clz, "customAtt", dt); |
| |
| Custom cust1 = new Custom(2, 5); |
| Custom cust1ref = new Custom(2, 5); |
| Custom cust2 = new Custom(5, 2); |
| Custom cust2ref = new Custom(5, 2); |
| |
| assertEquals(cust1ref, cust1); |
| assertEquals(cust2ref, cust2); |
| if (!isConfig(LEGACY)) |
| { |
| CDOUtil.prepareDynamicEPackage(pkg); |
| } |
| |
| { |
| EObject obj1 = EcoreUtil.create(clz); |
| EObject obj2 = EcoreUtil.create(clz); |
| |
| obj1.eSet(att, cust1); |
| obj2.eSet(att, cust2); |
| |
| CDOSession session = openSession(); |
| session.getPackageRegistry().putEPackage(pkg); |
| CDOTransaction transaction = session.openTransaction(); |
| CDOResource resource = transaction.createResource(getResourcePath("/test")); |
| resource.getContents().add(obj1); |
| resource.getContents().add(obj2); |
| transaction.commit(); |
| transaction.close(); |
| session.close(); |
| } |
| |
| clearCache(getRepository().getRevisionManager()); |
| |
| { |
| CDOSession session = openSession(); |
| session.getPackageRegistry().putEPackage(pkg); |
| CDOView view = session.openView(); |
| CDOResource resource = view.getResource(getResourcePath("/test")); |
| |
| assertEquals(2, resource.getContents().size()); |
| |
| EObject obj1 = resource.getContents().get(0); |
| EObject obj2 = resource.getContents().get(1); |
| |
| assertEquals(cust1ref, obj1.eGet(att)); |
| assertEquals(cust2ref, obj2.eGet(att)); |
| |
| view.close(); |
| session.close(); |
| } |
| |
| } |
| |
| public static class Custom |
| { |
| private int first; |
| |
| private int second; |
| |
| public Custom(String emfString) |
| { |
| int sep = emfString.indexOf('!'); |
| first = Integer.parseInt(emfString.substring(0, sep)); |
| second = Integer.parseInt(emfString.substring(sep + 1)); |
| } |
| |
| public Custom(int first, int second) |
| { |
| this.first = first; |
| this.second = second; |
| } |
| |
| public int getFirst() |
| { |
| return first; |
| } |
| |
| public int getSecond() |
| { |
| return second; |
| } |
| |
| @Override |
| public boolean equals(Object other) |
| { |
| if (other instanceof Custom) |
| { |
| return first == ((Custom)other).first && second == ((Custom)other).second; |
| } |
| |
| return false; |
| } |
| |
| @Override |
| public int hashCode() |
| { |
| return (first + 3 * second) % 65536; |
| } |
| |
| // ------------------------------------------- |
| // - EMF String serialization |
| @Override |
| public String toString() |
| { |
| return Integer.valueOf(first) + "!" + Integer.valueOf(second); |
| } |
| |
| public static Custom valueOf(String s) |
| { |
| return new Custom(s); |
| } |
| } |
| |
| private void storeRetrieve(String s) |
| { |
| CDOSession session = openSession(); |
| CDOTransaction transaction = session.openTransaction(); |
| CDOResource resource = transaction.getOrCreateResource(getResourcePath("/test")); |
| |
| Company e = Model1Factory.eINSTANCE.createCompany(); |
| e.setName(s); |
| // this escapes only the string! |
| // resulting string only contains one backslash |
| |
| resource.getContents().add(e); |
| |
| try |
| { |
| transaction.commit(); |
| } |
| catch (CommitException ex) |
| { |
| throw WrappedException.wrap(ex); |
| } |
| |
| transaction.close(); |
| session.close(); |
| clearCache(getRepository().getRevisionManager()); |
| |
| session = openSession(); |
| CDOView view = session.openView(); |
| resource = view.getResource(getResourcePath("/test")); |
| |
| assertEquals(1, resource.getContents().size()); |
| e = (Company)resource.getContents().get(0); |
| assertEquals(s, e.getName()); |
| } |
| |
| public void testUnderscoreFeature() throws Exception |
| { |
| EPackage pkg = createUniquePackage(); |
| EClass cls = EMFUtil.createEClass(pkg, "foo", false, false); |
| EAttribute att = EMFUtil.createEAttribute(cls, "_bar", EcorePackage.eINSTANCE.getEString()); |
| |
| if (!isConfig(LEGACY)) |
| { |
| CDOUtil.prepareDynamicEPackage(pkg); |
| } |
| |
| CDOSession session = openSession(); |
| CDOTransaction transaction = session.openTransaction(); |
| CDOResource resource = transaction.createResource(getResourcePath("/test")); |
| |
| EObject foo = EcoreUtil.create(cls); |
| foo.eSet(att, "foobar"); |
| resource.getContents().add(foo); |
| transaction.commit(); |
| session.close(); |
| } |
| |
| public void testUnderscoreClass() throws Exception |
| { |
| EPackage pkg = createUniquePackage(); |
| EClass cls = EMFUtil.createEClass(pkg, "foo", false, false); |
| EAttribute att = EMFUtil.createEAttribute(cls, "_bar", EcorePackage.eINSTANCE.getEString()); |
| |
| if (!isConfig(LEGACY)) |
| { |
| CDOUtil.prepareDynamicEPackage(pkg); |
| } |
| |
| CDOSession session = openSession(); |
| CDOTransaction transaction = session.openTransaction(); |
| CDOResource resource = transaction.createResource(getResourcePath("/test")); |
| |
| EObject foo = EcoreUtil.create(cls); |
| foo.eSet(att, "foobar"); |
| resource.getContents().add(foo); |
| transaction.commit(); |
| session.close(); |
| } |
| } |