/// <summary> /// Note: When using this function to create a database object, always add the dependencies from GetAdditionalForeignKeyDependencies(). /// </summary> public static string GetSchemaTableForForeignKey(DataStructureInfo dataStructure) { if (dataStructure is EntityInfo) { return(SqlUtility.Identifier(dataStructure.Module.Name) + "." + SqlUtility.Identifier(dataStructure.Name)); } if (dataStructure is LegacyEntityInfo) { var legacy = (LegacyEntityInfo)dataStructure; return(SqlUtility.GetFullName(legacy.Table)); } if (dataStructure is LegacyEntityWithAutoCreatedViewInfo) { var legacy = (LegacyEntityWithAutoCreatedViewInfo)dataStructure; return(SqlUtility.GetFullName(legacy.Table)); } if (dataStructure is PolymorphicInfo) { return(dataStructure.GetKeyProperties() + "_Materialized"); } return(null); }
public void ExtendDatabaseStructure(IConceptInfo conceptInfo, ICodeBuilder codeBuilder, out IEnumerable <Tuple <IConceptInfo, IConceptInfo> > createdDependencies) { var info = (LegacyPropertyReferenceInfo)conceptInfo; createdDependencies = null; var sourceColumns = info.Columns.Split(',').Select(s => s.Trim()).Select(s => SqlUtility.Identifier(s)).ToArray(); var refColumns = info.ReferencedColumns.Split(',').Select(s => s.Trim()).Select(s => SqlUtility.Identifier(s)).ToArray(); if (sourceColumns.Length != refColumns.Length) { throw new DslSyntaxException("Count of references columns does not match count of source columns in " + info.GetUserDescription() + ". " + "There are " + sourceColumns.Length + " source columns and " + refColumns.Length + " referenced columns."); } string refAlias = SqlUtility.Identifier("ref" + _uniqueNum++); // Add column to view: codeBuilder.InsertCode(Sql.Format("LegacyPropertyReferenceDatabaseDefinition_ExtendViewSelect", SqlUtility.Identifier(info.Property.Name), refAlias), LegacyEntityWithAutoCreatedViewDatabaseDefinition.ViewSelectPartTag, info.Dependency_LegacyEntityWithAutoCreatedView); var allColumnsEqual = string.Join(" AND ", sourceColumns.Zip(refColumns, (sCol, rCol) => Sql.Format("LegacyPropertyReferenceDatabaseDefinition_ExtendFromJoin", refAlias, rCol, sCol))); codeBuilder.InsertCode(Sql.Format("LegacyPropertyReferenceDatabaseDefinition_ExtendViewFrom", SqlUtility.GetFullName(info.ReferencedTable), refAlias, allColumnsEqual), LegacyEntityWithAutoCreatedViewDatabaseDefinition.ViewFromPartTag, info.Dependency_LegacyEntityWithAutoCreatedView); // Add columns to instead-of trigger: foreach (var fkColumn in sourceColumns.Zip(refColumns, Tuple.Create)) { codeBuilder.InsertCode(Sql.Format("LegacyPropertyReferenceDatabaseDefinition_ExtendTriggerInsert", fkColumn.Item1), LegacyEntityWithAutoCreatedViewDatabaseDefinition.TriggerInsertPartTag, info.Dependency_LegacyEntityWithAutoCreatedView); codeBuilder.InsertCode(Sql.Format("LegacyPropertyReferenceDatabaseDefinition_ExtendTriggerSelectForInsert", fkColumn.Item1, refAlias, fkColumn.Item2, SqlUtility.GetFullName(info.ReferencedTable), SqlUtility.Identifier(info.Property.Name)), LegacyEntityWithAutoCreatedViewDatabaseDefinition.TriggerSelectForInsertPartTag, info.Dependency_LegacyEntityWithAutoCreatedView); codeBuilder.InsertCode(Sql.Format("LegacyPropertyReferenceDatabaseDefinition_ExtendTriggerSelectForUpdate", fkColumn.Item1, refAlias, fkColumn.Item2, SqlUtility.GetFullName(info.ReferencedTable), SqlUtility.Identifier(info.Property.Name)), LegacyEntityWithAutoCreatedViewDatabaseDefinition.TriggerSelectForUpdatePartTag, info.Dependency_LegacyEntityWithAutoCreatedView); } codeBuilder.InsertCode( Sql.Format("LegacyPropertyReferenceDatabaseDefinition_ExtendTriggerFrom", SqlUtility.GetFullName(info.ReferencedTable), refAlias, SqlUtility.Identifier(info.Property.Name)), LegacyEntityWithAutoCreatedViewDatabaseDefinition.TriggerFromPartTag, info.Dependency_LegacyEntityWithAutoCreatedView); }
public string CreateDatabaseStructure(IConceptInfo conceptInfo) { var info = (LegacyEntityWithAutoCreatedViewInfo)conceptInfo; return(Sql.Format("LegacyEntityWithAutoCreatedViewDatabaseDefinition_Create", SqlUtility.Identifier(info.Module.Name), SqlUtility.Identifier(info.Name), SqlUtility.ScriptSplitterTag, SqlUtility.GetFullName(info.Table), InsertTriggerName(info), UpdateTriggerName(info), DeleteTriggerName(info), ViewSelectPartTag.Evaluate(info), ViewFromPartTag.Evaluate(info), TriggerInsertPartTag.Evaluate(info), TriggerSelectForInsertPartTag.Evaluate(info), TriggerSelectForUpdatePartTag.Evaluate(info), TriggerFromPartTag.Evaluate(info))); }