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

Commit 4201829

Browse files
committed
Fixed PostgreSqlArrayTests - all PostgreSQL tests now pass
1 parent f0174c5 commit 4201829

File tree

3 files changed

+31
-26
lines changed

3 files changed

+31
-26
lines changed

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

Lines changed: 5 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -35,22 +35,14 @@ public void Can_save_integer_array()
3535
var row = new ModelWithArrayType
3636
{
3737
Id = 1,
38-
IntegerArray = new []{1,2,3}
38+
IntegerArray = new[] {1, 2, 3}
3939
};
40-
41-
try
42-
{
43-
db.Insert(row);
44-
}
45-
catch (Exception e)
46-
{
47-
e.Message.Print();
48-
}
40+
db.Insert(row);
4941

5042
var result = db.Select<ModelWithArrayType>();
5143

5244
Assert.That(result.Count, Is.EqualTo(1));
53-
Assert.That(result[0].IntegerArray.Count(), Is.EqualTo(3));
45+
Assert.That(result[0].IntegerArray, Is.EqualTo(new[] { 1, 2, 3 }));
5446
}
5547
}
5648

@@ -68,20 +60,12 @@ public void Can_save_big_integer_array()
6860
Id = 2,
6961
BigIntegerArray = new long[] { 1, 2, 3, 4 }
7062
};
71-
72-
try
73-
{
74-
db.Insert(row);
75-
}
76-
catch (Exception e)
77-
{
78-
e.Message.Print();
79-
}
63+
db.Insert(row);
8064

8165
var result = db.Select<ModelWithArrayType>();
8266

8367
Assert.That(result.Count, Is.EqualTo(1));
84-
Assert.That(result[0].BigIntegerArray.Count(), Is.EqualTo(4));
68+
Assert.That(result[0].BigIntegerArray, Is.EqualTo(new[] { 1, 2, 3, 4 }));
8569
}
8670
}
8771
}

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

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Data;
23
using System.Text;
34
using ServiceStack.OrmLite.Converters;
45
using ServiceStack.Text;
@@ -27,17 +28,37 @@ public override string ToQuotedString(Type fieldType, object value)
2728
// }
2829
//}
2930

30-
public class PostgreSqlIntArrayConverter : PostgreSqlStringConverter
31+
public class PostgreSqlIntArrayConverter : NativeValueOrmLiteConverter
3132
{
33+
public override string ColumnDefinition
34+
{
35+
get { return "integer[]"; }
36+
}
37+
38+
public override DbType DbType
39+
{
40+
get { return DbType.Object; }
41+
}
42+
3243
public override string ToQuotedString(Type fieldType, object value)
3344
{
3445
var integerArray = (int[])value;
3546
return this.ToArray(integerArray);
3647
}
3748
}
3849

39-
public class PostgreSqlLongArrayConverter : PostgreSqlStringConverter
50+
public class PostgreSqlLongArrayConverter : NativeValueOrmLiteConverter
4051
{
52+
public override string ColumnDefinition
53+
{
54+
get { return "bigint[]"; }
55+
}
56+
57+
public override DbType DbType
58+
{
59+
get { return DbType.Object; }
60+
}
61+
4162
public override string ToQuotedString(Type fieldType, object value)
4263
{
4364
var longArray = (long[])value;
@@ -74,7 +95,7 @@ public static string ToArray<T>(this IOrmLiteConverter converter, T[] source)
7495
if (values.Length > 0) values.Append(",");
7596
values.Append(converter.DialectProvider.GetQuotedValue(value, typeof(T)));
7697
}
77-
return "ARRAY[" + StringBuilderCache.ReturnAndFree(values) + "]";
98+
return "{" + StringBuilderCache.ReturnAndFree(values) + "}";
7899
}
79100
}
80101
}

src/ServiceStack.OrmLite.PostgreSQL/PostgreSQLDialectProvider.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ public PostgreSqlDialectProvider()
5353

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

5959
this.Variables = new Dictionary<string, string>
6060
{

0 commit comments

Comments
 (0)