mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-06-19 20:38:16 +08:00
SqlServer 单元测试 Curd 走通
This commit is contained in:
@ -80,6 +80,15 @@ namespace FreeSql {
|
||||
/// <param name="cmdParms"></param>
|
||||
object ExecuteScalar(CommandType cmdType, string cmdText, params DbParameter[] cmdParms);
|
||||
|
||||
/// <summary>
|
||||
/// 执行SQL返回对象集合,Query<User>("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<User>("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<User>("select * from user where age > @age", new { age = 25 })
|
||||
/// 执行SQL返回对象集合,QueryAsync<User>("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<User>("select * from user where age > @age", new { age = 25 })
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="cmdText"></param>
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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(")");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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(")");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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(")");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user