Beispiel #1
0
 internal override string ToString(string indent, bool useSquareBracket)
 {
     return(MultiPartIdentifier != null
         ? string.Format(CultureInfo.CurrentCulture, "{0}{1}", indent,
                         MultiPartIdentifier.ToString("", useSquareBracket))
         : "");
 }
        //列を参照する場合に呼び出される。
        //MultiPartIdentifier.Countが1だった場合は、テーブルの宣言なしに列を指定しているということを意味するので違反候補に追加する。
        public override void ExplicitVisit(MultiPartIdentifier node)
        {
            if (isInsideColumnReference == true &&
                node.Count == 1 &&
                candidateStack.Count > 0 &&
                isLeftAssignmentSetClause == false)
            {
                TableNameIllegalCandidate candidate = candidateStack.Peek();
                candidate.AddText(node.Identifiers[0].Value);

                //commentには理解のために前後の文を追加する。

                IList <TSqlParserToken> tokenList = node.ScriptTokenStream;
                int    commentFirstIndex          = node.FirstTokenIndex - 10 < 0 ? 0 : node.FirstTokenIndex - 10;
                int    commentLastIndex           = node.FirstTokenIndex + 10 < tokenList.Count ? node.FirstTokenIndex + 10 : tokenList.Count;
                string comment = tokenList[node.FirstTokenIndex].Line.ToString() + "行目付近:";
                for (int i = commentFirstIndex; i < commentLastIndex; i++)
                {
                    comment = comment + tokenList[i].Text;
                }
                candidate.AddComment(comment);
            }

            base.ExplicitVisit(node);
            isLeftAssignmentSetClause = false;
        }
Beispiel #3
0
        private static string GetName(MultiPartIdentifier name)
        {
            var dboRemoved   = name.Identifiers.Where(i => i.Value != "dbo");
            var joined       = string.Join("", dboRemoved.Select(x => x.Value));
            var singularized = joined.Last() == 's' ? joined.Substring(0, joined.Length - 1) : joined;

            return(singularized);
        }
Beispiel #4
0
 public static ObjectIdentifier GetObjectIdentifier(this MultiPartIdentifier name, string assumedSchema = "dbo")
 {
     if (name.Identifiers.Count == 1 && !string.IsNullOrWhiteSpace(assumedSchema))
     {
         return(new ObjectIdentifier(new[] { assumedSchema, name.Identifiers.First().Value }));
     }
     return(new ObjectIdentifier(name.Identifiers.Select(x => x.Value)));
 }
 public static MultiPartIdentifier Create(this MultiPartIdentifier src, string id1, Identifier id2)
 {
     src.Identifiers.Add(new Identifier()
     {
         Value = id1
     });
     src.Identifiers.Add(id2);
     return(src);
 }
Beispiel #6
0
            public override void ExplicitVisit(MultiPartIdentifier node)
            {
                if (node.Identifiers.Count == 2 && node.Identifiers[0].Value == _target)
                {
                    node.Identifiers.RemoveAt(0);
                }

                base.ExplicitVisit(node);
            }
Beispiel #7
0
        public string ToSqlStyleString(bool illegalCharReplace = true)
        {
            var identifier = MultiPartIdentifier.ToSqlStyleString();

            // Alias with dot and whitespace is illegal in documentDB, so they will be replaced by "_"
            return(ColumnName != null
                ? string.Format(CultureInfo.CurrentCulture, "{0} AS {1}", identifier, illegalCharReplace?ColumnName.Replace(".", "_").Replace(" ", "_") : ColumnName)
                : identifier);
        }
        public static MultiPartIdentifier Create(this MultiPartIdentifier src, params Identifier[] names)
        {
            foreach (var name in names)
            {
                src.Identifiers.Add(name);
            }

            return(src);
        }
 private string resolveMultiPartIdentifier(MultiPartIdentifier identifier)
 {
     if (identifier.Identifiers.Count == 2 &&
       _aliases.ContainsKey(identifier.Identifiers[0].Value))
     {
         return
           _aliases[identifier.Identifiers[0].Value] + "." + identifier.Identifiers[1].Value;
     }
     return identifier.AsObjectName();
 }
Beispiel #10
0
 private string resolveMultiPartIdentifier(MultiPartIdentifier identifier)
 {
     if (identifier.Identifiers.Count == 2 &&
         _aliases.ContainsKey(identifier.Identifiers[0].Value))
     {
         return
             (_aliases[identifier.Identifiers[0].Value] + "." + identifier.Identifiers[1].Value);
     }
     return(identifier.AsObjectName());
 }
 private string resolveMultiPartIdentifier(MultiPartIdentifier identifier)
 {
     if (identifier.Identifiers.Count == 2 &&
         _aliases.ContainsKey(identifier.Identifiers[0].Value))
     {
         return
             (string.Format("{0}.{1}", _aliases[identifier.Identifiers[0].Value], identifier.Identifiers[1].Value));
     }
     return(identifier.AsObjectName());
 }
Beispiel #12
0
 internal override string ToString(string indent)
 {
     if (Alias == null || Alias.Length == 0)
     {
         return(string.Format("{0}{1}", indent, MultiPartIdentifier.ToString()));
     }
     else
     {
         return(string.Format("{0}{1} AS {2}", indent, MultiPartIdentifier.ToString(), Alias));
     }
 }
 public override void ExplicitVisit(MultiPartIdentifier node)
 {
     for (int index = 1; index <= node.Identifiers.Count; ++index)
     {
         node.Identifiers[node.Identifiers.Count - index].Accept(this);
         if (index != node.Identifiers.Count)
         {
             _buffer.Append(".");
         }
     }
 }
Beispiel #14
0
        public static MultiPartIdentifier Get(string part1)
        {
            var identifier = new MultiPartIdentifier();

            identifier.Identifiers.Add(new Identifier()
            {
                Value = Quote.Name(part1)
            });

            return(identifier);
        }
        public static MultiPartIdentifier Create(this MultiPartIdentifier src, params string[] names)
        {
            foreach (var name in names)
            {
                src.Identifiers.Add(new Identifier()
                {
                    Value = name
                });
            }

            return(src);
        }
Beispiel #16
0
        internal override string ToString(string indent)
        {
            StringBuilder sb = new StringBuilder(64);

            if (Alias == null || Alias.Length == 0)
            {
                sb.Append(string.Format("{0}{1}", indent, MultiPartIdentifier.ToString()));
            }
            else
            {
                sb.Append(string.Format("{0}{1} AS {2}", indent, MultiPartIdentifier.ToString(), Alias));
            }
            return(sb.ToString());
        }
        private TSqlStatement BuildDelete(InsertSpecification originalInsert)
        {
            var delete = new DeleteStatement();

            delete.WithCtesAndXmlNamespaces = new WithCtesAndXmlNamespaces();
            var cte = new CommonTableExpression();

            cte.ExpressionName = new Identifier()
            {
                Value = "to_delete"
            };

            cte.QueryExpression = BuildNewRowSource(originalInsert);
            delete.WithCtesAndXmlNamespaces.CommonTableExpressions.Add(cte);

            delete.DeleteSpecification = new DeleteSpecification();
            var tableName = new SchemaObjectName();

            tableName.Identifiers.Add(new Identifier()
            {
                Value = "to_delete"
            });

            delete.DeleteSpecification.Target = new NamedTableReference()
            {
                SchemaObject = tableName
            };
            var outputInto = delete.DeleteSpecification.OutputIntoClause = new OutputIntoClause();

            var deletedTable = new MultiPartIdentifier();

            deletedTable.Identifiers.Add(new Identifier()
            {
                Value = "deleted"
            });

            outputInto.SelectColumns.Add(new SelectStarExpression()
            {
                Qualifier = deletedTable
            });

            outputInto.IntoTable = originalInsert.Target;
            foreach (var col in originalInsert.Columns)
            {
                outputInto.IntoTableColumns.Add(col);
            }

            return(delete);
        }
        public static string MultipartIdentifier(MultiPartIdentifier multiIdent)
        {
            var sb = new StringBuilder(128);

            for (var i = 0; i < multiIdent.Identifiers.Count; i++)
            {
                if (i > 0)
                {
                    sb.Append('.');
                }
                sb.Append(multiIdent.Identifiers[i].Value);
            }

            return(sb.ToString());
        }
        public static string MultipartIdentifier(MultiPartIdentifier multiIdent)
        {
            var sb = new StringBuilder(128);

            for (var i = 0; i < multiIdent.Identifiers.Count; i++)
            {
                if (i > 0)
                {
                    sb.Append('.');
                }
                sb.Append(multiIdent.Identifiers[i].Value);
            }

            return sb.ToString();
        }
        public static string ToNameString(this MultiPartIdentifier name)
        {
            var builder = new StringBuilder();
            var first   = true;

            foreach (var part in name.Identifiers)
            {
                builder.AppendFormat(".{0}", part.Value.UnQuote());
            }
            if (builder.Length > 0)
            {
                var ret = builder.ToString();
                return(ret.Substring(1));
            }

            return(String.Empty);
        }
        private TSqlStatement BuildDelete(InsertSpecification originalInsert)
        {
            var delete = new DeleteStatement();

            delete.WithCtesAndXmlNamespaces = new WithCtesAndXmlNamespaces();
            var cte = new CommonTableExpression();

            cte.ExpressionName = new Identifier()
            {
                Value = "to_delete"
            };

            cte.QueryExpression = BuildNewRowSource(originalInsert);
            delete.WithCtesAndXmlNamespaces.CommonTableExpressions.Add(cte);

            delete.DeleteSpecification = new DeleteSpecification();
            var tableName = new SchemaObjectName();
            tableName.Identifiers.Add( new Identifier()
            {
                Value = "to_delete"
            });

            delete.DeleteSpecification.Target = new NamedTableReference() {SchemaObject = tableName };
            var outputInto = delete.DeleteSpecification.OutputIntoClause = new OutputIntoClause();

            var deletedTable = new MultiPartIdentifier();
            deletedTable.Identifiers.Add(new Identifier()
            {
                Value = "deleted"

            });

            outputInto.SelectColumns.Add(new SelectStarExpression()
            {
                Qualifier = deletedTable
            });

            outputInto.IntoTable = originalInsert.Target;
            foreach (var col in originalInsert.Columns)
            {
                outputInto.IntoTableColumns.Add(col);
            }

            return delete;
        }
Beispiel #22
0
        }//function

        private string MultiPartIdentifierToString(int aSelectElementID, MultiPartIdentifier aMultiPartIdentifier)
        {
            String res = String.Empty;

            foreach (Identifier aIdentifier in aMultiPartIdentifier.Identifiers)
            {
                if (String.IsNullOrEmpty(res))
                {
                    res = aIdentifier.Value;
                }
                else
                {
                    res = res + "." + aIdentifier.Value;
                }
            }
            aColumnInfoList.AddRefereceIdentifier(aSelectElementID, aMultiPartIdentifier);
            return(res);
        }
Beispiel #23
0
            public void AddRefereceIdentifier(int aSelectElementID, MultiPartIdentifier aMultiPartIdentifier)
            {
                if (ColumnList.Count > aSelectElementID)
                {
                    ColumnInfo aColumnInfo = ColumnList[aSelectElementID];
                    int        aIdentIdx   = 0;
                    foreach (Identifier aIdentifier in aMultiPartIdentifier.Identifiers)
                    {
                        if (aMultiPartIdentifier.Identifiers.Count == 1)
                        {
                            aColumnInfo.TableColumnName = aIdentifier.Value;
                        }
                        if (aMultiPartIdentifier.Identifiers.Count == 2)
                        {
                            if (aIdentIdx == 0)
                            {
                                aColumnInfo.TableAlias = aIdentifier.Value;
                            }
                            if (aIdentIdx == 1)
                            {
                                aColumnInfo.TableColumnName = aIdentifier.Value;
                            }
                        }
                        if (aMultiPartIdentifier.Identifiers.Count == 3)
                        {
                            if (aIdentIdx == 0)
                            {
                                aColumnInfo.ReferencedTableSchema = aIdentifier.Value;
                            }
                            if (aIdentIdx == 1)
                            {
                                aColumnInfo.ReferencedTableName = aIdentifier.Value;
                            }
                            if (aIdentIdx == 2)
                            {
                                aColumnInfo.TableColumnName = aIdentifier.Value;
                            }
                        }

                        aIdentIdx = aIdentIdx + 1;
                    }
                }
            }
Beispiel #24
0
        public static string ToNameString(this MultiPartIdentifier name)
        {
            var builder = new StringBuilder();
            var first   = true;

            foreach (var part in name.Identifiers.Reverse())
            {
                builder.Append(part.Value.UnQuote());
                if (first)
                {
                    first = false;
                }
                else
                {
                    builder.Append(".");
                }
            }
            return(builder.ToString());
        }
Beispiel #25
0
 public void AddRefereceIdentifier(int aSelectElementID, MultiPartIdentifier aMultiPartIdentifier)
 {
     if (ColumnList.Count > aSelectElementID)
     {
         ColumnInfo aColumnInfo = ColumnList[aSelectElementID];
         int        aIdentIdx   = 0;
         foreach (Identifier aIdentifier in aMultiPartIdentifier.Identifiers)
         {
             if (aMultiPartIdentifier.Identifiers.Count == 2)
             {
                 if (aIdentIdx == 0)
                 {
                     aColumnInfo.TableAlias = aIdentifier.Value;
                 }
                 if (aIdentIdx == 1)
                 {
                     aColumnInfo.TableColumnName = aIdentifier.Value;
                 }
             }
             if (aMultiPartIdentifier.Identifiers.Count == 3)
             {
                 if (aIdentIdx == 0)
                 {
                     aColumnInfo.TableSchema = aIdentifier.Value;
                 }
                 if (aIdentIdx == 1)
                 {
                     aColumnInfo.TableName = aIdentifier.Value;
                 }
                 if (aIdentIdx == 2)
                 {
                     aColumnInfo.TableColumnName = aIdentifier.Value;
                 }
             }
             aIdentIdx = aIdentIdx + 1;
         }
     }
     else
     {
         AddLogText(string.Format("Error: column with idx:{0} not found.", aSelectElementID));
     }
 }
Beispiel #26
0
 private void PrintSelectScalarExperssionRecurse(int aSelectElementID, ScalarExpression aScalarExpression)
 {
     if (aScalarExpression.GetType() == typeof(ColumnReferenceExpression))
     {
         ColumnReferenceExpression aColumnReferenceExpression = (ColumnReferenceExpression)aScalarExpression;
         AddLogText(string.Format("ColumnType={0}", aColumnReferenceExpression.ColumnType.ToString()));
         MultiPartIdentifier aMultiPartIdentifier = aColumnReferenceExpression.MultiPartIdentifier;
         AddLogText(string.Format("Reference Identifier={0}",
                                  MultiPartIdentifierToString(aSelectElementID, aMultiPartIdentifier)));
     }
     else if (aScalarExpression.GetType() == typeof(ConvertCall))
     {
         ConvertCall      aConvertCall = (ConvertCall)aScalarExpression;
         ScalarExpression aScalarExpressionParameter = aConvertCall.Parameter;
         PrintSelectScalarExperssionRecurse(aSelectElementID, aScalarExpressionParameter);
     }
     else
     {
         AddLogText(String.Format("Not supported Expression:{0}", aScalarExpression.GetType().ToString()));
     }
 }
        private UpdateMergeAction CreateUpdateSetActions(MergeActionClause clause)
        {
            var action = (clause.Action = new UpdateMergeAction()) as UpdateMergeAction;

            foreach (var col in _columnDescriptors)
            {
                var setClause = new AssignmentSetClause();
                setClause.AssignmentKind = AssignmentKind.Equals;

                var identifier = new MultiPartIdentifier().Create(MergeIdentifierStrings.TargetName, col.Name);

                setClause.Column = new ColumnReferenceExpression();
                setClause.Column.MultiPartIdentifier = identifier;

                var newValue = (setClause.NewValue = new ColumnReferenceExpression()) as ColumnReferenceExpression;
                newValue.MultiPartIdentifier = new MultiPartIdentifier().Create(MergeIdentifierStrings.SourceName, col.Name);


                action.SetClauses.Add(setClause);
            }
            return(action);
        }
Beispiel #28
0
 private WMultiPartIdentifier ParseMultiPartIdentifier(MultiPartIdentifier name)
 {
     if (name == null)
         return null;
     var wMultiPartIdentifier = new WMultiPartIdentifier
     {
         FirstTokenIndex = name.FirstTokenIndex,
         LastTokenIndex = name.LastTokenIndex,
         Identifiers = name.Identifiers,
     };
     if (name.Identifiers != null)
     {
         wMultiPartIdentifier.Identifiers = new List<Identifier>();
         foreach (var identifier in name.Identifiers)
         {
             if (GraphViewKeywords._keywords.Contains(identifier.Value))
             {
                 var token = _tokens[identifier.FirstTokenIndex];
                 throw new SyntaxErrorException(token.Line, identifier.Value,
                     "System restricted Name cannot be used");
             }
             wMultiPartIdentifier.Identifiers.Add(identifier);
         }
     }
     return wMultiPartIdentifier;
 }
Beispiel #29
0
        public static MultiPartIdentifier Get(string part1, Identifier part2)
        {
            var identifier = new MultiPartIdentifier();
            identifier.Identifiers.Add(new Identifier() { Value = Quote.Name(part1) });
            identifier.Identifiers.Add(part2);

            return identifier;
        }
 public override void ExplicitVisit(MultiPartIdentifier fragment)
 {
     _fragments.Add(fragment);
 }
Beispiel #31
0
 public QsiQualifiedIdentifier ConcatIdentifier(MultiPartIdentifier firstMultiIdentifier, MultiPartIdentifier secondMultiIdentifier)
 {
     return(CreateQualifiedIdentifier(firstMultiIdentifier.Identifiers.Concat(secondMultiIdentifier.Identifiers)));
 }
Beispiel #32
0
        private void VisitReferenceTypeColumn(ColumnReferenceExpression node, TSqlFragment parent, string sourceProperty, Identifier identifier, Property property)
        {
            if (property.Fields.Count == 1) // Т.Ссылка (не составной тип)
            {
                string hexTypeCode = $"0x{property.PropertyTypes[0].ToString("X").PadLeft(8, '0')}";
                identifier.Value = property.Fields[0].Name;
                ParenthesisExpression expression = new ParenthesisExpression()
                {
                    Expression = new ScriptDom.BinaryExpression()
                    {
                        BinaryExpressionType = BinaryExpressionType.Add,
                        FirstExpression      = new BinaryLiteral()
                        {
                            Value = hexTypeCode
                        },
                        SecondExpression = node
                    }
                };
                PropertyInfo pi     = parent.GetType().GetProperty(sourceProperty);
                bool         isList = (pi.PropertyType.IsGenericType && pi.PropertyType.GetGenericTypeDefinition() == typeof(IList <>));
                if (isList)
                {
                    IList list  = (IList)pi.GetValue(parent);
                    int   index = list.IndexOf(node);
                    list[index] = expression;
                }
                else
                {
                    pi.SetValue(parent, expression);
                }
            }
            else // Т.Владелец (составной тип)
            {
                Field typeCode  = property.Fields.Where(f => f.Purpose == FieldPurpose.TypeCode).FirstOrDefault();
                Field reference = property.Fields.Where(f => f.Purpose == FieldPurpose.Object).FirstOrDefault();
                identifier.Value = reference.Name;

                MultiPartIdentifier mpi = new MultiPartIdentifier();
                foreach (var id in node.MultiPartIdentifier.Identifiers)
                {
                    mpi.Identifiers.Add(new Identifier()
                    {
                        Value = id.Value
                    });
                }
                mpi.Identifiers[mpi.Count - 1].Value = typeCode.Name;
                ParenthesisExpression expression = new ParenthesisExpression()
                {
                    Expression = new ScriptDom.BinaryExpression()
                    {
                        BinaryExpressionType = BinaryExpressionType.Add,
                        FirstExpression      = new ColumnReferenceExpression()
                        {
                            ColumnType          = ColumnType.Regular,
                            MultiPartIdentifier = mpi
                        },
                        SecondExpression = node
                    }
                };

                PropertyInfo pi     = parent.GetType().GetProperty(sourceProperty);
                bool         isList = (pi.PropertyType.IsGenericType && pi.PropertyType.GetGenericTypeDefinition() == typeof(IList <>));
                if (isList)
                {
                    IList list  = (IList)pi.GetValue(parent);
                    int   index = list.IndexOf(node);
                    list[index] = expression;
                }
                else
                {
                    pi.SetValue(parent, expression);
                }
            }
        }
Beispiel #33
0
 public QsiQualifiedIdentifier CreateQualifiedIdentifier(MultiPartIdentifier multiIdentifier)
 {
     return(CreateQualifiedIdentifier(multiIdentifier.Identifiers));
 }
        private UpdateMergeAction CreateUpdateSetActions(MergeActionClause clause)
        {
            var action = (clause.Action = new UpdateMergeAction()) as UpdateMergeAction;
            foreach (var col in _columnDescriptors)
            {
                var setClause = new AssignmentSetClause();
                setClause.AssignmentKind = AssignmentKind.Equals;

                var identifier = new MultiPartIdentifier().Create(MergeIdentifierStrings.TargetName, col.Name);

                setClause.Column = new ColumnReferenceExpression();
                setClause.Column.MultiPartIdentifier = identifier;

                var newValue = (setClause.NewValue = new ColumnReferenceExpression()) as ColumnReferenceExpression;
                newValue.MultiPartIdentifier = new MultiPartIdentifier().Create(MergeIdentifierStrings.SourceName, col.Name);

                action.SetClauses.Add(setClause);
            }
            return action;
        }
Beispiel #35
0
 public static string GetName(this MultiPartIdentifier name)
 {
     return($"[{string.Join("].[", name.Identifiers.Select(x => x.Value))}]");
 }
Beispiel #36
0
 public static IList <string> GetNameParts(this MultiPartIdentifier multiPartId)
 {
     return(multiPartId.Identifiers.Select(i => i.Value).ToList());
 }
 public static int CompareTo(this MultiPartIdentifier identifier, ObjectIdentifier oIdentifier)
 {
     return(CompareIdentifiers(oIdentifier, identifier.Identifiers.Select(x => x.Value)));
 }
Beispiel #38
0
 public override void Visit(MultiPartIdentifier node) { this.action(node); }