diff --git itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcGenericUDTFGetSplits.java itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcGenericUDTFGetSplits.java index b94868b196..4c24f0495b 100644 --- itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcGenericUDTFGetSplits.java +++ itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcGenericUDTFGetSplits.java @@ -29,23 +29,15 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.concurrent.TimeUnit; import org.apache.hadoop.fs.Path; import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.conf.HiveConf.ConfVars; -import org.apache.hadoop.hive.llap.LlapBaseInputFormat; -import org.apache.hadoop.hive.metastore.api.WMTrigger; -import org.apache.hadoop.hive.ql.wm.Action; -import org.apache.hadoop.hive.ql.wm.ExecutionTrigger; -import org.apache.hadoop.hive.ql.wm.Expression; -import org.apache.hadoop.hive.ql.wm.ExpressionFactory; -import org.apache.hadoop.hive.ql.wm.Trigger; +import org.apache.hadoop.hive.llap.*; +import org.apache.hadoop.hive.serde2.typeinfo.DecimalTypeInfo; +import org.apache.hadoop.mapred.JobConf; import org.apache.hive.jdbc.miniHS2.MiniHS2; import org.apache.hive.jdbc.miniHS2.MiniHS2.MiniClusterType; import org.junit.After; @@ -138,6 +130,44 @@ public void testGenericUDTFOrderBySplitCount1() throws Exception { runQuery(query, setCmds, 10); } + @Test + public void testDecimalPrecisionAndScale() throws Exception { + try (Statement stmt = hs2Conn.createStatement()) { + stmt.execute("CREATE TABLE decimal_test_table(decimal_col DECIMAL(6,2))"); + stmt.execute("INSERT INTO decimal_test_table VALUES(2507.92)"); + + ResultSet rs = stmt.executeQuery("SELECT * FROM decimal_test_table"); + assertTrue(rs.next()); + rs.close(); + + String url = miniHS2.getJdbcURL(); + String user = System.getProperty("user.name"); + String pwd = user; + String handleId = UUID.randomUUID().toString(); + String sql = "SELECT avg(decimal_col)/3 FROM decimal_test_table"; + + // make request through llap-ext-client + JobConf job = new JobConf(conf); + job.set(LlapBaseInputFormat.URL_KEY, url); + job.set(LlapBaseInputFormat.USER_KEY, user); + job.set(LlapBaseInputFormat.PWD_KEY, pwd); + job.set(LlapBaseInputFormat.QUERY_KEY, sql); + job.set(LlapBaseInputFormat.HANDLE_ID, handleId); + + LlapBaseInputFormat llapBaseInputFormat = new LlapBaseInputFormat(); + //schema split + LlapInputSplit schemaSplit = (LlapInputSplit) llapBaseInputFormat.getSplits(job, 0)[0]; + assertNotNull(schemaSplit); + FieldDesc fieldDesc = schemaSplit.getSchema().getColumns().get(0); + DecimalTypeInfo type = (DecimalTypeInfo) fieldDesc.getTypeInfo(); + assertEquals(38, type.getPrecision()); + assertEquals(24, type.scale()); + + LlapBaseInputFormat.close(handleId); + } + } + + private void runQuery(final String query, final List setCmds, final int numRows) throws Exception { diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/ParseUtils.java ql/src/java/org/apache/hadoop/hive/ql/parse/ParseUtils.java index 07c65af246..537af207ae 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/ParseUtils.java +++ ql/src/java/org/apache/hadoop/hive/ql/parse/ParseUtils.java @@ -558,7 +558,7 @@ public static RelNode parseQuery(HiveConf conf, String viewQuery) ctx.setIsLoadingMaterializedView(true); final ASTNode ast = parse(viewQuery, ctx); final CalcitePlanner analyzer = getAnalyzer(conf, ctx); - analyzer.genLogicalPlan(ast); + analyzer.analyze(ast, ctx); return analyzer.getResultSchema(); }