You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by cw...@apache.org on 2011/09/15 22:05:46 UTC
svn commit: r1171253 - in /hive/trunk:
jdbc/src/test/org/apache/hadoop/hive/jdbc/
ql/src/java/org/apache/hadoop/hive/ql/processors/
service/src/java/org/apache/hadoop/hive/service/
Author: cws
Date: Thu Sep 15 20:05:46 2011
New Revision: 1171253
URL: http://svn.apache.org/viewvc?rev=1171253&view=rev
Log:
HIVE-2398. Hive server doesn't return schema for 'set' command (Prasad Mujumdar via cws)
Modified:
hive/trunk/jdbc/src/test/org/apache/hadoop/hive/jdbc/TestJdbcDriver.java
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/processors/CommandProcessorResponse.java
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/processors/SetProcessor.java
hive/trunk/service/src/java/org/apache/hadoop/hive/service/HiveServer.java
Modified: hive/trunk/jdbc/src/test/org/apache/hadoop/hive/jdbc/TestJdbcDriver.java
URL: http://svn.apache.org/viewvc/hive/trunk/jdbc/src/test/org/apache/hadoop/hive/jdbc/TestJdbcDriver.java?rev=1171253&r1=1171252&r2=1171253&view=diff
==============================================================================
--- hive/trunk/jdbc/src/test/org/apache/hadoop/hive/jdbc/TestJdbcDriver.java (original)
+++ hive/trunk/jdbc/src/test/org/apache/hadoop/hive/jdbc/TestJdbcDriver.java Thu Sep 15 20:05:46 2011
@@ -18,6 +18,8 @@
package org.apache.hadoop.hive.jdbc;
+import static org.apache.hadoop.hive.ql.processors.SetProcessor.SET_COLUMN_NAME;
+
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
@@ -1008,4 +1010,28 @@ public class TestJdbcDriver extends Test
assertEquals("Invalid DriverPropertyInfo value", value, dpi.value);
assertEquals("Invalid DriverPropertyInfo required", false, dpi.required);
}
+
+
+ /**
+ * validate schema generated by "set" command
+ * @throws SQLException
+ */
+public void testSetCommand() throws SQLException {
+ // execute set command
+ String sql = "set -v";
+ Statement stmt = con.createStatement();
+ ResultSet res = stmt.executeQuery(sql);
+
+ // Validate resultset columns
+ ResultSetMetaData md = res.getMetaData() ;
+ assertEquals(1, md.getColumnCount());
+ assertEquals(SET_COLUMN_NAME, md.getColumnLabel(1));
+
+ //check if there is data in the resultset
+ assertTrue("Nothing returned by set -v", res.next());
+
+ res.close();
+ stmt.close();
+ }
+
}
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/processors/CommandProcessorResponse.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/processors/CommandProcessorResponse.java?rev=1171253&r1=1171252&r2=1171253&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/processors/CommandProcessorResponse.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/processors/CommandProcessorResponse.java Thu Sep 15 20:05:46 2011
@@ -18,6 +18,8 @@
package org.apache.hadoop.hive.ql.processors;
+import org.apache.hadoop.hive.metastore.api.Schema;
+
/**
* Encapsulates the basic response info returned by classes the implement the
* <code>CommandProcessor</code> interfaace. Typically <code>errorMessage</code>
@@ -28,18 +30,25 @@ public class CommandProcessorResponse {
private int responseCode;
private String errorMessage;
private String SQLState;
+ private Schema resSchema;
public CommandProcessorResponse(int responseCode) {
this(responseCode, null, null);
}
public CommandProcessorResponse(int responseCode, String errorMessage, String SQLState) {
+ this(responseCode, errorMessage, SQLState, null);
+ }
+
+ public CommandProcessorResponse(int responseCode, String errorMessage, String SQLState, Schema schema) {
this.responseCode = responseCode;
this.errorMessage = errorMessage;
this.SQLState = SQLState;
+ this.resSchema = schema;
}
public int getResponseCode() { return responseCode; }
public String getErrorMessage() { return errorMessage; }
public String getSQLState() { return SQLState; }
+ public Schema getSchema() { return resSchema; }
}
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/processors/SetProcessor.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/processors/SetProcessor.java?rev=1171253&r1=1171252&r2=1171253&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/processors/SetProcessor.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/processors/SetProcessor.java Thu Sep 15 20:05:46 2011
@@ -18,11 +18,17 @@
package org.apache.hadoop.hive.ql.processors;
+import static org.apache.hadoop.hive.serde.Constants.STRING_TYPE_NAME;
+import static org.apache.hadoop.hive.serde.Constants.SERIALIZATION_NULL_FORMAT;
+import static org.apache.hadoop.hive.serde2.MetadataTypedColumnsetSerDe.defaultNullString;
+
import java.util.Map;
import java.util.Properties;
import java.util.SortedMap;
import java.util.TreeMap;
+import org.apache.hadoop.hive.metastore.api.Schema;
+import org.apache.hadoop.hive.metastore.api.FieldSchema;
import org.apache.hadoop.hive.ql.parse.VariableSubstitution;
import org.apache.hadoop.hive.ql.session.SessionState;
@@ -37,6 +43,7 @@ public class SetProcessor implements Com
public static final String SYSTEM_PREFIX = "system:";
public static final String HIVECONF_PREFIX = "hiveconf:";
public static final String HIVEVAR_PREFIX = "hivevar:";
+ public static final String SET_COLUMN_NAME = "set";
public static boolean getBoolean(String value) {
if (value.equals("on") || value.equals("true")) {
@@ -183,16 +190,17 @@ public class SetProcessor implements Com
public CommandProcessorResponse run(String command) {
SessionState ss = SessionState.get();
+ Schema sch = getSchema();
String nwcmd = command.trim();
if (nwcmd.equals("")) {
dumpOptions(ss.getConf().getChangedProperties());
- return new CommandProcessorResponse(0);
+ return new CommandProcessorResponse(0, null, null, sch);
}
if (nwcmd.equals("-v")) {
dumpOptions(ss.getConf().getAllProperties());
- return new CommandProcessorResponse(0);
+ return new CommandProcessorResponse(0, null, null, sch);
}
String[] part = new String[2];
@@ -216,4 +224,19 @@ public class SetProcessor implements Com
}
}
+
+// create a Schema object containing the give column
+ private Schema getSchema() {
+ Schema sch = new Schema();
+ FieldSchema tmpFieldSchema = new FieldSchema();
+
+ tmpFieldSchema.setName(SET_COLUMN_NAME);
+
+ tmpFieldSchema.setType(STRING_TYPE_NAME);
+ sch.putToProperties(SERIALIZATION_NULL_FORMAT, defaultNullString);
+ sch.addToFieldSchemas(tmpFieldSchema);
+
+ return sch;
+ }
+
}
Modified: hive/trunk/service/src/java/org/apache/hadoop/hive/service/HiveServer.java
URL: http://svn.apache.org/viewvc/hive/trunk/service/src/java/org/apache/hadoop/hive/service/HiveServer.java?rev=1171253&r1=1171252&r2=1171253&view=diff
==============================================================================
--- hive/trunk/service/src/java/org/apache/hadoop/hive/service/HiveServer.java (original)
+++ hive/trunk/service/src/java/org/apache/hadoop/hive/service/HiveServer.java Thu Sep 15 20:05:46 2011
@@ -96,6 +96,7 @@ public class HiveServer extends ThriftHi
* It is the instance of the last Hive query.
*/
private Driver driver;
+ private CommandProcessorResponse response;
/**
* For processors other than Hive queries (Driver), they output to session.out (a temp file)
* first and the fetchOne/fetchN/fetchAll functions get the output from pipeIn.
@@ -177,7 +178,6 @@ public class HiveServer extends ThriftHi
try {
CommandProcessor proc = CommandProcessorFactory.get(tokens[0]);
- CommandProcessorResponse response = null;
if (proc != null) {
if (proc instanceof Driver) {
isHiveQuery = true;
@@ -273,8 +273,14 @@ public class HiveServer extends ThriftHi
*/
public Schema getSchema() throws HiveServerException, TException {
if (!isHiveQuery) {
- // Return empty schema if the last command was not a Hive query
- return new Schema();
+ Schema schema = response.getSchema();
+ if (schema == null) {
+ // Return empty schema if the last command was not a Hive query
+ return new Schema();
+ }
+ else {
+ return schema;
+ }
}
assert driver != null: "getSchema() is called on a Hive query and driver is NULL.";