Exemplo n.º 1
0
        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");
            }
        }
Exemplo n.º 2
0
        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");
            }
        }
Exemplo n.º 3
0
 public KDPgValueTypeArray(KDPgValueType itemType, Type nativeItemType)
 {
     CSharpType = nativeItemType;
     ItemType   = itemType;
 }