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

Commit bf79c41

Browse files
committed
Fix Oracle provider on custom serialized enums, fix custom serialize tests
1 parent 80910c8 commit bf79c41

File tree

2 files changed

+19
-3
lines changed

2 files changed

+19
-3
lines changed

src/ServiceStack.OrmLite.Oracle/OracleOrmLiteDialectProvider.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,18 @@ public override string GetQuotedValue(object value, Type fieldType)
265265
return "'" + s + "'"; // when quoted exception is more clear!
266266
}
267267

268+
if (fieldType.IsEnum)
269+
{
270+
var enumValue = OrmLiteConfig.DialectProvider.StringSerializer.SerializeToString(value);
271+
// Oracle stores empty strings in varchar columns as null so match that behavior here
272+
if (enumValue == null)
273+
return null;
274+
enumValue = GetQuotedValue(enumValue.Trim('"'));
275+
return enumValue == "''"
276+
? "null"
277+
: enumValue;
278+
}
279+
268280
return base.GetQuotedValue(value, fieldType);
269281
}
270282

tests/ServiceStack.OrmLite.Tests/Expression/ExpressionUsingCustomSerializedEnumTests.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ public class ExpressionUsingCustomSerializedEnumTests : ExpressionsTestBase
3838
[TestCase(2)]
3939
public void Can_select_on_custom_default_null_serialized_enum(int index)
4040
{
41+
if (Dialect == Dialect.Oracle) Assert.Ignore("Can't work on Oracle because Oracle does not allow empty strings in a varchar column");
42+
4143
EnumSerializerWithNullDefaults.Configure();
4244

4345
using (var db = OpenDbConnection())
@@ -71,6 +73,8 @@ private static Activity Init(IDbConnection db, int index)
7173
[TestCase(2)]
7274
public void Can_select_on_custom_default_empty_serialized_enum(int index)
7375
{
76+
if (Dialect == Dialect.Oracle) Assert.Ignore("Can't work on Oracle because Oracle does not allow empty strings in a varchar column");
77+
7478
EnumSerializerWithEmptyDefaults.Configure();
7579

7680
using (var db = OpenDbConnection())
@@ -115,7 +119,7 @@ public void Can_select_on_custom_default_null_serialized_nullable_enum(int index
115119
{
116120
var expected = InitNullable(db, index);
117121

118-
var unknownActivities = db.Select<Activity>(
122+
var unknownActivities = db.Select<NullableActivity>(
119123
s => s.ActivityType == expected.ActivityType
120124
&& s.Comment == expected.Comment);
121125

@@ -134,7 +138,7 @@ public void Can_select_on_custom_default_empty_serialized_nullable_enum(int inde
134138
{
135139
var expected = InitNullable(db, index);
136140

137-
var unknownActivities = db.Select<Activity>(
141+
var unknownActivities = db.Select<NullableActivity>(
138142
s => s.ActivityType == expected.ActivityType
139143
&& s.Comment == expected.Comment);
140144

@@ -167,7 +171,7 @@ public void Can_select_on_custom_prefix_serialized_nullable_enum(int index)
167171
{
168172
var expected = InitNullable(db, index);
169173

170-
var unknownActivities = db.Select<Activity>(
174+
var unknownActivities = db.Select<NullableActivity>(
171175
s => s.ActivityType == expected.ActivityType
172176
&& s.Comment == expected.Comment);
173177

0 commit comments

Comments
 (0)