Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit 6c5a8e5

Browse files
committed
Add more optimizations
1 parent 5232fe1 commit 6c5a8e5

File tree

3 files changed

+15
-15
lines changed

3 files changed

+15
-15
lines changed

src/ServiceStack.OrmLite/IOrmLiteConverter.cs

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -112,32 +112,35 @@ public static class OrmLiteConverterExtensions
112112
{
113113
public static object ConvertNumber(this IOrmLiteConverter converter, Type toIntegerType, object value)
114114
{
115+
if (value.GetType() == toIntegerType)
116+
return value;
117+
115118
var typeCode = toIntegerType.GetUnderlyingTypeCode();
116119
switch (typeCode)
117120
{
121+
case TypeCode.Byte:
122+
return Convert.ToByte(value);
118123
case TypeCode.Int16:
119-
return value is short ? value : Convert.ToInt16(value);
124+
return Convert.ToInt16(value);
120125
case TypeCode.UInt16:
121-
return value is ushort ? value : Convert.ToUInt16(value);
126+
return Convert.ToUInt16(value);
122127
case TypeCode.Int32:
123-
return value is int ? value : Convert.ToInt32(value);
128+
return Convert.ToInt32(value);
124129
case TypeCode.UInt32:
125-
return value is uint ? value : Convert.ToUInt32(value);
130+
return Convert.ToUInt32(value);
126131
case TypeCode.Int64:
127-
return value is long ? value : Convert.ToInt64(value);
132+
return Convert.ToInt64(value);
128133
case TypeCode.UInt64:
129-
if (value is ulong)
130-
return value;
131134
var byteValue = value as byte[];
132135
if (byteValue != null)
133136
return OrmLiteUtils.ConvertToULong(byteValue);
134137
return Convert.ToUInt64(value);
135138
case TypeCode.Single:
136-
return value is float ? value : Convert.ToSingle(value);
139+
return Convert.ToSingle(value);
137140
case TypeCode.Double:
138-
return value is double ? value : Convert.ToDouble(value);
141+
return Convert.ToDouble(value);
139142
case TypeCode.Decimal:
140-
return value is decimal ? value : Convert.ToDecimal(value);
143+
return Convert.ToDecimal(value);
141144
}
142145

143146
var convertedValue = converter.DialectProvider.StringSerializer.DeserializeFromString(value.ToString(), toIntegerType);

src/ServiceStack.OrmLite/OrmLiteUtils.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -350,14 +350,14 @@ public static Tuple<FieldDefinition, int, IOrmLiteConverter>[] GetIndexFieldsCac
350350
var cache = new List<Tuple<FieldDefinition, int, IOrmLiteConverter>>();
351351
var ignoredFields = modelDefinition.IgnoredFieldDefinitions;
352352
var remainingFieldDefs = modelDefinition.FieldDefinitionsArray
353-
.Where(x => !ignoredFields.Contains(x)).ToList();
353+
.Where(x => !ignoredFields.Contains(x) && x.SetValueFn != null).ToList();
354354

355355
for (var i = 0; i < reader.FieldCount; i++)
356356
{
357357
var columnName = reader.GetName(i);
358358
var fieldDef = modelDefinition.GetFieldDefinition(columnName);
359359

360-
if (fieldDef != null && !ignoredFields.Contains(fieldDef))
360+
if (fieldDef != null && !ignoredFields.Contains(fieldDef) && fieldDef.SetValueFn != null)
361361
{
362362
remainingFieldDefs.Remove(fieldDef);
363363
cache.Add(Tuple.Create(fieldDef, i, dialect.GetConverterBestMatch(fieldDef)));

src/ServiceStack.OrmLite/OrmLiteWriteCommandExtensions.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -296,9 +296,6 @@ public static T PopulateWithSqlReader<T>(this T objWithProperties,
296296
var index = fieldCache.Item2;
297297
var converter = fieldCache.Item3;
298298

299-
if (fieldDef.SetValueFn == null || index == NotFound)
300-
continue;
301-
302299
if (values[index] == DBNull.Value)
303300
{
304301
var value = fieldDef.IsNullable ? null : fieldDef.FieldTypeDefaultValue;

0 commit comments

Comments
 (0)