mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 18:52:50 +08:00
- 完善 [Column(MapType = typeof(byte[]))] 对 Guid/string 的映射支持;
This commit is contained in:
parent
fbbd74f54c
commit
5afeea7711
@ -108,12 +108,14 @@ namespace FreeSql.Tests
|
|||||||
.NoneParameter().ExecuteAffrows();
|
.NoneParameter().ExecuteAffrows();
|
||||||
|
|
||||||
var slslsl = g.oracle.Select<SendInfo>().ToList();
|
var slslsl = g.oracle.Select<SendInfo>().ToList();
|
||||||
|
var slsld1 = g.oracle.Select<SendInfo>().Where(a => a.ID == Guid.Parse("8D9C135E7FEBC41C00BE241C1771FF97")).ToList();
|
||||||
|
var slsld2 = g.oracle.Select<SendInfo>().Where(a => a.ID == slsld1[0].ID).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
[Table(Name = "t_text")]
|
[Table(Name = "t_text")]
|
||||||
public class SendInfo
|
public class SendInfo
|
||||||
{
|
{
|
||||||
[Column(IsPrimary = true)]
|
[Column(IsPrimary = true, DbType = "raw(16)", MapType = typeof(byte[]))]
|
||||||
public Guid ID { get; set; }
|
public Guid ID { get; set; }
|
||||||
|
|
||||||
[Column(Name = "YPID5")]
|
[Column(Name = "YPID5")]
|
||||||
|
@ -40,6 +40,12 @@ namespace FreeSql.Internal
|
|||||||
public abstract string QuoteReadColumn(Type type, Type mapType, string columnName);
|
public abstract string QuoteReadColumn(Type type, Type mapType, string columnName);
|
||||||
public virtual string FieldAsAlias(string alias) => $" {alias}";
|
public virtual string FieldAsAlias(string alias) => $" {alias}";
|
||||||
public virtual string IIF(string test, string ifTrue, string ifElse) => $"case when {test} then {ifTrue} else {ifElse} end";
|
public virtual string IIF(string test, string ifTrue, string ifElse) => $"case when {test} then {ifTrue} else {ifElse} end";
|
||||||
|
public static string BytesSqlRaw(byte[] bytes)
|
||||||
|
{
|
||||||
|
var sb = new StringBuilder();
|
||||||
|
foreach (var vc in bytes) sb.Append(vc.ToString("X2"));
|
||||||
|
return sb.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
public IFreeSql _orm { get; set; }
|
public IFreeSql _orm { get; set; }
|
||||||
public ICodeFirst CodeFirst => _orm.CodeFirst;
|
public ICodeFirst CodeFirst => _orm.CodeFirst;
|
||||||
|
@ -188,7 +188,7 @@ namespace FreeSql.Internal
|
|||||||
//}
|
//}
|
||||||
if (colattr.ServerTime != DateTimeKind.Unspecified && new[] { typeof(DateTime), typeof(DateTimeOffset) }.Contains(colattr.MapType.NullableTypeOrThis()))
|
if (colattr.ServerTime != DateTimeKind.Unspecified && new[] { typeof(DateTime), typeof(DateTimeOffset) }.Contains(colattr.MapType.NullableTypeOrThis()))
|
||||||
{
|
{
|
||||||
col.DbDefaultValue = "'1970-1-1'";
|
col.DbDefaultValue = colattr.ServerTime == DateTimeKind.Local ? common.Now : common.NowUtc;
|
||||||
col.DbInsertValue = colattr.ServerTime == DateTimeKind.Local ? common.Now : common.NowUtc;
|
col.DbInsertValue = colattr.ServerTime == DateTimeKind.Local ? common.Now : common.NowUtc;
|
||||||
col.DbUpdateValue = colattr.ServerTime == DateTimeKind.Local ? common.Now : common.NowUtc;
|
col.DbUpdateValue = colattr.ServerTime == DateTimeKind.Local ? common.Now : common.NowUtc;
|
||||||
}
|
}
|
||||||
@ -1608,6 +1608,19 @@ namespace FreeSql.Internal
|
|||||||
if (obj == null) return null;
|
if (obj == null) return null;
|
||||||
return string.Concat(obj);
|
return string.Concat(obj);
|
||||||
}
|
}
|
||||||
|
static byte[] GuidToBytes(Guid guid)
|
||||||
|
{
|
||||||
|
var bytes = new byte[16];
|
||||||
|
var guidN = guid.ToString("N");
|
||||||
|
for (var a = 0; a < guidN.Length; a += 2)
|
||||||
|
bytes[a / 2] = byte.Parse($"{guidN[a]}{guidN[a + 1]}", System.Globalization.NumberStyles.HexNumber);
|
||||||
|
return bytes;
|
||||||
|
}
|
||||||
|
static Guid BytesToGuid(byte[] bytes)
|
||||||
|
{
|
||||||
|
if (bytes == null) return Guid.Empty;
|
||||||
|
return Guid.TryParse(BitConverter.ToString(bytes, 0, Math.Min(bytes.Length, 36)).Replace("-", ""), out var tryguid) ? tryguid : Guid.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
static ConcurrentDictionary<Type, ConcurrentDictionary<Type, Func<object, object>>> _dicGetDataReaderValue = new ConcurrentDictionary<Type, ConcurrentDictionary<Type, Func<object, object>>>();
|
static ConcurrentDictionary<Type, ConcurrentDictionary<Type, Func<object, object>>> _dicGetDataReaderValue = new ConcurrentDictionary<Type, ConcurrentDictionary<Type, Func<object, object>>>();
|
||||||
static MethodInfo MethodArrayGetValue = typeof(Array).GetMethod("GetValue", new[] { typeof(int) });
|
static MethodInfo MethodArrayGetValue = typeof(Array).GetMethod("GetValue", new[] { typeof(int) });
|
||||||
@ -1635,6 +1648,11 @@ namespace FreeSql.Internal
|
|||||||
static PropertyInfo PropertyDateTimeOffsetDateTime = typeof(DateTimeOffset).GetProperty("DateTime", BindingFlags.Instance | BindingFlags.Public);
|
static PropertyInfo PropertyDateTimeOffsetDateTime = typeof(DateTimeOffset).GetProperty("DateTime", BindingFlags.Instance | BindingFlags.Public);
|
||||||
static PropertyInfo PropertyDateTimeTicks = typeof(DateTime).GetProperty("Ticks", BindingFlags.Instance | BindingFlags.Public);
|
static PropertyInfo PropertyDateTimeTicks = typeof(DateTime).GetProperty("Ticks", BindingFlags.Instance | BindingFlags.Public);
|
||||||
static ConstructorInfo CtorDateTimeOffsetArgsTicks = typeof(DateTimeOffset). GetConstructor(new[] { typeof(long), typeof(TimeSpan) });
|
static ConstructorInfo CtorDateTimeOffsetArgsTicks = typeof(DateTimeOffset). GetConstructor(new[] { typeof(long), typeof(TimeSpan) });
|
||||||
|
static Encoding DefaultEncoding = Encoding.UTF8;
|
||||||
|
static MethodInfo MethodEncodingGetBytes = typeof(Encoding).GetMethod("GetBytes", new[] { typeof(string) });
|
||||||
|
static MethodInfo MethodEncodingGetString = typeof(Encoding).GetMethod("GetString", new[] { typeof(byte[]) });
|
||||||
|
static MethodInfo MethodGuidToBytes = typeof(Utils).GetMethod("GuidToBytes", BindingFlags.NonPublic | BindingFlags.Static, null, new[] { typeof(Guid) }, null);
|
||||||
|
static MethodInfo MethodBytesToGuid = typeof(Utils).GetMethod("BytesToGuid", BindingFlags.NonPublic | BindingFlags.Static, null, new[] { typeof(byte[]) }, null);
|
||||||
|
|
||||||
public static ConcurrentBag<Func<LabelTarget, Expression, Type, Expression>> GetDataReaderValueBlockExpressionSwitchTypeFullName = new ConcurrentBag<Func<LabelTarget, Expression, Type, Expression>>();
|
public static ConcurrentBag<Func<LabelTarget, Expression, Type, Expression>> GetDataReaderValueBlockExpressionSwitchTypeFullName = new ConcurrentBag<Func<LabelTarget, Expression, Type, Expression>>();
|
||||||
public static ConcurrentBag<Func<LabelTarget, Expression, Expression, Type, Expression>> GetDataReaderValueBlockExpressionObjectToStringIfThenElse = new ConcurrentBag<Func<LabelTarget, Expression, Expression, Type, Expression>>();
|
public static ConcurrentBag<Func<LabelTarget, Expression, Expression, Type, Expression>> GetDataReaderValueBlockExpressionObjectToStringIfThenElse = new ConcurrentBag<Func<LabelTarget, Expression, Expression, Type, Expression>>();
|
||||||
@ -1644,7 +1662,19 @@ namespace FreeSql.Internal
|
|||||||
var valueExp = Expression.Variable(typeof(object), "locvalue");
|
var valueExp = Expression.Variable(typeof(object), "locvalue");
|
||||||
Func<Expression> funcGetExpression = () =>
|
Func<Expression> funcGetExpression = () =>
|
||||||
{
|
{
|
||||||
if (type.FullName == "System.Byte[]") return Expression.Return(returnTarget, valueExp);
|
if (type.FullName == "System.Byte[]") return Expression.IfThenElse(
|
||||||
|
Expression.TypeEqual(valueExp, type),
|
||||||
|
Expression.Return(returnTarget, valueExp),
|
||||||
|
Expression.IfThenElse(
|
||||||
|
Expression.TypeEqual(valueExp, typeof(string)),
|
||||||
|
Expression.Return(returnTarget, Expression.Call(Expression.Constant(DefaultEncoding), MethodEncodingGetBytes, Expression.Convert(valueExp, typeof(string)))),
|
||||||
|
Expression.IfThenElse(
|
||||||
|
Expression.Or(Expression.TypeEqual(valueExp, typeof(Guid)), Expression.TypeEqual(valueExp, typeof(Guid?))),
|
||||||
|
Expression.Return(returnTarget, Expression.Call(MethodGuidToBytes, Expression.Convert(valueExp, typeof(Guid)))),
|
||||||
|
Expression.Return(returnTarget, Expression.Call(Expression.Constant(DefaultEncoding), MethodEncodingGetBytes, Expression.Call(MethodToString, valueExp)))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
if (type.IsArray)
|
if (type.IsArray)
|
||||||
{
|
{
|
||||||
var elementType = type.GetElementType();
|
var elementType = type.GetElementType();
|
||||||
@ -1911,7 +1941,8 @@ namespace FreeSql.Internal
|
|||||||
Expression callToStringExp = Expression.Return(returnTarget, Expression.Convert(Expression.Call(MethodToString, valueExp), typeof(object)));
|
Expression callToStringExp = Expression.Return(returnTarget, Expression.Convert(Expression.Call(MethodToString, valueExp), typeof(object)));
|
||||||
foreach (var toStringFunc in GetDataReaderValueBlockExpressionObjectToStringIfThenElse)
|
foreach (var toStringFunc in GetDataReaderValueBlockExpressionObjectToStringIfThenElse)
|
||||||
callToStringExp = toStringFunc(returnTarget, valueExp, callToStringExp, type);
|
callToStringExp = toStringFunc(returnTarget, valueExp, callToStringExp, type);
|
||||||
Expression switchExp = null;
|
Expression switchExp = Expression.Return(returnTarget, Expression.Call(MethodConvertChangeType, valueExp, Expression.Constant(type, typeof(Type))));
|
||||||
|
Expression defaultRetExp = switchExp;
|
||||||
if (tryparseExp != null)
|
if (tryparseExp != null)
|
||||||
switchExp = Expression.Switch(
|
switchExp = Expression.Switch(
|
||||||
Expression.Constant(type),
|
Expression.Constant(type),
|
||||||
@ -1921,23 +1952,15 @@ namespace FreeSql.Internal
|
|||||||
Expression.Constant(typeof(byte)), Expression.Constant(typeof(ushort)), Expression.Constant(typeof(uint)), Expression.Constant(typeof(ulong)),
|
Expression.Constant(typeof(byte)), Expression.Constant(typeof(ushort)), Expression.Constant(typeof(uint)), Expression.Constant(typeof(ulong)),
|
||||||
Expression.Constant(typeof(double)), Expression.Constant(typeof(float)), Expression.Constant(typeof(decimal)),
|
Expression.Constant(typeof(double)), Expression.Constant(typeof(float)), Expression.Constant(typeof(decimal)),
|
||||||
Expression.Constant(typeof(DateTime)), Expression.Constant(typeof(DateTimeOffset))
|
Expression.Constant(typeof(DateTime)), Expression.Constant(typeof(DateTimeOffset))
|
||||||
),
|
)
|
||||||
Expression.SwitchCase(Expression.Return(returnTarget, Expression.Call(MethodConvertChangeType, valueExp, Expression.Constant(type, typeof(Type)))), Expression.Constant(type))
|
|
||||||
);
|
);
|
||||||
else if (tryparseBooleanExp != null)
|
else if (tryparseBooleanExp != null)
|
||||||
switchExp = Expression.Switch(
|
switchExp = Expression.Switch(
|
||||||
Expression.Constant(type),
|
Expression.Constant(type),
|
||||||
Expression.SwitchCase(tryparseBooleanExp, Expression.Constant(typeof(bool))),
|
Expression.SwitchCase(tryparseBooleanExp, Expression.Constant(typeof(bool)))
|
||||||
Expression.SwitchCase(Expression.Return(returnTarget, Expression.Call(MethodConvertChangeType, valueExp, Expression.Constant(type, typeof(Type)))), Expression.Constant(type))
|
|
||||||
);
|
);
|
||||||
else if (type == typeof(string))
|
else if (type == typeof(string))
|
||||||
switchExp = callToStringExp;
|
defaultRetExp = switchExp = callToStringExp;
|
||||||
else
|
|
||||||
switchExp = Expression.Return(returnTarget, Expression.Call(MethodConvertChangeType, valueExp, Expression.Constant(type, typeof(Type))));
|
|
||||||
|
|
||||||
var defaultRetExp = type == typeof(string) ?
|
|
||||||
callToStringExp :
|
|
||||||
Expression.Return(returnTarget, Expression.Call(MethodConvertChangeType, valueExp, Expression.Constant(type, typeof(Type))));
|
|
||||||
|
|
||||||
return Expression.IfThenElse(
|
return Expression.IfThenElse(
|
||||||
Expression.TypeEqual(valueExp, type),
|
Expression.TypeEqual(valueExp, type),
|
||||||
@ -1952,8 +1975,20 @@ namespace FreeSql.Internal
|
|||||||
Expression.AndAlso(Expression.Equal(Expression.Constant(type), Expression.Constant(typeof(DateTimeOffset))), Expression.TypeEqual(valueExp, typeof(DateTime))),
|
Expression.AndAlso(Expression.Equal(Expression.Constant(type), Expression.Constant(typeof(DateTimeOffset))), Expression.TypeEqual(valueExp, typeof(DateTime))),
|
||||||
Expression.Return(returnTarget, Expression.Convert(
|
Expression.Return(returnTarget, Expression.Convert(
|
||||||
Expression.New(CtorDateTimeOffsetArgsTicks, Expression.MakeMemberAccess(Expression.Convert(valueExp, typeof(DateTime)), PropertyDateTimeTicks), Expression.Constant(TimeSpan.Zero)), typeof(object))),
|
Expression.New(CtorDateTimeOffsetArgsTicks, Expression.MakeMemberAccess(Expression.Convert(valueExp, typeof(DateTime)), PropertyDateTimeTicks), Expression.Constant(TimeSpan.Zero)), typeof(object))),
|
||||||
|
Expression.IfThenElse(
|
||||||
|
Expression.TypeEqual(valueExp, typeof(byte[])),
|
||||||
|
Expression.IfThenElse(
|
||||||
|
Expression.Or(Expression.Equal(Expression.Constant(type), Expression.Constant(typeof(Guid))), Expression.Equal(Expression.Constant(type), Expression.Constant(typeof(Guid?)))),
|
||||||
|
Expression.Return(returnTarget, Expression.Convert(Expression.Call(MethodBytesToGuid, Expression.Convert(valueExp, typeof(byte[]))), typeof(object))),
|
||||||
|
Expression.IfThenElse(
|
||||||
|
Expression.Equal(Expression.Constant(type), Expression.Constant(typeof(string))),
|
||||||
|
Expression.Return(returnTarget, Expression.Convert(Expression.Call(Expression.Constant(DefaultEncoding), MethodEncodingGetString, Expression.Convert(valueExp, typeof(byte[]))), typeof(object))),
|
||||||
defaultRetExp
|
defaultRetExp
|
||||||
)
|
)
|
||||||
|
),
|
||||||
|
defaultRetExp
|
||||||
|
)
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
@ -39,6 +39,7 @@ namespace FreeSql.MsAccess
|
|||||||
if (param == null) return "NULL";
|
if (param == null) return "NULL";
|
||||||
if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || mapType.IsArrayOrList()))
|
if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || mapType.IsArrayOrList()))
|
||||||
param = Utils.GetDataReaderValue(mapType, param);
|
param = Utils.GetDataReaderValue(mapType, param);
|
||||||
|
|
||||||
if (param is bool || param is bool?)
|
if (param is bool || param is bool?)
|
||||||
return (bool)param ? -1 : 0;
|
return (bool)param ? -1 : 0;
|
||||||
else if (param is string || param is char)
|
else if (param is string || param is char)
|
||||||
@ -54,6 +55,8 @@ namespace FreeSql.MsAccess
|
|||||||
}
|
}
|
||||||
else if (param is TimeSpan || param is TimeSpan?)
|
else if (param is TimeSpan || param is TimeSpan?)
|
||||||
return ((TimeSpan)param).TotalSeconds;
|
return ((TimeSpan)param).TotalSeconds;
|
||||||
|
else if (param is byte[])
|
||||||
|
return $"0x{CommonUtils.BytesSqlRaw(param as byte[])}";
|
||||||
else if (param is IEnumerable)
|
else if (param is IEnumerable)
|
||||||
return AddslashesIEnumerable(param, mapType, mapColumn);
|
return AddslashesIEnumerable(param, mapType, mapColumn);
|
||||||
|
|
||||||
|
@ -80,15 +80,8 @@ namespace FreeSql.MsAccess
|
|||||||
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, Type type, object value)
|
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, Type type, object value)
|
||||||
{
|
{
|
||||||
if (value == null) return "NULL";
|
if (value == null) return "NULL";
|
||||||
if (type == typeof(byte[]))
|
if (type == typeof(byte[])) return $"0x{CommonUtils.BytesSqlRaw(value as byte[])}";
|
||||||
{
|
if (type == typeof(TimeSpan) || type == typeof(TimeSpan?))
|
||||||
var bytes = value as byte[];
|
|
||||||
var sb = new StringBuilder().Append("0x");
|
|
||||||
foreach (var vc in bytes)
|
|
||||||
sb.Append(vc.ToString("X").PadLeft(2, '0'));
|
|
||||||
return sb.ToString();
|
|
||||||
}
|
|
||||||
else if (type == typeof(TimeSpan) || type == typeof(TimeSpan?))
|
|
||||||
{
|
{
|
||||||
var ts = (TimeSpan)value;
|
var ts = (TimeSpan)value;
|
||||||
value = $"{ts.Hours}:{ts.Minutes}:{ts.Seconds}";
|
value = $"{ts.Hours}:{ts.Minutes}:{ts.Seconds}";
|
||||||
|
@ -38,6 +38,7 @@ namespace FreeSql.MySql
|
|||||||
if (param == null) return "NULL";
|
if (param == null) return "NULL";
|
||||||
if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || mapType.IsArrayOrList()))
|
if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || mapType.IsArrayOrList()))
|
||||||
param = Utils.GetDataReaderValue(mapType, param);
|
param = Utils.GetDataReaderValue(mapType, param);
|
||||||
|
|
||||||
if (param is bool || param is bool?)
|
if (param is bool || param is bool?)
|
||||||
return (bool)param ? 1 : 0;
|
return (bool)param ? 1 : 0;
|
||||||
else if (param is string || param is char)
|
else if (param is string || param is char)
|
||||||
@ -50,6 +51,8 @@ namespace FreeSql.MySql
|
|||||||
return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.fff"), "'");
|
return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.fff"), "'");
|
||||||
else if (param is TimeSpan || param is TimeSpan?)
|
else if (param is TimeSpan || param is TimeSpan?)
|
||||||
return ((TimeSpan)param).Ticks / 10;
|
return ((TimeSpan)param).Ticks / 10;
|
||||||
|
else if (param is byte[])
|
||||||
|
return $"0x{CommonUtils.BytesSqlRaw(param as byte[])}";
|
||||||
else if (param is MygisGeometry)
|
else if (param is MygisGeometry)
|
||||||
return string.Concat("ST_GeomFromText('", (param as MygisGeometry).AsText().Replace("'", "''"), "')");
|
return string.Concat("ST_GeomFromText('", (param as MygisGeometry).AsText().Replace("'", "''"), "')");
|
||||||
else if (param is IEnumerable)
|
else if (param is IEnumerable)
|
||||||
|
@ -121,15 +121,8 @@ namespace FreeSql.MySql
|
|||||||
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, Type type, object value)
|
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, Type type, object value)
|
||||||
{
|
{
|
||||||
if (value == null) return "NULL";
|
if (value == null) return "NULL";
|
||||||
if (type == typeof(byte[]))
|
if (type == typeof(byte[])) return $"0x{CommonUtils.BytesSqlRaw(value as byte[])}";
|
||||||
{
|
if (type == typeof(TimeSpan) || type == typeof(TimeSpan?))
|
||||||
var bytes = value as byte[];
|
|
||||||
var sb = new StringBuilder().Append("0x");
|
|
||||||
foreach (var vc in bytes)
|
|
||||||
sb.Append(vc.ToString("X").PadLeft(2, '0'));
|
|
||||||
return sb.ToString(); //val = Encoding.UTF8.GetString(val as byte[]);
|
|
||||||
}
|
|
||||||
else if (type == typeof(TimeSpan) || type == typeof(TimeSpan?))
|
|
||||||
{
|
{
|
||||||
var ts = (TimeSpan)value;
|
var ts = (TimeSpan)value;
|
||||||
value = $"{Math.Floor(ts.TotalHours)}:{ts.Minutes}:{ts.Seconds}";
|
value = $"{Math.Floor(ts.TotalHours)}:{ts.Minutes}:{ts.Seconds}";
|
||||||
|
@ -129,15 +129,8 @@ namespace FreeSql.MySql
|
|||||||
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, Type type, object value)
|
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, Type type, object value)
|
||||||
{
|
{
|
||||||
if (value == null) return "NULL";
|
if (value == null) return "NULL";
|
||||||
if (type == typeof(byte[]))
|
if (type == typeof(byte[])) return $"0x{CommonUtils.BytesSqlRaw(value as byte[])}";
|
||||||
{
|
if (type == typeof(TimeSpan) || type == typeof(TimeSpan?))
|
||||||
var bytes = value as byte[];
|
|
||||||
var sb = new StringBuilder().Append("0x");
|
|
||||||
foreach (var vc in bytes)
|
|
||||||
sb.Append(vc.ToString("X").PadLeft(2, '0'));
|
|
||||||
return sb.ToString(); //val = Encoding.UTF8.GetString(val as byte[]);
|
|
||||||
}
|
|
||||||
else if (type == typeof(TimeSpan) || type == typeof(TimeSpan?))
|
|
||||||
{
|
{
|
||||||
var ts = (TimeSpan)value;
|
var ts = (TimeSpan)value;
|
||||||
value = $"{Math.Floor(ts.TotalHours)}:{ts.Minutes}:{ts.Seconds}";
|
value = $"{Math.Floor(ts.TotalHours)}:{ts.Minutes}:{ts.Seconds}";
|
||||||
|
@ -37,7 +37,10 @@ namespace FreeSql.Odbc.Dameng
|
|||||||
if (param == null) return "NULL";
|
if (param == null) return "NULL";
|
||||||
if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || mapType.IsArrayOrList()))
|
if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || mapType.IsArrayOrList()))
|
||||||
param = Utils.GetDataReaderValue(mapType, param);
|
param = Utils.GetDataReaderValue(mapType, param);
|
||||||
if (param is bool || param is bool?)
|
|
||||||
|
if (param is byte[])
|
||||||
|
return $"hextoraw('{CommonUtils.BytesSqlRaw(param as byte[])}')";
|
||||||
|
else if (param is bool || param is bool?)
|
||||||
return (bool)param ? 1 : 0;
|
return (bool)param ? 1 : 0;
|
||||||
else if (param is string || param is char)
|
else if (param is string || param is char)
|
||||||
return string.Concat("'", param.ToString().Replace("'", "''"), "'");
|
return string.Concat("'", param.ToString().Replace("'", "''"), "'");
|
||||||
|
@ -41,7 +41,7 @@ namespace FreeSql.Odbc.Dameng
|
|||||||
case "System.UInt16":
|
case "System.UInt16":
|
||||||
case "System.UInt32":
|
case "System.UInt32":
|
||||||
case "System.UInt64": return $"cast({getExp(operandExp)} as number)";
|
case "System.UInt64": return $"cast({getExp(operandExp)} as number)";
|
||||||
case "System.Guid": return $"substr(to_char({getExp(operandExp)}), 1, 36)";
|
case "System.Guid": return $"to_char({getExp(operandExp)})";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -96,14 +96,7 @@ namespace FreeSql.Odbc.Dameng
|
|||||||
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, Type type, object value)
|
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, Type type, object value)
|
||||||
{
|
{
|
||||||
if (value == null) return "NULL";
|
if (value == null) return "NULL";
|
||||||
if (type == typeof(byte[]))
|
if (type == typeof(byte[])) return $"hextoraw('{CommonUtils.BytesSqlRaw(value as byte[])}')";
|
||||||
{
|
|
||||||
var bytes = value as byte[];
|
|
||||||
var sb = new StringBuilder().Append("rawtohex('0x");
|
|
||||||
foreach (var vc in bytes)
|
|
||||||
sb.Append(vc.ToString("X").PadLeft(2, '0'));
|
|
||||||
return sb.Append("')").ToString();
|
|
||||||
}
|
|
||||||
return FormatSql("{0}", value, 1);
|
return FormatSql("{0}", value, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using FreeSql.Internal.Model;
|
using FreeSql.Internal;
|
||||||
|
using FreeSql.Internal.Model;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
@ -55,11 +56,7 @@ namespace FreeSql.Odbc.Default
|
|||||||
public virtual string ByteRawSql(object value)
|
public virtual string ByteRawSql(object value)
|
||||||
{
|
{
|
||||||
if (value == null) return "NULL";
|
if (value == null) return "NULL";
|
||||||
var bytes = value as byte[];
|
return $"0x{CommonUtils.BytesSqlRaw(value as byte[])}";
|
||||||
var sb = new StringBuilder().Append("0x");
|
|
||||||
foreach (var vc in bytes)
|
|
||||||
sb.Append(vc.ToString("X").PadLeft(2, '0'));
|
|
||||||
return sb.ToString();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual string CastSql(string sql, string to) => $"cast({sql} as {to})";
|
public virtual string CastSql(string sql, string to) => $"cast({sql} as {to})";
|
||||||
|
@ -39,6 +39,7 @@ namespace FreeSql.Odbc.Default
|
|||||||
if (param == null) return "NULL";
|
if (param == null) return "NULL";
|
||||||
if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || mapType.IsArrayOrList()))
|
if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || mapType.IsArrayOrList()))
|
||||||
param = Utils.GetDataReaderValue(mapType, param);
|
param = Utils.GetDataReaderValue(mapType, param);
|
||||||
|
|
||||||
if (param is bool || param is bool?)
|
if (param is bool || param is bool?)
|
||||||
return (bool)param ? 1 : 0;
|
return (bool)param ? 1 : 0;
|
||||||
else if (param is string)
|
else if (param is string)
|
||||||
@ -53,6 +54,8 @@ namespace FreeSql.Odbc.Default
|
|||||||
return Adapter.DateTimeRawSql(param);
|
return Adapter.DateTimeRawSql(param);
|
||||||
else if (param is TimeSpan || param is TimeSpan?)
|
else if (param is TimeSpan || param is TimeSpan?)
|
||||||
return Adapter.TimeSpanRawSql(param);
|
return Adapter.TimeSpanRawSql(param);
|
||||||
|
else if (param is byte[])
|
||||||
|
return Adapter.ByteRawSql(param as byte[]);
|
||||||
else if (param is IEnumerable)
|
else if (param is IEnumerable)
|
||||||
return AddslashesIEnumerable(param, mapType, mapColumn);
|
return AddslashesIEnumerable(param, mapType, mapColumn);
|
||||||
|
|
||||||
|
@ -51,6 +51,8 @@ namespace FreeSql.Odbc.GBase
|
|||||||
return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "'");
|
return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "'");
|
||||||
else if (param is TimeSpan || param is TimeSpan?)
|
else if (param is TimeSpan || param is TimeSpan?)
|
||||||
return ((TimeSpan)param).Ticks / 10;
|
return ((TimeSpan)param).Ticks / 10;
|
||||||
|
else if (param is byte[])
|
||||||
|
return $"'\\x{CommonUtils.BytesSqlRaw(param as byte[])}'";
|
||||||
else if (param is IEnumerable)
|
else if (param is IEnumerable)
|
||||||
return AddslashesIEnumerable(param, mapType, mapColumn);
|
return AddslashesIEnumerable(param, mapType, mapColumn);
|
||||||
|
|
||||||
|
@ -124,15 +124,8 @@ namespace FreeSql.Odbc.GBase
|
|||||||
if (value == null) return "NULL";
|
if (value == null) return "NULL";
|
||||||
value = getParamterValue(type, value);
|
value = getParamterValue(type, value);
|
||||||
var type2 = value.GetType();
|
var type2 = value.GetType();
|
||||||
if (type2 == typeof(byte[]))
|
if (type2 == typeof(byte[])) return $"'\\x{CommonUtils.BytesSqlRaw(value as byte[])}'";
|
||||||
{
|
if (type2 == typeof(TimeSpan) || type2 == typeof(TimeSpan?))
|
||||||
var bytes = value as byte[];
|
|
||||||
var sb = new StringBuilder().Append("'\\x");
|
|
||||||
foreach (var vc in bytes)
|
|
||||||
sb.Append(vc.ToString("X").PadLeft(2, '0'));
|
|
||||||
return sb.Append("'").ToString(); //val = Encoding.UTF8.GetString(val as byte[]);
|
|
||||||
}
|
|
||||||
else if (type2 == typeof(TimeSpan) || type2 == typeof(TimeSpan?))
|
|
||||||
{
|
{
|
||||||
var ts = (TimeSpan)value;
|
var ts = (TimeSpan)value;
|
||||||
return $"'{Math.Min(24, (int)Math.Floor(ts.TotalHours))}:{ts.Minutes}:{ts.Seconds}'";
|
return $"'{Math.Min(24, (int)Math.Floor(ts.TotalHours))}:{ts.Minutes}:{ts.Seconds}'";
|
||||||
|
@ -38,6 +38,7 @@ namespace FreeSql.Odbc.MySql
|
|||||||
if (param == null) return "NULL";
|
if (param == null) return "NULL";
|
||||||
if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || mapType.IsArrayOrList()))
|
if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || mapType.IsArrayOrList()))
|
||||||
param = Utils.GetDataReaderValue(mapType, param);
|
param = Utils.GetDataReaderValue(mapType, param);
|
||||||
|
|
||||||
if (param is bool || param is bool?)
|
if (param is bool || param is bool?)
|
||||||
return (bool)param ? 1 : 0;
|
return (bool)param ? 1 : 0;
|
||||||
else if (param is string || param is char)
|
else if (param is string || param is char)
|
||||||
@ -50,6 +51,8 @@ namespace FreeSql.Odbc.MySql
|
|||||||
return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.fff"), "'");
|
return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.fff"), "'");
|
||||||
else if (param is TimeSpan || param is TimeSpan?)
|
else if (param is TimeSpan || param is TimeSpan?)
|
||||||
return ((TimeSpan)param).Ticks / 10;
|
return ((TimeSpan)param).Ticks / 10;
|
||||||
|
else if (param is byte[])
|
||||||
|
return $"0x{CommonUtils.BytesSqlRaw(param as byte[])}";
|
||||||
else if (param is IEnumerable)
|
else if (param is IEnumerable)
|
||||||
return AddslashesIEnumerable(param, mapType, mapColumn);
|
return AddslashesIEnumerable(param, mapType, mapColumn);
|
||||||
|
|
||||||
|
@ -92,15 +92,8 @@ namespace FreeSql.Odbc.MySql
|
|||||||
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, Type type, object value)
|
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, Type type, object value)
|
||||||
{
|
{
|
||||||
if (value == null) return "NULL";
|
if (value == null) return "NULL";
|
||||||
if (type == typeof(byte[]))
|
if (type == typeof(byte[])) return $"0x{CommonUtils.BytesSqlRaw(value as byte[])}";
|
||||||
{
|
if (type == typeof(TimeSpan) || type == typeof(TimeSpan?))
|
||||||
var bytes = value as byte[];
|
|
||||||
var sb = new StringBuilder().Append("0x");
|
|
||||||
foreach (var vc in bytes)
|
|
||||||
sb.Append(vc.ToString("X").PadLeft(2, '0'));
|
|
||||||
return sb.ToString(); //val = Encoding.UTF8.GetString(val as byte[]);
|
|
||||||
}
|
|
||||||
else if (type == typeof(TimeSpan) || type == typeof(TimeSpan?))
|
|
||||||
{
|
{
|
||||||
var ts = (TimeSpan)value;
|
var ts = (TimeSpan)value;
|
||||||
value = $"{Math.Floor(ts.TotalHours)}:{ts.Minutes}:{ts.Seconds}";
|
value = $"{Math.Floor(ts.TotalHours)}:{ts.Minutes}:{ts.Seconds}";
|
||||||
|
@ -37,7 +37,10 @@ namespace FreeSql.Odbc.Oracle
|
|||||||
if (param == null) return "NULL";
|
if (param == null) return "NULL";
|
||||||
if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || mapType.IsArrayOrList()))
|
if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || mapType.IsArrayOrList()))
|
||||||
param = Utils.GetDataReaderValue(mapType, param);
|
param = Utils.GetDataReaderValue(mapType, param);
|
||||||
if (param is bool || param is bool?)
|
|
||||||
|
if (param is byte[])
|
||||||
|
return $"hextoraw('{CommonUtils.BytesSqlRaw(param as byte[])}')";
|
||||||
|
else if (param is bool || param is bool?)
|
||||||
return (bool)param ? 1 : 0;
|
return (bool)param ? 1 : 0;
|
||||||
else if (param is string || param is char)
|
else if (param is string || param is char)
|
||||||
return string.Concat("'", param.ToString().Replace("'", "''"), "'");
|
return string.Concat("'", param.ToString().Replace("'", "''"), "'");
|
||||||
|
@ -41,7 +41,7 @@ namespace FreeSql.Odbc.Oracle
|
|||||||
case "System.UInt16":
|
case "System.UInt16":
|
||||||
case "System.UInt32":
|
case "System.UInt32":
|
||||||
case "System.UInt64": return $"cast({getExp(operandExp)} as number)";
|
case "System.UInt64": return $"cast({getExp(operandExp)} as number)";
|
||||||
case "System.Guid": return $"substr(to_char({getExp(operandExp)}), 1, 36)";
|
case "System.Guid": return $"to_char({getExp(operandExp)})";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -96,14 +96,7 @@ namespace FreeSql.Odbc.Oracle
|
|||||||
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, Type type, object value)
|
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, Type type, object value)
|
||||||
{
|
{
|
||||||
if (value == null) return "NULL";
|
if (value == null) return "NULL";
|
||||||
if (type == typeof(byte[]))
|
if (type == typeof(byte[])) return $"hextoraw('{CommonUtils.BytesSqlRaw(value as byte[])}')";
|
||||||
{
|
|
||||||
var bytes = value as byte[];
|
|
||||||
var sb = new StringBuilder().Append("rawtohex('0x");
|
|
||||||
foreach (var vc in bytes)
|
|
||||||
sb.Append(vc.ToString("X").PadLeft(2, '0'));
|
|
||||||
return sb.Append("')").ToString();
|
|
||||||
}
|
|
||||||
return FormatSql("{0}", value, 1);
|
return FormatSql("{0}", value, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -39,6 +39,7 @@ namespace FreeSql.Odbc.PostgreSQL
|
|||||||
if (param == null) return "NULL";
|
if (param == null) return "NULL";
|
||||||
if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || mapType.IsArrayOrList()))
|
if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || mapType.IsArrayOrList()))
|
||||||
param = Utils.GetDataReaderValue(mapType, param);
|
param = Utils.GetDataReaderValue(mapType, param);
|
||||||
|
|
||||||
if (param is bool || param is bool?)
|
if (param is bool || param is bool?)
|
||||||
return (bool)param ? "'t'" : "'f'";
|
return (bool)param ? "'t'" : "'f'";
|
||||||
else if (param is string || param is char)
|
else if (param is string || param is char)
|
||||||
@ -51,6 +52,8 @@ namespace FreeSql.Odbc.PostgreSQL
|
|||||||
return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "'");
|
return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "'");
|
||||||
else if (param is TimeSpan || param is TimeSpan?)
|
else if (param is TimeSpan || param is TimeSpan?)
|
||||||
return ((TimeSpan)param).Ticks / 10;
|
return ((TimeSpan)param).Ticks / 10;
|
||||||
|
else if (param is byte[])
|
||||||
|
return $"'\\x{CommonUtils.BytesSqlRaw(param as byte[])}'";
|
||||||
else if (param is IEnumerable)
|
else if (param is IEnumerable)
|
||||||
return AddslashesIEnumerable(param, mapType, mapColumn);
|
return AddslashesIEnumerable(param, mapType, mapColumn);
|
||||||
|
|
||||||
|
@ -124,15 +124,8 @@ namespace FreeSql.Odbc.PostgreSQL
|
|||||||
if (value == null) return "NULL";
|
if (value == null) return "NULL";
|
||||||
value = getParamterValue(type, value);
|
value = getParamterValue(type, value);
|
||||||
var type2 = value.GetType();
|
var type2 = value.GetType();
|
||||||
if (type2 == typeof(byte[]))
|
if (type2 == typeof(byte[])) return $"'\\x{CommonUtils.BytesSqlRaw(value as byte[])}'";
|
||||||
{
|
if (type2 == typeof(TimeSpan) || type2 == typeof(TimeSpan?))
|
||||||
var bytes = value as byte[];
|
|
||||||
var sb = new StringBuilder().Append("'\\x");
|
|
||||||
foreach (var vc in bytes)
|
|
||||||
sb.Append(vc.ToString("X").PadLeft(2, '0'));
|
|
||||||
return sb.Append("'").ToString(); //val = Encoding.UTF8.GetString(val as byte[]);
|
|
||||||
}
|
|
||||||
else if (type2 == typeof(TimeSpan) || type2 == typeof(TimeSpan?))
|
|
||||||
{
|
{
|
||||||
var ts = (TimeSpan)value;
|
var ts = (TimeSpan)value;
|
||||||
return $"'{Math.Min(24, (int)Math.Floor(ts.TotalHours))}:{ts.Minutes}:{ts.Seconds}'";
|
return $"'{Math.Min(24, (int)Math.Floor(ts.TotalHours))}:{ts.Minutes}:{ts.Seconds}'";
|
||||||
|
@ -40,6 +40,7 @@ namespace FreeSql.Odbc.SqlServer
|
|||||||
if (param == null) return "NULL";
|
if (param == null) return "NULL";
|
||||||
if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || mapType.IsArrayOrList()))
|
if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || mapType.IsArrayOrList()))
|
||||||
param = Utils.GetDataReaderValue(mapType, param);
|
param = Utils.GetDataReaderValue(mapType, param);
|
||||||
|
|
||||||
if (param is bool || param is bool?)
|
if (param is bool || param is bool?)
|
||||||
return (bool)param ? 1 : 0;
|
return (bool)param ? 1 : 0;
|
||||||
else if (param is string)
|
else if (param is string)
|
||||||
@ -66,6 +67,8 @@ namespace FreeSql.Odbc.SqlServer
|
|||||||
}
|
}
|
||||||
else if (param is TimeSpan || param is TimeSpan?)
|
else if (param is TimeSpan || param is TimeSpan?)
|
||||||
return ((TimeSpan)param).TotalSeconds;
|
return ((TimeSpan)param).TotalSeconds;
|
||||||
|
else if (param is byte[])
|
||||||
|
return $"0x{CommonUtils.BytesSqlRaw(param as byte[])}";
|
||||||
else if (param is IEnumerable)
|
else if (param is IEnumerable)
|
||||||
return AddslashesIEnumerable(param, mapType, mapColumn);
|
return AddslashesIEnumerable(param, mapType, mapColumn);
|
||||||
|
|
||||||
|
@ -83,15 +83,8 @@ namespace FreeSql.Odbc.SqlServer
|
|||||||
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, Type type, object value)
|
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, Type type, object value)
|
||||||
{
|
{
|
||||||
if (value == null) return "NULL";
|
if (value == null) return "NULL";
|
||||||
if (type == typeof(byte[]))
|
if (type == typeof(byte[])) return $"0x{CommonUtils.BytesSqlRaw(value as byte[])}";
|
||||||
{
|
if (type == typeof(TimeSpan) || type == typeof(TimeSpan?))
|
||||||
var bytes = value as byte[];
|
|
||||||
var sb = new StringBuilder().Append("0x");
|
|
||||||
foreach (var vc in bytes)
|
|
||||||
sb.Append(vc.ToString("X").PadLeft(2, '0'));
|
|
||||||
return sb.ToString();
|
|
||||||
}
|
|
||||||
else if (type == typeof(TimeSpan) || type == typeof(TimeSpan?))
|
|
||||||
{
|
{
|
||||||
var ts = (TimeSpan)value;
|
var ts = (TimeSpan)value;
|
||||||
value = $"{ts.Hours}:{ts.Minutes}:{ts.Seconds}.{ts.Milliseconds}";
|
value = $"{ts.Hours}:{ts.Minutes}:{ts.Seconds}.{ts.Milliseconds}";
|
||||||
|
@ -37,7 +37,10 @@ namespace FreeSql.Oracle
|
|||||||
if (param == null) return "NULL";
|
if (param == null) return "NULL";
|
||||||
if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || mapType.IsArrayOrList()))
|
if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || mapType.IsArrayOrList()))
|
||||||
param = Utils.GetDataReaderValue(mapType, param);
|
param = Utils.GetDataReaderValue(mapType, param);
|
||||||
if (param is bool || param is bool?)
|
|
||||||
|
if (param is byte[])
|
||||||
|
return $"hextoraw('{CommonUtils.BytesSqlRaw(param as byte[])}')";
|
||||||
|
else if (param is bool || param is bool?)
|
||||||
return (bool)param ? 1 : 0;
|
return (bool)param ? 1 : 0;
|
||||||
else if (param is string || param is char)
|
else if (param is string || param is char)
|
||||||
return string.Concat("'", param.ToString().Replace("'", "''"), "'");
|
return string.Concat("'", param.ToString().Replace("'", "''"), "'");
|
||||||
|
@ -68,7 +68,7 @@ namespace FreeSql.Oracle
|
|||||||
case "System.UInt16":
|
case "System.UInt16":
|
||||||
case "System.UInt32":
|
case "System.UInt32":
|
||||||
case "System.UInt64": return $"cast({getExp(callExp.Arguments[0])} as number)";
|
case "System.UInt64": return $"cast({getExp(callExp.Arguments[0])} as number)";
|
||||||
case "System.Guid": return $"substr(to_char({getExp(callExp.Arguments[0])}), 1, 36)";
|
case "System.Guid": return $"to_char({getExp(callExp.Arguments[0])})";
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
case "NewGuid":
|
case "NewGuid":
|
||||||
|
@ -91,14 +91,7 @@ namespace FreeSql.Oracle
|
|||||||
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, Type type, object value)
|
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, Type type, object value)
|
||||||
{
|
{
|
||||||
if (value == null) return "NULL";
|
if (value == null) return "NULL";
|
||||||
if (type == typeof(byte[]))
|
if (type == typeof(byte[])) return $"hextoraw('{CommonUtils.BytesSqlRaw(value as byte[])}')";
|
||||||
{
|
|
||||||
var bytes = value as byte[];
|
|
||||||
var sb = new StringBuilder().Append("rawtohex('0x");
|
|
||||||
foreach (var vc in bytes)
|
|
||||||
sb.Append(vc.ToString("X").PadLeft(2, '0'));
|
|
||||||
return sb.Append("')").ToString();
|
|
||||||
}
|
|
||||||
return FormatSql("{0}", value, 1);
|
return FormatSql("{0}", value, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -40,6 +40,7 @@ namespace FreeSql.PostgreSQL
|
|||||||
if (param == null) return "NULL";
|
if (param == null) return "NULL";
|
||||||
if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || mapType.IsArrayOrList() || param is JToken || param is JObject || param is JArray))
|
if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || mapType.IsArrayOrList() || param is JToken || param is JObject || param is JArray))
|
||||||
param = Utils.GetDataReaderValue(mapType, param);
|
param = Utils.GetDataReaderValue(mapType, param);
|
||||||
|
|
||||||
bool isdic;
|
bool isdic;
|
||||||
if (param is bool || param is bool?)
|
if (param is bool || param is bool?)
|
||||||
return (bool)param ? "'t'" : "'f'";
|
return (bool)param ? "'t'" : "'f'";
|
||||||
@ -53,6 +54,8 @@ namespace FreeSql.PostgreSQL
|
|||||||
return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "'");
|
return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "'");
|
||||||
else if (param is TimeSpan || param is TimeSpan?)
|
else if (param is TimeSpan || param is TimeSpan?)
|
||||||
return ((TimeSpan)param).Ticks / 10;
|
return ((TimeSpan)param).Ticks / 10;
|
||||||
|
else if (param is byte[])
|
||||||
|
return $"'\\x{CommonUtils.BytesSqlRaw(param as byte[])}'";
|
||||||
else if (param is JToken || param is JObject || param is JArray)
|
else if (param is JToken || param is JObject || param is JArray)
|
||||||
return string.Concat("'", param.ToString().Replace("'", "''"), "'::jsonb");
|
return string.Concat("'", param.ToString().Replace("'", "''"), "'::jsonb");
|
||||||
else if ((isdic = param is Dictionary<string, string>) ||
|
else if ((isdic = param is Dictionary<string, string>) ||
|
||||||
|
@ -156,15 +156,8 @@ namespace FreeSql.PostgreSQL
|
|||||||
}
|
}
|
||||||
value = getParamterValue(type, value);
|
value = getParamterValue(type, value);
|
||||||
var type2 = value.GetType();
|
var type2 = value.GetType();
|
||||||
if (type2 == typeof(byte[]))
|
if (type2 == typeof(byte[])) return $"'\\x{CommonUtils.BytesSqlRaw(value as byte[])}'";
|
||||||
{
|
if (type2 == typeof(TimeSpan) || type2 == typeof(TimeSpan?))
|
||||||
var bytes = value as byte[];
|
|
||||||
var sb = new StringBuilder().Append("'\\x");
|
|
||||||
foreach (var vc in bytes)
|
|
||||||
sb.Append(vc.ToString("X").PadLeft(2, '0'));
|
|
||||||
return sb.Append("'").ToString(); //val = Encoding.UTF8.GetString(val as byte[]);
|
|
||||||
}
|
|
||||||
else if (type2 == typeof(TimeSpan) || type2 == typeof(TimeSpan?))
|
|
||||||
{
|
{
|
||||||
var ts = (TimeSpan)value;
|
var ts = (TimeSpan)value;
|
||||||
return $"'{Math.Min(24, (int)Math.Floor(ts.TotalHours))}:{ts.Minutes}:{ts.Seconds}'";
|
return $"'{Math.Min(24, (int)Math.Floor(ts.TotalHours))}:{ts.Minutes}:{ts.Seconds}'";
|
||||||
|
@ -41,6 +41,7 @@ namespace FreeSql.SqlServer
|
|||||||
if (param == null) return "NULL";
|
if (param == null) return "NULL";
|
||||||
if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || mapType.IsArrayOrList()))
|
if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || mapType.IsArrayOrList()))
|
||||||
param = Utils.GetDataReaderValue(mapType, param);
|
param = Utils.GetDataReaderValue(mapType, param);
|
||||||
|
|
||||||
if (param is bool || param is bool?)
|
if (param is bool || param is bool?)
|
||||||
return (bool)param ? 1 : 0;
|
return (bool)param ? 1 : 0;
|
||||||
else if (param is string)
|
else if (param is string)
|
||||||
@ -67,6 +68,8 @@ namespace FreeSql.SqlServer
|
|||||||
}
|
}
|
||||||
else if (param is TimeSpan || param is TimeSpan?)
|
else if (param is TimeSpan || param is TimeSpan?)
|
||||||
return ((TimeSpan)param).TotalSeconds;
|
return ((TimeSpan)param).TotalSeconds;
|
||||||
|
else if (param is byte[])
|
||||||
|
return $"0x{CommonUtils.BytesSqlRaw(param as byte[])}";
|
||||||
else if (param is IEnumerable)
|
else if (param is IEnumerable)
|
||||||
return AddslashesIEnumerable(param, mapType, mapColumn);
|
return AddslashesIEnumerable(param, mapType, mapColumn);
|
||||||
|
|
||||||
|
@ -94,15 +94,8 @@ namespace FreeSql.SqlServer
|
|||||||
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, Type type, object value)
|
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, Type type, object value)
|
||||||
{
|
{
|
||||||
if (value == null) return "NULL";
|
if (value == null) return "NULL";
|
||||||
if (type == typeof(byte[]))
|
if (type == typeof(byte[])) return $"0x{CommonUtils.BytesSqlRaw(value as byte[])}";
|
||||||
{
|
if (type == typeof(TimeSpan) || type == typeof(TimeSpan?))
|
||||||
var bytes = value as byte[];
|
|
||||||
var sb = new StringBuilder().Append("0x");
|
|
||||||
foreach (var vc in bytes)
|
|
||||||
sb.Append(vc.ToString("X").PadLeft(2, '0'));
|
|
||||||
return sb.ToString();
|
|
||||||
}
|
|
||||||
else if (type == typeof(TimeSpan) || type == typeof(TimeSpan?))
|
|
||||||
{
|
{
|
||||||
var ts = (TimeSpan)value;
|
var ts = (TimeSpan)value;
|
||||||
value = $"{ts.Hours}:{ts.Minutes}:{ts.Seconds}.{ts.Milliseconds}";
|
value = $"{ts.Hours}:{ts.Minutes}:{ts.Seconds}.{ts.Milliseconds}";
|
||||||
|
@ -36,6 +36,7 @@ namespace FreeSql.Sqlite
|
|||||||
if (param == null) return "NULL";
|
if (param == null) return "NULL";
|
||||||
if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || mapType.IsArrayOrList()))
|
if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || mapType.IsArrayOrList()))
|
||||||
param = Utils.GetDataReaderValue(mapType, param);
|
param = Utils.GetDataReaderValue(mapType, param);
|
||||||
|
|
||||||
if (param is bool || param is bool?)
|
if (param is bool || param is bool?)
|
||||||
return (bool)param ? 1 : 0;
|
return (bool)param ? 1 : 0;
|
||||||
else if (param is string || param is char)
|
else if (param is string || param is char)
|
||||||
@ -48,6 +49,8 @@ namespace FreeSql.Sqlite
|
|||||||
return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss"), "'");
|
return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss"), "'");
|
||||||
else if (param is TimeSpan || param is TimeSpan?)
|
else if (param is TimeSpan || param is TimeSpan?)
|
||||||
return ((TimeSpan)param).Ticks / 10000;
|
return ((TimeSpan)param).Ticks / 10000;
|
||||||
|
else if (param is byte[])
|
||||||
|
return string.Concat("'", Encoding.UTF8.GetString(param as byte[]), "'");
|
||||||
else if (param is IEnumerable)
|
else if (param is IEnumerable)
|
||||||
return AddslashesIEnumerable(param, mapType, mapColumn);
|
return AddslashesIEnumerable(param, mapType, mapColumn);
|
||||||
|
|
||||||
|
@ -94,7 +94,6 @@ namespace FreeSql.Sqlite
|
|||||||
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, Type type, object value)
|
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, Type type, object value)
|
||||||
{
|
{
|
||||||
if (value == null) return "NULL";
|
if (value == null) return "NULL";
|
||||||
if (type == typeof(byte[])) value = Encoding.UTF8.GetString(value as byte[]);
|
|
||||||
return FormatSql("{0}", value, 1);
|
return FormatSql("{0}", value, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user