blob: 401d2faf63857dd4a4dac12c5a59b6cfa5a2ccc4 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.sqoop.manager.sqlserver;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.util.StringUtils;
/**
* Test utilities for SQL Server manual tests.
*/
public class MSSQLTestUtils {
public static final Log LOG = LogFactory.getLog(
MSSQLTestUtils.class.getName());
public static final String DATABASE_USER = System.getProperty(
"ms.sqlserver.username", "sa");
public static final String DATABASE_PASSWORD = System.getProperty(
"ms.sqlserver.password", "Sqoop12345");
public static final String DATABASE_NAME = System.getProperty(
"sqoop.test.sqlserver.database",
"master");
public static final String HOST_URL = System.getProperty(
"sqoop.test.sqlserver.connectstring.host_url",
"jdbc:sqlserver://localhost:1433");
public static final String CONNECT_STRING = HOST_URL + ";database=" + DATABASE_NAME;
public static final String CREATE_TALBE_LINEITEM
= "CREATE TABLE TPCH1M_LINEITEM"
+ "( [L_ORDERKEY] [int] NULL, [L_PARTKEY] "
+ "[int] NULL, [L_SUPPKEY] [int] NULL, [L_LINENUMBER] [int] NULL, "
+ "[L_QUANTITY] [int] NULL, [L_EXTENDEDPRICE] [decimal](15, 2) NULL, "
+ "[L_DISCOUNT] [decimal](15, 2) NULL, [L_TAX] [decimal](15, 2) NULL,"
+ " [L_RETURNFLAG] [varchar](max) NULL, [L_LINESTATUS] [varchar](max)"
+ " NULL, [L_SHIPDATE] [varchar](max) NULL, [L_COMMITDATE] [varchar](max)"
+ " NULL, [L_RECEIPTDATE] [varchar](max) NULL, [L_SHIPINSTRUCT] [varchar]"
+ "(max) NULL, [L_SHIPMODE] [varchar](max) NULL, [L_COMMENT] [varchar]"
+ "(max) NULL) ";
private Connection conn = null;
private Connection getConnection() {
if (conn == null) {
try {
Connection con = DriverManager.getConnection(CONNECT_STRING,
DATABASE_USER, DATABASE_PASSWORD);
conn = con;
return con;
} catch (SQLException e) {
LOG.error("Get SQLException during setting up connection: " + StringUtils.stringifyException(e));
return null;
}
}
return conn;
}
public void createTableFromSQL(String sql) throws SQLException {
Connection dbcon = this.getConnection();
System.out.println("SQL : " + sql);
this.dropTableIfExists("TPCH1M_LINEITEM");
try {
Statement st = dbcon.createStatement();
int res = st.executeUpdate(sql);
System.out.println("Result : " + res);
} catch (SQLException e) {
LOG.error("Got SQLException during creating table: " + StringUtils.stringifyException(e));
}
}
public void populateLineItem() {
String sql = "insert into tpch1m_lineitem values (1,2,3,4,5,6,7,8,'AB',"
+ "'CD','abcd','efgh','hijk','dothis','likethis','nocomments')";
String sql2 = "insert into tpch1m_lineitem values (2,3,4,5,6,7,8,9,'AB'"
+ ",'CD','abcd','efgh','hijk','dothis','likethis','nocomments')";
String sql3 = "insert into tpch1m_lineitem values (3,4,5,6,7,8,9,10,'AB',"
+ "'CD','abcd','efgh','hijk','dothis','likethis','nocomments')";
String sql4 = "insert into tpch1m_lineitem values (4,5,6,7,8,9,10,11,'AB'"
+ ",'CD','abcd','efgh','hijk','dothis','likethis','nocomments')";
Connection dbcon = this.getConnection();
Statement st;
try {
st = dbcon.createStatement();
st.addBatch(sql);
st.addBatch(sql2);
st.addBatch(sql3);
st.addBatch(sql4);
int[] res = st.executeBatch();
System.out.println(res);
} catch (SQLException e) {
LOG.error(StringUtils.stringifyException(e));
}
}
public void metadataStuff(String table) {
Connection dbcon = this.getConnection();
String sql = "select top 1 * from " + table;
Statement st;
try {
st = dbcon.createStatement();
ResultSet rs = st.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
for (int i = 1; i <= rsmd.getColumnCount(); i++) {
System.out.println(rsmd.getColumnName(i) + "\t"
+ rsmd.getColumnClassName(i) + "\t"
+ rsmd.getColumnType(i) + "\t"
+ rsmd.getColumnTypeName(i) + "\n");
}
} catch (SQLException e) {
LOG.error(StringUtils.stringifyException(e));
}
}
public static String getDBUserName() {
return DATABASE_USER;
}
public static String getDBPassWord() {
return DATABASE_PASSWORD;
}
public static String getDBDatabaseName() {
return DATABASE_NAME;
}
public static String getDBConnectString() {
return CONNECT_STRING;
}
public void dropTableIfExists(String table) throws SQLException {
conn = getConnection();
System.out.println("Dropping table : " + table);
String sqlStmt = "IF OBJECT_ID('" + table
+ "') IS NOT NULL DROP TABLE " + table;
PreparedStatement statement = conn.prepareStatement(sqlStmt,
ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
try {
statement.executeUpdate();
conn.commit();
} finally {
statement.close();
}
}
public static String[] getColumns() {
return new String[] { "L_ORDERKEY", "L_PARTKEY", "L_SUPPKEY",
"L_LINENUMBER", "L_QUANTITY", "L_EXTENDEDPRICE", "L_DISCOUNT",
"L_TAX", "L_RETURNFLAG", "L_LINESTATUS", "L_SHIPDATE",
"L_COMMITDATE", "L_RECEIPTDATE", "L_SHIPINSTRUCT",
"L_SHIPMODE", "L_COMMENT", };
}
}