public string FormatArray(object[] values)
{
if (values == null || values.Length == 0)
throw new FrameworkException("Array must have elements!");
var element = values[0].GetType();
var converter = ConverterFactory.GetSerializationFactory(element);
if (converter != null)
{
var source =
SqlSourceAttribute.FindSource(element)
?? "\"" + element.Namespace + "\".\"" + element.Name + "\"";
var arr = Postgres.PostgresTypedArray.ToArray(values, converter);
return arr + "::" + source + "[]";
}
if (NpgsqlTypes.TypeConverter.CanConvert(element))
{
var val =
Postgres.PostgresTypedArray.ToArray(
values,
v => NpgsqlTypes.TypeConverter.Convert(element, v));
var name = NpgsqlTypes.TypeConverter.GetTypeName(element);
return val + "::" + name + "[]";
}
throw new NotSupportedException("Don't know how to convert array!");
}