示例#1
0
        public JsonResult ExportSql(string database, string tableName, string tableCategory, bool isAllTable, bool includCreate, bool includInsert)
        {
            DatabaseDialectEnum dialect = (DatabaseDialectEnum)Enum.Parse(typeof(DatabaseDialectEnum), database);

            //优先级最高
            if (isAllTable)
            {
                var           dics     = _dbContext.Dictionarys("TableCategory").OrderBy(d => d.SortBy);
                StringBuilder sbALLSql = new StringBuilder();
                sbALLSql.AppendLine("use FapCore30;");
                foreach (var dic in dics)
                {
                    sbALLSql.Append(_dbMetadataContext.ExportSql(dialect, string.Empty, dic.Code, includCreate, includInsert));
                }
                string allFileName = $"{database}.sql";
                string allFilePath = Path.Combine(Environment.CurrentDirectory, FapPlatformConstants.TemporaryFolder, allFileName);
                return(ZipSql(sbALLSql.ToString(), allFileName, allFilePath));
            }
            if (tableName.IsMissing() && tableCategory.IsMissing())
            {
                return(Json(ResponseViewModelUtils.Failure("请选择导出的表或分类")));
            }
            string sql      = _dbMetadataContext.ExportSql(dialect, tableName, tableCategory, includCreate, includInsert);
            string fileName = (tableName.IsPresent() ? tableName : tableCategory) + $"{database}.sql";
            string filePath = Path.Combine(Environment.CurrentDirectory, FapPlatformConstants.TemporaryFolder, fileName);

            if (tableName.IsPresent())
            {
                return(Json(new ResponseViewModel {
                    success = true, data = sql
                }));
            }
            return(ZipSql(sql, fileName, filePath));
        }
示例#2
0
 private static string ReplaceFunc(string sqlDesc, DatabaseDialectEnum dialect)
 {
     if (dialect == DatabaseDialectEnum.MSSQL)
     {
         sqlDesc = sqlDesc
                   .ReplaceIgnoreCase("[小时](", " DATEDIFF(hh,")
                   .ReplaceIgnoreCase("[天](", " DATEDIFF(dd,")
                   .ReplaceIgnoreCase("[星期](", " TimeStampDiff(wk,")
                   .ReplaceIgnoreCase("[月](", " TimeStampDiff(mm,")
                   .ReplaceIgnoreCase("[季度](", " TimeStampDiff(qq,")
                   .ReplaceIgnoreCase("[年](", " DATEDIFF(yy,")
                   .ReplaceIgnoreCase("[空](", " ISNULL(")
         ;
     }
     else if (dialect == DatabaseDialectEnum.MYSQL)
     {
         sqlDesc = sqlDesc
                   .ReplaceIgnoreCase("[小时](", " TimeStampDiff(HOUR,")
                   .ReplaceIgnoreCase("[天](", " TimeStampDiff(DAY,")
                   .ReplaceIgnoreCase("[星期](", " TimeStampDiff(WEEK,")
                   .ReplaceIgnoreCase("[月](", " TimeStampDiff(MONTH,")
                   .ReplaceIgnoreCase("[季度](", "TimeStampDiff(QUARTER,")
                   .ReplaceIgnoreCase("[年](", " TimeStampDiff(YEAR,")
                   .ReplaceIgnoreCase("[空](", " IFNULL(");
     }
     sqlDesc = sqlDesc.ReplaceIgnoreCase("[绝对值](", " ABS(")
               .ReplaceIgnoreCase("[向上取整](", " CEILING(")
               .ReplaceIgnoreCase("[向下取整](", " FLOOR(")
               .ReplaceIgnoreCase("[四舍五入](", " ROUND(");
     return(sqlDesc);
 }
示例#3
0
 /// <summary>
 /// 构造方法
 /// </summary>
 /// <param name="conn">连接</param>
 public DbSession(ILoggerFactory loggerFactory, IConnectionFactory connectionFactory)
 {
     _logger           = loggerFactory.CreateLogger <DbSession>();
     ConnectionFactory = connectionFactory;
     DatabaseDialect   = connectionFactory.DatabaseDialect;
     // CommandTimeout = commandTimeOut;
 }
示例#4
0
        /// <summary>
        /// 返回数据sql
        /// </summary>
        /// <param name="cols"></param>
        /// <param name="data"></param>
        /// <param name="sqlDesc"></param>
        /// <param name="dialect"></param>
        /// <returns></returns>
        public static string ParsingConditionSql(IEnumerable <FapColumn> cols, IDictionary <string, object> data, string sqlDesc, DatabaseDialectEnum dialect)
        {
            Regex           rgx    = new Regex(MatchBigParantheses);
            MatchCollection matchs = rgx.Matches(sqlDesc);

            foreach (var mtch in matchs)
            {
                var       colLabel = mtch.ToString().TrimStart('{').TrimEnd('}').Trim();
                FapColumn fcol     = cols.FirstOrDefault(c => c.ColComment == colLabel);
                if (fcol != null)
                {
                    if (fcol.ColType == FapColumn.COL_TYPE_INT ||
                        fcol.ColType == FapColumn.COL_TYPE_LONG ||
                        fcol.ColType == FapColumn.COL_TYPE_DOUBLE ||
                        fcol.ColType == FapColumn.COL_TYPE_BOOL)
                    {
                        sqlDesc = sqlDesc.Replace(mtch.ToString(), data[fcol.ColName].ToStringOrEmpty());
                    }
                    else
                    {
                        sqlDesc = sqlDesc.Replace(mtch.ToString(), $"'{data[fcol.ColName].ToStringOrEmpty()}'");
                    }
                }
            }
            sqlDesc = ReplaceFunc(sqlDesc, dialect);
            sqlDesc = ReplaceConstant(sqlDesc);
            string sql = $"select 1 where {sqlDesc}";

            if (dialect != DatabaseDialectEnum.MSSQL)
            {
                sql = $"select 1 from dual where {sqlDesc}";
            }
            return(sql);
        }
示例#5
0
        /// <summary>
        /// 返回sql where
        /// </summary>
        /// <param name="cols"></param>
        /// <param name="sqlDesc"></param>
        /// <returns></returns>
        public static string ParsingSql(IEnumerable <FapColumn> cols, string sqlDesc, DatabaseDialectEnum dialect)
        {
            Regex           rgx    = new Regex(MatchBigParantheses);
            MatchCollection matchs = rgx.Matches(sqlDesc);

            foreach (var mtch in matchs)
            {
                var colLabel = mtch.ToString().TrimStart('{').TrimEnd('}').Trim();
                sqlDesc = sqlDesc.ReplaceIgnoreCase(mtch.ToString(), cols.FirstOrDefault(c => c.ColComment == colLabel)?.ColName ?? "");
            }
            sqlDesc = ReplaceFunc(sqlDesc, dialect);
            sqlDesc = ReplaceConstant(sqlDesc);
            return(sqlDesc);
        }
示例#6
0
        public static string ParsingFormulaCheckSql(string tableName, string checkSql, DatabaseDialectEnum dialect)
        {
            if (dialect == DatabaseDialectEnum.MSSQL)
            {
                string sql = checkSql.ReplaceIgnoreCase(tableName, "#FmuValideTemp");
                return(string.Format(@"
                if exists(select * from tempdb..sysobjects where id=object_id('tempdb..#FmuValideTemp'))
                begin
                drop table #FmuValideTemp
                end
                select top 1 * into #FmuValideTemp from {0} where 1 = 2;
                {1};
                drop table #FmuValideTemp;", tableName, sql));
            }
            else if (dialect == DatabaseDialectEnum.MYSQL)
            {
                string sql = checkSql.ReplaceIgnoreCase(tableName, "FmuValideTemp");
                return(string.Format(@"CREATE TEMPORARY TABLE FmuValideTemp(SELECT  * FROM {0} where 1=2 ); 
{1};
drop table FmuValideTemp;", tableName, sql));
            }
            return(string.Empty);
        }
示例#7
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="cols"></param>
        /// <param name="colName"></param>
        /// <param name="grandTableName">汇总表名</param>
        /// <param name="sqlDesc"></param>
        /// <param name="dialect"></param>
        /// <returns></returns>
        public static string ParsingFormulaGrandTotalSql(IEnumerable <FapColumn> cols, string colName, string grandTableName, string sqlDesc, DatabaseDialectEnum databaseDialect)
        {
            Regex           rgx    = new Regex(MatchBigParantheses);
            MatchCollection matchs = rgx.Matches(sqlDesc);

            if (matchs.Any())
            {
                var       colLabel = matchs.First().Value.TrimStart('{').TrimEnd('}').Trim();
                FapColumn fcol     = cols.FirstOrDefault(c => c.ColComment == colLabel);
                if (fcol != null)
                {
                    string associate = string.Empty;
                    if (grandTableName.IsPresent() && !grandTableName.EqualsWithIgnoreCase(fcol.TableName))
                    {
                        if (grandTableName.EqualsWithIgnoreCase("PayCenter"))
                        {
                            associate = $"{grandTableName}.PayCaseUid = {fcol.TableName}.PayCaseUid and substring({grandTableName}.PayYM,1,4)= substring({fcol.TableName}.PayYM, 1, 4) and {grandTableName}.EmpUid = {fcol.TableName}.EmpUid";
                        }
                        else if (grandTableName.EqualsWithIgnoreCase("InsCenter"))
                        {
                            associate = $"{grandTableName}.InsCaseUid = {fcol.TableName}.InsCaseUid and substring({grandTableName}.InsYM,1,4)= substring({fcol.TableName}.InsYM, 1, 4) and {grandTableName}.EmpUid = {fcol.TableName}.EmpUid";
                        }
                        else
                        {
                            associate = $"{grandTableName}.Fid={fcol.TableName}.Fid";
                        }
                        string sqlSum = string.Empty;
                        if (databaseDialect == DatabaseDialectEnum.MSSQL)
                        {
                            sqlSum = $" ISNULL((select sum({fcol.ColName}) from {grandTableName} where  {associate}),0.0)";
                        }
                        else if (databaseDialect == DatabaseDialectEnum.MYSQL)
                        {
                            sqlSum = $" IFNULL((select sum({fcol.ColName}) from {grandTableName} where  {associate}),0.0)";
                        }
                        return($"update {fcol.TableName} set {colName} = {fcol.ColName} +" + sqlSum);
                    }
                    else
                    {
                        return(string.Empty);//$"update {fcol.TableName} set {colName}=sum({fcol.ColName}) where {associate}";
                    }
                }
            }
            return(string.Empty);
        }
示例#8
0
        public static string ParsingFormulaVariableSql(IEnumerable <FapColumn> cols, string colName, string sqlDesc, DatabaseDialectEnum dialect)
        {
            string          tableName = cols.First().TableName;
            Regex           rgx       = new Regex(MatchBigParantheses);
            MatchCollection matchs    = rgx.Matches(sqlDesc);

            foreach (var mtch in matchs)
            {
                var       colLabel = mtch.ToString().TrimStart('{').TrimEnd('}').Trim();
                FapColumn fcol     = cols.FirstOrDefault(c => c.ColComment == colLabel);
                if (fcol != null)
                {
                    sqlDesc = sqlDesc.Replace(mtch.ToString(), fcol.ColName);
                }
            }
            sqlDesc = ReplaceFunc(sqlDesc, dialect);
            sqlDesc = ReplaceConstant(sqlDesc);
            return($"update {tableName} set {colName}={sqlDesc} where {ValidWhere(tableName)}");
        }