commit 6c0d503286b80744be4bc819877329e74564766e Author: Janaki Lahorani Date: Tue Nov 28 15:15:26 2017 -0800 HIVE 18166: Return decoded query string when value of hive.query.string is fetched diff --git common/src/java/org/apache/hadoop/hive/conf/HiveConf.java common/src/java/org/apache/hadoop/hive/conf/HiveConf.java index 0cc8de0e6676cae24b8d25adbbbb12ce6d39d6c8..5bed08af07368f50b26817ffb38c5f0ff0cb2790 100644 --- common/src/java/org/apache/hadoop/hive/conf/HiveConf.java +++ common/src/java/org/apache/hadoop/hive/conf/HiveConf.java @@ -89,6 +89,7 @@ private static final Map vars = new HashMap(); private static final Map metaConfs = new HashMap(); + private static final Map encodedConfs = new HashMap(); private final List restrictList = new ArrayList(); private final Set hiddenSet = new HashSet(); private final List rscList = new ArrayList<>(); @@ -329,6 +330,13 @@ private static URL checkConfigFile(File f) { }; /** + * encoded parameter values are ;-) encoded. Use decoder to get ;-) decoded string + */ + public static final HiveConf.ConfVars[] encodedConfVars = { + ConfVars.HIVEQUERYSTRING + }; + + /** * Variables used by LLAP daemons. * TODO: Eventually auto-populate this based on prefixes. The conf variables * will need to be renamed for this. @@ -3919,6 +3927,14 @@ public boolean isHiddenConfig(String name) { return Iterables.any(hiddenSet, hiddenVar -> name.startsWith(hiddenVar)); } + public static boolean isEncodedPar(String name) { + for (ConfVars confVar : HiveConf.encodedConfVars) { + ConfVars confVar1 = confVar; + if (confVar1.varname.equals(name)) return true; + } + return false; + } + /** * check whether spark related property is updated, which includes spark configurations, * RSC configurations and yarn configuration in Spark on YARN mode. diff --git ql/src/java/org/apache/hadoop/hive/ql/processors/SetProcessor.java ql/src/java/org/apache/hadoop/hive/ql/processors/SetProcessor.java index b9ca93862820009b2ca3f4e29247140282fee201..64c471148f0c03477a89818760e2ff5eb0c80ba7 100644 --- ql/src/java/org/apache/hadoop/hive/ql/processors/SetProcessor.java +++ ql/src/java/org/apache/hadoop/hive/ql/processors/SetProcessor.java @@ -143,7 +143,12 @@ private void dumpOption(String s) { if (ss.getConf().isHiddenConfig(s)) { ss.out.println(s + " is a hidden config"); } else if (ss.getConf().get(s) != null) { - ss.out.println(s + "=" + ss.getConf().get(s)); + if (ss.getConf().isEncodedPar(s)) { + ss.out.println(s + "=" + HiveConf.EncoderDecoderFactory.URL_ENCODER_DECODER + .decode(ss.getConf().get(s))); + } else { + ss.out.println(s + "=" + ss.getConf().get(s)); + } } else if (ss.getHiveVariables().containsKey(s)) { ss.out.println(s + "=" + ss.getHiveVariables().get(s)); } else { diff --git ql/src/test/queries/clientpositive/testSetQueryString.q ql/src/test/queries/clientpositive/testSetQueryString.q new file mode 100644 index 0000000000000000000000000000000000000000..f11afb2771311697d123b8ffe049e7e38e5492a1 --- /dev/null +++ ql/src/test/queries/clientpositive/testSetQueryString.q @@ -0,0 +1,4 @@ +create table t1 (c1 int); +insert into t1 values (1); +select * from t1; +set hive.query.string; \ No newline at end of file diff --git ql/src/test/results/clientpositive/testSetQueryString.q.out ql/src/test/results/clientpositive/testSetQueryString.q.out new file mode 100644 index 0000000000000000000000000000000000000000..0bf191950dbbcea0022474d77ec9c6603c6913b7 --- /dev/null +++ ql/src/test/results/clientpositive/testSetQueryString.q.out @@ -0,0 +1,26 @@ +PREHOOK: query: create table t1 (c1 int) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@t1 +POSTHOOK: query: create table t1 (c1 int) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@t1 +PREHOOK: query: insert into t1 values (1) +PREHOOK: type: QUERY +PREHOOK: Output: default@t1 +POSTHOOK: query: insert into t1 values (1) +POSTHOOK: type: QUERY +POSTHOOK: Output: default@t1 +POSTHOOK: Lineage: t1.c1 EXPRESSION [(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col1, type:string, comment:), ] +PREHOOK: query: select * from t1 +PREHOOK: type: QUERY +PREHOOK: Input: default@t1 +#### A masked pattern was here #### +POSTHOOK: query: select * from t1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@t1 +#### A masked pattern was here #### +1 +hive.query.string= +select * from t1