You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tajo.apache.org by ji...@apache.org on 2015/01/09 15:34:20 UTC
[4/8] tajo git commit: TAJO-1286: Remove netty dependency from
tajo-jdbc
TAJO-1286: Remove netty dependency from tajo-jdbc
Closes #341
Project: http://git-wip-us.apache.org/repos/asf/tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/533601ea
Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/533601ea
Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/533601ea
Branch: refs/heads/index_support
Commit: 533601eac6a21251485576ba693635d1650b63a4
Parents: 03801a3
Author: Jihun Kang <ji...@apache.org>
Authored: Fri Jan 9 15:51:25 2015 +0900
Committer: Jihun Kang <ji...@apache.org>
Committed: Fri Jan 9 15:51:25 2015 +0900
----------------------------------------------------------------------
CHANGES | 2 +
tajo-jdbc/pom.xml | 6 +-
.../org/apache/tajo/jdbc/JdbcConnection.java | 3 +-
.../tajo/jdbc/util/QueryStringDecoder.java | 139 +++++++++++++++++++
.../tajo/jdbc/util/TestQueryStringDecoder.java | 94 +++++++++++++
5 files changed, 242 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/533601ea/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index 66bb299..0df49b1 100644
--- a/CHANGES
+++ b/CHANGES
@@ -27,6 +27,8 @@ Release 0.9.1 - unreleased
IMPROVEMENT
+ TAJO-1286: Remove netty dependency from tajo-jdbc. (jihun)
+
TAJO-1282: Cleanup the relationship of QueryInProgress and
QueryJobManager. (hyunsik)
http://git-wip-us.apache.org/repos/asf/tajo/blob/533601ea/tajo-jdbc/pom.xml
----------------------------------------------------------------------
diff --git a/tajo-jdbc/pom.xml b/tajo-jdbc/pom.xml
index 15439c6..9847416 100644
--- a/tajo-jdbc/pom.xml
+++ b/tajo-jdbc/pom.xml
@@ -116,7 +116,11 @@
<groupId>org.apache.tajo</groupId>
<artifactId>tajo-client</artifactId>
</dependency>
-
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
http://git-wip-us.apache.org/repos/asf/tajo/blob/533601ea/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/JdbcConnection.java
----------------------------------------------------------------------
diff --git a/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/JdbcConnection.java b/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/JdbcConnection.java
index a76443d..f00dc25 100644
--- a/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/JdbcConnection.java
+++ b/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/JdbcConnection.java
@@ -19,6 +19,7 @@
package org.apache.tajo.jdbc;
import com.google.protobuf.ServiceException;
+
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.tajo.TajoConstants;
@@ -27,7 +28,7 @@ import org.apache.tajo.client.QueryClient;
import org.apache.tajo.client.TajoClient;
import org.apache.tajo.client.TajoClientImpl;
import org.apache.tajo.conf.TajoConf;
-import org.jboss.netty.handler.codec.http.QueryStringDecoder;
+import org.apache.tajo.jdbc.util.QueryStringDecoder;
import java.io.IOException;
import java.net.URI;
http://git-wip-us.apache.org/repos/asf/tajo/blob/533601ea/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/util/QueryStringDecoder.java
----------------------------------------------------------------------
diff --git a/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/util/QueryStringDecoder.java b/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/util/QueryStringDecoder.java
new file mode 100644
index 0000000..9ec9340
--- /dev/null
+++ b/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/util/QueryStringDecoder.java
@@ -0,0 +1,139 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tajo.jdbc.util;
+
+import java.io.UnsupportedEncodingException;
+import java.net.MalformedURLException;
+import java.net.URLDecoder;
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class QueryStringDecoder {
+
+ private final Charset charset;
+ private final String rawUri;
+ private String queries;
+ private Map<String, List<String>> params;
+
+ public QueryStringDecoder(String rawUri) {
+ this(rawUri, Charset.defaultCharset());
+ }
+
+ public QueryStringDecoder(String rawUri, Charset charset) {
+ this.rawUri = rawUri;
+ this.charset = charset;
+ }
+
+ private void splitUri() {
+ if (rawUri != null && !rawUri.isEmpty()) {
+ int pathPos = rawUri.indexOf('?');
+ if (pathPos < 0) {
+ queries = "";
+ } else {
+ if ((pathPos + 1) > rawUri.length()) {
+ queries = "";
+ } else {
+ queries = rawUri.substring(pathPos + 1);
+ }
+ }
+ }
+ }
+
+ protected void decodeParams() throws MalformedURLException, UnsupportedEncodingException {
+ params = new HashMap<String, List<String>>();
+ String queries = getQueries();
+
+ if (queries != null && !queries.isEmpty()) {
+ char c = 0;
+ int startPos = 0;
+ String name = null, value = null;
+
+ for (int index = 0; index < queries.length(); index++) {
+ c = queries.charAt(index);
+ if (c == '=') {
+ name = queries.substring(startPos, index);
+ if (name.isEmpty()) {
+ throw new MalformedURLException(rawUri + " is not a valid URL.");
+ }
+ name = decodeString(name);
+ startPos = index+1;
+ } else if (c == '&') {
+ if (name == null || name.isEmpty()) {
+ throw new MalformedURLException(rawUri + " is not a valid URL.");
+ }
+ value = queries.substring(startPos, index);
+ if (value.isEmpty()) {
+ throw new MalformedURLException(rawUri + " is not a valid URL.");
+ }
+ value = decodeString(value);
+ addParameter(name, value);
+ startPos = index+1;
+ }
+ }
+
+ if (startPos > 0 && name != null && !name.isEmpty()) {
+ value = queries.substring(startPos);
+ value = decodeString(value);
+ addParameter(name, value);
+ }
+ }
+ }
+
+ protected String decodeString(String string) throws UnsupportedEncodingException {
+ String decoded = "";
+
+ if (string != null && !string.isEmpty()) {
+ decoded = URLDecoder.decode(string, charset.name());
+ }
+
+ return decoded;
+ }
+
+ protected void addParameter(String name, String value) {
+ List<String> valueList = params.get(name);
+
+ if (valueList == null) {
+ valueList = new ArrayList<String>();
+ params.put(name, valueList);
+ }
+
+ valueList.add(value);
+ }
+
+ public String getRawUri() {
+ return rawUri;
+ }
+
+ public String getQueries() {
+ if (queries == null || queries.isEmpty()) {
+ splitUri();
+ }
+ return queries;
+ }
+
+ public Map<String, List<String>> getParameters() throws MalformedURLException, UnsupportedEncodingException {
+ if (params == null || params.size() <= 0) {
+ decodeParams();
+ }
+ return params;
+ }
+}
http://git-wip-us.apache.org/repos/asf/tajo/blob/533601ea/tajo-jdbc/src/test/java/org/apache/tajo/jdbc/util/TestQueryStringDecoder.java
----------------------------------------------------------------------
diff --git a/tajo-jdbc/src/test/java/org/apache/tajo/jdbc/util/TestQueryStringDecoder.java b/tajo-jdbc/src/test/java/org/apache/tajo/jdbc/util/TestQueryStringDecoder.java
new file mode 100644
index 0000000..31a09d5
--- /dev/null
+++ b/tajo-jdbc/src/test/java/org/apache/tajo/jdbc/util/TestQueryStringDecoder.java
@@ -0,0 +1,94 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tajo.jdbc.util;
+
+import java.net.MalformedURLException;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+import static org.hamcrest.CoreMatchers.*;
+
+public class TestQueryStringDecoder {
+
+ @Test
+ public void testEmptyQuery() throws Exception {
+ QueryStringDecoder decoder = null;
+ String rawUriStr = "";
+
+ rawUriStr = "http://127.0.0.1:26002/";
+ decoder = new QueryStringDecoder(rawUriStr);
+ assertThat(decoder.getQueries(), is(notNullValue()));
+ assertThat(decoder.getParameters(), is(notNullValue()));
+ assertThat(decoder.getParameters().size(), is(0));
+
+ rawUriStr = "/test_path/test2?";
+ decoder = new QueryStringDecoder(rawUriStr);
+ assertThat(decoder.getQueries(), is(notNullValue()));
+ assertThat(decoder.getParameters(), is(notNullValue()));
+ assertThat(decoder.getParameters().size(), is(0));
+ }
+
+ @Test
+ public void testSingleQueries() throws Exception {
+ QueryStringDecoder decoder = null;
+ String rawUriStr = "";
+
+ rawUriStr = "http://127.0.0.1:26200/?qid=1234&tid=2345&pid=4567";
+ decoder = new QueryStringDecoder(rawUriStr);
+ assertThat(decoder.getQueries(), is("qid=1234&tid=2345&pid=4567"));
+ assertThat(decoder.getParameters(), is(notNullValue()));
+ assertThat(decoder.getParameters().size(), is(3));
+ assertThat(decoder.getParameters().get("qid").get(0), is("1234"));
+ assertThat(decoder.getParameters().get("pid").get(0), is("4567"));
+
+ rawUriStr = "http://127.0.0.1:26200/?tid=2345";
+ decoder = new QueryStringDecoder(rawUriStr);
+ assertThat(decoder.getQueries(), is("tid=2345"));
+ assertThat(decoder.getParameters(), is(notNullValue()));
+ assertThat(decoder.getParameters().size(), is(1));
+ assertThat(decoder.getParameters().get("tid").get(0), is("2345"));
+ }
+
+ @Test
+ public void testMultipleQueries() throws Exception {
+ QueryStringDecoder decoder = null;
+ String rawUriStr = "";
+
+ rawUriStr = "http://127.0.0.1:26200/?qid=1234&tid=2345&pid=4567&tid=4890";
+ decoder = new QueryStringDecoder(rawUriStr);
+ assertThat(decoder.getQueries(), is("qid=1234&tid=2345&pid=4567&tid=4890"));
+ assertThat(decoder.getParameters(), is(notNullValue()));
+ assertThat(decoder.getParameters().size(), is(3));
+ assertThat(decoder.getParameters().get("tid").size(), is(2));
+ assertThat(decoder.getParameters().get("tid").get(0), is("2345"));
+ assertThat(decoder.getParameters().get("tid").get(1), is("4890"));
+ }
+
+ @Test(expected=MalformedURLException.class)
+ public void testMalformedURI() throws Exception {
+ QueryStringDecoder decoder = null;
+ String rawUriStr = "";
+
+ rawUriStr = "http://127.0.0.1:26200/?=1234&tid=&pid=4567";
+ decoder = new QueryStringDecoder(rawUriStr);
+ assertThat(decoder.getQueries(), is("=1234&tid=&pid=4567"));
+ decoder.getParameters();
+ }
+}