示例#1
0
        private string HistorySqlSnippet()
        {
            return(string.Format(
                       @"SELECT
                    ID = entity.ID,
                    EntityID = entity.ID,
                    ActiveUntil = CAST(NULL AS DateTime){5}
                FROM
                    {0}.{1} entity

                UNION ALL

                SELECT
                    ID = history.ID,
                    EntityID = history.EntityID,
                    au.ActiveUntil{4}
                FROM
                    {0}.{2} history
                    LEFT JOIN {0}.{3} au ON au.ID = history.ID",
                       SqlUtility.Identifier(Entity.Module.Name),
                       SqlUtility.Identifier(Entity.Name),
                       SqlUtility.Identifier(Dependency_ChangesEntity.Name),
                       SqlUtility.Identifier(Entity.Name + "_ChangesActiveUntil"),
                       SelectHistoryPropertiesTag.Evaluate(this),
                       SelectEntityPropertiesTag.Evaluate(this)));
        }
示例#2
0
        private string HistorySqlSnippet(EntityHistoryInfo conceptInfo)
        {
            return(string.Format(
                       @"SELECT
                    ID = entity.ID,
                    EntityID = entity.ID,
                    ActiveUntil = CAST(NULL AS {6}){5}
                FROM
                    {0}.{1} entity

                UNION ALL

                SELECT
                    ID = history.ID,
                    EntityID = history.EntityID,
                    au.ActiveUntil{4}
                FROM
                    {0}.{2} history
                    LEFT JOIN {0}.{3} au ON au.ID = history.ID",
                       SqlUtility.Identifier(conceptInfo.Entity.Module.Name),
                       SqlUtility.Identifier(conceptInfo.Entity.Name),
                       SqlUtility.Identifier(conceptInfo.Dependency_ChangesEntity.Name),
                       SqlUtility.Identifier(conceptInfo.Entity.Name + "_ChangesActiveUntil"),
                       SelectHistoryPropertiesTag.Evaluate(conceptInfo),
                       SelectEntityPropertiesTag.Evaluate(conceptInfo),
                       _dateTimeSqlColumnType));
        }
        public void ExtendDatabaseStructure(IConceptInfo conceptInfo, ICodeBuilder codeBuilder, out System.Collections.Generic.IEnumerable <Tuple <IConceptInfo, IConceptInfo> > createdDependencies)
        {
            var info = (SqlNotNullInfo)conceptInfo;
            var sql  = new StringBuilder();

            if (_conceptMetadata.Contains(info.Property, PropertyDatabaseDefinition.ColumnTypesMetadata))
            {
                var columnNames = _conceptMetadata.Get(info.Property, PropertyDatabaseDefinition.ColumnNamesMetadata);
                var columnTypes = _conceptMetadata.Get(info.Property, PropertyDatabaseDefinition.ColumnTypesMetadata);
                var columns     = columnNames.Zip(columnTypes, (name, type) => new { name, type });

                foreach (var column in columns)
                {
                    sql.AppendLine(Sql.Format("SqlNotNull_Create",
                                              SqlUtility.Identifier(info.Property.DataStructure.Module.Name),
                                              SqlUtility.Identifier(info.Property.DataStructure.Name),
                                              column.name,
                                              column.type,
                                              info.InitialValueSqlExpression,
                                              SqlUtility.ScriptSplitterTag).Trim());
                }
            }

            var sqlSnippet = sql.ToString().Trim() + "\r\n";

            if (!string.IsNullOrWhiteSpace(sqlSnippet))
            {
                codeBuilder.InsertCode(sqlSnippet, PropertyDatabaseDefinition.AfterCreateTag, info.Property);
            }

            createdDependencies = null;
        }
 public static string GetConstraintName(ReferencePropertyInfo info)
 {
     return(SqlUtility.Identifier(Sql.Format("ReferencePropertyConstraintDatabaseDefinition_ConstraintName",
                                             info.DataStructure.Name,
                                             info.Referenced.Name,
                                             info.Name)));
 }
示例#5
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);
        }
示例#6
0
 public static string GetTriggerNameDelete(EntityLoggingInfo conceptInfo)
 {
     return(SqlUtility.Identifier(Sql.Format(
                                      "EntityLoggingDefinition_TriggerNameDelete",
                                      conceptInfo.Entity.Module.Name,
                                      conceptInfo.Entity.Name)));
 }
示例#7
0
 public static string RemoveColumn(PropertyInfo property, string columnName)
 {
     return(Sql.Format("PropertyDatabaseDefinition_RemoveColumn",
                       SqlUtility.Identifier(property.DataStructure.Module.Name),
                       SqlUtility.Identifier(property.DataStructure.Name),
                       DslUtility.ValidateIdentifier(columnName, property, "Invalid column name."),
                       BeforeRemoveTag.Evaluate(property)).Trim());
 }
 private static string GetColumnName(PropertyInfo property)
 {
     if (property is ReferencePropertyInfo)
     {
         return(SqlUtility.Identifier(property.Name + "ID"));
     }
     return(SqlUtility.Identifier(property.Name));
 }
        public string RemoveDatabaseStructure(IConceptInfo conceptInfo)
        {
            var info = (SqlViewInfo)conceptInfo;

            return(Sql.Format("SqlViewDatabaseDefinition_Remove",
                              SqlUtility.Identifier(info.Module.Name),
                              SqlUtility.Identifier(info.Name)));
        }
示例#10
0
        public static string ConstraintName(SqlIndexMultipleInfo info)
        {
            var cleanColumnNames    = info.PropertyNames.Split(' ').Select(name => name.Trim()).ToArray();
            var joinedColumnNames   = string.Join("_", cleanColumnNames.Select(CsUtility.TextToIdentifier));
            var basicConstraintName = Sql.Format("SqlIndexMultipleDatabaseDefinition_ConstraintName", info.DataStructure.Name, joinedColumnNames);

            return(SqlUtility.Identifier(basicConstraintName));
        }
示例#11
0
        public string RemoveDatabaseStructure(IConceptInfo conceptInfo)
        {
            var info      = (ReferencePropertyDbConstraintInfo)conceptInfo;
            var reference = info.Reference;

            return(Sql.Format("ReferencePropertyConstraintDatabaseDefinition_Remove",
                              SqlUtility.Identifier(reference.DataStructure.Module.Name) + "." + SqlUtility.Identifier(reference.DataStructure.Name),
                              GetConstraintName(reference)));
        }
 public static string TriggerSnippet(AutoCodeTriggerInfo info)
 {
     return(Sql.Format("AutoCodeDatabaseDefinition_TriggerSnippet",
                       SqlUtility.Identifier(info.Entity.Module.Name),
                       info.Entity.Name,
                       TriggerName(info.Entity),
                       ShortStringPropertyInfo.MaxLength,
                       ColumnsForAutoCodeSelectTag.Evaluate(info)));
 }
示例#13
0
        public string CreateDatabaseStructure(IConceptInfo conceptInfo)
        {
            var info = (SqlQueryableInfo)conceptInfo;

            return(Sql.Format("SqlQueryableDatabaseDefinition_Create",
                              SqlUtility.Identifier(info.Module.Name),
                              SqlUtility.Identifier(info.Name),
                              info.SqlSource));
        }
示例#14
0
        public string RemoveDatabaseStructure(IConceptInfo conceptInfo)
        {
            var info = (SqlTriggerInfo)conceptInfo;
            var orm  = (IOrmDataStructure)info.Structure;

            return(Sql.Format("SqlTriggerDatabaseDefinition_Remove",
                              SqlUtility.Identifier(orm.GetOrmSchema()),
                              TriggerName(info)));
        }
示例#15
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 RemoveDatabaseStructure(IConceptInfo conceptInfo)
        {
            var info = (EntityInfo)conceptInfo;

            return(Sql.Format("EntityDatabaseDefinition_Remove",
                              SqlUtility.Identifier(info.Module.Name),
                              SqlUtility.Identifier(info.Name),
                              PrimaryKeyConstraintName(info),
                              DefaultConstraintName(info)));
        }
        public string RemoveDatabaseStructure(IConceptInfo conceptInfo)
        {
            var info = (DatePropertyInfo)conceptInfo;

            if (info.DataStructure is EntityInfo)
            {
                return(PropertyDatabaseDefinition.RemoveColumn(info, SqlUtility.Identifier(info.Name)));
            }
            return("");
        }
        public string CreateDatabaseStructure(IConceptInfo conceptInfo)
        {
            var info = (SqlViewInfo)conceptInfo;

            return(Sql.Format("SqlViewDatabaseDefinition_Create",
                              SqlUtility.Identifier(info.Module.Name),
                              SqlUtility.Identifier(info.Name),
                              info.ViewSource,
                              SqlUtility.ScriptSplitterTag));
        }
示例#19
0
        public void ExtendDatabaseStructure(IConceptInfo conceptInfo, ICodeBuilder codeBuilder, out IEnumerable <Tuple <IConceptInfo, IConceptInfo> > createdDependencies)
        {
            var info = (LegacyPropertyReadOnlyInfo)conceptInfo;

            createdDependencies = null;

            codeBuilder.InsertCode(
                Sql.Format("LegacyPropertyReadOnlyDatabaseDefinition_ViewSelect", SqlUtility.Identifier(info.Property.Name), SqlUtility.Identifier(info.Column)),
                LegacyEntityWithAutoCreatedViewDatabaseDefinition.ViewSelectPartTag, info.Dependency_LegacyEntityWithAutoCreatedView);
        }
示例#20
0
        public string RemoveDatabaseStructure(IConceptInfo conceptInfo)
        {
            var info = (EntityLoggingInfo)conceptInfo;

            return(Sql.Format("EntityLoggingDefinition_Remove",
                              SqlUtility.Identifier(info.Entity.Module.Name),
                              GetTriggerNameInsert(info),
                              GetTriggerNameUpdate(info),
                              GetTriggerNameDelete(info)));
        }
        public string RemoveDatabaseStructure(IConceptInfo conceptInfo)
        {
            var info = (LegacyEntityWithAutoCreatedViewInfo)conceptInfo;

            return(Sql.Format("LegacyEntityWithAutoCreatedViewDatabaseDefinition_Remove",
                              SqlUtility.Identifier(info.Module.Name),
                              SqlUtility.Identifier(info.Name),
                              InsertTriggerName(info),
                              UpdateTriggerName(info),
                              DeleteTriggerName(info)));
        }
        private static void InsertCode(ICodeBuilder codeBuilder, LoggingRelatedItemInfo info, string sqlResource, SqlTag <EntityLoggingInfo> tag)
        {
            string codeSnippet = Sql.Format(sqlResource,
                                            GetTempColumnNameOld(info),
                                            GetTempColumnNameNew(info),
                                            info.Table,
                                            SqlUtility.Identifier(info.Column),
                                            SqlUtility.QuoteText(info.Relation));

            codeBuilder.InsertCode(codeSnippet, tag, info.Logging);
        }
示例#23
0
        public string RemoveDatabaseStructure(IConceptInfo conceptInfo)
        {
            var info = (UniqueReferenceInfo)conceptInfo;

            if (IsSupported(info))
            {
                return(Sql.Format("UniqueReferenceDatabaseDefinition_Remove",
                                  SqlUtility.Identifier(info.Extension.Module.Name) + "." + SqlUtility.Identifier(info.Extension.Name),
                                  GetConstraintName(info)));
            }
            return("");
        }
示例#24
0
        public string CreateDatabaseStructure(IConceptInfo conceptInfo)
        {
            var info = (SqlTriggerInfo)conceptInfo;
            var orm  = (IOrmDataStructure)info.Structure;

            return(Sql.Format("SqlTriggerDatabaseDefinition_Create",
                              SqlUtility.Identifier(orm.GetOrmSchema()),
                              TriggerName(info),
                              SqlUtility.Identifier(orm.GetOrmDatabaseObject()),
                              info.Events,
                              info.TriggerSource));
        }
示例#25
0
        public string CreateDatabaseStructure(IConceptInfo conceptInfo)
        {
            var info      = (ReferencePropertyDbConstraintInfo)conceptInfo;
            var reference = info.Reference;

            return(Sql.Format("ReferencePropertyConstraintDatabaseDefinition_Create",
                              SqlUtility.Identifier(reference.DataStructure.Module.Name) + "." + SqlUtility.Identifier(reference.DataStructure.Name),
                              GetConstraintName(reference),
                              reference.GetColumnName(),
                              ForeignKeyUtility.GetSchemaTableForForeignKey(reference.Referenced),
                              ForeignKeyConstraintOptions.Evaluate(info)));
        }
示例#26
0
        public string RemoveDatabaseStructure(IConceptInfo conceptInfo)
        {
            var info = (DataStructureExtendsInfo)conceptInfo;

            if (ShouldCreateConstraint(info))
            {
                return(Sql.Format("DataStructureExtendsDatabaseDefinition_Remove",
                                  SqlUtility.Identifier(info.Extension.Module.Name) + "." + SqlUtility.Identifier(info.Extension.Name),
                                  GetConstraintName(info)));
            }
            return("");
        }
        public string RemoveDatabaseStructure(IConceptInfo conceptInfo)
        {
            var info = (ReferencePropertyInfo)conceptInfo;

            if (IsSupported(info))
            {
                return(Sql.Format("ReferencePropertyConstraintDatabaseDefinition_Remove",
                                  SqlUtility.Identifier(info.DataStructure.Module.Name) + "." + SqlUtility.Identifier(info.DataStructure.Name),
                                  GetConstraintName(info)));
            }
            return("");
        }
示例#28
0
        public string CreateDatabaseStructure(IConceptInfo conceptInfo)
        {
            var info = (MoneyPropertyInfo)conceptInfo;

            SqlUtility.Identifier(info.Name);

            if (info.DataStructure is EntityInfo)
            {
                return(PropertyDatabaseDefinition.AddColumn(_conceptMetadata, info,
                                                            Sql.Format("MoneyPropertyDatabaseDefinition_CreateCheckConstraint", ConstraintName(info), SqlUtility.Identifier(info.Name))));
            }
            return("");
        }
 private SqlTriggerInfo GeneratedTrigger(ModificationTimeOfInfo info, string triggerType)
 {
     return(new SqlTriggerInfo
     {
         Structure = info.Property.DataStructure,
         Name = info.Property.Name + "_On" + triggerType + info.ModifiedProperty.Name,
         Events = "FOR " + triggerType.ToUpper(),
         TriggerSource = Sql.Format("ModificationTimeOfDatabaseDefinition_" + triggerType + "TriggerBody",
                                    SqlUtility.Identifier(info.Property.DataStructure.Module.Name),
                                    SqlUtility.Identifier(info.Property.DataStructure.Name),
                                    SqlUtility.Identifier(info.Property.Name),
                                    SqlUtility.Identifier(DbPropertyName(info.ModifiedProperty)))
     });
 }
示例#30
0
        public static string AddColumn(ConceptMetadata conceptMetadata, PropertyInfo property, string options = "")
        {
            string columnName = conceptMetadata.Get(property, ColumnNamesMetadata).Single();

            return(Sql.Format("PropertyDatabaseDefinition_AddColumn",
                              SqlUtility.Identifier(property.DataStructure.Module.Name),
                              SqlUtility.Identifier(property.DataStructure.Name),
                              DslUtility.ValidateIdentifier(columnName, property, "Invalid column name."),
                              conceptMetadata.Get(property, ColumnTypesMetadata).Single(),
                              options,
                              Options1Tag.Evaluate(property),
                              Options2Tag.Evaluate(property),
                              AfterCreateTag.Evaluate(property)).Trim());
        }