Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        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)));
        }