OSDN Git Service

Renamed Cell as TupleElement
[xerial/xerial-core.git] / src / main / java / org / xerial / lens / relation / query / lang / RelationExpr.java
index 0289465..fafac17 100644 (file)
 //--------------------------------------\r
 package org.xerial.lens.relation.query.lang;\r
 \r
-import java.util.ArrayList;\r
-import java.util.Collections;\r
-import java.util.Comparator;\r
-import java.util.List;\r
-\r
 import org.antlr.runtime.ANTLRStringStream;\r
 import org.antlr.runtime.CommonTokenStream;\r
 import org.antlr.runtime.RecognitionException;\r
@@ -36,6 +31,8 @@ import org.antlr.runtime.tree.Tree;
 import org.xerial.core.XerialErrorCode;\r
 import org.xerial.core.XerialException;\r
 import org.xerial.lens.Lens;\r
+import org.xerial.lens.relation.TupleElement;\r
+import org.xerial.lens.relation.Tuple;\r
 import org.xerial.lens.relation.query.QuerySet;\r
 import org.xerial.lens.relation.query.QuerySet.QuerySetBuilder;\r
 import org.xerial.lens.relation.query.impl.LensQueryLexer;\r
@@ -51,39 +48,12 @@ import org.xerial.util.log.Logger;
  * @author leo\r
  * \r
  */\r
-public class RelationExpr extends RelationItem {\r
+public class RelationExpr extends Tuple<RelationAttribute> {\r
 \r
     private static Logger _logger = Logger.getLogger(RelationExpr.class);\r
 \r
-    public class Node extends RelationItem {\r
-\r
-        public String nodeValue;\r
-\r
-        public Compare compare = null;\r
-        public PatternMatch patternMatch = null;\r
-\r
-        @Override\r
-        public boolean isRelation() {\r
-            return false;\r
-        }\r
-    }\r
-\r
-    public static class Compare {\r
-        public String operator;\r
-        public String operand;\r
-    }\r
-\r
-    public static class PatternMatch {\r
-        public String operand;\r
-    }\r
-\r
-    public List<Node> node = new ArrayList<Node>();\r
-    public List<RelationExpr> relation = new ArrayList<RelationExpr>();\r
-\r
-    @Override\r
-    public boolean isRelation() {\r
-        return true;\r
-    }\r
+    public String name;\r
+    public String alias;\r
 \r
     private static class RelationQuery {\r
         public RelationExpr relation;\r
@@ -112,34 +82,33 @@ public class RelationExpr extends RelationItem {
 \r
     }\r
 \r
-    private List<RelationItem> sortedNodeList() {\r
-        ArrayList<RelationItem> sortedRelationItem = new ArrayList<RelationItem>();\r
-        sortedRelationItem.addAll(node);\r
-        sortedRelationItem.addAll(relation);\r
+    public void addNode(RelationAttribute node) {\r
+        this.add(node);\r
+    }\r
 \r
-        Collections.sort(sortedRelationItem, new Comparator<RelationItem>() {\r
-            public int compare(RelationItem o1, RelationItem o2) {\r
-                return o1.getIndex().compareTo(o2.getIndex());\r
-            }\r
-        });\r
+    public void addRelation(RelationExpr relation) {\r
+        this.add(relation);\r
+    }\r
 \r
-        return sortedRelationItem;\r
+    @Override\r
+    public String toString() {\r
+        return String.format("%s%s%s", name, alias != null ? " as " + alias : "", super.toString());\r
     }\r
 \r
     public Schema toSchema() {\r
 \r
-        List<RelationItem> sortedRelationItem = sortedNodeList();\r
-\r
         SchemaBuilder parent = new SchemaBuilder();\r
         parent.add(name);\r
 \r
-        for (RelationItem each : sortedRelationItem) {\r
-            if (each.isRelation()) {\r
+        for (TupleElement<RelationAttribute> each : this) {\r
+            if (each.isTuple()) {\r
                 RelationExpr re = RelationExpr.class.cast(each);\r
                 parent.add(re.toSchema());\r
             }\r
-            else\r
-                parent.add(each.name);\r
+            else {\r
+                RelationAttribute ra = RelationAttribute.class.cast(each);\r
+                parent.add(ra.name);\r
+            }\r
         }\r
 \r
         return parent.build();\r
@@ -150,20 +119,20 @@ public class RelationExpr extends RelationItem {
 \r
         QuerySetBuilder b = new QuerySetBuilder();\r
 \r
-        List<RelationItem> sortedRelationItem = sortedNodeList();\r
-\r
         SchemaBuilder parent = new SchemaBuilder();\r
         parent.add(name);\r
-        for (RelationItem each : sortedRelationItem) {\r
-            parent.add(each.name);\r
-\r
-            if (each.isRelation()) {\r
+        for (TupleElement<RelationAttribute> each : this) {\r
 \r
+            if (each.isTuple()) {\r
                 RelationExpr re = RelationExpr.class.cast(each);\r
                 for (Schema s : re.buildQuerySet().getTargetQuerySet()) {\r
                     b.addQueryTarget(s);\r
                 }\r
             }\r
+            else {\r
+                RelationAttribute ra = RelationAttribute.class.cast(each);\r
+                parent.add(ra.name);\r
+            }\r
         }\r
         b.addQueryTarget(parent.build());\r
 \r