public static PgValue ConvertToPgValue(KDPgValueType type, object rawValue) { if (rawValue == null) { return(PgValue.Null); } switch (type) { case KDPgValueTypeString _: case KDPgValueTypeInteger _: case KDPgValueTypeInteger64 _: case KDPgValueTypeReal _: case KDPgValueTypeDoublePrecision _: case KDPgValueTypeBoolean _: case KDPgValueTypeTime _: case KDPgValueTypeDateTime _: case KDPgValueTypeInterval _: case KDPgValueTypeUUID _: case KDPgValueTypeDecimal _: case KDPgValueTypeBinary _: return(new PgValue(rawValue, type)); case KDPgValueTypeEnum enumType: string v = enumType.EnumEntry.EnumToNameFunc(rawValue); return(new PgValue(v, type)); case KDPgValueTypeDate _: return(new PgValue(((DateTime)rawValue).Date, type)); case KDPgValueTypeArray arrayType: var objs = arrayType.CreateToPgList(); foreach (var rawItem in (IEnumerable)rawValue) { objs.Add(ConvertToPgValue(arrayType.ItemType, rawItem).Value); } return(new PgValue(objs, type)); case KDPgValueTypeJson jsonType: if (jsonType.BackingType == null) { return(new PgValue(((JToken)rawValue).ToString(Formatting.None), KDPgValueTypeInstances.Json)); } else { return(new PgValue(JsonConvert.SerializeObject(rawValue, Formatting.None, JsonSerializerSettings), KDPgValueTypeInstances.Json)); } default: throw new Exception($"ConvertToPgValue: Type {type} not implemented"); } }
public static object ConvertFromRawSqlValue(KDPgValueType type, object rawSqlValue) { if (rawSqlValue == null) { return(null); } switch (type) { case KDPgValueTypeString _: case KDPgValueTypeInteger _: case KDPgValueTypeInteger64 _: case KDPgValueTypeReal _: case KDPgValueTypeDoublePrecision _: case KDPgValueTypeBoolean _: case KDPgValueTypeDate _: case KDPgValueTypeTime _: case KDPgValueTypeDateTime _: case KDPgValueTypeInterval _: case KDPgValueTypeUUID _: case KDPgValueTypeDecimal _: case KDPgValueTypeBinary _: return(rawSqlValue); case KDPgValueTypeArray arrayType: var rawItems = (IList)rawSqlValue; var outputList = ReflectionUtils.CreateListInstance(arrayType.CSharpType); foreach (var rawItem in rawItems) { outputList.Add(ConvertFromRawSqlValue(arrayType.ItemType, rawItem)); } return(outputList); case KDPgValueTypeEnum enumType: return(enumType.EnumEntry.NameToEnumFunc((string)rawSqlValue)); case KDPgValueTypeJson jsonType: if (jsonType.BackingType == null) { return(JToken.Parse((string)rawSqlValue)); } else { return(JsonConvert.DeserializeObject((string)rawSqlValue, jsonType.BackingType, JsonSerializerSettings)); } default: throw new Exception($"ConvertFromNpgsql: Type {type} not implemented"); } }
public KDPgValueTypeArray(KDPgValueType itemType, Type nativeItemType) { CSharpType = nativeItemType; ItemType = itemType; }