public static Tuple <FieldDefinition, int, IOrmLiteConverter>[] GetIndexFieldsCache(this IDataReader reader, ModelDefinition modelDefinition, IOrmLiteDialectProvider dialect) { var cache = new List <Tuple <FieldDefinition, int, IOrmLiteConverter> >(); var ignoredFields = modelDefinition.IgnoredFieldDefinitions; var remainingFieldDefs = modelDefinition.FieldDefinitionsArray .Where(x => !ignoredFields.Contains(x) && x.SetValueFn != null).ToList(); for (var i = 0; i < reader.FieldCount; i++) { var columnName = reader.GetName(i); var fieldDef = modelDefinition.GetFieldDefinition(columnName); if (fieldDef != null && !ignoredFields.Contains(fieldDef) && fieldDef.SetValueFn != null) { remainingFieldDefs.Remove(fieldDef); cache.Add(Tuple.Create(fieldDef, i, dialect.GetConverterBestMatch(fieldDef))); } } foreach (var fieldDef in remainingFieldDefs) { var index = FindColumnIndex(reader, dialect, fieldDef); if (index != NotFound) { cache.Add(Tuple.Create(fieldDef, index, dialect.GetConverterBestMatch(fieldDef))); } } return(cache.ToArray()); }
public static Tuple <FieldDefinition, int, IOrmLiteConverter>[] GetIndexFieldsCache(this IDataReader reader, ModelDefinition modelDefinition, IOrmLiteDialectProvider dialect, HashSet <string> onlyFields = null, int startPos = 0, int?endPos = null) { var cache = new List <Tuple <FieldDefinition, int, IOrmLiteConverter> >(); var ignoredFields = modelDefinition.IgnoredFieldDefinitions; var remainingFieldDefs = modelDefinition.FieldDefinitionsArray .Where(x => !ignoredFields.Contains(x) && x.SetValueFn != null).ToList(); var end = endPos.GetValueOrDefault(reader.FieldCount); for (var i = startPos; i < end; i++) { var columnName = reader.GetName(i); var fieldDef = modelDefinition.GetFieldDefinition(columnName); if (fieldDef == null) { foreach (var def in modelDefinition.FieldDefinitionsArray) { if (string.Equals(dialect.NamingStrategy.GetColumnName(def.FieldName), columnName, StringComparison.OrdinalIgnoreCase)) { fieldDef = def; break; } } } if (fieldDef != null && !ignoredFields.Contains(fieldDef) && fieldDef.SetValueFn != null) { remainingFieldDefs.Remove(fieldDef); cache.Add(Tuple.Create(fieldDef, i, dialect.GetConverterBestMatch(fieldDef))); } } if (remainingFieldDefs.Count > 0 && onlyFields == null) { var dbFieldMap = new Dictionary <string, int>(StringComparer.InvariantCultureIgnoreCase); for (var i = startPos; i < end; i++) { var fieldName = reader.GetName(i); dbFieldMap[fieldName] = i; } foreach (var fieldDef in remainingFieldDefs) { var index = FindColumnIndex(dialect, fieldDef, dbFieldMap); if (index != NotFound) { cache.Add(Tuple.Create(fieldDef, index, dialect.GetConverterBestMatch(fieldDef))); } } } return(cache.ToArray()); }
/// <summary> /// Initializes the database parameter. /// </summary> /// <param name="dialect">The dialect.</param> /// <param name="dbParam">The database parameter.</param> /// <param name="columnType">Type of the column.</param> /// <param name="value">The value.</param> public static void InitDbParam(this IOrmLiteDialectProvider dialect, IDbDataParameter dbParam, Type columnType, object value) { var converter = dialect.GetConverterBestMatch(columnType); converter.InitDbParam(dbParam, columnType); dbParam.Value = converter.ToDbValue(columnType, value); }
public static T ConvertToValueTuple <T>(this IDataReader reader, object[] values, IOrmLiteDialectProvider dialectProvider) { var row = typeof(T).CreateInstance(); var typeFields = TypeFields.Get(typeof(T)); values = reader.PopulateValues(values, dialectProvider); for (var i = 0; i < reader.FieldCount; i++) { var itemName = "Item" + (i + 1); var field = typeFields.GetAccessor(itemName); if (field == null) { break; } var fieldType = field.FieldInfo.FieldType; var converter = dialectProvider.GetConverterBestMatch(fieldType); var dbValue = converter.GetValue(reader, i, values); if (dbValue == null) { continue; } if (dbValue.GetType() == fieldType) { field.PublicSetterRef(ref row, dbValue); } else { var fieldValue = converter.FromDbValue(fieldType, dbValue); field.PublicSetterRef(ref row, fieldValue); } } return((T)row); }
internal static T ToScalar <T>(IOrmLiteDialectProvider dialectProvider, IDataReader reader, int columnIndex = 0) { var nullableType = Nullable.GetUnderlyingType(typeof(T)); if (nullableType != null) { object oValue = reader.GetValue(columnIndex); if (oValue == DBNull.Value) { return(default(T)); } } var underlyingType = nullableType ?? typeof(T); if (underlyingType == typeof(object)) { return((T)reader.GetValue(0)); } var converter = dialectProvider.GetConverterBestMatch(underlyingType); if (converter != null) { object oValue = converter.GetValue(reader, columnIndex, null); if (oValue == null) { return(default(T)); } var convertedValue = converter.FromDbValue(underlyingType, oValue); return(convertedValue == null ? default(T) : (T)convertedValue); } return((T)reader.GetValue(0)); }