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))); } }
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()); } } }
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); }
//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); } } } }
/// <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)); }
private string UnquoteIdentifier(string name) { return(sqlIdentifier.UnquoteIdentifier(name)); }