コード例 #1
0
 private void BuildPrimaryKey(MetaTable table, StringBuilder sb)
 {
     foreach (MetaDataMember member in table.RowType.IdentityMembers)
     {
         if (sb.Length > 0)
         {
             sb.Append(", ");
         }
         sb.Append(SqlIdentifier.QuoteCompoundIdentifier(SqlIdentifier.UnquoteIdentifier(member.MappedName)));
     }
 }
コード例 #2
0
ファイル: FirebirdSqlBuilder.cs プロジェクト: zyj0021/ALinq
        private IEnumerable <string> GetDropForeignKeyCommands(MetaTable metaTable)
        {
            var metaType = metaTable.RowType;

            foreach (var member in metaType.DataMembers)
            {
                if (member.IsDeclaredBy(metaType) && member.IsAssociation)
                {
                    MetaAssociation association   = member.Association;
                    var             stringBuilder = new StringBuilder();
                    var             mappedName    = member.MappedName;
                    if (mappedName == member.Name)
                    {
                        mappedName = string.Format(CultureInfo.InvariantCulture, "FK_{0}_{1}", SqlIdentifier.UnquoteIdentifier(metaType.Table.TableName),
                                                   SqlIdentifier.UnquoteIdentifier(member.Name));
                    }

                    var command = string.Format("SELECT count(*) FROM RDB$RELATION_CONSTRAINTS WHERE UPPER(RDB$CONSTRAINT_NAME) = '{0}'", mappedName.ToUpper());
                    var result  = sqlProvider.services.Context.ExecuteQuery <int>(command).Single();
                    if (result == 0)
                    {
                        continue;
                    }

                    command = "ALTER TABLE {0}" + Environment.NewLine + "  DROP CONSTRAINT {1}";
                    var tableName = association.IsForeignKey ? metaType.Table.TableName : association.OtherType.Table.TableName;
                    yield return(stringBuilder.AppendFormat(command, new object[]
                    {
                        tableName,
                        mappedName,
                    }).ToString());
                }
            }
        }
コード例 #3
0
            internal override SqlRow VisitRow(SqlRow row)
            {
                int num   = 0;
                int count = row.Columns.Count;

                while (num < count)
                {
                    SqlColumn key = row.Columns[num];
                    if (num > 0)
                    {
                        sb.Append(", ");
                    }
                    Visit(key.Expression);
                    string name = key.Name;
                    string str2 = InferName(key.Expression, null);
                    if (name == null)
                    {
                        name = str2;
                    }
                    if ((name == null) && !names.TryGetValue(key, out name))
                    {
                        name       = "C" + names.Count;
                        names[key] = name;
                    }

                    if (key.Expression != null && key.Expression.NodeType == SqlNodeType.FunctionCall &&
                        ((SqlFunctionCall)key.Expression).Name.StartsWith("GEN_ID"))
                    {
                        name = null;
                    }

                    if (!string.IsNullOrEmpty(str2))
                    {
                        str2 = SqlIdentifier.UnquoteIdentifier(str2);
                    }

                    if (name != str2 && !string.IsNullOrEmpty(name))
                    {
                        if (!string.IsNullOrEmpty(str2))
                        {
                            sb.Append(" AS ");
                        }

                        if (SqlIdentifier.NeedToQuote(name))
                        {
                            WriteName(SqlIdentifier.QuoteIdentifier(name));
                        }
                        else
                        {
                            WriteName(name);
                        }
                    }
                    num++;
                }
                return(row);
            }
コード例 #4
0
ファイル: FirebirdFormatter1.cs プロジェクト: zyj0021/ALinq
            //internal override SqlRow VisitRow(SqlRow row)
            //{
            //    int num = 0;
            //    int count = row.Columns.Count;
            //    while (num < count)
            //    {
            //        SqlColumn key = row.Columns[num];
            //        if (num > 0)
            //        {
            //            sb.Append(", ");
            //        }

            //        num++;
            //    }
            //    return row;
            //}

            internal override void VisitRowColumn(SqlColumn key)
            {
                Visit(key.Expression);
                string name = key.Name;
                string str2 = InferName(key.Expression, null);

                if (name == null)
                {
                    name = str2;
                }
                if ((name == null) && !names.TryGetValue(key, out name))
                {
                    name       = "C" + names.Count;
                    names[key] = name;
                }

                if (key.Expression != null && key.Expression.NodeType == SqlNodeType.FunctionCall &&
                    ((SqlFunctionCall)key.Expression).Name.StartsWith("GEN_ID"))
                {
                    name = null;
                }

                if (!string.IsNullOrEmpty(str2))
                {
                    str2 = SqlIdentifier.UnquoteIdentifier(str2);
                }

                if (name != str2 && !string.IsNullOrEmpty(name))
                {
                    if (string.IsNullOrEmpty(str2) && key.Expression == null)
                    {
                        this.WriteName(name);
                    }
                    else
                    {
                        sb.Append(" AS ");

                        if (SqlIdentifier.NeedToQuote(name))
                        {
                            WriteName(SqlIdentifier.QuoteIdentifier(name));
                        }
                        else
                        {
                            WriteName(name);
                        }
                    }
                }
            }
コード例 #5
0
        /// <summary>
        /// 如果为关键字名称,则为它加上双引号,否则返回原值。
        /// </summary>
        //public static string QuoteName(string name)
        //{
        //    if (name.Equals("User", StringComparison.OrdinalIgnoreCase))
        //        return string.Format("\"{0}\"", name);
        //    return name;
        //}

        public static string GetSequenceName(MetaDataMember member, SqlIdentifier sqlIdentifier)
        {
            return("Seq_" + sqlIdentifier.UnquoteIdentifier(member.DeclaringType.Table.TableName));
        }
コード例 #6
0
 private string UnquoteIdentifier(string name)
 {
     return(sqlIdentifier.UnquoteIdentifier(name));
 }