diff --git jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java index ad96a6466dd1aadab71fc261f55be4639dcbe2bf..e9d9c5e3acd32503e691070b8ccf6edd59fafa6d 100644 --- jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java +++ jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java @@ -125,6 +125,16 @@ private int loginTimeout = 0; private TProtocolVersion protocol; private int fetchSize = HiveStatement.DEFAULT_FETCH_SIZE; + + private String initFile; + + public String getInitFile() { + return initFile; + } + + public void setInitFile(String initFile) { + this.initFile = initFile; + } public HiveConnection(String uri, Properties info) throws SQLException { setupLoginTimeout(); @@ -137,7 +147,7 @@ public HiveConnection(String uri, Properties info) throws SQLException { // JDBC URL: jdbc:hive2://:/dbName;sess_var_list?hive_conf_list#hive_var_list // each list: =;= and so on // sess_var_list -> sessConfMap - // hive_conf_list -> hiveConfMap + // hive_conf_list -> hiveConfMap // hive_var_list -> hiveVarMap host = connParams.getHost(); port = connParams.getPort(); @@ -147,6 +157,10 @@ public HiveConnection(String uri, Properties info) throws SQLException { if (sessConfMap.containsKey(JdbcConnectionParams.FETCH_SIZE)) { fetchSize = Integer.parseInt(sessConfMap.get(JdbcConnectionParams.FETCH_SIZE)); } + + if (sessConfMap.containsKey(JdbcConnectionParams.INIT_FILE)) { + initFile = sessConfMap.get(JdbcConnectionParams.INIT_FILE); + } // add supported protocols supportedProtocols.add(TProtocolVersion.HIVE_CLI_SERVICE_PROTOCOL_V1); diff --git jdbc/src/java/org/apache/hive/jdbc/HiveDriver.java jdbc/src/java/org/apache/hive/jdbc/HiveDriver.java index a349f8bdad09f526f66a71768ecd2ca019671167..c571213792da2dc9d758b1ce4f39d9b9f2dbcc9c 100644 --- jdbc/src/java/org/apache/hive/jdbc/HiveDriver.java +++ jdbc/src/java/org/apache/hive/jdbc/HiveDriver.java @@ -18,13 +18,21 @@ package org.apache.hive.jdbc; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; import java.io.IOException; +import java.io.InputStreamReader; import java.net.URL; import java.sql.Connection; import java.sql.Driver; import java.sql.DriverPropertyInfo; +import java.sql.ResultSet; import java.sql.SQLException; import java.sql.SQLFeatureNotSupportedException; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.List; import java.util.Properties; import java.util.jar.Attributes; import java.util.jar.Manifest; @@ -104,8 +112,59 @@ public boolean acceptsURL(String url) throws SQLException { */ @Override public Connection connect(String url, Properties info) throws SQLException { - return acceptsURL(url) ? new HiveConnection(url, info) : null; + if (acceptsURL(url)) { + HiveConnection connection = new HiveConnection(url, info); + String initFile = connection.getInitFile(); + if (initFile != null) { + System.out.println("Running init script " + initFile); + Statement st = connection.createStatement(); + File file = new File(initFile); + try { + FileInputStream input = new FileInputStream(file); + BufferedReader br = new BufferedReader(new InputStreamReader(input, "UTF-8")); + String strLine; + List sqlList = new ArrayList(); + while ((strLine = br.readLine()) != null) { + if (strLine.length() != 0) { + String line = strLine.trim(); + if(!isComment(line)){ + line = line.substring(0, line.length() - 1); + sqlList.add(line); + } + } + } + br.close(); + for (String sql : sqlList) { + boolean hasResult = st.execute(sql); + if (hasResult) { + ResultSet rs = st.getResultSet(); + while (rs.next()) { + System.out.println(rs.getString(1)); + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + return connection; + } else { + return null; + } + // return acceptsURL(url) ? new HiveConnection(url, info) : null; } + + /** + * Test whether a line is a comment. + * + * @param line + * the line to be tested + * @return true if a comment + */ + boolean isComment(String line) { + String lineTrimmed = line.trim(); + return lineTrimmed.startsWith("#") || lineTrimmed.startsWith("--"); + } /** * Package scoped access to the Driver's Major Version diff --git jdbc/src/java/org/apache/hive/jdbc/Utils.java jdbc/src/java/org/apache/hive/jdbc/Utils.java index 3161566994d6c6e01de9d88a6e87295684619ffa..3b32a711594ea12362f86d4916c5e8b3f900d5a3 100644 --- jdbc/src/java/org/apache/hive/jdbc/Utils.java +++ jdbc/src/java/org/apache/hive/jdbc/Utils.java @@ -118,6 +118,7 @@ static final String DEFAULT_COOKIE_NAMES_HS2 = "hive.server2.auth"; // The http header prefix for additional headers which have to be appended to the request static final String HTTP_HEADER_PREFIX = "http.header."; + static final String INIT_FILE = "initFile"; // Set the fetchSize static final String FETCH_SIZE = "fetchSize"; diff --git jdbc/src/test/org/apache/hive/jdbc/TestHiveDriver.java jdbc/src/test/org/apache/hive/jdbc/TestHiveDriver.java new file mode 100644 index 0000000000000000000000000000000000000000..ad0a594bd3033d45345e12bd11bb76d55c2865ed --- /dev/null +++ jdbc/src/test/org/apache/hive/jdbc/TestHiveDriver.java @@ -0,0 +1,30 @@ +package org.apache.hive.jdbc; + +import static org.junit.Assert.*; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.Statement; + +import org.apache.log4j.PropertyConfigurator; +import org.junit.Before; +import org.junit.Test; + +public class TestHiveDriver { + + @Before + public void setUp() throws Exception { + } + + @Test + public void testConnect() { + try { + java.sql.DriverManager.registerDriver(new HiveDriver()); + String initPath = System.getProperty("user.dir")+"/src/test/resources/init.sql"; + Connection con = DriverManager.getConnection("jdbc:hive2://localhost:10000/default;initFile=" + initPath, "root", "123456"); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git jdbc/src/test/resources/init.sql jdbc/src/test/resources/init.sql new file mode 100644 index 0000000000000000000000000000000000000000..4c13d845947a8988b2179d941de7da5a4e445017 --- /dev/null +++ jdbc/src/test/resources/init.sql @@ -0,0 +1,4 @@ +show databases; +show tables; +#select * from ; +#add FILE /home/test/init.sql;