/* * Copyright (c) 2000-2007 MetaMatrix, Inc. * All rights reserved. */ package org.teiid.test.framework.datasource; import java.sql.Connection; import java.sql.Statement; import org.teiid.test.framework.connection.ConnectionStrategy; import org.teiid.test.framework.exception.QueryTestFailedException; /** * This class loads the data in the databases specified, to a known state */ @SuppressWarnings("nls") public class DataStore { /** * Called at the start of all the tests to initialize the database to ensure * it's in the proper state. * * @param connStrategy */ public static void initialize(ConnectionStrategy connStrategy) { if (connStrategy.isDataStoreDisabled()) { return; } try { load(getConnection("pm1", connStrategy)); load(getConnection("pm2", connStrategy)); } catch (Exception e) { throw new RuntimeException(e); } } private static Connection getConnection(String identifier, ConnectionStrategy connStrategy) throws QueryTestFailedException { Connection conn = connStrategy.createDriverConnection(identifier); // force autocommit back to true, just in case the last user didnt try { conn.setAutoCommit(true); } catch (Exception sqle) { throw new QueryTestFailedException(sqle); } return conn; } private static void load(Connection c) throws Exception { // DDL // drop table g1; // drop table g2; // oracle // create Table g1 (e1 number(5) PRIMARY KEY, e2 varchar2(50)); // create Table g2 (e1 number(5) REFERENCES g1, e2 varchar2(50)); // SQL Server // create Table g1 (e1 int PRIMARY KEY, e2 varchar(50)); // create Table g2 (e1 int references g1, e2 varchar(50)); Statement stmt = c.createStatement(); try { stmt.execute("delete from g2"); stmt.execute("delete from g1"); for (int i = 0; i < 100; i++) { stmt.execute("insert into g1 (e1, e2) values("+i+",'"+i+"')"); } for (int i = 0; i < 50; i++) { stmt.execute("insert into g2 (e1, e2) values("+i+",'"+i+"')"); } } finally { stmt.close(); } } /** * Called as part of the setup for each test. * This will set the database state as if {@link #initialize(ConnectionStrategy)} was called. * However, for performance reasons, the process goes about removing what's not needed instead of cleaning out everything * and reinstalling. * @param connStrategy */ public static void setup(ConnectionStrategy connStrategy) { if (connStrategy.isDataStoreDisabled()) { return; } try { setUpTest(getConnection("pm1", connStrategy)); setUpTest(getConnection("pm2", connStrategy)); } catch (Exception e) { throw new RuntimeException(e); } } private static void setUpTest(Connection c) throws Exception { Statement stmt = c.createStatement(); try { stmt.execute("delete from g2 where e1 >= 50"); //$NON-NLS-1$ stmt.execute("delete from g1 where e1 >= 100"); } finally { stmt.close(); } } }