You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tajo.apache.org by hy...@apache.org on 2013/08/08 04:17:13 UTC
[2/4] TAJO-95: Eliminate the lazy copy approach from the classes
wrapping protobuf-generated classes. (hyunsik)
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-common/src/main/java/org/apache/tajo/json/ClassNameSerializer.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/json/ClassNameSerializer.java b/tajo-common/src/main/java/org/apache/tajo/json/ClassNameSerializer.java
new file mode 100644
index 0000000..9e9a4ee
--- /dev/null
+++ b/tajo-common/src/main/java/org/apache/tajo/json/ClassNameSerializer.java
@@ -0,0 +1,46 @@
+/**
+ * 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.json;
+
+import com.google.gson.*;
+
+import java.lang.reflect.Type;
+
+public class ClassNameSerializer implements GsonSerDerAdapter<Class> {
+
+ @Override
+ public JsonElement serialize(Class clazz, Type type,
+ JsonSerializationContext ctx) {
+ return new JsonPrimitive(clazz.getName());
+ }
+
+ @Override
+ public Class deserialize(JsonElement json, Type type,
+ JsonDeserializationContext ctx) throws JsonParseException {
+ try {
+ return Class.forName(json.getAsString());
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-common/src/main/java/org/apache/tajo/json/CommonGsonHelper.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/json/CommonGsonHelper.java b/tajo-common/src/main/java/org/apache/tajo/json/CommonGsonHelper.java
new file mode 100644
index 0000000..3badbc0
--- /dev/null
+++ b/tajo-common/src/main/java/org/apache/tajo/json/CommonGsonHelper.java
@@ -0,0 +1,70 @@
+/**
+ * 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.json;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import org.apache.tajo.datum.Datum;
+import org.apache.tajo.util.TUtil;
+
+import java.lang.reflect.Type;
+import java.util.Map;
+
+public class CommonGsonHelper {
+ private static Gson gson;
+ private static Gson gsonPretty;
+
+ private CommonGsonHelper() {
+ }
+
+ private static Map<Type, GsonSerDerAdapter> registerAdapters() {
+ Map<Type, GsonSerDerAdapter> adapters = TUtil.newHashMap();
+ adapters.put(Datum.class, new DatumAdapter());
+
+ return adapters;
+ }
+
+ public static Gson getInstance() {
+ if (gson == null ) {
+ GsonHelper helper = new GsonHelper(registerAdapters());
+ gson = helper.getGson();
+ }
+ return gson;
+ }
+
+ public static Gson getPrettyInstance() {
+ if (gsonPretty == null) {
+ GsonBuilder prettyBuilder = new GsonBuilder()
+ .setPrettyPrinting()
+ .excludeFieldsWithoutExposeAnnotation();
+ GsonHelper.registerAdapters(prettyBuilder, registerAdapters());
+ gsonPretty = prettyBuilder.create();
+ }
+
+ return gsonPretty;
+ }
+
+ public static String toJson(GsonObject object, Class<? extends GsonObject> clazz) {
+ return getInstance().toJson(object, clazz);
+ }
+
+ public static <T extends GsonObject> T fromJson(String json, Class<T> clazz) {
+ return getInstance().fromJson(json, clazz);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-common/src/main/java/org/apache/tajo/json/DataTypeAdapter.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/json/DataTypeAdapter.java b/tajo-common/src/main/java/org/apache/tajo/json/DataTypeAdapter.java
new file mode 100644
index 0000000..3df6939
--- /dev/null
+++ b/tajo-common/src/main/java/org/apache/tajo/json/DataTypeAdapter.java
@@ -0,0 +1,63 @@
+/**
+ * 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.json;
+
+import com.google.gson.*;
+import org.apache.tajo.common.TajoDataTypes;
+import org.apache.tajo.common.TajoDataTypes.DataType;
+
+import java.lang.reflect.Type;
+
+
+public class DataTypeAdapter implements GsonSerDerAdapter<DataType> {
+
+ @Override
+ public DataType deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
+ throws JsonParseException {
+
+ JsonObject obj = (JsonObject) json;
+ DataType.Builder builder = DataType.newBuilder();
+ TajoDataTypes.Type type = Enum.valueOf(TajoDataTypes.Type.class, obj.get("type").getAsString());
+ builder.setType(type);
+
+ JsonElement len = obj.get("len");
+ if (len != null) {
+ builder.setLength(len.getAsInt());
+ }
+ JsonElement code = obj.get("code");
+ if (code != null) {
+ builder.setCode(code.getAsString());
+ }
+ return builder.build();
+ }
+
+ @Override
+ public JsonElement serialize(DataType src, Type typeOfSrc, JsonSerializationContext context) {
+ JsonObject json = new JsonObject();
+ json.addProperty("type", src.getType().name());
+ if (src.hasLength()) {
+ json.addProperty("len", src.getLength());
+ }
+ if (src.hasCode()) {
+ json.addProperty("code", src.getCode());
+ }
+
+ return json;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-common/src/main/java/org/apache/tajo/json/DatumAdapter.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/json/DatumAdapter.java b/tajo-common/src/main/java/org/apache/tajo/json/DatumAdapter.java
new file mode 100644
index 0000000..8f9bb4e
--- /dev/null
+++ b/tajo-common/src/main/java/org/apache/tajo/json/DatumAdapter.java
@@ -0,0 +1,54 @@
+/**
+ * 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.json;
+
+import com.google.gson.*;
+import org.apache.tajo.datum.Datum;
+
+import java.lang.reflect.Type;
+
+public class DatumAdapter implements GsonSerDerAdapter<Datum> {
+
+ @Override
+ public Datum deserialize(JsonElement json, Type typeOfT,
+ JsonDeserializationContext context) throws JsonParseException {
+ JsonObject jsonObject = json.getAsJsonObject();
+ String className = jsonObject.get("classname").getAsJsonPrimitive().getAsString();
+
+ Class clazz;
+ try {
+ clazz = Class.forName(className);
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ throw new JsonParseException(e);
+ }
+ return context.deserialize(jsonObject.get("property"), clazz);
+ }
+
+ @Override
+ public JsonElement serialize(Datum src, Type typeOfSrc, JsonSerializationContext context) {
+ JsonObject jsonObj = new JsonObject();
+ String className = src.getClass().getCanonicalName();
+ jsonObj.addProperty("classname", className);
+ JsonElement jsonElem = context.serialize(src);
+ jsonObj.add("property", jsonElem);
+ return jsonObj;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-common/src/main/java/org/apache/tajo/json/DatumTypeAdapter.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/json/DatumTypeAdapter.java b/tajo-common/src/main/java/org/apache/tajo/json/DatumTypeAdapter.java
new file mode 100644
index 0000000..70af19f
--- /dev/null
+++ b/tajo-common/src/main/java/org/apache/tajo/json/DatumTypeAdapter.java
@@ -0,0 +1,55 @@
+/**
+ * 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.json;
+
+import com.google.gson.*;
+import org.apache.tajo.datum.Datum;
+
+import java.lang.reflect.Type;
+
+public class DatumTypeAdapter implements GsonSerDerAdapter<Datum> {
+
+ @Override
+ public Datum deserialize(JsonElement json, Type typeOfT,
+ JsonDeserializationContext context) throws JsonParseException {
+ JsonObject jsonObject = json.getAsJsonObject();
+ String className = jsonObject.get("classname").getAsJsonPrimitive().getAsString();
+
+ Class clazz;
+ try {
+ clazz = Class.forName(className);
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ throw new JsonParseException(e);
+ }
+ return context.deserialize(jsonObject.get("property"), clazz);
+ }
+
+ @Override
+ public JsonElement serialize(Datum src, Type typeOfSrc,
+ JsonSerializationContext context) {
+ JsonObject jsonObj = new JsonObject();
+ String className = src.getClass().getCanonicalName();
+ jsonObj.addProperty("classname", className);
+ JsonElement jsonElem = context.serialize(src);
+ jsonObj.add("property", jsonElem);
+ return jsonObj;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-common/src/main/java/org/apache/tajo/json/GsonHelper.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/json/GsonHelper.java b/tajo-common/src/main/java/org/apache/tajo/json/GsonHelper.java
new file mode 100644
index 0000000..8c6d891
--- /dev/null
+++ b/tajo-common/src/main/java/org/apache/tajo/json/GsonHelper.java
@@ -0,0 +1,49 @@
+/**
+ * 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.json;
+
+import com.google.gson.*;
+
+import java.lang.reflect.Type;
+import java.util.Map;
+
+public class GsonHelper {
+ private final GsonBuilder builder;
+ private final Gson gson;
+
+ public GsonHelper(Map<Type, GsonSerDerAdapter> adapters) {
+ builder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation();
+ registerAdapters(builder, adapters);
+ gson = builder.create();
+ }
+
+ public static void registerAdapters(GsonBuilder builder, Map<Type, GsonSerDerAdapter> adapters) {
+ for (Map.Entry<Type, GsonSerDerAdapter> entry : adapters.entrySet()) {
+ try {
+ builder.registerTypeAdapter(entry.getKey(), entry.getValue());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ public Gson getGson() {
+ return gson;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-common/src/main/java/org/apache/tajo/json/GsonObject.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/json/GsonObject.java b/tajo-common/src/main/java/org/apache/tajo/json/GsonObject.java
new file mode 100644
index 0000000..b7e69c1
--- /dev/null
+++ b/tajo-common/src/main/java/org/apache/tajo/json/GsonObject.java
@@ -0,0 +1,23 @@
+/**
+ * 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.json;
+
+public interface GsonObject {
+ String toJson();
+}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-common/src/main/java/org/apache/tajo/json/GsonSerDerAdapter.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/json/GsonSerDerAdapter.java b/tajo-common/src/main/java/org/apache/tajo/json/GsonSerDerAdapter.java
new file mode 100644
index 0000000..80a40f8
--- /dev/null
+++ b/tajo-common/src/main/java/org/apache/tajo/json/GsonSerDerAdapter.java
@@ -0,0 +1,25 @@
+/**
+ * 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.json;
+
+import com.google.gson.JsonDeserializer;
+import com.google.gson.JsonSerializer;
+
+public interface GsonSerDerAdapter<T> extends JsonSerializer<T>, JsonDeserializer<T> {
+}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-common/src/main/java/org/apache/tajo/json/PathDeserializer.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/json/PathDeserializer.java b/tajo-common/src/main/java/org/apache/tajo/json/PathDeserializer.java
new file mode 100644
index 0000000..739a28a
--- /dev/null
+++ b/tajo-common/src/main/java/org/apache/tajo/json/PathDeserializer.java
@@ -0,0 +1,40 @@
+/**
+ * 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.json;
+
+import com.google.gson.JsonDeserializationContext;
+import com.google.gson.JsonDeserializer;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonParseException;
+import org.apache.hadoop.fs.Path;
+
+import java.lang.reflect.Type;
+
+public class PathDeserializer implements JsonDeserializer<Path> {
+
+ @Override
+ public Path deserialize(JsonElement arg0, Type arg1,
+ JsonDeserializationContext arg2) throws JsonParseException {
+ return new Path(arg0.getAsJsonPrimitive().getAsString());
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-common/src/main/java/org/apache/tajo/json/PathSerializer.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/json/PathSerializer.java b/tajo-common/src/main/java/org/apache/tajo/json/PathSerializer.java
new file mode 100644
index 0000000..3ee8e2b
--- /dev/null
+++ b/tajo-common/src/main/java/org/apache/tajo/json/PathSerializer.java
@@ -0,0 +1,42 @@
+/**
+ * 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.json;
+
+import com.google.gson.*;
+import org.apache.hadoop.fs.Path;
+
+import java.lang.reflect.Type;
+
+public class PathSerializer implements GsonSerDerAdapter<Path> {
+
+ @Override
+ public JsonElement serialize(Path arg0, Type arg1,
+ JsonSerializationContext arg2) {
+ return new JsonPrimitive(arg0.toString());
+ }
+
+ @Override
+ public Path deserialize(JsonElement arg0, Type arg1,
+ JsonDeserializationContext arg2) throws JsonParseException {
+ return new Path(arg0.getAsJsonPrimitive().getAsString());
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-common/src/main/java/org/apache/tajo/util/TUtil.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/util/TUtil.java b/tajo-common/src/main/java/org/apache/tajo/util/TUtil.java
index f44062d..7eaade8 100644
--- a/tajo-common/src/main/java/org/apache/tajo/util/TUtil.java
+++ b/tajo-common/src/main/java/org/apache/tajo/util/TUtil.java
@@ -78,6 +78,14 @@ public class TUtil {
return new HashSet<T>(Arrays.asList(items));
}
+ public static <K,V> Map<K,V> newHashMap() {
+ return new HashMap<K, V>();
+ }
+
+ public static <K,V> Map<K,V> newHashMap(Map<K,V> map) {
+ return new HashMap<K, V>(map);
+ }
+
public static <T> List<T> newList() {
return new ArrayList<T>();
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-common/src/test/java/org/apache/tajo/datum/TestBoolDatum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/test/java/org/apache/tajo/datum/TestBoolDatum.java b/tajo-common/src/test/java/org/apache/tajo/datum/TestBoolDatum.java
index 399f615..3ae8522 100644
--- a/tajo-common/src/test/java/org/apache/tajo/datum/TestBoolDatum.java
+++ b/tajo-common/src/test/java/org/apache/tajo/datum/TestBoolDatum.java
@@ -18,8 +18,8 @@
package org.apache.tajo.datum;
-import org.junit.Test;
import org.apache.tajo.common.TajoDataTypes.Type;
+import org.junit.Test;
import static org.junit.Assert.assertEquals;
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-common/src/test/java/org/apache/tajo/datum/TestBytesDatum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/test/java/org/apache/tajo/datum/TestBytesDatum.java b/tajo-common/src/test/java/org/apache/tajo/datum/TestBytesDatum.java
index fa4d4d6..94aafe8 100644
--- a/tajo-common/src/test/java/org/apache/tajo/datum/TestBytesDatum.java
+++ b/tajo-common/src/test/java/org/apache/tajo/datum/TestBytesDatum.java
@@ -18,9 +18,9 @@
package org.apache.tajo.datum;
-import org.junit.Test;
import org.apache.tajo.common.TajoDataTypes.Type;
-import org.apache.tajo.datum.json.GsonCreator;
+import org.apache.tajo.json.CommonGsonHelper;
+import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@@ -48,8 +48,8 @@ public class TestBytesDatum {
@Test
public final void testJson() {
Datum d = DatumFactory.createBlob("12345".getBytes());
- String json = d.toJSON();
- Datum fromJson = GsonCreator.getInstance().fromJson(json, Datum.class);
+ String json = d.toJson();
+ Datum fromJson = CommonGsonHelper.fromJson(json, Datum.class);
assertTrue(d.equalsTo(fromJson).asBool());
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-common/src/test/java/org/apache/tajo/datum/TestInet4Datum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/test/java/org/apache/tajo/datum/TestInet4Datum.java b/tajo-common/src/test/java/org/apache/tajo/datum/TestInet4Datum.java
index 77b3363..2708386 100644
--- a/tajo-common/src/test/java/org/apache/tajo/datum/TestInet4Datum.java
+++ b/tajo-common/src/test/java/org/apache/tajo/datum/TestInet4Datum.java
@@ -18,9 +18,9 @@
package org.apache.tajo.datum;
+import org.apache.tajo.json.CommonGsonHelper;
import org.junit.Before;
import org.junit.Test;
-import org.apache.tajo.datum.json.GsonCreator;
import java.util.Arrays;
@@ -68,8 +68,8 @@ public class TestInet4Datum {
@Test
public final void testJson() {
Datum d = DatumFactory.createInet4("163.152.163.152");
- String json = d.toJSON();
- Datum fromJson = GsonCreator.getInstance().fromJson(json, Datum.class);
+ String json = d.toJson();
+ Datum fromJson = CommonGsonHelper.fromJson(json, Datum.class);
assertTrue(d.equalsTo(fromJson).asBool());
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/AggFuncCallEval.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/AggFuncCallEval.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/AggFuncCallEval.java
index 0e46c32..9aae34e 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/AggFuncCallEval.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/AggFuncCallEval.java
@@ -25,7 +25,6 @@ import org.apache.tajo.catalog.function.AggFunction;
import org.apache.tajo.catalog.function.FunctionContext;
import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.datum.Datum;
-import org.apache.tajo.engine.json.GsonCreator;
import org.apache.tajo.storage.Tuple;
import org.apache.tajo.storage.VTuple;
@@ -41,9 +40,7 @@ public class AggFuncCallEval extends FuncEval implements Cloneable {
@Override
public EvalContext newContext() {
- AggFunctionCtx newCtx = new AggFunctionCtx(argEvals, instance.newContext());
-
- return newCtx;
+ return new AggFunctionCtx(argEvals, instance.newContext());
}
@Override
@@ -87,13 +84,8 @@ public class AggFuncCallEval extends FuncEval implements Cloneable {
}
}
- public String toJSON() {
- return GsonCreator.getInstance().toJson(this, EvalNode.class);
- }
-
public Object clone() throws CloneNotSupportedException {
- AggFuncCallEval agg = (AggFuncCallEval) super.clone();
- return agg;
+ return super.clone();
}
public void setFirstPhase() {
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/BinaryEval.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/BinaryEval.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/BinaryEval.java
index a30e77c..2a95ddf 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/BinaryEval.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/BinaryEval.java
@@ -20,7 +20,6 @@ package org.apache.tajo.engine.eval;
import com.google.common.base.Objects;
import com.google.common.base.Preconditions;
-import com.google.gson.Gson;
import com.google.gson.annotations.Expose;
import org.apache.tajo.catalog.CatalogUtil;
import org.apache.tajo.catalog.Schema;
@@ -28,7 +27,6 @@ import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
-import org.apache.tajo.engine.json.GsonCreator;
import org.apache.tajo.engine.utils.SchemaUtil;
import org.apache.tajo.storage.Tuple;
@@ -202,11 +200,6 @@ public class BinaryEval extends EvalNode implements Cloneable {
return leftExpr +" "+type+" "+rightExpr;
}
- public String toJSON() {
- Gson gson = GsonCreator.getInstance();
- return gson.toJson(this, EvalNode.class);
- }
-
@Override
public boolean equals(Object obj) {
if (obj instanceof BinaryEval) {
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/CaseWhenEval.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/CaseWhenEval.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/CaseWhenEval.java
index 4f385b0..4bbdcb8 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/CaseWhenEval.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/CaseWhenEval.java
@@ -20,17 +20,20 @@ package org.apache.tajo.engine.eval;
import com.google.common.collect.Lists;
import com.google.gson.annotations.Expose;
+import org.apache.tajo.json.GsonObject;
import org.apache.tajo.catalog.CatalogUtil;
import org.apache.tajo.catalog.Schema;
import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
+import org.apache.tajo.engine.json.CoreGsonHelper;
import org.apache.tajo.storage.Tuple;
+import org.apache.tajo.util.TUtil;
import java.util.List;
-public class CaseWhenEval extends EvalNode {
+public class CaseWhenEval extends EvalNode implements GsonObject {
@Expose private List<WhenEval> whens = Lists.newArrayList();
@Expose private EvalNode elseResult;
@@ -87,6 +90,7 @@ public class CaseWhenEval extends EvalNode {
}
}
+ @Override
public String toString() {
StringBuilder sb = new StringBuilder("CASE\n");
for (WhenEval when : whens) {
@@ -130,13 +134,13 @@ public class CaseWhenEval extends EvalNode {
return false;
}
}
- return elseResult.equals(other.elseResult);
+ return TUtil.checkEquals(elseResult, other.elseResult);
} else {
return false;
}
}
- public static class WhenEval extends EvalNode {
+ public static class WhenEval extends EvalNode implements GsonObject {
@Expose private EvalNode condition;
@Expose private EvalNode result;
@@ -179,10 +183,27 @@ public class CaseWhenEval extends EvalNode {
return this.result;
}
+ @Override
+ public boolean equals(Object object) {
+ if (object instanceof WhenEval) {
+ WhenEval other = (WhenEval) object;
+ return condition.equals(other.condition) &&
+ result.equals(other.result);
+ } else {
+ return false;
+ }
+ }
+
+ @Override
public String toString() {
return "WHEN " + condition + " THEN " + result;
}
+ @Override
+ public String toJson() {
+ return CoreGsonHelper.toJson(WhenEval.this, WhenEval.class);
+ }
+
private class WhenContext implements EvalContext {
EvalContext condCtx;
EvalContext resultCtx;
@@ -210,17 +231,6 @@ public class CaseWhenEval extends EvalNode {
result.postOrder(visitor);
visitor.visit(this);
}
-
- @Override
- public boolean equals(Object obj) {
- if (obj instanceof WhenEval) {
- WhenEval other = (WhenEval) obj;
- return this.condition == other.condition
- && this.result == other.result;
- } else {
- return false;
- }
- }
}
private class CaseContext implements EvalContext {
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/ConstEval.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/ConstEval.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/ConstEval.java
index 7ab019f..069db2c 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/ConstEval.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/ConstEval.java
@@ -19,13 +19,11 @@
package org.apache.tajo.engine.eval;
import com.google.common.base.Objects;
-import com.google.gson.Gson;
import com.google.gson.annotations.Expose;
import org.apache.tajo.catalog.CatalogUtil;
import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.datum.Datum;
-import org.apache.tajo.engine.json.GsonCreator;
public class ConstEval extends EvalNode implements Comparable<ConstEval>, Cloneable {
@Expose Datum datum = null;
@@ -53,11 +51,6 @@ public class ConstEval extends EvalNode implements Comparable<ConstEval>, Clonea
public String toString() {
return datum.toString();
}
-
- public String toJSON() {
- Gson gson = GsonCreator.getInstance();
- return gson.toJson(this, EvalNode.class);
- }
@Override
public DataType [] getValueType() {
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/EvalNode.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/EvalNode.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/EvalNode.java
index b6c7276..12e1cf8 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/EvalNode.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/EvalNode.java
@@ -18,21 +18,18 @@
package org.apache.tajo.engine.eval;
-import com.google.gson.Gson;
import com.google.gson.annotations.Expose;
+import org.apache.tajo.json.GsonObject;
import org.apache.tajo.catalog.Schema;
import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.datum.Datum;
-import org.apache.tajo.engine.json.GsonCreator;
+import org.apache.tajo.engine.json.CoreGsonHelper;
import org.apache.tajo.storage.Tuple;
-public abstract class EvalNode implements Cloneable {
- @Expose
- protected Type type;
- @Expose
- protected EvalNode leftExpr;
- @Expose
- protected EvalNode rightExpr;
+public abstract class EvalNode implements Cloneable, GsonObject {
+ @Expose protected Type type;
+ @Expose protected EvalNode leftExpr;
+ @Expose protected EvalNode rightExpr;
public EvalNode(Type type) {
this.type = type;
@@ -83,10 +80,10 @@ public abstract class EvalNode implements Cloneable {
public String toString() {
return "("+this.type+"("+leftExpr.toString()+" "+rightExpr.toString()+"))";
}
-
- public String toJSON() {
- Gson gson = GsonCreator.getInstance();
- return gson.toJson(this, EvalNode.class);
+
+ @Override
+ public String toJson() {
+ return CoreGsonHelper.toJson(this, EvalNode.class);
}
public void eval(EvalContext ctx, Schema schema, Tuple tuple) {}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/FieldEval.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/FieldEval.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/FieldEval.java
index 75a6eb7..9282497 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/FieldEval.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/FieldEval.java
@@ -18,13 +18,11 @@
package org.apache.tajo.engine.eval;
-import com.google.gson.Gson;
import com.google.gson.annotations.Expose;
import org.apache.tajo.catalog.Column;
import org.apache.tajo.catalog.Schema;
import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.datum.Datum;
-import org.apache.tajo.engine.json.GsonCreator;
import org.apache.tajo.engine.utils.SchemaUtil;
import org.apache.tajo.storage.Tuple;
@@ -130,11 +128,6 @@ public class FieldEval extends EvalNode implements Cloneable {
return eval;
}
-
- public String toJSON() {
- Gson gson = GsonCreator.getInstance();
- return gson.toJson(this, EvalNode.class);
- }
public void preOrder(EvalNodeVisitor visitor) {
visitor.visit(this);
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/FuncCallEval.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/FuncCallEval.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/FuncCallEval.java
index 9787805..d44385e 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/FuncCallEval.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/FuncCallEval.java
@@ -19,13 +19,11 @@
package org.apache.tajo.engine.eval;
import com.google.common.base.Objects;
-import com.google.gson.Gson;
import com.google.gson.annotations.Expose;
import org.apache.tajo.catalog.FunctionDesc;
import org.apache.tajo.catalog.Schema;
import org.apache.tajo.catalog.function.GeneralFunction;
import org.apache.tajo.datum.Datum;
-import org.apache.tajo.engine.json.GsonCreator;
import org.apache.tajo.storage.Tuple;
import org.apache.tajo.storage.VTuple;
import org.apache.tajo.util.TUtil;
@@ -66,12 +64,6 @@ public class FuncCallEval extends FuncEval {
}
return instance.eval(params);
}
-
- @Override
- public String toJSON() {
- Gson gson = GsonCreator.getInstance();
- return gson.toJson(this, EvalNode.class);
- }
@Override
public boolean equals(Object obj) {
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/FuncEval.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/FuncEval.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/FuncEval.java
index 350b761..2ff6d19 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/FuncEval.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/FuncEval.java
@@ -19,13 +19,11 @@
package org.apache.tajo.engine.eval;
import com.google.common.base.Objects;
-import com.google.gson.Gson;
import com.google.gson.annotations.Expose;
import org.apache.tajo.catalog.FunctionDesc;
import org.apache.tajo.catalog.Schema;
import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.datum.Datum;
-import org.apache.tajo.engine.json.GsonCreator;
import org.apache.tajo.storage.Tuple;
import org.apache.tajo.util.TUtil;
@@ -77,12 +75,6 @@ public abstract class FuncEval extends EvalNode implements Cloneable {
}
return funcDesc.getSignature()+"("+sb+")";
}
-
- @Override
- public String toJSON() {
- Gson gson = GsonCreator.getInstance();
- return gson.toJson(this, EvalNode.class);
- }
@Override
public boolean equals(Object obj) {
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/json/CoreGsonHelper.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/json/CoreGsonHelper.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/json/CoreGsonHelper.java
new file mode 100644
index 0000000..a3b8ac6
--- /dev/null
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/json/CoreGsonHelper.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.engine.json;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import org.apache.hadoop.fs.Path;
+import org.apache.tajo.json.GsonObject;
+import org.apache.tajo.catalog.TableDesc;
+import org.apache.tajo.catalog.TableMeta;
+import org.apache.tajo.catalog.function.AggFunction;
+import org.apache.tajo.catalog.function.Function;
+import org.apache.tajo.catalog.function.GeneralFunction;
+import org.apache.tajo.catalog.json.FunctionAdapter;
+import org.apache.tajo.catalog.json.TableDescAdapter;
+import org.apache.tajo.catalog.json.TableMetaAdapter;
+import org.apache.tajo.common.TajoDataTypes.DataType;
+import org.apache.tajo.datum.Datum;
+import org.apache.tajo.engine.eval.EvalNode;
+import org.apache.tajo.engine.planner.logical.LogicalNode;
+import org.apache.tajo.json.*;
+import org.apache.tajo.util.TUtil;
+
+import java.lang.reflect.Type;
+import java.util.Map;
+
+public class CoreGsonHelper {
+ private static Gson gson;
+ private static Gson gsonPretty;
+
+ private CoreGsonHelper() {
+ }
+
+ private static Map<Type, GsonSerDerAdapter> registerAdapters() {
+ Map<Type, GsonSerDerAdapter> adapters = TUtil.newHashMap();
+ adapters.put(Path.class, new PathSerializer());
+ adapters.put(TableDesc.class, new TableDescAdapter());
+ adapters.put(Class.class, new ClassNameSerializer());
+ adapters.put(LogicalNode.class, new LogicalNodeAdapter());
+ adapters.put(EvalNode.class, new EvalNodeAdapter());
+ adapters.put(TableMeta.class, new TableMetaAdapter());
+ adapters.put(Function.class, new FunctionAdapter());
+ adapters.put(GeneralFunction.class, new FunctionAdapter());
+ adapters.put(AggFunction.class, new FunctionAdapter());
+ adapters.put(Datum.class, new DatumAdapter());
+ adapters.put(DataType.class, new DataTypeAdapter());
+
+ return adapters;
+ }
+
+ public static Gson getInstance() {
+ if (gson == null ) {
+ GsonHelper helper = new GsonHelper(registerAdapters());
+ gson = helper.getGson();
+ }
+ return gson;
+ }
+
+ public static Gson getPrettyInstance() {
+ if (gsonPretty == null) {
+ GsonBuilder prettyBuilder = new GsonBuilder()
+ .setPrettyPrinting()
+ .excludeFieldsWithoutExposeAnnotation();
+ GsonHelper.registerAdapters(prettyBuilder, registerAdapters());
+ gsonPretty = prettyBuilder.create();
+ }
+
+ return gsonPretty;
+ }
+
+ public static String toJson(GsonObject object, Class<? extends GsonObject> clazz) {
+ return getInstance().toJson(object, clazz);
+ }
+
+ public static <T extends GsonObject> T fromJson(String json, Class<T> clazz) {
+ return getInstance().fromJson(json, clazz);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/json/EvalNodeAdapter.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/json/EvalNodeAdapter.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/json/EvalNodeAdapter.java
index 49ea542..74c7305 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/json/EvalNodeAdapter.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/json/EvalNodeAdapter.java
@@ -23,10 +23,11 @@ package org.apache.tajo.engine.json;
import com.google.gson.*;
import org.apache.tajo.engine.eval.EvalNode;
+import org.apache.tajo.json.GsonSerDerAdapter;
import java.lang.reflect.Type;
-public class EvalNodeAdapter implements JsonSerializer<EvalNode>, JsonDeserializer<EvalNode> {
+public class EvalNodeAdapter implements GsonSerDerAdapter<EvalNode> {
@Override
public EvalNode deserialize(JsonElement json, Type type,
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/json/FragmentDeserializer.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/json/FragmentDeserializer.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/json/FragmentDeserializer.java
index 41b2ef6..6231c03 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/json/FragmentDeserializer.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/json/FragmentDeserializer.java
@@ -36,11 +36,11 @@ public class FragmentDeserializer implements JsonDeserializer<Fragment> {
@Override
public Fragment deserialize(JsonElement json, Type type,
JsonDeserializationContext ctx) throws JsonParseException {
- Gson gson = GsonCreator.getInstance();
+ Gson gson = CoreGsonHelper.getInstance();
JsonObject fragObj = json.getAsJsonObject();
JsonObject metaObj = fragObj.get("meta").getAsJsonObject();
TableMetaImpl meta = new TableMetaImpl(
- gson.fromJson(metaObj.get("schema"), Schema.class),
+ gson.fromJson(metaObj.get("schema"), Schema.class),
gson.fromJson(metaObj.get("storeType"), StoreType.class),
gson.fromJson(metaObj.get("options"), Options.class));
Fragment fragment = new Fragment(fragObj.get("tabletId").getAsString(),
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/json/FromTableDeserializer.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/json/FromTableDeserializer.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/json/FromTableDeserializer.java
index 4a5b2ac..501ae0a 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/json/FromTableDeserializer.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/json/FromTableDeserializer.java
@@ -34,7 +34,7 @@ public class FromTableDeserializer implements JsonDeserializer<FromTable> {
@Override
public FromTable deserialize(JsonElement json, Type type,
JsonDeserializationContext ctx) throws JsonParseException {
- Gson gson = GsonCreator.getInstance();
+ Gson gson = CoreGsonHelper.getInstance();
JsonObject fromTableObj = json.getAsJsonObject();
boolean isFragment = fromTableObj.get("isFragment").getAsBoolean();
TableDesc desc;
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/json/GsonCreator.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/json/GsonCreator.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/json/GsonCreator.java
deleted file mode 100644
index 98e7f1f..0000000
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/json/GsonCreator.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/**
- * 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.engine.json;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import org.apache.hadoop.fs.Path;
-import org.apache.tajo.catalog.TableDesc;
-import org.apache.tajo.catalog.TableMeta;
-import org.apache.tajo.catalog.function.AggFunction;
-import org.apache.tajo.catalog.function.Function;
-import org.apache.tajo.catalog.function.GeneralFunction;
-import org.apache.tajo.catalog.json.FunctionAdapter;
-import org.apache.tajo.catalog.json.TableDescAdapter;
-import org.apache.tajo.catalog.json.TableMetaAdapter;
-import org.apache.tajo.common.TajoDataTypes.DataType;
-import org.apache.tajo.datum.Datum;
-import org.apache.tajo.datum.json.DatumAdapter;
-import org.apache.tajo.engine.eval.EvalNode;
-import org.apache.tajo.engine.planner.logical.LogicalNode;
-import org.apache.tajo.gson.*;
-
-public class GsonCreator {
- private static GsonBuilder builder;
- private static Gson gson;
-
- private static void init() {
- if (builder == null) {
- builder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation();
- builder.registerTypeAdapter(Path.class, new PathSerializer());
- builder.registerTypeAdapter(Path.class, new PathDeserializer());
- builder.registerTypeAdapter(TableDesc.class, new TableDescAdapter());
- builder.registerTypeAdapter(Class.class, new ClassNameSerializer());
- builder.registerTypeAdapter(Class.class, new ClassNameDeserializer());
- builder.registerTypeAdapter(LogicalNode.class, new LogicalNodeAdapter());
- builder.registerTypeAdapter(EvalNode.class, new EvalNodeAdapter());
- builder.registerTypeAdapter(TableMeta.class, new TableMetaAdapter());
- builder.registerTypeAdapter(Datum.class, new DatumTypeAdapter());
- builder.registerTypeAdapter(Function.class, new FunctionAdapter());
- builder.registerTypeAdapter(GeneralFunction.class, new FunctionAdapter());
- builder.registerTypeAdapter(AggFunction.class, new FunctionAdapter());
- builder.registerTypeAdapter(Datum.class, new DatumAdapter());
- builder.registerTypeAdapter(DataType.class, new DataTypeAdapter());
- }
- }
-
- public static Gson getInstance() {
- init();
- if (gson == null ) {
- gson = builder.create();
- }
- return gson;
- }
-
- public static Gson getPrettyInstance() {
- init();
- if (gson == null ) {
- gson = builder.setPrettyPrinting().create();
- }
- return gson;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/json/LogicalNodeAdapter.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/json/LogicalNodeAdapter.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/json/LogicalNodeAdapter.java
index 1716916..d98bd53 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/json/LogicalNodeAdapter.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/json/LogicalNodeAdapter.java
@@ -23,10 +23,11 @@ package org.apache.tajo.engine.json;
import com.google.gson.*;
import org.apache.tajo.engine.planner.logical.LogicalNode;
+import org.apache.tajo.json.GsonSerDerAdapter;
import java.lang.reflect.Type;
-public class LogicalNodeAdapter implements JsonSerializer<LogicalNode>, JsonDeserializer<LogicalNode> {
+public class LogicalNodeAdapter implements GsonSerDerAdapter<LogicalNode> {
@Override
public LogicalNode deserialize(JsonElement json, Type type,
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/FromTable.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/FromTable.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/FromTable.java
index 24161d4..04c1bb9 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/FromTable.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/FromTable.java
@@ -18,19 +18,17 @@
package org.apache.tajo.engine.planner;
-import com.google.gson.Gson;
import com.google.gson.annotations.Expose;
+import org.apache.tajo.json.GsonObject;
import org.apache.tajo.catalog.Schema;
import org.apache.tajo.catalog.TableDesc;
import org.apache.tajo.catalog.proto.CatalogProtos;
-import org.apache.tajo.engine.json.GsonCreator;
+import org.apache.tajo.engine.json.CoreGsonHelper;
import org.apache.tajo.util.TUtil;
-public class FromTable implements Cloneable {
- @Expose
- private TableDesc desc;
- @Expose
- private String alias = null;
+public class FromTable implements Cloneable, GsonObject {
+ @Expose private TableDesc desc;
+ @Expose private String alias = null;
public FromTable() {}
@@ -97,9 +95,8 @@ public class FromTable implements Cloneable {
return table;
}
- public String toJSON() {
- desc.initFromProto();
- Gson gson = GsonCreator.getInstance();
- return gson.toJson(this, FromTable.class);
+ @Override
+ public String toJson() {
+ return CoreGsonHelper.toJson(this, FromTable.class);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/Target.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/Target.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/Target.java
index b2651a1..3db4d94 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/Target.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/Target.java
@@ -19,17 +19,18 @@
package org.apache.tajo.engine.planner;
import com.google.gson.annotations.Expose;
+import org.apache.tajo.json.GsonObject;
import org.apache.tajo.catalog.Column;
import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.common.TajoDataTypes.Type;
import org.apache.tajo.engine.eval.EvalNode;
-import org.apache.tajo.engine.json.GsonCreator;
+import org.apache.tajo.engine.json.CoreGsonHelper;
import org.apache.tajo.util.TUtil;
/**
* A Target contains how to evaluate an expression and its alias name.
*/
-public class Target implements Cloneable {
+public class Target implements Cloneable, GsonObject {
@Expose private EvalNode expr;
@Expose private Column column;
@Expose private String alias = null;
@@ -109,7 +110,7 @@ public class Target implements Cloneable {
return target;
}
- public String toJSON() {
- return GsonCreator.getInstance().toJson(this, Target.class);
+ public String toJson() {
+ return CoreGsonHelper.toJson(this, Target.class);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/BinaryNode.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/BinaryNode.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/BinaryNode.java
index 061964d..1adddf3 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/BinaryNode.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/BinaryNode.java
@@ -22,13 +22,11 @@
package org.apache.tajo.engine.planner.logical;
import com.google.gson.annotations.Expose;
-import org.apache.tajo.engine.json.GsonCreator;
+import org.apache.tajo.json.GsonObject;
-public abstract class BinaryNode extends LogicalNode implements Cloneable {
- @Expose
- LogicalNode outer = null;
- @Expose
- LogicalNode inner = null;
+public abstract class BinaryNode extends LogicalNode implements Cloneable, GsonObject {
+ @Expose LogicalNode outer = null;
+ @Expose LogicalNode inner = null;
public BinaryNode() {
super();
@@ -77,10 +75,4 @@ public abstract class BinaryNode extends LogicalNode implements Cloneable {
inner.postOrder(visitor);
visitor.visit(this);
}
-
- public String toJSON() {
- outer.toJSON();
- inner.toJSON();
- return GsonCreator.getInstance().toJson(this, LogicalNode.class);
- }
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/CreateTableNode.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/CreateTableNode.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/CreateTableNode.java
index c7a6ad2..a4d335b 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/CreateTableNode.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/CreateTableNode.java
@@ -24,7 +24,6 @@ import org.apache.tajo.catalog.Column;
import org.apache.tajo.catalog.Options;
import org.apache.tajo.catalog.Schema;
import org.apache.tajo.catalog.proto.CatalogProtos.StoreType;
-import org.apache.tajo.engine.json.GsonCreator;
import org.apache.tajo.util.TUtil;
public class CreateTableNode extends LogicalNode implements Cloneable {
@@ -143,10 +142,6 @@ public class CreateTableNode extends LogicalNode implements Cloneable {
return sb.toString();
}
-
- public String toJSON() {
- return GsonCreator.getInstance().toJson(this, LogicalNode.class);
- }
@Override
public void preOrder(LogicalNodeVisitor visitor) {
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/DropTableNode.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/DropTableNode.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/DropTableNode.java
index 877b805..d586bf9 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/DropTableNode.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/DropTableNode.java
@@ -18,8 +18,6 @@
package org.apache.tajo.engine.planner.logical;
-import org.apache.tajo.engine.json.GsonCreator;
-
public class DropTableNode extends LogicalNode {
private String tableName;
@@ -53,12 +51,6 @@ public class DropTableNode extends LogicalNode {
return "DROP TABLE " + tableName;
}
-
- @Override
- public String toJSON() {
- return GsonCreator.getInstance().toJson(this, LogicalNode.class);
- }
-
@Override
public void preOrder(LogicalNodeVisitor visitor) {
visitor.visit(this);
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/EvalExprNode.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/EvalExprNode.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/EvalExprNode.java
index 7bcf168..2ac6b2b 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/EvalExprNode.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/EvalExprNode.java
@@ -21,10 +21,9 @@
*/
package org.apache.tajo.engine.planner.logical;
-import com.google.gson.Gson;
import com.google.gson.annotations.Expose;
-import org.apache.tajo.engine.json.GsonCreator;
import org.apache.tajo.engine.planner.Target;
+import org.apache.tajo.util.TUtil;
public class EvalExprNode extends LogicalNode implements Projectable {
@Expose private Target[] exprs;
@@ -35,12 +34,6 @@ public class EvalExprNode extends LogicalNode implements Projectable {
}
@Override
- public String toJSON() {
- Gson gson = GsonCreator.getInstance();
- return gson.toJson(this);
- }
-
- @Override
public boolean hasTargets() {
return true;
}
@@ -77,6 +70,15 @@ public class EvalExprNode extends LogicalNode implements Projectable {
sb.append("}");
return sb.toString();
}
+
+ public boolean equals(Object object) {
+ if (object instanceof EvalExprNode) {
+ EvalExprNode other = (EvalExprNode) object;
+ return TUtil.checkEquals(this.exprs, other.exprs);
+ } else {
+ return false;
+ }
+ }
@Override
public void preOrder(LogicalNodeVisitor visitor) {
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/ExceptNode.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/ExceptNode.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/ExceptNode.java
index 41e606f..379a83b 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/ExceptNode.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/ExceptNode.java
@@ -21,8 +21,6 @@
*/
package org.apache.tajo.engine.planner.logical;
-import org.apache.tajo.engine.json.GsonCreator;
-
public class ExceptNode extends BinaryNode {
public ExceptNode() {
@@ -38,9 +36,4 @@ public class ExceptNode extends BinaryNode {
public String toString() {
return getOuterNode().toString() + "\n EXCEPT \n" + getInnerNode().toString();
}
-
- @Override
- public String toJSON() {
- return GsonCreator.getInstance().toJson(this, LogicalNode.class);
- }
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/GroupbyNode.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/GroupbyNode.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/GroupbyNode.java
index 9c1c116..b35a291 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/GroupbyNode.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/GroupbyNode.java
@@ -21,19 +21,13 @@ package org.apache.tajo.engine.planner.logical;
import com.google.gson.annotations.Expose;
import org.apache.tajo.catalog.Column;
import org.apache.tajo.engine.eval.EvalNode;
-import org.apache.tajo.engine.json.GsonCreator;
import org.apache.tajo.engine.planner.Target;
import org.apache.tajo.util.TUtil;
-import java.util.Arrays;
-
public class GroupbyNode extends UnaryNode implements Projectable, Cloneable {
- @Expose
- private Column[] columns;
- @Expose
- private EvalNode havingCondition = null;
- @Expose
- private Target[] targets;
+ @Expose private Column [] columns;
+ @Expose private EvalNode havingCondition = null;
+ @Expose private Target [] targets;
public GroupbyNode() {
super();
@@ -118,11 +112,12 @@ public class GroupbyNode extends UnaryNode implements Projectable, Cloneable {
public boolean equals(Object obj) {
if (obj instanceof GroupbyNode) {
GroupbyNode other = (GroupbyNode) obj;
- return super.equals(other)
- && Arrays.equals(columns, other.columns)
- && TUtil.checkEquals(havingCondition, other.havingCondition)
- && TUtil.checkEquals(targets, other.targets)
- && getSubNode().equals(other.getSubNode());
+ boolean eq = super.equals(other);
+ eq = eq && TUtil.checkEquals(columns, other.columns);
+ eq = eq && TUtil.checkEquals(havingCondition, other.havingCondition);
+ eq = eq && TUtil.checkEquals(targets, other.targets);
+ eq = eq && subExpr.equals(other.subExpr);
+ return eq;
} else {
return false;
}
@@ -148,8 +143,4 @@ public class GroupbyNode extends UnaryNode implements Projectable, Cloneable {
return grp;
}
-
- public String toJSON() {
- return GsonCreator.getInstance().toJson(this, LogicalNode.class);
- }
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/IndexScanNode.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/IndexScanNode.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/IndexScanNode.java
index af3b2c4..b14a54b 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/IndexScanNode.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/IndexScanNode.java
@@ -23,11 +23,10 @@ import com.google.gson.annotations.Expose;
import org.apache.tajo.catalog.Schema;
import org.apache.tajo.catalog.SortSpec;
import org.apache.tajo.datum.Datum;
-import org.apache.tajo.engine.json.GsonCreator;
+import org.apache.tajo.engine.json.CoreGsonHelper;
public class IndexScanNode extends ScanNode {
-
- @Expose private SortSpec[]sortKeys;
+ @Expose private SortSpec [] sortKeys;
@Expose private Schema keySchema = null;
@Expose private Datum[] datum = null;
//TODO- @Expose private IndexType type;
@@ -66,15 +65,10 @@ public class IndexScanNode extends ScanNode {
public void setKeySchema( Schema keySchema ) {
this.keySchema = keySchema;
}
-
- @Override
- public String toJSON() {
- GsonCreator.getInstance().toJson(this, LogicalNode.class);
- return null;
- }
+
@Override
public String toString() {
- Gson gson = GsonCreator.getInstance();
+ Gson gson = CoreGsonHelper.getInstance();
StringBuilder builder = new StringBuilder();
builder.append("IndexScanNode : {\n");
builder.append(" \"keySchema\" : \"" + gson.toJson(this.keySchema) + "\"\n");
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/IntersectNode.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/IntersectNode.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/IntersectNode.java
index aa90df9..1d00a56 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/IntersectNode.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/IntersectNode.java
@@ -21,8 +21,6 @@
*/
package org.apache.tajo.engine.planner.logical;
-import org.apache.tajo.engine.json.GsonCreator;
-
public class IntersectNode extends BinaryNode {
public IntersectNode() {
@@ -38,9 +36,4 @@ public class IntersectNode extends BinaryNode {
public String toString() {
return getOuterNode().toString() + "\n INTERSECT \n" + getInnerNode().toString();
}
-
- @Override
- public String toJSON() {
- return GsonCreator.getInstance().toJson(this, LogicalNode.class);
- }
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/JoinNode.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/JoinNode.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/JoinNode.java
index a5c288c..cd79e4d 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/JoinNode.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/JoinNode.java
@@ -24,7 +24,6 @@ package org.apache.tajo.engine.planner.logical;
import com.google.gson.annotations.Expose;
import org.apache.tajo.algebra.JoinType;
import org.apache.tajo.engine.eval.EvalNode;
-import org.apache.tajo.engine.json.GsonCreator;
import org.apache.tajo.engine.planner.Target;
public class JoinNode extends BinaryNode implements Projectable, Cloneable {
@@ -122,8 +121,4 @@ public class JoinNode extends BinaryNode implements Projectable, Cloneable {
sb.append("\n" + getOuterNode().toString()).append(" and ").append(getInnerNode());
return sb.toString();
}
-
- public String toJSON() {
- return GsonCreator.getInstance().toJson(this, LogicalNode.class);
- }
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/LimitNode.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/LimitNode.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/LimitNode.java
index ceef9d0..1d24941 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/LimitNode.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/LimitNode.java
@@ -19,11 +19,9 @@
package org.apache.tajo.engine.planner.logical;
import com.google.gson.annotations.Expose;
-import org.apache.tajo.engine.json.GsonCreator;
public final class LimitNode extends UnaryNode implements Cloneable {
- @Expose
- private long fetchFirstNum;
+ @Expose private long fetchFirstNum;
public LimitNode() {
super();
@@ -66,8 +64,4 @@ public final class LimitNode extends UnaryNode implements Cloneable {
return sb.toString();
}
-
- public String toJSON() {
- return GsonCreator.getInstance().toJson(this, LogicalNode.class);
- }
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/LogicalNode.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/LogicalNode.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/LogicalNode.java
index d47a84f..4891d82 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/LogicalNode.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/LogicalNode.java
@@ -22,9 +22,12 @@
package org.apache.tajo.engine.planner.logical;
import com.google.gson.annotations.Expose;
+import org.apache.tajo.json.GsonObject;
import org.apache.tajo.catalog.Schema;
+import org.apache.tajo.engine.json.CoreGsonHelper;
+import org.apache.tajo.util.TUtil;
-public abstract class LogicalNode implements Cloneable {
+public abstract class LogicalNode implements Cloneable, GsonObject {
@Expose private ExprType type;
@Expose private Schema inputSchema;
@Expose private Schema outputSchema;
@@ -76,12 +79,12 @@ public abstract class LogicalNode implements Cloneable {
if (obj instanceof LogicalNode) {
LogicalNode other = (LogicalNode) obj;
- boolean b1 = this.type == other.type;
- boolean b2 = this.inputSchema.equals(other.inputSchema);
- boolean b3 = this.outputSchema.equals(other.outputSchema);
- boolean b4 = this.cost == other.cost;
+ boolean eq = this.type == other.type;
+ eq = eq && TUtil.checkEquals(this.inputSchema, other.inputSchema);
+ eq = eq && TUtil.checkEquals(this.outputSchema, other.outputSchema);
+ eq = eq && this.cost == other.cost;
- return b1 && b2 && b3 && b4;
+ return eq;
} else {
return false;
}
@@ -98,8 +101,11 @@ public abstract class LogicalNode implements Cloneable {
return node;
}
-
- public abstract String toJSON();
+
+ @Override
+ public String toJson() {
+ return CoreGsonHelper.toJson(this, LogicalNode.class);
+ }
public abstract void preOrder(LogicalNodeVisitor visitor);
public abstract void postOrder(LogicalNodeVisitor visitor);
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/LogicalRootNode.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/LogicalRootNode.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/LogicalRootNode.java
index 154b931..8b2fa77 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/LogicalRootNode.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/LogicalRootNode.java
@@ -18,8 +18,6 @@
package org.apache.tajo.engine.planner.logical;
-import org.apache.tajo.engine.json.GsonCreator;
-
public class LogicalRootNode extends UnaryNode implements Cloneable {
public LogicalRootNode() {
super(ExprType.ROOT);
@@ -30,11 +28,6 @@ public class LogicalRootNode extends UnaryNode implements Cloneable {
}
@Override
- public String toJSON() {
- return GsonCreator.getInstance().toJson(this, LogicalNode.class);
- }
-
- @Override
public boolean equals(Object obj) {
if (obj instanceof LogicalRootNode) {
LogicalRootNode other = (LogicalRootNode) obj;
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/ProjectionNode.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/ProjectionNode.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/ProjectionNode.java
index 999b804..128bd43 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/ProjectionNode.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/ProjectionNode.java
@@ -19,7 +19,6 @@
package org.apache.tajo.engine.planner.logical;
import com.google.gson.annotations.Expose;
-import org.apache.tajo.engine.json.GsonCreator;
import org.apache.tajo.engine.planner.Target;
import java.util.Arrays;
@@ -109,8 +108,4 @@ public class ProjectionNode extends UnaryNode implements Projectable {
return projNode;
}
-
- public String toJSON() {
- return GsonCreator.getInstance().toJson(this, LogicalNode.class);
- }
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/ScanNode.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/ScanNode.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/ScanNode.java
index 7c195dd..6b45e8a 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/ScanNode.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/ScanNode.java
@@ -22,7 +22,6 @@ import com.google.common.base.Objects;
import com.google.gson.annotations.Expose;
import org.apache.tajo.catalog.Schema;
import org.apache.tajo.engine.eval.EvalNode;
-import org.apache.tajo.engine.json.GsonCreator;
import org.apache.tajo.engine.planner.FromTable;
import org.apache.tajo.engine.planner.Target;
import org.apache.tajo.util.TUtil;
@@ -147,10 +146,6 @@ public class ScanNode extends LogicalNode implements Projectable {
sb.append("\n \"in schema\": ").append(getInSchema());
return sb.toString();
}
-
- public String toJSON() {
- return GsonCreator.getInstance().toJson(this, LogicalNode.class);
- }
@Override
public int hashCode() {
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/SelectionNode.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/SelectionNode.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/SelectionNode.java
index b822d8a..2bd1e81 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/SelectionNode.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/SelectionNode.java
@@ -20,12 +20,9 @@ package org.apache.tajo.engine.planner.logical;
import com.google.gson.annotations.Expose;
import org.apache.tajo.engine.eval.EvalNode;
-import org.apache.tajo.engine.json.GsonCreator;
public class SelectionNode extends UnaryNode implements Cloneable {
-
- @Expose
- private EvalNode qual;
+ @Expose private EvalNode qual;
public SelectionNode() {
super();
@@ -73,8 +70,4 @@ public class SelectionNode extends UnaryNode implements Cloneable {
return selNode;
}
-
- public String toJSON() {
- return GsonCreator.getInstance().toJson(this, LogicalNode.class);
- }
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/SortNode.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/SortNode.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/SortNode.java
index 947553a..4efe842 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/SortNode.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/SortNode.java
@@ -22,12 +22,11 @@ import com.google.common.base.Preconditions;
import com.google.gson.annotations.Expose;
import org.apache.tajo.catalog.Schema;
import org.apache.tajo.catalog.SortSpec;
-import org.apache.tajo.engine.json.GsonCreator;
import org.apache.tajo.util.TUtil;
public final class SortNode extends UnaryNode implements Cloneable {
@Expose
- private SortSpec[] sortKeys;
+ private SortSpec [] sortKeys;
public SortNode() {
super();
@@ -54,9 +53,10 @@ public final class SortNode extends UnaryNode implements Cloneable {
public boolean equals(Object obj) {
if (obj instanceof SortNode) {
SortNode other = (SortNode) obj;
- return super.equals(other)
- && TUtil.checkEquals(sortKeys, other.sortKeys)
- && subExpr.equals(other.subExpr);
+ boolean eq = super.equals(other);
+ eq = eq && TUtil.checkEquals(sortKeys, other.sortKeys);
+ eq = eq && subExpr.equals(other.subExpr);
+ return eq;
} else {
return false;
}
@@ -86,12 +86,4 @@ public final class SortNode extends UnaryNode implements Cloneable {
return sb.toString()+"\n"
+ getSubNode().toString();
}
-
- public String toJSON() {
- subExpr.toJSON();
- for (int i = 0; i < sortKeys.length; i++) {
- sortKeys[i].toJSON();
- }
- return GsonCreator.getInstance().toJson(this, LogicalNode.class);
- }
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/StoreTableNode.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/StoreTableNode.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/StoreTableNode.java
index c3d292f..ec7b1b7 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/StoreTableNode.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/StoreTableNode.java
@@ -115,13 +115,14 @@ public class StoreTableNode extends UnaryNode implements Cloneable {
public boolean equals(Object obj) {
if (obj instanceof StoreTableNode) {
StoreTableNode other = (StoreTableNode) obj;
- return super.equals(other)
- && this.tableName.equals(other.tableName)
- && this.storageType.equals(other.storageType)
- && this.numPartitions == other.numPartitions
- && TUtil.checkEquals(partitionKeys, other.partitionKeys)
- && TUtil.checkEquals(options, other.options)
- && subExpr.equals(other.subExpr);
+ boolean eq = super.equals(other);
+ eq = eq && this.tableName.equals(other.tableName);
+ eq = eq && this.storageType.equals(other.storageType);
+ eq = eq && this.numPartitions == other.numPartitions;
+ eq = eq && TUtil.checkEquals(partitionKeys, other.partitionKeys);
+ eq = eq && TUtil.checkEquals(options, other.options);
+ eq = eq && subExpr.equals(other.subExpr);
+ return eq;
} else {
return false;
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/UnaryNode.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/UnaryNode.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/UnaryNode.java
index b415442..cd3aa1c 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/UnaryNode.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/UnaryNode.java
@@ -22,12 +22,10 @@
package org.apache.tajo.engine.planner.logical;
import com.google.gson.annotations.Expose;
-import org.apache.tajo.engine.json.GsonCreator;
public abstract class UnaryNode extends LogicalNode implements Cloneable {
- @Expose
- LogicalNode subExpr;
+ @Expose LogicalNode subExpr;
public UnaryNode() {
super();
@@ -65,9 +63,4 @@ public abstract class UnaryNode extends LogicalNode implements Cloneable {
subExpr.postOrder(visitor);
visitor.visit(this);
}
-
- public String toJSON() {
- subExpr.toJSON();
- return GsonCreator.getInstance().toJson(this, LogicalNode.class);
- }
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/UnionNode.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/UnionNode.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/UnionNode.java
index e336549..d0ded08 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/UnionNode.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/UnionNode.java
@@ -21,8 +21,6 @@
*/
package org.apache.tajo.engine.planner.logical;
-import org.apache.tajo.engine.json.GsonCreator;
-
public class UnionNode extends BinaryNode {
public UnionNode() {
@@ -38,9 +36,4 @@ public class UnionNode extends BinaryNode {
public String toString() {
return getOuterNode().toString() + "\n UNION \n" + getInnerNode().toString();
}
-
- @Override
- public String toJSON() {
- return GsonCreator.getInstance().toJson(this, LogicalNode.class);
- }
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/extended/ReceiveNode.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/extended/ReceiveNode.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/extended/ReceiveNode.java
index 2a6112e..94ecffe 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/extended/ReceiveNode.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/extended/ReceiveNode.java
@@ -25,9 +25,8 @@ import com.google.common.base.Objects;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
import com.google.gson.annotations.Expose;
-import org.apache.tajo.engine.json.GsonCreator;
+import org.apache.tajo.engine.json.CoreGsonHelper;
import org.apache.tajo.engine.planner.logical.ExprType;
import org.apache.tajo.engine.planner.logical.LogicalNode;
import org.apache.tajo.engine.planner.logical.LogicalNodeVisitor;
@@ -107,16 +106,11 @@ public final class ReceiveNode extends LogicalNode implements Cloneable {
@Override
public String toString() {
- Gson gson = new GsonBuilder().setPrettyPrinting().create();
+ Gson gson = CoreGsonHelper.getPrettyInstance();
return gson.toJson(this);
}
@Override
- public String toJSON() {
- return GsonCreator.getInstance().toJson(this, LogicalNode.class);
- }
-
- @Override
public void preOrder(LogicalNodeVisitor visitor) {
visitor.visit(this);
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/1c677cc5/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/extended/SendNode.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/extended/SendNode.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/extended/SendNode.java
index a994c6c..8d9064e 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/extended/SendNode.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/extended/SendNode.java
@@ -25,12 +25,10 @@ import com.google.common.base.Objects;
import com.google.common.base.Preconditions;
import com.google.common.collect.Maps;
import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
import com.google.gson.annotations.Expose;
import org.apache.tajo.catalog.Column;
-import org.apache.tajo.engine.json.GsonCreator;
+import org.apache.tajo.engine.json.CoreGsonHelper;
import org.apache.tajo.engine.planner.logical.ExprType;
-import org.apache.tajo.engine.planner.logical.LogicalNode;
import org.apache.tajo.engine.planner.logical.UnaryNode;
import org.apache.tajo.util.TUtil;
@@ -141,12 +139,7 @@ public class SendNode extends UnaryNode {
@Override
public String toString() {
- Gson gson = new GsonBuilder().setPrettyPrinting().create();
+ Gson gson = CoreGsonHelper.getPrettyInstance();
return gson.toJson(this);
}
-
- @Override
- public String toJSON() {
- return GsonCreator.getInstance().toJson(this, LogicalNode.class);
- }
}
\ No newline at end of file