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.";