/*
* JBoss, Home of Professional Open Source.
* See the COPYRIGHT.txt file distributed with this work for information
* regarding copyright ownership. Some portions may be licensed
* to Red Hat, Inc. under one or more contributor license agreements.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA.
*/
package org.teiid.translator.hbase;
import java.io.FileReader;
import java.math.BigDecimal;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.Date;
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 java.sql.Time;
import java.sql.Timestamp;
import org.teiid.adminapi.impl.ModelMetaData;
import org.teiid.core.util.UnitTestUtil;
import org.teiid.metadata.MetadataFactory;
import org.teiid.query.metadata.MetadataValidator;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.SystemMetadata;
import org.teiid.query.metadata.TransformationMetadata;
import org.teiid.query.parser.QueryParser;
import org.teiid.query.unittest.RealMetadataFactory;
import org.teiid.query.validator.ValidatorReport;
public class TestHBaseUtil {
public static QueryMetadataInterface queryMetadataInterface() {
try {
ModelMetaData mmd = new ModelMetaData();
mmd.setName("HBaseModel");
MetadataFactory mf = new MetadataFactory("hbase", 1, SystemMetadata.getInstance().getRuntimeTypeMap(), mmd);
mf.setParser(new QueryParser());
mf.parse(new FileReader(UnitTestUtil.getTestDataFile("customer.ddl")));
TransformationMetadata tm = RealMetadataFactory.createTransformationMetadata(mf.asMetadataStore(), "x");
ValidatorReport report = new MetadataValidator().validate(tm.getVdbMetaData(), tm.getMetadataStore());
if (report.hasItems()) {
throw new RuntimeException(report.getFailureMessage());
}
return tm;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static Connection getDriverConnection(String driver, String url, String user, String pass) throws Exception {
Class.forName(driver);
return DriverManager.getConnection(url, user, pass);
}
public static void executeBatchedUpdateDataType(Connection conn, String sql) throws SQLException {
System.out.println("Update SQL: " + sql);
byte b = 127;
short s = 10000;
long l = 1000000;
float f = 3.6f;
double d = 3.6;
int in = 100;
BigDecimal decimal = new BigDecimal(l);
Date date = new Date(new java.util.Date().getTime());
Time time = new Time(new java.util.Date().getTime());
Timestamp timestramp = new Timestamp(new java.util.Date().getTime());
PreparedStatement pstmt = null ;
try {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "10001");
pstmt.setString(2, "varchar");
pstmt.setBytes(3, "varbinary".getBytes());
pstmt.setString(4, "C");
pstmt.setBoolean(5, Boolean.FALSE);
pstmt.setByte(6, b);
pstmt.setByte(7, b);
pstmt.setShort(8, s);
pstmt.setShort(9, s);
pstmt.setInt(10, in);
pstmt.setInt(11, in);
pstmt.setLong(12, l);
pstmt.setLong(13, l);
pstmt.setFloat(14, f);
pstmt.setFloat(15, f);
pstmt.setDouble(16, d);
pstmt.setBigDecimal(17, decimal);
pstmt.setBigDecimal(18, decimal);
pstmt.setDate(19, date);
pstmt.setTime(20, time);
pstmt.setTimestamp(21, timestramp);
pstmt.addBatch();
pstmt.executeBatch();
if(!conn.getAutoCommit()) {
conn.commit();
}
} catch (SQLException e) {
throw e;
} finally {
close(pstmt);
}
}
public static void executeBatchedUpdateDataType(Connection conn, String sql, int size) throws SQLException {
System.out.println("Update SQL: " + sql);
byte b = 127;
short s = 10000;
long l = 1000000;
float f = 3.6f;
double d = 3.6;
BigDecimal decimal = new BigDecimal(l);
Date date = new Date(new java.util.Date().getTime());
Time time = new Time(new java.util.Date().getTime());
Timestamp timestramp = new Timestamp(new java.util.Date().getTime());
PreparedStatement pstmt = null ;
try {
pstmt = conn.prepareStatement(sql);
for(int i = 0 ; i < size ; i ++) {
pstmt.setString(1, 100 + i + "");
pstmt.setString(2, "varchar");
pstmt.setBytes(3, "varbinary".getBytes());
pstmt.setString(4, "C");
pstmt.setBoolean(5, Boolean.FALSE);
pstmt.setByte(6, b);
pstmt.setByte(7, b);
pstmt.setShort(8, s);
pstmt.setShort(9, s);
pstmt.setInt(10, i);
pstmt.setInt(11, i);
pstmt.setLong(12, l);
pstmt.setLong(13, l);
pstmt.setFloat(14, f);
pstmt.setFloat(15, f);
pstmt.setDouble(16, d);
pstmt.setBigDecimal(17, decimal);
pstmt.setBigDecimal(18, decimal);
pstmt.setDate(19, date);
pstmt.setTime(20, time);
pstmt.setTimestamp(21, timestramp);
pstmt.addBatch();
}
pstmt.executeBatch();
if(!conn.getAutoCommit()) {
conn.commit();
}
} catch (SQLException e) {
throw e;
} finally {
close(pstmt);
}
}
public static void executeBatchedUpdate(Connection conn, String sql, int size) throws SQLException {
System.out.println("Update SQL: " + sql);
PreparedStatement pstmt = null ;
try {
pstmt = conn.prepareStatement(sql);
for(int i = 0 ; i < size ; i ++) {
pstmt.setString(1, 124 + i + "");
pstmt.setString(2, "Beijng");
pstmt.setString(3, "Kylin Soong");
pstmt.setString(4, "$8000.00");
pstmt.setString(5, "Crystal Orange");
pstmt.addBatch();
}
pstmt.executeBatch();
if(!conn.getAutoCommit()) {
conn.commit();
}
} catch (SQLException e) {
throw e;
} finally {
close(pstmt);
}
}
public static void close(Connection conn) {
if(null != conn) {
try {
conn.close();
conn = null;
} catch (SQLException e) {
}
}
}
public static void close(Statement stmt) {
if(null != stmt) {
try {
stmt.close();
stmt = null;
} catch (SQLException e) {
}
}
}
public static void close(ResultSet rs, Statement stmt) {
if (null != rs) {
try {
rs.close();
rs = null;
} catch (SQLException e) {
}
}
if(null != stmt) {
try {
stmt.close();
stmt = null;
} catch (SQLException e) {
}
}
}
public static void printTableColumn(Connection conn, String sql) throws Exception {
Statement stmt = null;
ResultSet rs = null;
try {
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
ResultSetMetaData metadata = rs.getMetaData();
int columns = metadata.getColumnCount();
for(int i = 1 ; i <= columns ; i ++) {
System.out.print(metadata.getColumnName(i) + "/" + metadata.getColumnTypeName(i) + " ");
}
} catch (Exception e) {
throw e ;
} finally {
close(rs, stmt);
}
}
public static int countResults(Connection conn, String sql) throws Exception{
int count = 0;
Statement stmt = null;
ResultSet rs = null;
try {
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
while(rs.next()) {
count ++ ;
}
} catch (Exception e) {
throw e ;
} finally {
close(rs, stmt);
}
return count ;
}
public static Object query(Connection conn, String sql) throws Exception {
Object result = null;
Statement stmt = null;
ResultSet rs = null;
try {
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
rs.next();
result = rs.getString(1);
} catch (Exception e) {
throw e ;
} finally {
close(rs, stmt);
}
return result ;
}
public static void executeQuery(Connection conn, String sql) throws Exception {
System.out.println("Query SQL: " + sql);
Statement stmt = null;
ResultSet rs = null;
try {
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
ResultSetMetaData metadata = rs.getMetaData();
int columns = metadata.getColumnCount();
for (int row = 1; rs.next(); row++) {
System.out.print(row + ": ");
for (int i = 0; i < columns; i++) {
if (i > 0) {
System.out.print(", ");
}
System.out.print(rs.getObject(i + 1));
}
System.out.println();
}
} catch (Exception e) {
throw e ;
} finally {
close(rs, stmt);
}
System.out.println();
}
public static boolean executeUpdate(Connection conn, String sql) throws Exception {
System.out.println("Update SQL: " + sql);
Statement stmt = null;
try {
stmt = conn.createStatement();
stmt.executeUpdate(sql);
} catch (Exception e) {
throw e;
} finally {
close(stmt);
}
return true ;
}
public static void executeCallable(Connection conn, String sql) throws Exception {
System.out.println("Query SQL: " + sql);
CallableStatement cStmt = null;
ResultSet rs = null;
try {
cStmt = conn.prepareCall(sql);
boolean hadResults = cStmt.execute();
while(hadResults) {
rs = cStmt.getResultSet();
int columns = rs.getMetaData().getColumnCount();
for (int row = 1; rs.next(); row++) {
System.out.print(row + ": ");
for (int i = 0; i < columns; i++) {
if (i > 0) {
System.out.print(", ");
}
System.out.print(rs.getObject(i + 1));
}
System.out.println();
}
rs.close();
hadResults = cStmt.getMoreResults();
}
} catch (Exception e) {
throw e ;
} finally {
close(rs, cStmt);
}
System.out.println();
}
}