DeveelDB  20151217
complete SQL database system, primarly developed for .NET/Mono frameworks
JoinNode.cs
Go to the documentation of this file.
1 //
2 // Copyright 2010-2015 Deveel
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 // http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 //
16 
17 using System;
18 using System.Collections.Generic;
19 using System.Linq;
20 using System.Text;
21 
23 
24 namespace Deveel.Data.Sql.Parser {
29  class JoinNode : SqlNode {
30  internal JoinNode() {
31  }
32 
33  public IFromSourceNode Source { get; private set; }
34 
43  public IExpressionNode OnExpression { get; private set; }
44 
57  public string JoinType { get; private set; }
58 
59  public JoinNode NextJoin { get; private set; }
60 
62  protected override ISqlNode OnChildNode(ISqlNode node) {
63  if (node.NodeName == "join_type") {
64  GetJoinType(node);
65  } else if (node is IFromSourceNode) {
66  Source = (IFromSourceNode) node;
67  } else if (node.NodeName == "from_source") {
68  Source = (IFromSourceNode) node.ChildNodes.FirstOrDefault();
69  } else if (node.NodeName == "on_opt") {
70  OnExpression = node.FindNode<IExpressionNode>();
71  } else if (node.NodeName == "join_opt") {
72  var join = node.ChildNodes.FirstOrDefault();
73  if (join != null)
74  NextJoin = (JoinNode) join;
75  }
76 
77  return base.OnChildNode(node);
78  }
79 
80  private void GetJoinType(ISqlNode node) {
81  var sb = new StringBuilder();
82  bool first = true;
83  foreach (var childNode in node.ChildNodes) {
84  if (!first)
85  sb.Append(" ");
86 
87  sb.Append(childNode.NodeName);
88  first = false;
89  }
90 
91  JoinType = sb.ToString();
92  }
93  }
94 }
Defines the contract for nodes in an AST model for a SQL grammar analysis and parsing.
Definition: ISqlNode.cs:25
JoinType
Enumerates the kind of group join in a selection query.
Definition: JoinType.cs:23
string NodeName
Gets the name of the node analyzed from the parser.
Definition: ISqlNode.cs:29
void GetJoinType(ISqlNode node)
Definition: JoinNode.cs:80
IEnumerable< ISqlNode > ChildNodes
Gets a read-only enumeration of the children nodes, if any.
Definition: ISqlNode.cs:39
Defines the base contract of the source of a query.
A node describing the JOIN between two sources within a query.
Definition: JoinNode.cs:29
This interface acts like a marker that indicates if a ISqlNode represents a SQL expression.
override ISqlNode OnChildNode(ISqlNode node)
During the initialization of the node from the parser, this method is called for every child node add...
Definition: JoinNode.cs:62
The default implementation of ISqlNode, that is a node in the text analysis parsing of SQL commands...
Definition: SqlNode.cs:32