Commit a47f23cc authored by Jan Joneš's avatar Jan Joneš Committed by Marc Gravell

Handle PostgreSQL chars correctly (#1326)

* Handle char correctly

* Add PostgreSQL char test

* Test for string before testing for char
parent e6f63507
......@@ -56,6 +56,28 @@ public void TestPostgresqlArrayParameters()
}
}
private class CharTable
{
public int Id { get; set; }
public char CharColumn { get; set; }
}
[FactPostgresql]
public void TestPostgresqlChar()
{
using (var conn = GetOpenNpgsqlConnection())
{
var transaction = conn.BeginTransaction();
conn.Execute("create table chartable (id serial not null, charcolumn \"char\" not null);");
conn.Execute("insert into chartable(charcolumn) values('a');");
var r = conn.Query<CharTable>("select * from chartable");
Assert.Single(r);
Assert.Equal('a', r.Single().CharColumn);
transaction.Rollback();
}
}
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public class FactPostgresqlAttribute : FactAttribute
{
......
......@@ -1877,8 +1877,13 @@ public static char ReadChar(object value)
{
if (value == null || value is DBNull) throw new ArgumentNullException(nameof(value));
var s = value as string;
if (s == null || s.Length != 1) throw new ArgumentException("A single-character was expected", nameof(value));
return s[0];
if (s == null)
{
var c = value as char?;
if (c != null) return c.Value;
}
else if (s.Length == 1) return s[0];
throw new ArgumentException("A single-character was expected", nameof(value));
}
/// <summary>
......@@ -1892,8 +1897,13 @@ public static char ReadChar(object value)
{
if (value == null || value is DBNull) return null;
var s = value as string;
if (s == null || s.Length != 1) throw new ArgumentException("A single-character was expected", nameof(value));
return s[0];
if (s == null)
{
var c = value as char?;
if (c != null) return c;
}
else if (s.Length == 1) return s[0];
throw new ArgumentException("A single-character was expected", nameof(value));
}
/// <summary>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment