DeveelDB  20151217
complete SQL database system, primarly developed for .NET/Mono frameworks
ColumnConstraintNode.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 
19 namespace Deveel.Data.Sql.Parser {
21  private bool notSeen;
22 
23  internal ColumnConstraintNode() {
24  }
25 
26  public string ConstraintType { get; private set; }
27 
28  public IExpressionNode CheckExpression { get; private set; }
29 
30  public ObjectNameNode ReferencedTable { get; private set; }
31 
32  public IdentifierNode ReferencedColumn { get; private set; }
33 
34  public string OnDeleteAction { get; private set; }
35 
36  public string OnUpdateAction { get; private set; }
37 
38  protected override ISqlNode OnChildNode(ISqlNode node) {
39  if (node is SqlKeyNode) {
40  var keyNode = (SqlKeyNode) node;
41  if (String.Equals(keyNode.Text, "NULL", StringComparison.OrdinalIgnoreCase)) {
42  if (notSeen) {
44  } else {
46  }
47  } else if (String.Equals(keyNode.Text, "NOT", StringComparison.OrdinalIgnoreCase)) {
48  notSeen = true;
49  } else if (String.Equals(keyNode.Text, "REFERENCES", StringComparison.OrdinalIgnoreCase)) {
51  } else if (String.Equals(keyNode.Text, "CHECK", StringComparison.OrdinalIgnoreCase)) {
53  } else if (String.Equals(keyNode.Text, "PRIMARY", StringComparison.OrdinalIgnoreCase)) {
55  } else if (String.Equals(keyNode.Text, "UNIQUE", StringComparison.OrdinalIgnoreCase)) {
57  }
58  } else if (node is IExpressionNode) {
59  CheckExpression = (IExpressionNode) node;
60  } else if (node is ObjectNameNode) {
61  if (!String.Equals(ConstraintType, ConstraintTypeNames.ForeignKey, StringComparison.OrdinalIgnoreCase))
62  throw new InvalidOperationException();
63 
64  ReferencedTable = ((ObjectNameNode) node);
65  }
66 
67  return base.OnChildNode(node);
68  }
69  }
70 }
override ISqlNode OnChildNode(ISqlNode node)
During the initialization of the node from the parser, this method is called for every child node add...
This is a simple identifier within a SQL grammar.
Defines the contract for nodes in an AST model for a SQL grammar analysis and parsing.
Definition: ISqlNode.cs:25
Represents a keyword found during the compilation of a source text.
Definition: SqlKeyNode.cs:25
Represents a composed name for an object within the system.
ConstraintType
An enumeration of all the supported kinds of constraints within a table or a schema.
This interface acts like a marker that indicates if a ISqlNode represents a SQL expression.
The default implementation of ISqlNode, that is a node in the text analysis parsing of SQL commands...
Definition: SqlNode.cs:32