Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit 7cdc19d

Browse files
committed
Add support for PgSql text[]
1 parent 06e32ca commit 7cdc19d

File tree

3 files changed

+55
-10
lines changed

3 files changed

+55
-10
lines changed

src/ServiceStack.OrmLite.PostgreSQL.Tests/PostgreSqlJsonTests.cs

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using NUnit.Framework;
1+
using System;
2+
using NUnit.Framework;
23
using ServiceStack.DataAnnotations;
34
using ServiceStack.OrmLite.Tests;
45
using ServiceStack.Text;
@@ -24,6 +25,18 @@ public class SubType
2425
public string Name { get; set; }
2526
}
2627

28+
public class PgsqlData
29+
{
30+
[PrimaryKey]
31+
public Guid Id { get; set; }
32+
33+
[PgSqlIntArray]
34+
public int[] Ints { get; set; }
35+
36+
[PgSqlTextArray]
37+
public string[] Strings { get; set; }
38+
}
39+
2740

2841
[TestFixture]
2942
public class PostgreSqlJsonTests : OrmLiteTestBase
@@ -65,5 +78,27 @@ public void Can_save_complex_types_as_JSON()
6578
Assert.That(result[0].ComplexTypeJson.SubType.Name, Is.EqualTo("SubType2"));
6679
}
6780
}
81+
82+
[Test]
83+
public void Does_save_PgSqlData()
84+
{
85+
using (var db = OpenDbConnection())
86+
{
87+
db.DropAndCreateTable<PgsqlData>();
88+
89+
var data = new PgsqlData
90+
{
91+
Id = Guid.NewGuid(),
92+
Ints = new[] { 2, 4, 1 },
93+
Strings = new[] { "test string 1", "test string 2" }
94+
};
95+
96+
db.Save(data);
97+
98+
var row = db.Select<PgsqlData>()[0];
99+
Assert.That(row.Ints.EquivalentTo(data.Ints));
100+
Assert.That(row.Strings.EquivalentTo(data.Strings));
101+
}
102+
}
68103
}
69104
}

src/ServiceStack.OrmLite.PostgreSQL/Converters/PostgreSqlArrayConverters.cs

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,24 @@ public override string ToQuotedString(Type fieldType, object value)
1919
}
2020
}
2121

22-
//public class PostgreSqlStringArrayConverter : PostgreSqlStringConverter
23-
//{
24-
// public override string ToQuotedString(Type fieldType, object value)
25-
// {
26-
// var stringArray = (string[])value;
27-
// return this.ToArray(stringArray);
28-
// }
29-
//}
22+
public class PostgreSqlStringArrayConverter : ReferenceTypeConverter
23+
{
24+
public override string ColumnDefinition
25+
{
26+
get { return "text[]"; }
27+
}
28+
29+
public override string ToQuotedString(Type fieldType, object value)
30+
{
31+
var stringArray = (string[])value;
32+
return this.ToArray(stringArray);
33+
}
34+
35+
public override object FromDbValue(Type fieldType, object value)
36+
{
37+
return value;
38+
}
39+
}
3040

3141
public class PostgreSqlIntArrayConverter : NativeValueOrmLiteConverter
3242
{

src/ServiceStack.OrmLite.PostgreSQL/PostgreSQLDialectProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public PostgreSqlDialectProvider()
5252
RegisterConverter<byte[]>(new PostrgreSqlByteArrayConverter());
5353

5454
//TODO provide support for pgsql native datastructures:
55-
//RegisterConverter<string[]>(new PostgreSqlStringArrayConverter());
55+
RegisterConverter<string[]>(new PostgreSqlStringArrayConverter());
5656
RegisterConverter<int[]>(new PostgreSqlIntArrayConverter());
5757
RegisterConverter<long[]>(new PostgreSqlLongArrayConverter());
5858

0 commit comments

Comments
 (0)