mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-06-18 12:03:21 +08:00
- 优化 NoneParameter Oracle 文本超长的问题;
This commit is contained in:
parent
d602dfbaaa
commit
93562fd802
@ -25,8 +25,11 @@ namespace FreeSql.Tests.Oracle
|
|||||||
|
|
||||||
//NoneParameter
|
//NoneParameter
|
||||||
item1 = new TS_NCLB02 { Data = str1 };
|
item1 = new TS_NCLB02 { Data = str1 };
|
||||||
Assert.Throws<Exception>(() => g.oracle.Insert(item1).NoneParameter().ExecuteAffrows());
|
Assert.Equal(1, g.oracle.Insert(item1).NoneParameter().ExecuteAffrows());
|
||||||
//Oracle.ManagedDataAccess.Client.OracleException:“ORA-01704: 字符串文字太长”
|
//Oracle.ManagedDataAccess.Client.OracleException:“ORA-01704: 字符串文字太长”
|
||||||
|
|
||||||
|
item2 = g.oracle.Select<TS_NCLB02>().Where(a => a.Id == item1.Id).First();
|
||||||
|
Assert.Equal(str1, item2.Data);
|
||||||
}
|
}
|
||||||
class TS_NCLB02
|
class TS_NCLB02
|
||||||
{
|
{
|
||||||
@ -48,8 +51,11 @@ namespace FreeSql.Tests.Oracle
|
|||||||
|
|
||||||
//NoneParameter
|
//NoneParameter
|
||||||
item1 = new TS_NCLB01 { Data = str1 };
|
item1 = new TS_NCLB01 { Data = str1 };
|
||||||
Assert.Throws<Exception>(() => g.oracle.Insert(item1).NoneParameter().ExecuteAffrows());
|
Assert.Equal(1, g.oracle.Insert(item1).NoneParameter().ExecuteAffrows());
|
||||||
//Oracle.ManagedDataAccess.Client.OracleException:“ORA-01704: 字符串文字太长”
|
//Oracle.ManagedDataAccess.Client.OracleException:“ORA-01704: 字符串文字太长”
|
||||||
|
|
||||||
|
item2 = g.oracle.Select<TS_NCLB01>().Where(a => a.Id == item1.Id).First();
|
||||||
|
Assert.Equal(str1, item2.Data);
|
||||||
}
|
}
|
||||||
class TS_NCLB01
|
class TS_NCLB01
|
||||||
{
|
{
|
||||||
@ -70,8 +76,11 @@ namespace FreeSql.Tests.Oracle
|
|||||||
|
|
||||||
//NoneParameter
|
//NoneParameter
|
||||||
item1 = new TS_CLB01 { Data = str1 };
|
item1 = new TS_CLB01 { Data = str1 };
|
||||||
Assert.Throws<Exception>(() => g.oracle.Insert(item1).NoneParameter().ExecuteAffrows());
|
Assert.Equal(1, g.oracle.Insert(item1).NoneParameter().ExecuteAffrows());
|
||||||
//Oracle.ManagedDataAccess.Client.OracleException:“ORA-01704: 字符串文字太长”
|
//Oracle.ManagedDataAccess.Client.OracleException:“ORA-01704: 字符串文字太长”
|
||||||
|
|
||||||
|
item2 = g.oracle.Select<TS_CLB01>().Where(a => a.Id == item1.Id).First();
|
||||||
|
Assert.Equal(str1, item2.Data);
|
||||||
}
|
}
|
||||||
class TS_CLB01
|
class TS_CLB01
|
||||||
{
|
{
|
||||||
@ -96,8 +105,21 @@ namespace FreeSql.Tests.Oracle
|
|||||||
|
|
||||||
//NoneParameter
|
//NoneParameter
|
||||||
item1 = new TS_BLB01 { Data = data1 };
|
item1 = new TS_BLB01 { Data = data1 };
|
||||||
Assert.Throws<Exception>(() => g.oracle.Insert(item1).NoneParameter().ExecuteAffrows());
|
Assert.Equal(1, g.oracle.Insert(item1).NoneParameter().ExecuteAffrows());
|
||||||
//Oracle.ManagedDataAccess.Client.OracleException:“ORA-01704: 字符串文字太长”
|
//Oracle.ManagedDataAccess.Client.OracleException:“ORA-01704: 字符串文字太长”
|
||||||
|
|
||||||
|
item2 = g.oracle.Select<TS_BLB01>().Where(a => a.Id == item1.Id).First();
|
||||||
|
Assert.Equal(item1.Data.Length, item2.Data.Length);
|
||||||
|
|
||||||
|
str2 = Encoding.UTF8.GetString(item2.Data);
|
||||||
|
Assert.Equal(str1, str2);
|
||||||
|
|
||||||
|
Assert.Equal(1, g.oracle.InsertOrUpdate<TS_BLB01>().SetSource(new TS_BLB01 { Data = data1 }).ExecuteAffrows());
|
||||||
|
item2 = g.oracle.Select<TS_BLB01>().Where(a => a.Id == item1.Id).First();
|
||||||
|
Assert.Equal(item1.Data.Length, item2.Data.Length);
|
||||||
|
|
||||||
|
str2 = Encoding.UTF8.GetString(item2.Data);
|
||||||
|
Assert.Equal(str1, str2);
|
||||||
}
|
}
|
||||||
class TS_BLB01
|
class TS_BLB01
|
||||||
{
|
{
|
||||||
|
@ -35,6 +35,13 @@ namespace FreeSql.Tests.Sqlite
|
|||||||
|
|
||||||
str2 = Encoding.UTF8.GetString(item2.Data);
|
str2 = Encoding.UTF8.GetString(item2.Data);
|
||||||
Assert.Equal(str1, str2);
|
Assert.Equal(str1, str2);
|
||||||
|
|
||||||
|
Assert.Equal(1, g.sqlite.InsertOrUpdate<TS_BLB01>().SetSource(new TS_BLB01 { Data = data1 }).ExecuteAffrows());
|
||||||
|
item2 = g.sqlite.Select<TS_BLB01>().Where(a => a.Id == item1.Id).First();
|
||||||
|
Assert.Equal(item1.Data.Length, item2.Data.Length);
|
||||||
|
|
||||||
|
str2 = Encoding.UTF8.GetString(item2.Data);
|
||||||
|
Assert.Equal(str1, str2);
|
||||||
}
|
}
|
||||||
class TS_BLB01
|
class TS_BLB01
|
||||||
{
|
{
|
||||||
|
@ -167,7 +167,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
object val = col.GetMapValue(d);
|
object val = col.GetMapValue(d);
|
||||||
sb.Append(_commonUtils.GetNoneParamaterSqlValue(dbParams, col.Attribute.MapType, val));
|
sb.Append(_commonUtils.GetNoneParamaterSqlValue(dbParams, "cu", col.Attribute.MapType, val));
|
||||||
}
|
}
|
||||||
if (didx == 0) sb.Append(" as ").Append(col.Attribute.Name);
|
if (didx == 0) sb.Append(" as ").Append(col.Attribute.Name);
|
||||||
++colidx2;
|
++colidx2;
|
||||||
|
@ -23,6 +23,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
public Dictionary<string, bool> _auditValueChangedDict = new Dictionary<string, bool>(StringComparer.CurrentCultureIgnoreCase);
|
public Dictionary<string, bool> _auditValueChangedDict = new Dictionary<string, bool>(StringComparer.CurrentCultureIgnoreCase);
|
||||||
public TableInfo _table;
|
public TableInfo _table;
|
||||||
public Func<string, string> _tableRule;
|
public Func<string, string> _tableRule;
|
||||||
|
public string _noneParameterFlag = "c";
|
||||||
public bool _noneParameter, _insertIdentity;
|
public bool _noneParameter, _insertIdentity;
|
||||||
public int _batchValuesLimit, _batchParameterLimit;
|
public int _batchValuesLimit, _batchParameterLimit;
|
||||||
public bool _batchAutoTransaction = true;
|
public bool _batchAutoTransaction = true;
|
||||||
@ -550,7 +551,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
object val = col.GetMapValue(d);
|
object val = col.GetMapValue(d);
|
||||||
if (val == null && col.Attribute.IsNullable == false) val = col.CsType == typeof(string) ? "" : Utils.GetDataReaderValue(col.CsType.NullableTypeOrThis(), null);//#384
|
if (val == null && col.Attribute.IsNullable == false) val = col.CsType == typeof(string) ? "" : Utils.GetDataReaderValue(col.CsType.NullableTypeOrThis(), null);//#384
|
||||||
if (_noneParameter)
|
if (_noneParameter)
|
||||||
sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, col.Attribute.MapType, val));
|
sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, _noneParameterFlag, col.Attribute.MapType, val));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"{col.CsName}_{didx}")));
|
sb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"{col.CsName}_{didx}")));
|
||||||
@ -563,8 +564,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
onrow?.Invoke(d, didx, sb);
|
onrow?.Invoke(d, didx, sb);
|
||||||
++didx;
|
++didx;
|
||||||
}
|
}
|
||||||
if (_noneParameter && specialParams.Any())
|
if (_noneParameter && specialParams.Any()) _params = specialParams.ToArray();
|
||||||
_params = specialParams.ToArray();
|
|
||||||
return sb.ToString();
|
return sb.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -409,7 +409,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
_set.Append(", ").Append(_commonUtils.QuoteSqlName(col.Attribute.Name)).Append(" = ");
|
_set.Append(", ").Append(_commonUtils.QuoteSqlName(col.Attribute.Name)).Append(" = ");
|
||||||
if (_noneParameter)
|
if (_noneParameter)
|
||||||
{
|
{
|
||||||
_set.Append(_commonUtils.GetNoneParamaterSqlValue(_params, col.Attribute.MapType, paramVal));
|
_set.Append(_commonUtils.GetNoneParamaterSqlValue(_params, "u", col.Attribute.MapType, paramVal));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -565,7 +565,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
var sb = new StringBuilder();
|
var sb = new StringBuilder();
|
||||||
|
|
||||||
sb.Append(_commonUtils.QuoteSqlName(col.Attribute.Name)).Append(" = ");
|
sb.Append(_commonUtils.QuoteSqlName(col.Attribute.Name)).Append(" = ");
|
||||||
sb.Append(thenValue(_commonUtils.GetNoneParamaterSqlValue(_paramsSource, col.Attribute.MapType, col.GetMapValue(_source.First()))));
|
sb.Append(thenValue(_commonUtils.GetNoneParamaterSqlValue(_paramsSource, "u", col.Attribute.MapType, col.GetMapValue(_source.First()))));
|
||||||
|
|
||||||
return sb.ToString();
|
return sb.ToString();
|
||||||
|
|
||||||
@ -589,7 +589,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
ToSqlWhen(cwsb, _table.Primarys, d);
|
ToSqlWhen(cwsb, _table.Primarys, d);
|
||||||
cwsb.Append(" THEN ");
|
cwsb.Append(" THEN ");
|
||||||
var val = col.GetMapValue(d);
|
var val = col.GetMapValue(d);
|
||||||
cwsb.Append(thenValue(_commonUtils.GetNoneParamaterSqlValue(_paramsSource, col.Attribute.MapType, val)));
|
cwsb.Append(thenValue(_commonUtils.GetNoneParamaterSqlValue(_paramsSource, "u", col.Attribute.MapType, val)));
|
||||||
if (val == null || val == DBNull.Value) nulls++;
|
if (val == null || val == DBNull.Value) nulls++;
|
||||||
}
|
}
|
||||||
cwsb.Append(" END");
|
cwsb.Append(" END");
|
||||||
@ -661,7 +661,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
{
|
{
|
||||||
var val = col.GetMapValue(_source.First());
|
var val = col.GetMapValue(_source.First());
|
||||||
if (_noneParameter)
|
if (_noneParameter)
|
||||||
sb.Append(_commonUtils.GetNoneParamaterSqlValue(_paramsSource, col.Attribute.MapType, val));
|
sb.Append(_commonUtils.GetNoneParamaterSqlValue(_paramsSource, "u", col.Attribute.MapType, val));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"p_{_paramsSource.Count}")));
|
sb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"p_{_paramsSource.Count}")));
|
||||||
@ -705,7 +705,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
cwsb.Append(" THEN ");
|
cwsb.Append(" THEN ");
|
||||||
var val = col.GetMapValue(d);
|
var val = col.GetMapValue(d);
|
||||||
if (_noneParameter)
|
if (_noneParameter)
|
||||||
cwsb.Append(_commonUtils.GetNoneParamaterSqlValue(_paramsSource, col.Attribute.MapType, val));
|
cwsb.Append(_commonUtils.GetNoneParamaterSqlValue(_paramsSource, "u", col.Attribute.MapType, val));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
cwsb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"p_{_paramsSource.Count}")));
|
cwsb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"p_{_paramsSource.Count}")));
|
||||||
|
@ -23,7 +23,7 @@ namespace FreeSql.Internal
|
|||||||
public abstract class CommonUtils
|
public abstract class CommonUtils
|
||||||
{
|
{
|
||||||
|
|
||||||
public abstract string GetNoneParamaterSqlValue(List<DbParameter> specialParams, Type type, object value);
|
public abstract string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, Type type, object value);
|
||||||
public abstract DbParameter AppendParamter(List<DbParameter> _params, string parameterName, ColumnInfo col, Type type, object value);
|
public abstract DbParameter AppendParamter(List<DbParameter> _params, string parameterName, ColumnInfo col, Type type, object value);
|
||||||
public abstract DbParameter[] GetDbParamtersByObject(string sql, object obj);
|
public abstract DbParameter[] GetDbParamtersByObject(string sql, object obj);
|
||||||
public abstract string FormatSql(string sql, params object[] args);
|
public abstract string FormatSql(string sql, params object[] args);
|
||||||
|
@ -187,7 +187,7 @@ namespace FreeSql.Internal
|
|||||||
}
|
}
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
col.DbDefaultValue = common.GetNoneParamaterSqlValue(new List<DbParameter>(), colattr.MapType, defaultValue);
|
col.DbDefaultValue = common.GetNoneParamaterSqlValue(new List<DbParameter>(), "init", colattr.MapType, defaultValue);
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
|
@ -69,7 +69,7 @@ namespace FreeSql.Dameng.Curd
|
|||||||
object val = col.GetMapValue(d);
|
object val = col.GetMapValue(d);
|
||||||
if (val == null && col.Attribute.IsNullable == false) val = col.CsType == typeof(string) ? "" : Utils.GetDataReaderValue(col.CsType.NullableTypeOrThis(), null);//#384
|
if (val == null && col.Attribute.IsNullable == false) val = col.CsType == typeof(string) ? "" : Utils.GetDataReaderValue(col.CsType.NullableTypeOrThis(), null);//#384
|
||||||
if (_noneParameter)
|
if (_noneParameter)
|
||||||
sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, col.Attribute.MapType, val));
|
sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, _noneParameterFlag, col.Attribute.MapType, val));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"{col.CsName}_{didx}")));
|
sb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"{col.CsName}_{didx}")));
|
||||||
@ -81,6 +81,7 @@ namespace FreeSql.Dameng.Curd
|
|||||||
sb.Append(")");
|
sb.Append(")");
|
||||||
++didx;
|
++didx;
|
||||||
}
|
}
|
||||||
|
if (_noneParameter && specialParams.Any()) _params = specialParams.ToArray();
|
||||||
if (_source.Count > 1) sb.Append("\r\n SELECT 1 FROM DUAL");
|
if (_source.Count > 1) sb.Append("\r\n SELECT 1 FROM DUAL");
|
||||||
return sb.ToString();
|
return sb.ToString();
|
||||||
}
|
}
|
||||||
|
@ -93,7 +93,7 @@ namespace FreeSql.Dameng
|
|||||||
public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
|
public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
|
||||||
public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
|
public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
|
||||||
|
|
||||||
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, Type type, object value)
|
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, Type type, object value)
|
||||||
{
|
{
|
||||||
if (value == null) return "NULL";
|
if (value == null) return "NULL";
|
||||||
if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
|
if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
|
||||||
|
@ -82,7 +82,7 @@ namespace FreeSql.MsAccess
|
|||||||
public override string FieldAsAlias(string alias) => $" as {alias}";
|
public override string FieldAsAlias(string alias) => $" as {alias}";
|
||||||
public override string IIF(string test, string ifTrue, string ifElse) => $"iif({test}, {ifTrue}, {ifElse})";
|
public override string IIF(string test, string ifTrue, string ifElse) => $"iif({test}, {ifTrue}, {ifElse})";
|
||||||
|
|
||||||
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, Type type, object value)
|
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, Type type, object value)
|
||||||
{
|
{
|
||||||
if (value == null) return "NULL";
|
if (value == null) return "NULL";
|
||||||
if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
|
if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
|
||||||
|
@ -37,6 +37,7 @@ namespace FreeSql.MySql.Curd
|
|||||||
.WithTransaction(_transaction)
|
.WithTransaction(_transaction)
|
||||||
.NoneParameter(true) as Internal.CommonProvider.InsertProvider<T1>;
|
.NoneParameter(true) as Internal.CommonProvider.InsertProvider<T1>;
|
||||||
insert._source = data;
|
insert._source = data;
|
||||||
|
insert._noneParameterFlag = flagInsert ? "cuc" : "cu";
|
||||||
|
|
||||||
string sql = "";
|
string sql = "";
|
||||||
if (IdentityColumn != null && flagInsert) sql = insert.ToSql();
|
if (IdentityColumn != null && flagInsert) sql = insert.ToSql();
|
||||||
|
@ -17,6 +17,7 @@ namespace FreeSql.MySql.Curd
|
|||||||
{
|
{
|
||||||
_mysqlInsert = insert as MySqlInsert<T1>;
|
_mysqlInsert = insert as MySqlInsert<T1>;
|
||||||
if (_mysqlInsert == null) throw new Exception("OnDuplicateKeyUpdate 是 FreeSql.Provider.MySql/FreeSql.Provider.MySqlConnector 特有的功能");
|
if (_mysqlInsert == null) throw new Exception("OnDuplicateKeyUpdate 是 FreeSql.Provider.MySql/FreeSql.Provider.MySqlConnector 特有的功能");
|
||||||
|
if (_mysqlInsert._noneParameterFlag == "c") _mysqlInsert._noneParameterFlag = "cu";
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void ClearData()
|
protected void ClearData()
|
||||||
|
@ -126,7 +126,7 @@ namespace FreeSql.MySql
|
|||||||
return columnName;
|
return columnName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, Type type, object value)
|
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, Type type, object value)
|
||||||
{
|
{
|
||||||
if (value == null) return "NULL";
|
if (value == null) return "NULL";
|
||||||
if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
|
if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
|
||||||
|
@ -146,7 +146,7 @@ namespace FreeSql.MySql
|
|||||||
return columnName;
|
return columnName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, Type type, object value)
|
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, Type type, object value)
|
||||||
{
|
{
|
||||||
if (value == null) return "NULL";
|
if (value == null) return "NULL";
|
||||||
if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
|
if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
|
||||||
|
@ -69,7 +69,7 @@ namespace FreeSql.Odbc.Dameng
|
|||||||
object val = col.GetMapValue(d);
|
object val = col.GetMapValue(d);
|
||||||
if (val == null && col.Attribute.IsNullable == false) val = col.CsType == typeof(string) ? "" : Utils.GetDataReaderValue(col.CsType.NullableTypeOrThis(), null);//#384
|
if (val == null && col.Attribute.IsNullable == false) val = col.CsType == typeof(string) ? "" : Utils.GetDataReaderValue(col.CsType.NullableTypeOrThis(), null);//#384
|
||||||
if (_noneParameter)
|
if (_noneParameter)
|
||||||
sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, col.Attribute.MapType, val));
|
sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, _noneParameterFlag, col.Attribute.MapType, val));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"{col.CsName}_{didx}")));
|
sb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"{col.CsName}_{didx}")));
|
||||||
@ -81,6 +81,7 @@ namespace FreeSql.Odbc.Dameng
|
|||||||
sb.Append(")");
|
sb.Append(")");
|
||||||
++didx;
|
++didx;
|
||||||
}
|
}
|
||||||
|
if (_noneParameter && specialParams.Any()) _params = specialParams.ToArray();
|
||||||
if (_source.Count > 1) sb.Append("\r\n SELECT 1 FROM DUAL");
|
if (_source.Count > 1) sb.Append("\r\n SELECT 1 FROM DUAL");
|
||||||
return sb.ToString();
|
return sb.ToString();
|
||||||
}
|
}
|
||||||
|
@ -99,7 +99,7 @@ namespace FreeSql.Odbc.Dameng
|
|||||||
public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
|
public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
|
||||||
public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
|
public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
|
||||||
|
|
||||||
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, Type type, object value)
|
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, Type type, object value)
|
||||||
{
|
{
|
||||||
if (value == null) return "NULL";
|
if (value == null) return "NULL";
|
||||||
if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
|
if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
|
||||||
|
@ -69,7 +69,7 @@ namespace FreeSql.Odbc.Default
|
|||||||
public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
|
public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
|
||||||
public override string QuoteReadColumn(Type type, Type mapType, string columnName) => Adapter.FieldSql(type, columnName);
|
public override string QuoteReadColumn(Type type, Type mapType, string columnName) => Adapter.FieldSql(type, columnName);
|
||||||
|
|
||||||
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, Type type, object value)
|
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, Type type, object value)
|
||||||
{
|
{
|
||||||
if (value == null) return "NULL";
|
if (value == null) return "NULL";
|
||||||
if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
|
if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
|
||||||
|
@ -37,6 +37,7 @@ namespace FreeSql.Odbc.KingbaseES
|
|||||||
.WithTransaction(_transaction)
|
.WithTransaction(_transaction)
|
||||||
.NoneParameter(true) as Internal.CommonProvider.InsertProvider<T1>;
|
.NoneParameter(true) as Internal.CommonProvider.InsertProvider<T1>;
|
||||||
insert._source = data;
|
insert._source = data;
|
||||||
|
insert._noneParameterFlag = flagInsert ? "cuc" : "cu";
|
||||||
|
|
||||||
string sql = "";
|
string sql = "";
|
||||||
if (IdentityColumn != null && flagInsert) sql = insert.ToSql();
|
if (IdentityColumn != null && flagInsert) sql = insert.ToSql();
|
||||||
|
@ -24,6 +24,7 @@ namespace FreeSql.Odbc.KingbaseES
|
|||||||
{
|
{
|
||||||
_pgsqlInsert = insert as OdbcKingbaseESInsert<T1>;
|
_pgsqlInsert = insert as OdbcKingbaseESInsert<T1>;
|
||||||
if (_pgsqlInsert == null) throw new Exception("OnConflictDoUpdate 是 FreeSql.Provider.Odbc/KingbaseES 特有的功能");
|
if (_pgsqlInsert == null) throw new Exception("OnConflictDoUpdate 是 FreeSql.Provider.Odbc/KingbaseES 特有的功能");
|
||||||
|
if (_pgsqlInsert._noneParameterFlag == "c") _pgsqlInsert._noneParameterFlag = "cu";
|
||||||
|
|
||||||
if (columns != null)
|
if (columns != null)
|
||||||
{
|
{
|
||||||
|
@ -123,7 +123,7 @@ namespace FreeSql.Odbc.KingbaseES
|
|||||||
public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
|
public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
|
||||||
public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
|
public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
|
||||||
|
|
||||||
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, Type type, object value)
|
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, Type type, object value)
|
||||||
{
|
{
|
||||||
if (value == null) return "NULL";
|
if (value == null) return "NULL";
|
||||||
if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
|
if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
|
||||||
@ -145,7 +145,7 @@ namespace FreeSql.Odbc.KingbaseES
|
|||||||
{
|
{
|
||||||
var item = valueArr.GetValue(a);
|
var item = valueArr.GetValue(a);
|
||||||
if (a > 0) sb.Append(",");
|
if (a > 0) sb.Append(",");
|
||||||
sb.Append(GetNoneParamaterSqlValue(specialParams, eleType, item));
|
sb.Append(GetNoneParamaterSqlValue(specialParams, specialParamFlag, eleType, item));
|
||||||
}
|
}
|
||||||
sb.Append("]");
|
sb.Append("]");
|
||||||
var dbinfo = _orm.CodeFirst.GetDbInfo(type);
|
var dbinfo = _orm.CodeFirst.GetDbInfo(type);
|
||||||
|
@ -36,6 +36,7 @@ namespace FreeSql.Odbc.MySql
|
|||||||
.WithTransaction(_transaction)
|
.WithTransaction(_transaction)
|
||||||
.NoneParameter(true) as Internal.CommonProvider.InsertProvider<T1>;
|
.NoneParameter(true) as Internal.CommonProvider.InsertProvider<T1>;
|
||||||
insert._source = data;
|
insert._source = data;
|
||||||
|
insert._noneParameterFlag = flagInsert ? "cuc" : "cu";
|
||||||
|
|
||||||
string sql = "";
|
string sql = "";
|
||||||
if (IdentityColumn != null && flagInsert) sql = insert.ToSql();
|
if (IdentityColumn != null && flagInsert) sql = insert.ToSql();
|
||||||
|
@ -17,6 +17,7 @@ namespace FreeSql.Odbc.MySql
|
|||||||
{
|
{
|
||||||
_mysqlInsert = insert as OdbcMySqlInsert<T1>;
|
_mysqlInsert = insert as OdbcMySqlInsert<T1>;
|
||||||
if (_mysqlInsert == null) throw new Exception("OnDuplicateKeyUpdate 是 FreeSql.Provider.Odbc/MySql 特有的功能");
|
if (_mysqlInsert == null) throw new Exception("OnDuplicateKeyUpdate 是 FreeSql.Provider.Odbc/MySql 特有的功能");
|
||||||
|
if (_mysqlInsert._noneParameterFlag == "c") _mysqlInsert._noneParameterFlag = "cu";
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void ClearData()
|
protected void ClearData()
|
||||||
|
@ -93,7 +93,7 @@ namespace FreeSql.Odbc.MySql
|
|||||||
return columnName;
|
return columnName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, Type type, object value)
|
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, Type type, object value)
|
||||||
{
|
{
|
||||||
if (value == null) return "NULL";
|
if (value == null) return "NULL";
|
||||||
if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
|
if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
|
||||||
|
@ -69,7 +69,7 @@ namespace FreeSql.Odbc.Oracle
|
|||||||
object val = col.GetMapValue(d);
|
object val = col.GetMapValue(d);
|
||||||
if (val == null && col.Attribute.IsNullable == false) val = col.CsType == typeof(string) ? "" : Utils.GetDataReaderValue(col.CsType.NullableTypeOrThis(), null);//#384
|
if (val == null && col.Attribute.IsNullable == false) val = col.CsType == typeof(string) ? "" : Utils.GetDataReaderValue(col.CsType.NullableTypeOrThis(), null);//#384
|
||||||
if (_noneParameter)
|
if (_noneParameter)
|
||||||
sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, col.Attribute.MapType, val));
|
sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, _noneParameterFlag, col.Attribute.MapType, val));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"{col.CsName}_{didx}")));
|
sb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"{col.CsName}_{didx}")));
|
||||||
@ -81,6 +81,7 @@ namespace FreeSql.Odbc.Oracle
|
|||||||
sb.Append(")");
|
sb.Append(")");
|
||||||
++didx;
|
++didx;
|
||||||
}
|
}
|
||||||
|
if (_noneParameter && specialParams.Any()) _params = specialParams.ToArray();
|
||||||
if (_source.Count > 1) sb.Append("\r\n SELECT 1 FROM DUAL");
|
if (_source.Count > 1) sb.Append("\r\n SELECT 1 FROM DUAL");
|
||||||
return sb.ToString();
|
return sb.ToString();
|
||||||
}
|
}
|
||||||
|
@ -99,11 +99,30 @@ namespace FreeSql.Odbc.Oracle
|
|||||||
public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
|
public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
|
||||||
public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
|
public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
|
||||||
|
|
||||||
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, Type type, object value)
|
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, Type type, object value)
|
||||||
{
|
{
|
||||||
if (value == null) return "NULL";
|
if (value == null) return "NULL";
|
||||||
if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
|
if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
|
||||||
if (type == typeof(byte[])) return $"hextoraw('{CommonUtils.BytesSqlRaw(value as byte[])}')";
|
if (type == typeof(string))
|
||||||
|
{
|
||||||
|
var valueString = value as string;
|
||||||
|
if (valueString != null)
|
||||||
|
{
|
||||||
|
if (valueString.Length < 4000) return string.Concat("'", valueString.Replace("'", "''"), "'");
|
||||||
|
var pam = AppendParamter(specialParams, $"p_{specialParams?.Count}{specialParamFlag}", null, type, value);
|
||||||
|
return pam.ParameterName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (type == typeof(byte[]))
|
||||||
|
{
|
||||||
|
var valueBytes = value as byte[];
|
||||||
|
if (valueBytes != null)
|
||||||
|
{
|
||||||
|
if (valueBytes.Length < 4000) return $"hextoraw('{CommonUtils.BytesSqlRaw(valueBytes)}')";
|
||||||
|
var pam = AppendParamter(specialParams, $"p_{specialParams?.Count}{specialParamFlag}", null, type, value);
|
||||||
|
return pam.ParameterName;
|
||||||
|
}
|
||||||
|
}
|
||||||
return FormatSql("{0}", value, 1);
|
return FormatSql("{0}", value, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -35,6 +35,7 @@ namespace FreeSql.Odbc.PostgreSQL
|
|||||||
.WithTransaction(_transaction)
|
.WithTransaction(_transaction)
|
||||||
.NoneParameter(true) as Internal.CommonProvider.InsertProvider<T1>;
|
.NoneParameter(true) as Internal.CommonProvider.InsertProvider<T1>;
|
||||||
insert._source = data;
|
insert._source = data;
|
||||||
|
insert._noneParameterFlag = flagInsert ? "cuc" : "cu";
|
||||||
|
|
||||||
string sql = "";
|
string sql = "";
|
||||||
if (IdentityColumn != null && flagInsert) sql = insert.ToSql();
|
if (IdentityColumn != null && flagInsert) sql = insert.ToSql();
|
||||||
|
@ -24,6 +24,7 @@ namespace FreeSql.Odbc.PostgreSQL
|
|||||||
{
|
{
|
||||||
_pgsqlInsert = insert as OdbcPostgreSQLInsert<T1>;
|
_pgsqlInsert = insert as OdbcPostgreSQLInsert<T1>;
|
||||||
if (_pgsqlInsert == null) throw new Exception("OnConflictDoUpdate 是 FreeSql.Provider.Odbc/PostgreSQL 特有的功能");
|
if (_pgsqlInsert == null) throw new Exception("OnConflictDoUpdate 是 FreeSql.Provider.Odbc/PostgreSQL 特有的功能");
|
||||||
|
if (_pgsqlInsert._noneParameterFlag == "c") _pgsqlInsert._noneParameterFlag = "cu";
|
||||||
|
|
||||||
if (columns != null)
|
if (columns != null)
|
||||||
{
|
{
|
||||||
|
@ -123,7 +123,7 @@ namespace FreeSql.Odbc.PostgreSQL
|
|||||||
public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
|
public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
|
||||||
public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
|
public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
|
||||||
|
|
||||||
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, Type type, object value)
|
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, Type type, object value)
|
||||||
{
|
{
|
||||||
if (value == null) return "NULL";
|
if (value == null) return "NULL";
|
||||||
if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
|
if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
|
||||||
@ -145,7 +145,7 @@ namespace FreeSql.Odbc.PostgreSQL
|
|||||||
{
|
{
|
||||||
var item = valueArr.GetValue(a);
|
var item = valueArr.GetValue(a);
|
||||||
if (a > 0) sb.Append(",");
|
if (a > 0) sb.Append(",");
|
||||||
sb.Append(GetNoneParamaterSqlValue(specialParams, eleType, item));
|
sb.Append(GetNoneParamaterSqlValue(specialParams, specialParamFlag, eleType, item));
|
||||||
}
|
}
|
||||||
sb.Append("]");
|
sb.Append("]");
|
||||||
var dbinfo = _orm.CodeFirst.GetDbInfo(type);
|
var dbinfo = _orm.CodeFirst.GetDbInfo(type);
|
||||||
|
@ -86,7 +86,7 @@ namespace FreeSql.Odbc.SqlServer
|
|||||||
public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
|
public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
|
||||||
public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
|
public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
|
||||||
|
|
||||||
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, Type type, object value)
|
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, Type type, object value)
|
||||||
{
|
{
|
||||||
if (value == null) return "NULL";
|
if (value == null) return "NULL";
|
||||||
if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
|
if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
|
||||||
|
@ -71,7 +71,7 @@ namespace FreeSql.Oracle.Curd
|
|||||||
object val = col.GetMapValue(d);
|
object val = col.GetMapValue(d);
|
||||||
if (val == null && col.Attribute.IsNullable == false) val = col.CsType == typeof(string) ? "" : Utils.GetDataReaderValue(col.CsType.NullableTypeOrThis(), null);//#384
|
if (val == null && col.Attribute.IsNullable == false) val = col.CsType == typeof(string) ? "" : Utils.GetDataReaderValue(col.CsType.NullableTypeOrThis(), null);//#384
|
||||||
if (_noneParameter)
|
if (_noneParameter)
|
||||||
sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, col.Attribute.MapType, val));
|
sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, _noneParameterFlag, col.Attribute.MapType, val));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"{col.CsName}_{didx}")));
|
sb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"{col.CsName}_{didx}")));
|
||||||
@ -83,6 +83,7 @@ namespace FreeSql.Oracle.Curd
|
|||||||
sb.Append(")");
|
sb.Append(")");
|
||||||
++didx;
|
++didx;
|
||||||
}
|
}
|
||||||
|
if (_noneParameter && specialParams.Any()) _params = specialParams.ToArray();
|
||||||
if (_source.Count > 1) sb.Append("\r\n SELECT 1 FROM DUAL");
|
if (_source.Count > 1) sb.Append("\r\n SELECT 1 FROM DUAL");
|
||||||
return sb.ToString();
|
return sb.ToString();
|
||||||
}
|
}
|
||||||
|
@ -98,11 +98,30 @@ namespace FreeSql.Oracle
|
|||||||
public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
|
public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
|
||||||
public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
|
public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
|
||||||
|
|
||||||
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, Type type, object value)
|
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, Type type, object value)
|
||||||
{
|
{
|
||||||
if (value == null) return "NULL";
|
if (value == null) return "NULL";
|
||||||
if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
|
if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
|
||||||
if (type == typeof(byte[])) return $"hextoraw('{CommonUtils.BytesSqlRaw(value as byte[])}')";
|
if (type == typeof(string))
|
||||||
|
{
|
||||||
|
var valueString = value as string;
|
||||||
|
if (valueString != null)
|
||||||
|
{
|
||||||
|
if (valueString.Length < 4000) return string.Concat("'", valueString.Replace("'", "''"), "'");
|
||||||
|
var pam = AppendParamter(specialParams, $"p_{specialParams?.Count}{specialParamFlag}", null, type, value);
|
||||||
|
return pam.ParameterName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (type == typeof(byte[]))
|
||||||
|
{
|
||||||
|
var valueBytes = value as byte[];
|
||||||
|
if (valueBytes != null)
|
||||||
|
{
|
||||||
|
if (valueBytes.Length < 4000) return $"hextoraw('{CommonUtils.BytesSqlRaw(valueBytes)}')";
|
||||||
|
var pam = AppendParamter(specialParams, $"p_{specialParams?.Count}{specialParamFlag}", null, type, value);
|
||||||
|
return pam.ParameterName;
|
||||||
|
}
|
||||||
|
}
|
||||||
return FormatSql("{0}", value, 1);
|
return FormatSql("{0}", value, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,7 @@ namespace FreeSql.PostgreSQL.Curd
|
|||||||
{
|
{
|
||||||
_pgsqlInsert = insert as PostgreSQLInsert<T1>;
|
_pgsqlInsert = insert as PostgreSQLInsert<T1>;
|
||||||
if (_pgsqlInsert == null) throw new Exception("OnConflictDoUpdate 是 FreeSql.Provider.PostgreSQL 特有的功能");
|
if (_pgsqlInsert == null) throw new Exception("OnConflictDoUpdate 是 FreeSql.Provider.PostgreSQL 特有的功能");
|
||||||
|
if (_pgsqlInsert._noneParameterFlag == "c") _pgsqlInsert._noneParameterFlag = "cu";
|
||||||
|
|
||||||
if (columns != null)
|
if (columns != null)
|
||||||
{
|
{
|
||||||
|
@ -35,6 +35,7 @@ namespace FreeSql.PostgreSQL.Curd
|
|||||||
.WithTransaction(_transaction)
|
.WithTransaction(_transaction)
|
||||||
.NoneParameter(true) as Internal.CommonProvider.InsertProvider<T1>;
|
.NoneParameter(true) as Internal.CommonProvider.InsertProvider<T1>;
|
||||||
insert._source = data;
|
insert._source = data;
|
||||||
|
insert._noneParameterFlag = flagInsert ? "cuc" : "cu";
|
||||||
|
|
||||||
string sql = "";
|
string sql = "";
|
||||||
if (IdentityColumn != null && flagInsert) sql = insert.ToSql();
|
if (IdentityColumn != null && flagInsert) sql = insert.ToSql();
|
||||||
|
@ -163,7 +163,7 @@ namespace FreeSql.PostgreSQL
|
|||||||
public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
|
public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
|
||||||
|
|
||||||
static ConcurrentDictionary<Type, bool> _dicIsAssignableFromPostgisGeometry = new ConcurrentDictionary<Type, bool>();
|
static ConcurrentDictionary<Type, bool> _dicIsAssignableFromPostgisGeometry = new ConcurrentDictionary<Type, bool>();
|
||||||
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, Type type, object value)
|
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, Type type, object value)
|
||||||
{
|
{
|
||||||
if (value == null) return "NULL";
|
if (value == null) return "NULL";
|
||||||
if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
|
if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
|
||||||
@ -178,7 +178,7 @@ namespace FreeSql.PostgreSQL
|
|||||||
;
|
;
|
||||||
}))
|
}))
|
||||||
{
|
{
|
||||||
var pam = AppendParamter(specialParams, null, null, type, value);
|
var pam = AppendParamter(specialParams, $"p_{specialParams?.Count}{specialParamFlag}", null, type, value);
|
||||||
return pam.ParameterName;
|
return pam.ParameterName;
|
||||||
}
|
}
|
||||||
value = getParamterValue(type, value);
|
value = getParamterValue(type, value);
|
||||||
@ -199,7 +199,7 @@ namespace FreeSql.PostgreSQL
|
|||||||
{
|
{
|
||||||
var item = valueArr.GetValue(a);
|
var item = valueArr.GetValue(a);
|
||||||
if (a > 0) sb.Append(",");
|
if (a > 0) sb.Append(",");
|
||||||
sb.Append(GetNoneParamaterSqlValue(specialParams, eleType, item));
|
sb.Append(GetNoneParamaterSqlValue(specialParams, specialParamFlag, eleType, item));
|
||||||
}
|
}
|
||||||
sb.Append("]");
|
sb.Append("]");
|
||||||
var dbinfo = _orm.CodeFirst.GetDbInfo(type);
|
var dbinfo = _orm.CodeFirst.GetDbInfo(type);
|
||||||
|
@ -1,207 +0,0 @@
|
|||||||
using FreeSql.Aop;
|
|
||||||
using FreeSql.Internal.Model;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Data;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Linq.Expressions;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace FreeSql.ShenTong.Curd
|
|
||||||
{
|
|
||||||
public class OnConflictDoUpdate<T1> where T1 : class
|
|
||||||
{
|
|
||||||
internal ShenTongInsert<T1> _oscarInsert;
|
|
||||||
internal ShenTongUpdate<T1> _oscarUpdatePriv;
|
|
||||||
internal ShenTongUpdate<T1> _oscarUpdate => _oscarUpdatePriv ??
|
|
||||||
(_oscarUpdatePriv = new ShenTongUpdate<T1>(_oscarInsert.InternalOrm, _oscarInsert.InternalCommonUtils, _oscarInsert.InternalCommonExpression, null) { InternalTableAlias = "EXCLUDED" }
|
|
||||||
.NoneParameter().SetSource(_oscarInsert.InternalSource) as ShenTongUpdate<T1>);
|
|
||||||
ColumnInfo[] _columns;
|
|
||||||
bool _doNothing;
|
|
||||||
|
|
||||||
public OnConflictDoUpdate(IInsert<T1> insert, Expression<Func<T1, object>> columns = null)
|
|
||||||
{
|
|
||||||
_oscarInsert = insert as ShenTongInsert<T1>;
|
|
||||||
if (_oscarInsert == null) throw new Exception("OnConflictDoUpdate 是 FreeSql.Provider.ShenTong 特有的功能");
|
|
||||||
|
|
||||||
if (columns != null)
|
|
||||||
{
|
|
||||||
var colsList = new List<ColumnInfo>();
|
|
||||||
var cols = _oscarInsert.InternalCommonExpression.ExpressionSelectColumns_MemberAccess_New_NewArrayInit(null, columns?.Body, false, null).ToDictionary(a => a, a => true);
|
|
||||||
foreach (var col in _oscarInsert.InternalTable.Columns.Values)
|
|
||||||
if (cols.ContainsKey(col.Attribute.Name))
|
|
||||||
colsList.Add(col);
|
|
||||||
_columns = colsList.ToArray();
|
|
||||||
}
|
|
||||||
if (_columns == null || _columns.Any() == false)
|
|
||||||
_columns = _oscarInsert.InternalTable.Primarys;
|
|
||||||
if (_columns.Any() == false) throw new Exception("OnConflictDoUpdate 功能要求实体类必须设置 IsPrimary 属性");
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void ClearData()
|
|
||||||
{
|
|
||||||
_oscarInsert.InternalClearData();
|
|
||||||
_oscarUpdatePriv = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public OnConflictDoUpdate<T1> IgnoreColumns(Expression<Func<T1, object>> columns)
|
|
||||||
{
|
|
||||||
_oscarUpdate.IgnoreColumns(columns);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
public OnConflictDoUpdate<T1> UpdateColumns(Expression<Func<T1, object>> columns)
|
|
||||||
{
|
|
||||||
_oscarUpdate.UpdateColumns(columns);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
public OnConflictDoUpdate<T1> IgnoreColumns(string[] columns)
|
|
||||||
{
|
|
||||||
_oscarUpdate.IgnoreColumns(columns);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
public OnConflictDoUpdate<T1> UpdateColumns(string[] columns)
|
|
||||||
{
|
|
||||||
_oscarUpdate.UpdateColumns(columns);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public OnConflictDoUpdate<T1> Set<TMember>(Expression<Func<T1, TMember>> column, TMember value)
|
|
||||||
{
|
|
||||||
_oscarUpdate.Set(column, value);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
//由于表达式解析问题,ON CONFLICT("id") DO UPDATE SET 需要指定表别名,如 Set(a => a.Clicks + 1) 解析会失败
|
|
||||||
//暂时不开放这个功能,如有需要使用 SetRaw("click = t.click + 1") 替代该操作
|
|
||||||
//public OnConflictDoUpdate<T1> Set<TMember>(Expression<Func<T1, TMember>> exp)
|
|
||||||
//{
|
|
||||||
// _oscarUpdate.Set(exp);
|
|
||||||
// return this;
|
|
||||||
//}
|
|
||||||
public OnConflictDoUpdate<T1> SetRaw(string sql)
|
|
||||||
{
|
|
||||||
_oscarUpdate.SetRaw(sql);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public OnConflictDoUpdate<T1> DoNothing()
|
|
||||||
{
|
|
||||||
_doNothing = true;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public string ToSql()
|
|
||||||
{
|
|
||||||
var sb = new StringBuilder();
|
|
||||||
sb.Append(_oscarInsert.ToSql()).Append("\r\nON CONFLICT(");
|
|
||||||
for (var a = 0; a < _columns.Length; a++)
|
|
||||||
{
|
|
||||||
if (a > 0) sb.Append(", ");
|
|
||||||
sb.Append(_oscarInsert.InternalCommonUtils.QuoteSqlName(_columns[a].Attribute.Name));
|
|
||||||
}
|
|
||||||
if (_doNothing)
|
|
||||||
{
|
|
||||||
sb.Append(") DO NOTHING");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
sb.Append(") DO UPDATE SET\r\n");
|
|
||||||
|
|
||||||
var sbSetEmpty = _oscarUpdate.InternalSbSet.Length == 0;
|
|
||||||
var sbSetIncrEmpty = _oscarUpdate.InternalSbSetIncr.Length == 0;
|
|
||||||
if (sbSetEmpty == false || sbSetIncrEmpty == false)
|
|
||||||
{
|
|
||||||
if (sbSetEmpty == false) sb.Append(_oscarUpdate.InternalSbSet.ToString().Substring(2));
|
|
||||||
if (sbSetIncrEmpty == false) sb.Append(sbSetEmpty ? _oscarUpdate.InternalSbSetIncr.ToString().Substring(2) : _oscarUpdate.InternalSbSetIncr.ToString());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var colidx = 0;
|
|
||||||
foreach (var col in _oscarInsert.InternalTable.Columns.Values)
|
|
||||||
{
|
|
||||||
if (col.Attribute.IsPrimary || _oscarUpdate.InternalIgnore.ContainsKey(col.Attribute.Name)) continue;
|
|
||||||
|
|
||||||
if (colidx > 0) sb.Append(", \r\n");
|
|
||||||
|
|
||||||
if (col.Attribute.IsVersion == true)
|
|
||||||
{
|
|
||||||
var field = _oscarInsert.InternalCommonUtils.QuoteSqlName(col.Attribute.Name);
|
|
||||||
sb.Append(field).Append(" = ").Append(_oscarInsert.InternalCommonUtils.QuoteSqlName(_oscarInsert.InternalTable.DbName)).Append(".").Append(field).Append(" + 1");
|
|
||||||
}
|
|
||||||
else if (_oscarInsert.InternalIgnore.ContainsKey(col.Attribute.Name))
|
|
||||||
{
|
|
||||||
var caseWhen = _oscarUpdate.InternalWhereCaseSource(col.CsName, sqlval => sqlval).Trim();
|
|
||||||
sb.Append(caseWhen);
|
|
||||||
if (caseWhen.EndsWith(" END")) _oscarUpdate.InternalToSqlCaseWhenEnd(sb, col);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var field = _oscarInsert.InternalCommonUtils.QuoteSqlName(col.Attribute.Name);
|
|
||||||
sb.Append(field).Append(" = EXCLUDED.").Append(field);
|
|
||||||
}
|
|
||||||
++colidx;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return sb.ToString();
|
|
||||||
}
|
|
||||||
|
|
||||||
public long ExecuteAffrows()
|
|
||||||
{
|
|
||||||
var sql = this.ToSql();
|
|
||||||
if (string.IsNullOrEmpty(sql)) return 0;
|
|
||||||
|
|
||||||
var before = new CurdBeforeEventArgs(_oscarInsert.InternalTable.Type, _oscarInsert.InternalTable, CurdType.Insert, sql, _oscarInsert.InternalParams);
|
|
||||||
_oscarInsert.InternalOrm.Aop.CurdBeforeHandler?.Invoke(_oscarInsert, before);
|
|
||||||
long ret = 0;
|
|
||||||
Exception exception = null;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
ret = _oscarInsert.InternalOrm.Ado.ExecuteNonQuery(_oscarInsert.InternalConnection, _oscarInsert.InternalTransaction, CommandType.Text, sql, _oscarInsert.InternalParams);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
exception = ex;
|
|
||||||
throw ex;
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
var after = new CurdAfterEventArgs(before, exception, ret);
|
|
||||||
_oscarInsert.InternalOrm.Aop.CurdAfterHandler?.Invoke(_oscarInsert, after);
|
|
||||||
ClearData();
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if net40
|
|
||||||
#else
|
|
||||||
async public Task<long> ExecuteAffrowsAsync()
|
|
||||||
{
|
|
||||||
var sql = this.ToSql();
|
|
||||||
if (string.IsNullOrEmpty(sql)) return 0;
|
|
||||||
|
|
||||||
var before = new CurdBeforeEventArgs(_oscarInsert.InternalTable.Type, _oscarInsert.InternalTable, CurdType.Insert, sql, _oscarInsert.InternalParams);
|
|
||||||
_oscarInsert.InternalOrm.Aop.CurdBeforeHandler?.Invoke(_oscarInsert, before);
|
|
||||||
long ret = 0;
|
|
||||||
Exception exception = null;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
ret = await _oscarInsert.InternalOrm.Ado.ExecuteNonQueryAsync(_oscarInsert.InternalConnection, _oscarInsert.InternalTransaction, CommandType.Text, sql, _oscarInsert.InternalParams);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
exception = ex;
|
|
||||||
throw ex;
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
var after = new CurdAfterEventArgs(before, exception, ret);
|
|
||||||
_oscarInsert.InternalOrm.Aop.CurdAfterHandler?.Invoke(_oscarInsert, after);
|
|
||||||
ClearData();
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
@ -137,7 +137,7 @@ namespace FreeSql.ShenTong
|
|||||||
public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
|
public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
|
||||||
public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
|
public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
|
||||||
|
|
||||||
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, Type type, object value)
|
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, Type type, object value)
|
||||||
{
|
{
|
||||||
if (value == null) return "NULL";
|
if (value == null) return "NULL";
|
||||||
if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
|
if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
|
||||||
@ -161,7 +161,7 @@ namespace FreeSql.ShenTong
|
|||||||
{
|
{
|
||||||
var item = valueArr.GetValue(a);
|
var item = valueArr.GetValue(a);
|
||||||
if (a > 0) sb.Append(",");
|
if (a > 0) sb.Append(",");
|
||||||
sb.Append(GetNoneParamaterSqlValue(specialParams, eleType, item));
|
sb.Append(GetNoneParamaterSqlValue(specialParams, specialParamFlag, eleType, item));
|
||||||
}
|
}
|
||||||
sb.Append("]");
|
sb.Append("]");
|
||||||
var dbinfo = _orm.CodeFirst.GetDbInfo(type);
|
var dbinfo = _orm.CodeFirst.GetDbInfo(type);
|
||||||
|
@ -102,7 +102,7 @@ namespace FreeSql.SqlServer
|
|||||||
public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
|
public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
|
||||||
public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
|
public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
|
||||||
|
|
||||||
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, Type type, object value)
|
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, Type type, object value)
|
||||||
{
|
{
|
||||||
if (value == null) return "NULL";
|
if (value == null) return "NULL";
|
||||||
if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
|
if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
|
||||||
|
@ -35,6 +35,7 @@ namespace FreeSql.Sqlite.Curd
|
|||||||
.WithConnection(_connection)
|
.WithConnection(_connection)
|
||||||
.WithTransaction(_transaction)
|
.WithTransaction(_transaction)
|
||||||
.NoneParameter(true) as Internal.CommonProvider.InsertProvider<T1>;
|
.NoneParameter(true) as Internal.CommonProvider.InsertProvider<T1>;
|
||||||
|
insert._noneParameterFlag = flagInsert ? "c" : "cu";
|
||||||
insert._source = data;
|
insert._source = data;
|
||||||
|
|
||||||
string sql = "";
|
string sql = "";
|
||||||
|
@ -98,10 +98,15 @@ namespace FreeSql.Sqlite
|
|||||||
public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
|
public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
|
||||||
public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
|
public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
|
||||||
|
|
||||||
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, Type type, object value)
|
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, Type type, object value)
|
||||||
{
|
{
|
||||||
if (value == null) return "NULL";
|
if (value == null) return "NULL";
|
||||||
if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
|
if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
|
||||||
|
if (type == typeof(byte[]))
|
||||||
|
{
|
||||||
|
var pam = AppendParamter(specialParams, $"p_{specialParams?.Count}{specialParamFlag}", null, type, value);
|
||||||
|
return pam.ParameterName;
|
||||||
|
}
|
||||||
return FormatSql("{0}", value, 1);
|
return FormatSql("{0}", value, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user