From a60a68cd133dfbbd9dcf465ac21e89e83fd513de Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Sat, 13 Apr 2019 11:16:58 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=86=85=E9=83=A8=20QuoteSql?= =?UTF-8?q?Name=20=E6=96=B9=E6=B3=95=EF=BC=9B=20=E5=BD=93=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E5=80=BC=E6=98=AF=20(xxx)=EF=BC=8C=E5=88=99=E7=9B=B4?= =?UTF-8?q?=E6=8E=A5=E8=BF=94=E5=9B=9E=E5=8E=9F=E5=BD=A2=E3=80=82=20?= =?UTF-8?q?=E5=A6=82=EF=BC=9Axxx=20=3D>=20[xxx]=EF=BC=8C(max(1))=20=3D>=20?= =?UTF-8?q?(max(1))?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql.Tests/UnitTest1.cs | 3 +++ FreeSql/MySql/MySqlUtils.cs | 7 ++++++- FreeSql/Oracle/OracleUtils.cs | 7 ++++++- FreeSql/PostgreSQL/PostgreSQLUtils.cs | 7 ++++++- FreeSql/SqlServer/SqlServerUtils.cs | 7 ++++++- FreeSql/Sqlite/SqliteUtils.cs | 7 ++++++- 6 files changed, 33 insertions(+), 5 deletions(-) diff --git a/FreeSql.Tests/UnitTest1.cs b/FreeSql.Tests/UnitTest1.cs index 12a9e174..607046f3 100644 --- a/FreeSql.Tests/UnitTest1.cs +++ b/FreeSql.Tests/UnitTest1.cs @@ -44,6 +44,9 @@ namespace FreeSql.Tests { [Fact] public void Test1() { + var sql111 = g.sqlite.Select().AsTable((a, b) => "(select * from TestUser where stringid > 10)").Page(1, 10).ToSql(); + + var xxx = g.sqlite.Select().GroupBy(a => new { a.stringid }).ToList(a => a.Key.stringid); var tuser = g.sqlite.Select().Where(u => u.accname == "admin") diff --git a/FreeSql/MySql/MySqlUtils.cs b/FreeSql/MySql/MySqlUtils.cs index 0fd846f3..6e926867 100644 --- a/FreeSql/MySql/MySqlUtils.cs +++ b/FreeSql/MySql/MySqlUtils.cs @@ -42,7 +42,12 @@ namespace FreeSql.MySql { }); internal override string FormatSql(string sql, params object[] args) => sql?.FormatMySql(args); - internal override string QuoteSqlName(string name) => $"`{name.Trim('`').Replace(".", "`.`")}`"; + internal override string QuoteSqlName(string name) { + var nametrim = name.Trim(); + if (nametrim.StartsWith("(") && nametrim.EndsWith(")")) + return nametrim; //原生SQL + return $"`{nametrim.Trim('`').Replace(".", "`.`")}`"; + } internal override string QuoteParamterName(string name) => $"?{(_orm.CodeFirst.IsSyncStructureToLower ? name.ToLower() : name)}"; internal override string IsNull(string sql, object value) => $"ifnull({sql}, {value})"; internal override string StringConcat(string left, string right, Type leftType, Type rightType) => $"concat({left}, {right})"; diff --git a/FreeSql/Oracle/OracleUtils.cs b/FreeSql/Oracle/OracleUtils.cs index d5b5d377..e1ea4f42 100644 --- a/FreeSql/Oracle/OracleUtils.cs +++ b/FreeSql/Oracle/OracleUtils.cs @@ -38,7 +38,12 @@ namespace FreeSql.Oracle { }); internal override string FormatSql(string sql, params object[] args) => sql?.FormatOracleSQL(args); - internal override string QuoteSqlName(string name) => $"\"{name.Trim('"').Replace(".", "\".\"")}\""; + internal override string QuoteSqlName(string name) { + var nametrim = name.Trim(); + if (nametrim.StartsWith("(") && nametrim.EndsWith(")")) + return nametrim; //原生SQL + return $"\"{nametrim.Trim('"').Replace(".", "\".\"")}\""; + } internal override string QuoteParamterName(string name) => $":{(_orm.CodeFirst.IsSyncStructureToLower ? name.ToLower() : name)}"; internal override string IsNull(string sql, object value) => $"nvl({sql}, {value})"; internal override string StringConcat(string left, string right, Type leftType, Type rightType) => $"{left} || {right}"; diff --git a/FreeSql/PostgreSQL/PostgreSQLUtils.cs b/FreeSql/PostgreSQL/PostgreSQLUtils.cs index d689d1d7..b74915a2 100644 --- a/FreeSql/PostgreSQL/PostgreSQLUtils.cs +++ b/FreeSql/PostgreSQL/PostgreSQLUtils.cs @@ -97,7 +97,12 @@ namespace FreeSql.PostgreSQL { }); internal override string FormatSql(string sql, params object[] args) => sql?.FormatPostgreSQL(args); - internal override string QuoteSqlName(string name) => $"\"{name.Trim('"').Replace(".", "\".\"")}\""; + internal override string QuoteSqlName(string name) { + var nametrim = name.Trim(); + if (nametrim.StartsWith("(") && nametrim.EndsWith(")")) + return nametrim; //原生SQL + return $"\"{nametrim.Trim('"').Replace(".", "\".\"")}\""; + } internal override string QuoteParamterName(string name) => $"@{(_orm.CodeFirst.IsSyncStructureToLower ? name.ToLower() : name)}"; internal override string IsNull(string sql, object value) => $"coalesce({sql}, {value})"; internal override string StringConcat(string left, string right, Type leftType, Type rightType) => $"{left} || {right}"; diff --git a/FreeSql/SqlServer/SqlServerUtils.cs b/FreeSql/SqlServer/SqlServerUtils.cs index 9705900e..6c65db4a 100644 --- a/FreeSql/SqlServer/SqlServerUtils.cs +++ b/FreeSql/SqlServer/SqlServerUtils.cs @@ -35,7 +35,12 @@ namespace FreeSql.SqlServer { }); internal override string FormatSql(string sql, params object[] args) => sql?.FormatSqlServer(args); - internal override string QuoteSqlName(string name) => $"[{name.TrimStart('[').TrimEnd(']').Replace(".", "].[")}]"; + internal override string QuoteSqlName(string name) { + var nametrim = name.Trim(); + if (nametrim.StartsWith("(") && nametrim.EndsWith(")")) + return nametrim; //原生SQL + return $"[{nametrim.TrimStart('[').TrimEnd(']').Replace(".", "].[")}]"; + } internal override string QuoteParamterName(string name) => $"@{(_orm.CodeFirst.IsSyncStructureToLower ? name.ToLower() : name)}"; internal override string IsNull(string sql, object value) => $"isnull({sql}, {value})"; internal override string StringConcat(string left, string right, Type leftType, Type rightType) => $"{(leftType.FullName == "System.String" ? left : $"cast({left} as nvarchar)")} + {(rightType.FullName == "System.String" ? right : $"cast({right} as nvarchar)")}"; diff --git a/FreeSql/Sqlite/SqliteUtils.cs b/FreeSql/Sqlite/SqliteUtils.cs index 6ff93ed9..3a8bea39 100644 --- a/FreeSql/Sqlite/SqliteUtils.cs +++ b/FreeSql/Sqlite/SqliteUtils.cs @@ -53,7 +53,12 @@ namespace FreeSql.Sqlite { }); internal override string FormatSql(string sql, params object[] args) => sql?.FormatSqlite(args); - internal override string QuoteSqlName(string name) => $"\"{name.Trim('"').Replace(".", "\".\"")}\""; + internal override string QuoteSqlName(string name) { + var nametrim = name.Trim(); + if (nametrim.StartsWith("(") && nametrim.EndsWith(")")) + return nametrim; //原生SQL + return $"\"{nametrim.Trim('"').Replace(".", "\".\"")}\""; + } internal override string QuoteParamterName(string name) => $"@{(_orm.CodeFirst.IsSyncStructureToLower ? name.ToLower() : name)}"; internal override string IsNull(string sql, object value) => $"ifnull({sql}, {value})"; internal override string StringConcat(string left, string right, Type leftType, Type rightType) => $"{left} || {right}";