suppourt ndty orm

This commit is contained in:
gbase_contributors
2021-12-15 14:48:26 +08:00
parent 563f695d09
commit fdcb76eaa2
53 changed files with 12244 additions and 187 deletions

View File

@ -471,6 +471,15 @@ namespace FreeSql
expContext.Result = $"list({expContext.ParsedContent["column"]},{expContext.ParsedContent["delimiter"]})";
return null;
}
public static string StringJoinGBaseWmConcatText(object column, object delimiter)
{
if (expContext.ParsedContent["delimiter"] == "','")
expContext.Result = $"wm_concat_text({expContext.ParsedContent["column"]})";
else
throw new NotImplementedException("GBase 暂时不支持逗号以外的分割符");
//expContext.Result = $"replace(wm_concat_text({expContext.ParsedContent["column"]}), ',', {expContext.ParsedContent["delimiter"]})";
return null;
}
#endregion
}
}

View File

@ -418,9 +418,25 @@ public static partial class FreeSqlGlobalExtensions
if (select._orm.CodeFirst.IsSyncStructureToLower) cteName = cteName.ToLower();
if (select._orm.CodeFirst.IsSyncStructureToUpper) cteName = cteName.ToUpper();
switch (select._orm.Ado.DataType) //MySql5.6
switch (select._orm.Ado.DataType)
{
case DataType.MySql:
case DataType.GBase:
//select t.parentid, t.subid, level
//from a_test t
//start with subid = '7'
//connect by prior subid = parentid;
var gbsb = new StringBuilder();
var gbsbWhere = select._where.ToString();
select._where.Clear();
if (gbsbWhere.StartsWith(" AND ")) gbsbWhere = gbsbWhere.Remove(0, 5);
gbsb.Append(select._tosqlAppendContent).Append(" \r\nstart with ").Append(gbsbWhere).Append(" \r\nconnect by prior ");
if (up) gbsb.Append("a.").Append(select._commonUtils.QuoteSqlName(tbref.Columns[0].Attribute.Name)).Append(" = ").Append("a.").Append(select._commonUtils.QuoteSqlName(tbref.RefColumns[0].Attribute.Name));
else gbsb.Append("a.").Append(select._commonUtils.QuoteSqlName(tbref.Columns[0].Attribute.Name)).Append(" = ").Append("a.").Append(select._commonUtils.QuoteSqlName(tbref.RefColumns[0].Attribute.Name));
var gbswstr = gbsb.ToString();
gbsb.Clear();
select.AsAlias((_, old) => $"{old} {gbswstr}");
return select;
case DataType.MySql: //MySql5.6
case DataType.OdbcMySql:
var mysqlConnectionString = select._orm.Ado?.ConnectionString ?? select._connection?.ConnectionString ?? "";
if (_dicMySqlVersion.TryGetValue(mysqlConnectionString, out var mysqlVersion) == false)
@ -580,6 +596,7 @@ JOIN {select._commonUtils.QuoteSqlName(tb.DbName)} a ON cte_tbc.cte_id = a.{sele
case DataType.OdbcOracle:
case DataType.Dameng: //递归 WITH 子句必须具有列别名列表
case DataType.OdbcDameng:
case DataType.GBase:
nsselsb.Append($"(cte_level, {(pathSelector == null ? "" : "cte_path, ")}{sql2Field.Replace("wct2.", "")})");
break;
}