SqlServer 单元测试 Curd 走通

This commit is contained in:
28810
2018-12-19 17:06:38 +08:00
parent d619d29cfa
commit 4e45bb184e
21 changed files with 933 additions and 42 deletions

View File

@ -80,6 +80,15 @@ namespace FreeSql {
/// <param name="cmdParms"></param>
object ExecuteScalar(CommandType cmdType, string cmdText, params DbParameter[] cmdParms);
/// <summary>
/// 执行SQL返回对象集合Query&lt;User&gt;("select * from user where age > @age", new SqlParameter { ParameterName = "age", Value = 25 })
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="cmdType"></param>
/// <param name="cmdText"></param>
/// <param name="cmdParms"></param>
/// <returns></returns>
List<T> Query<T>(CommandType cmdType, string cmdText, params DbParameter[] cmdParms);
/// <summary>
/// 执行SQL返回对象集合Query&lt;User&gt;("select * from user where age > @age", new { age = 25 })
/// </summary>
@ -126,7 +135,16 @@ namespace FreeSql {
Task<object> ExecuteScalarAsync(CommandType cmdType, string cmdText, params DbParameter[] cmdParms);
/// <summary>
/// 执行SQL返回对象集合Query&lt;User&gt;("select * from user where age > @age", new { age = 25 })
/// 执行SQL返回对象集合QueryAsync&lt;User&gt;("select * from user where age > @age", new SqlParameter { ParameterName = "age", Value = 25 })
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="cmdType"></param>
/// <param name="cmdText"></param>
/// <param name="cmdParms"></param>
/// <returns></returns>
Task<List<T>> QueryAsync<T>(CommandType cmdType, string cmdText, params DbParameter[] cmdParms);
/// <summary>
/// 执行SQL返回对象集合QueryAsync&lt;User&gt;("select * from user where age > @age", new { age = 25 })
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="cmdText"></param>

View File

@ -113,15 +113,36 @@ namespace FreeSql.Internal {
{ ExpressionType.Equal, "=" },
};
internal string ExpressionWhereLambdaNoneForeignObject(List<SelectTableInfo> _tables, List<SelectColumnInfo> _selectColumnMap, Expression exp) {
return ExpressionLambdaToSql(exp, _tables, _selectColumnMap, SelectTableInfoType.From, true);
var sql = ExpressionLambdaToSql(exp, _tables, _selectColumnMap, SelectTableInfoType.From, true);
switch(sql) {
case "1":
case "'t'": return "1=1";
case "0":
case "'f'": return "1=2";
default:return sql;
}
}
internal string ExpressionWhereLambda(List<SelectTableInfo> _tables, Expression exp) {
return ExpressionLambdaToSql(exp, _tables, null, SelectTableInfoType.From, true);
var sql = ExpressionLambdaToSql(exp, _tables, null, SelectTableInfoType.From, true);
switch (sql) {
case "1":
case "'t'": return "1=1";
case "0":
case "'f'": return "1=2";
default: return sql;
}
}
internal void ExpressionJoinLambda(List<SelectTableInfo> _tables, SelectTableInfoType tbtype, Expression exp) {
var tbidx = _tables.Count;
var filter = ExpressionLambdaToSql(exp, _tables, null, tbtype, true);
switch (filter) {
case "1":
case "'t'": filter = "1=1"; break;
case "0":
case "'f'": filter = "1=2"; break;
default: break;
}
if (_tables.Count > tbidx) {
_tables[tbidx].Type = tbtype;
_tables[tbidx].On = filter;

View File

@ -76,7 +76,7 @@ namespace FreeSql.Internal.CommonProvider {
foreach (var col in _table.Columns.Values)
if (col.Attribute.IsIdentity == false && _ignore.ContainsKey(col.Attribute.Name) == false) {
if (colidx2 > 0) sb.Append(", ");
sb.Append("?").Append(col.CsName).Append(didx);
sb.Append(_commonUtils.QuoteParamterName(col.CsName)).Append(didx);
_params[didx * colidx + colidx2] = _commonUtils.AppendParamter(null, $"{col.CsName}{didx}", _table.Properties.TryGetValue(col.CsName, out var tryp) ? tryp.GetValue(d) : DBNull.Value);
++colidx2;
}

View File

@ -54,7 +54,7 @@ namespace FreeSql.Internal.CommonProvider {
public IUpdate<T1> Set<TMember>(Expression<Func<T1, TMember>> column, TMember value) {
var col = _commonExpression.ExpressionSelectColumn_MemberAccess(null, null, SelectTableInfoType.From, column?.Body, true);
if (string.IsNullOrEmpty(col)) return this;
_set.Append(", ").Append(col).Append(" = ?p_").Append(_params.Count);
_set.Append(", ").Append(col).Append(" = ").Append(_commonUtils.QuoteParamterName("p_")).Append(_params.Count);
_commonUtils.AppendParamter(_params, null, value);
//foreach (var t in _source) Utils.FillPropertyValue(t, tryf.CsName, value);
return this;
@ -135,7 +135,7 @@ namespace FreeSql.Internal.CommonProvider {
// ++pkidx;
//}
//if (_table.Primarys.Length > 1) caseWhen.Append(")");
var cw = caseWhen.Append(" ").ToString();
var cw = caseWhen.ToString();
_paramsSource.Clear();
var colidx = 0;

View File

@ -1,5 +1,6 @@
using FreeSql.Internal;
using System.Collections.Generic;
using System.Data;
using System.Text;
namespace FreeSql.MySql.Curd {
@ -19,7 +20,7 @@ namespace FreeSql.MySql.Curd {
sb.Append(_commonUtils.QuoteSqlName(col.Attribute.Name)).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx;
}
return _orm.Ado.Query<T1>(sb.ToString());
return _orm.Ado.Query<T1>(CommandType.Text, sb.ToString(), _params.ToArray());
}
}
}

View File

@ -22,7 +22,7 @@ namespace FreeSql.MySql.Curd {
sb.Append(_commonUtils.QuoteSqlName(col.Attribute.Name)).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx;
}
return _orm.Ado.Query<T1>(sb.ToString());
return _orm.Ado.Query<T1>(CommandType.Text, sb.ToString(), _params);
}
}
}

View File

@ -1,6 +1,8 @@
using FreeSql.Internal;
using FreeSql.Internal.Model;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
namespace FreeSql.MySql.Curd {
@ -21,29 +23,37 @@ namespace FreeSql.MySql.Curd {
sb.Append(_commonUtils.QuoteSqlName(col.Attribute.Name)).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx;
}
return _orm.Ado.Query<T1>(sb.ToString());
return _orm.Ado.Query<T1>(CommandType.Text, sb.ToString(), _params.Concat(_paramsSource).ToArray());
}
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) {
if (_table.Primarys.Length > 1) caseWhen.Append("CONCAT(");
if (_table.Primarys.Length == 1) {
caseWhen.Append(_commonUtils.QuoteSqlName(_table.Primarys.First().Attribute.Name));
return;
}
caseWhen.Append("CONCAT(");
var pkidx = 0;
foreach (var pk in _table.Primarys) {
if (pkidx > 0) caseWhen.Append(", ");
caseWhen.Append(_commonUtils.QuoteSqlName(pk.Attribute.Name));
++pkidx;
}
if (_table.Primarys.Length > 1) caseWhen.Append(")");
caseWhen.Append(")");
}
protected override void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d) {
if (_table.Primarys.Length > 1) sb.Append("CONCAT(");
if (_table.Primarys.Length == 1) {
sb.Append(_commonUtils.FormatSql("{0}", _table.Properties.TryGetValue(_table.Primarys.First().CsName, out var tryp2) ? tryp2.GetValue(d) : null));
return;
}
sb.Append("CONCAT(");
var pkidx = 0;
foreach (var pk in _table.Primarys) {
if (pkidx > 0) sb.Append(", ");
sb.Append(_commonUtils.FormatSql("{0}", _table.Properties.TryGetValue(pk.CsName, out var tryp2) ? tryp2.GetValue(d) : null));
++pkidx;
}
if (_table.Primarys.Length > 1) sb.Append(")");
sb.Append(")");
}
}
}

View File

@ -1,5 +1,6 @@
using FreeSql.Internal;
using System.Collections.Generic;
using System.Data;
using System.Text;
namespace FreeSql.PostgreSQL.Curd {
@ -19,7 +20,7 @@ namespace FreeSql.PostgreSQL.Curd {
sb.Append(_commonUtils.QuoteSqlName(col.Attribute.Name)).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx;
}
return _orm.Ado.Query<T1>(sb.ToString());
return _orm.Ado.Query<T1>(CommandType.Text, sb.ToString(), _params.ToArray());
}
}
}

View File

@ -24,7 +24,7 @@ namespace FreeSql.PostgreSQL.Curd {
sb.Append(_commonUtils.QuoteSqlName(col.Attribute.Name)).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx;
}
return _orm.Ado.Query<T1>(sb.ToString());
return _orm.Ado.Query<T1>(CommandType.Text, sb.ToString(), _params);
}
}
}

View File

@ -1,6 +1,8 @@
using FreeSql.Internal;
using FreeSql.Internal.Model;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
namespace FreeSql.PostgreSQL.Curd {
@ -21,29 +23,37 @@ namespace FreeSql.PostgreSQL.Curd {
sb.Append(_commonUtils.QuoteSqlName(col.Attribute.Name)).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx;
}
return _orm.Ado.Query<T1>(sb.ToString());
return _orm.Ado.Query<T1>(CommandType.Text, sb.ToString(), _params.Concat(_paramsSource).ToArray());
}
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) {
if (_table.Primarys.Length > 1) caseWhen.Append("(");
if (_table.Primarys.Length == 1) {
caseWhen.Append(_commonUtils.QuoteSqlName(_table.Primarys.First().Attribute.Name));
return;
}
caseWhen.Append("(");
var pkidx = 0;
foreach (var pk in _table.Primarys) {
if (pkidx > 0) caseWhen.Append(", ");
if (pkidx > 0) caseWhen.Append(" || ");
caseWhen.Append(_commonUtils.QuoteSqlName(pk.Attribute.Name)).Append("::varchar");
++pkidx;
}
if (_table.Primarys.Length > 1) caseWhen.Append(")");
caseWhen.Append(")");
}
protected override void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d) {
if (_table.Primarys.Length > 1) sb.Append("(");
if (_table.Primarys.Length == 1) {
sb.Append(_commonUtils.FormatSql("{0}", _table.Properties.TryGetValue(_table.Primarys.First().CsName, out var tryp2) ? tryp2.GetValue(d) : null));
return;
}
sb.Append("(");
var pkidx = 0;
foreach (var pk in _table.Primarys) {
if (pkidx > 0) sb.Append(", ");
if (pkidx > 0) sb.Append(" || ");
sb.Append(_commonUtils.FormatSql("{0}", _table.Properties.TryGetValue(pk.CsName, out var tryp2) ? tryp2.GetValue(d) : null)).Append("::varchar");
++pkidx;
}
if (_table.Primarys.Length > 1) sb.Append(")");
sb.Append(")");
}
}
}

View File

@ -1,6 +1,7 @@
using FreeSql.Internal;
using System;
using System.Collections.Generic;
using System.Data;
using System.Text;
namespace FreeSql.SqlServer.Curd {
@ -28,7 +29,7 @@ namespace FreeSql.SqlServer.Curd {
sb.Insert(0, sql.Substring(0, validx));
sb.Append(sql.Substring(validx));
return _orm.Ado.Query<T1>(sb.ToString());
return _orm.Ado.Query<T1>(CommandType.Text, sb.ToString(), _params.ToArray());
}
}
}

View File

@ -28,10 +28,10 @@ namespace FreeSql.SqlServer.Curd {
var validx = sql.IndexOf(") VALUES");
if (validx == -1) throw new ArgumentException("找不到 VALUES");
sb.Insert(0, sql.Substring(0, validx)).Insert(0, ")");
sb.Insert(0, sql.Substring(0, validx + 1));
sb.Append(sql.Substring(validx + 1));
return _orm.Ado.Query<T1>(sb.ToString());
return _orm.Ado.Query<T1>(CommandType.Text, sb.ToString(), _params);
}
}
}

View File

@ -2,6 +2,8 @@
using FreeSql.Internal.Model;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
namespace FreeSql.SqlServer.Curd {
@ -30,29 +32,35 @@ namespace FreeSql.SqlServer.Curd {
sb.Insert(0, sql.Substring(0, validx));
sb.Append(sql.Substring(validx));
return _orm.Ado.Query<T1>(sb.ToString());
return _orm.Ado.Query<T1>(CommandType.Text, sb.ToString(), _params.Concat(_paramsSource).ToArray());
}
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) {
if (_table.Primarys.Length > 1) caseWhen.Append("(");
if (_table.Primarys.Length == 1) {
caseWhen.Append(_commonUtils.QuoteSqlName(_table.Primarys.First().Attribute.Name));
return;
}
caseWhen.Append("(");
var pkidx = 0;
foreach (var pk in _table.Primarys) {
if (pkidx > 0) caseWhen.Append(", ");
caseWhen.Append("cast(").Append(_commonUtils.QuoteSqlName(pk.Attribute.Name)).Append(" as varchar)");
++pkidx;
}
if (_table.Primarys.Length > 1) caseWhen.Append(")");
caseWhen.Append(")");
}
protected override void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d) {
if (_table.Primarys.Length > 1) sb.Append("(");
if (_table.Primarys.Length == 1) {
sb.Append(_commonUtils.FormatSql("{0}", _table.Properties.TryGetValue(_table.Primarys.First().CsName, out var tryp2) ? tryp2.GetValue(d) : null));
return;
}
var pkidx = 0;
foreach (var pk in _table.Primarys) {
if (pkidx > 0) sb.Append(", ");
sb.Append("cast(").Append(_commonUtils.FormatSql("{0}", _table.Properties.TryGetValue(pk.CsName, out var tryp2) ? tryp2.GetValue(d) : null)).Append(" as varchar)");
++pkidx;
}
if (_table.Primarys.Length > 1) sb.Append(")");
}
}
}

View File

@ -85,7 +85,7 @@ namespace FreeSql.SqlServer {
if (tboldname != null && _orm.Ado.ExecuteScalar(CommandType.Text, string.Format("select 1 from dbo.sysobjects where id = object_id(N'[{0}].[{1}]') and OBJECTPROPERTY(id, N'IsUserTable') = 1", tboldname)) != null) { //旧表存在
//修改表名
sb.Append(_commonUtils.FormatSql("EXEC sp_rename {0}, {1} \r\nGO \r\n", _commonUtils.QuoteSqlName($"{tboldname[0]}.{tboldname[1]}"), _commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")));
sb.Append(_commonUtils.FormatSql("EXEC sp_rename {0}, {1};\r\n", _commonUtils.QuoteSqlName($"{tboldname[0]}.{tboldname[1]}"), _commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")));
isRenameTable = true;
} else {
@ -98,7 +98,7 @@ namespace FreeSql.SqlServer {
if (tbcol.Attribute.IsPrimary) sb.Append(" primary key");
sb.Append(",");
}
sb.Remove(sb.Length - 1, 1).Append("\r\n) \r\nGO \r\n");
sb.Remove(sb.Length - 1, 1).Append("\r\n);\r\n");
continue;
}
}
@ -137,7 +137,7 @@ where a.object_id in (object_id(N'[{0}].[{1}]'))", isRenameTable ? tboldname : t
trycol.Attribute.IsIdentity != is_identity) {
sb.Append("ALTER TABLE ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append(" ALTER COLUMN ").Append(_commonUtils.QuoteSqlName(column)).Append(" ").Append(trycol.Attribute.DbType.ToUpper());
if (trycol.Attribute.IsIdentity && trycol.Attribute.DbType.IndexOf("identity", StringComparison.CurrentCultureIgnoreCase) == -1) sb.Append(" identity(1,1)");
sb.Append(" \r\nGO \r\n");
sb.Append(";\r\n");
}
addcols.Remove(column);
} else
@ -145,15 +145,15 @@ where a.object_id in (object_id(N'[{0}].[{1}]'))", isRenameTable ? tboldname : t
}
foreach (var addcol in addcols.Values) {
if (string.IsNullOrEmpty(addcol.Attribute.OldName) == false && surplus.ContainsKey(addcol.Attribute.OldName)) { //修改列名
sb.Append(_commonUtils.FormatSql("EXEC sp_rename {0}, {1}, 'COLUMN' \r\nGO \r\n", $"{tbname[0]}.{tbname[1]}.{addcol.Attribute.OldName}", addcol.Attribute.Name));
sb.Append(_commonUtils.FormatSql("EXEC sp_rename {0}, {1}, 'COLUMN';\r\n", $"{tbname[0]}.{tbname[1]}.{addcol.Attribute.OldName}", addcol.Attribute.Name));
sb.Append("ALTER TABLE ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append(" ALTER COLUMN ").Append(_commonUtils.QuoteSqlName(addcol.Attribute.Name)).Append(" ").Append(addcol.Attribute.DbType.ToUpper());
if (addcol.Attribute.IsIdentity && addcol.Attribute.DbType.IndexOf("identity", StringComparison.CurrentCultureIgnoreCase) == -1) sb.Append(" identity(1,1)");
sb.Append(" \r\nGO \r\n");
sb.Append(";\r\n");
} else { //添加列
sb.Append("ALTER TABLE ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append(" ADD ").Append(_commonUtils.QuoteSqlName(addcol.Attribute.Name)).Append(" ").Append(addcol.Attribute.DbType.ToUpper());
if (addcol.Attribute.IsIdentity && addcol.Attribute.DbType.IndexOf("identity", StringComparison.CurrentCultureIgnoreCase) == -1) sb.Append(" identity(1,1)");
sb.Append(" \r\nGO \r\n");
sb.Append(";\r\n");
}
}
}