public static string GetTableTemplate(this IDataProviderMetaData @this)
        {
            var result = "";

            void addTable(IDataProviderMetaData medaData)
            {
                var baseType = medaData.BaseClassesInOrder.LastOrDefault();

                result += " LEFT OUTER JOIN ".OnlyWhen(result.HasValue()) +
                          $"{medaData.Schema.WithSuffix(".")}{medaData.TableName} AS [{{0}}{medaData.TableAlias}] " +
                          $"ON [{{0}}{medaData.TableAlias}].[{medaData.IdColumnName}] = [{{0}}{baseType?.TableAlias}].[{baseType?.IdColumnName}]".OnlyWhen(baseType != null);
            }

            foreach (var parent in @this.BaseClassesInOrder)
            {
                addTable(parent);
            }

            addTable(@this);

            foreach (var drived in @this.DrivedClasses)
            {
                addTable(drived);
            }

            return(result);
        }
        public static string GetTableTemplate(this IDataProviderMetaData @this, ISqlCommandGenerator sqlCommandGenerator)
        {
            var result = "";

            string safe(string value) => sqlCommandGenerator.SafeId(value);

            void addTable(IDataProviderMetaData medaData)
            {
                var baseType = medaData.BaseClassesInOrder.LastOrDefault();

                var alias = safe($"{{0}}{medaData.TableAlias}");

                result += " LEFT OUTER JOIN ".OnlyWhen(result.HasValue()) +
                          $"{medaData.Schema.WithSuffix(".")}{medaData.TableName} AS {alias} " +
                          $"ON {alias}.{safe(medaData.IdColumnName)} = {safe($"{{0}}{baseType?.TableAlias}")}.{safe(baseType?.IdColumnName)}".OnlyWhen(baseType != null);
            }

            foreach (var parent in @this.BaseClassesInOrder)
            {
                addTable(parent);
            }

            addTable(@this);

            foreach (var drived in @this.DrivedClasses)
            {
                addTable(drived);
            }

            return(result);
        }
예제 #3
0
        protected override string GetInsertCommandTemplate(IDataProviderMetaData metaData)
        {
            var autoNumber = metaData.AutoNumberProperty;

            return($@"INSERT INTO {{0}} ({{1}})
                VALUES ({{2}});
                {"SELECT CAST(LAST_INSERT_ID() as SIGNED);".OnlyWhen(autoNumber != null)}");
        }
예제 #4
0
        protected virtual string GetInsertCommandTemplate(IDataProviderMetaData metaData)
        {
            var autoNumber = metaData.AutoNumberProperty;

            return($@"INSERT INTO {{0}} ({{1}})
                {$"OUTPUT [INSERTED].{autoNumber?.Name}".OnlyWhen(autoNumber != null)}
                VALUES ({{2}})");
        }
        public static IEnumerable <IPropertyData> GetPropertiesForFillData(this IDataProviderMetaData @this)
        {
            if (@this.BaseClassesInOrder.HasAny())
            {
                return(@this.UserDefienedProperties);
            }

            return(@this.UserDefienedAndIdProperties);
        }
예제 #6
0
        public static IEnumerable <IPropertyData> GetPropertiesForFillData(this IDataProviderMetaData @this)
        {
            if (@this.BaseClassesInOrder.HasAny())
            {
                return(@this.UserDefienedProperties
                       .Concat(@this.Properties.Where(p => p.IsDeleted)));
            }

            return(@this.UserDefienedAndIdAndDeletedProperties);
        }
예제 #7
0
        public virtual string GenerateInsertCommand(IDataProviderMetaData metaData)
        {
            var properties = metaData.GetPropertiesForInsert();

            return(GetInsertCommandTemplate(metaData).FormatWith(
                       GetFullTableName(metaData),
                       properties.Select(x => SafeId(x.Name)).ToString(", "),
                       properties.Select(x => $"@{x.ParameterName}").ToString(", ")
                       ));
        }
        public static IEnumerable <IPropertyData> GetPropertiesForInsert(this IDataProviderMetaData @this)
        {
            var result = @this.UserDefienedAndIdProperties.Except(p => p.IsAutoNumber);

            if (@this.IsSoftDeleteEnabled)
            {
                return(result.Concat(@this.Properties.First(p => p.IsDeleted)));
            }

            return(result);
        }
예제 #9
0
        public virtual string GenerateInsertCommand(IDataProviderMetaData metaData)
        {
            var properties = metaData.GetPropertiesForInsert();

            var autoNumber = metaData.AutoNumberProperty;

            return($@"INSERT INTO {GetFullTablaName(metaData)}
                ({properties.Select(x => SafeId(x.Name)).ToString(", ")})
                {$"OUTPUT [INSERTED].{autoNumber?.Name}".OnlyWhen(autoNumber != null)}
                VALUES
                ({properties.Select(x => $"@{x.ParameterName}").ToString(", ")})");
        }
예제 #10
0
        public virtual string GenerateUpdateCommand(IDataProviderMetaData metaData)
        {
            var properties = metaData.UserDefienedAndDeletedProperties
                             .Except(p => p.IsAutoNumber);

            if (properties.None())
            {
                return("");
            }

            return($@"UPDATE {GetFullTableName(metaData)} SET
                {properties.Select(x => $"{SafeId(x.Name)} = @{x.ParameterName}").ToString(", ")}
                WHERE {metaData.IdColumnName} = @OriginalId");
        }
예제 #11
0
 DataProvider For(IDataProviderMetaData meta) => DataProviderFactory.GetOrCreate(meta.Type, Cache, Access, SqlCommandGenerator);
예제 #12
0
 string GetSqlCommandColumnAlias(IDataProviderMetaData medaData, string propertyName) =>
 $"{medaData.TableName}_{propertyName}";
예제 #13
0
 string GetSqlCommandColumnAlias(IDataProviderMetaData medaData, IPropertyData property) =>
 GetSqlCommandColumnAlias(medaData, property.Name);
예제 #14
0
 string GetSqlCommandColumn(IDataProviderMetaData medaData, string propertyName) =>
 $"{medaData.TableAlias}.[{propertyName}]";
예제 #15
0
        public static IEnumerable <IPropertyData> GetPropertiesForInsert(this IDataProviderMetaData @this)
        {
            var result = @this.UserDefienedAndIdAndDeletedProperties.Except(p => p.IsAutoNumber);

            return(result);
        }
예제 #16
0
 public virtual string GenerateDeleteCommand(IDataProviderMetaData metaData) =>
 $"DELETE FROM {GetFullTableName(metaData)} WHERE {metaData.IdColumnName} = @Id";
예제 #17
0
 string GetSqlCommandColumn(IDataProviderMetaData medaData, string propertyName) =>
 $"{medaData.TableAlias}.{SqlCommandGenerator.SafeId(propertyName)}";
예제 #18
0
 protected string GetFullTableName(IDataProviderMetaData metaData) =>
 metaData.Schema.WithSuffix(".") + metaData.TableName;
예제 #19
0
 public static DataProvider GetProvider(
     this IDataProviderMetaData @this, ICache cache, IDataAccess access, ISqlCommandGenerator sqlCommandGenerator)
 {
     return(GetProvider(@this.Type, cache, access, sqlCommandGenerator));
 }