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

Commit d1c2d25

Browse files
committed
Fix Oracle provider problems pointed out by recent changes.
1 parent dedf2e4 commit d1c2d25

File tree

4 files changed

+59
-12
lines changed

4 files changed

+59
-12
lines changed

src/ServiceStack.OrmLite.Oracle/OracleOrmLiteDialectProvider.cs

Lines changed: 43 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,15 @@ public class OracleOrmLiteDialectProvider : OrmLiteDialectProviderBase<OracleOrm
1616
public const string OdpProvider = "Oracle.DataAccess.Client";
1717
public const string MicrosoftProvider = "System.Data.OracleClient";
1818

19-
protected readonly List<string> ReservedNames = new List<string> {
20-
"USER","ORDER","PASSWORD", "ACTIVE","LEFT","DOUBLE", "FLOAT", "DECIMAL","STRING", "DATE",
21-
"DATETIME", "TYPE","TIMESTAMP", "COMMENT"
19+
protected readonly List<string> ReservedNames = new List<string>
20+
{
21+
"USER", "ORDER", "PASSWORD", "ACTIVE", "LEFT", "DOUBLE", "FLOAT", "DECIMAL", "STRING", "DATE",
22+
"DATETIME", "TYPE","TIMESTAMP", "COMMENT", "LONG"
2223
};
2324

2425
protected readonly List<string> ReservedParameterNames = new List<string>
2526
{
26-
"COMMENT", "DATE", "DECIMAL", "FLOAT", "ORDER", "USER"
27+
"COMMENT", "DATE", "DECIMAL", "FLOAT", "ORDER", "USER", "LONG"
2728
};
2829

2930
protected const int MaxNameLength = 30;
@@ -177,6 +178,42 @@ public override object ConvertDbValue(object value, Type type)
177178
return base.ConvertDbValue(value, type);
178179
}
179180

181+
public override GetValueDelegate GetReaderGuidDelegate(IDataRecord reader)
182+
{
183+
if (CompactGuid)
184+
{
185+
return i =>
186+
{
187+
var guid = reader.GetValue(i);
188+
return new Guid((byte[])guid);
189+
};
190+
}
191+
return i =>
192+
{
193+
var guid = reader.GetValue(i);
194+
return new Guid(guid.ToString());
195+
};
196+
}
197+
198+
public override GetValueDelegate GetReaderNullableGuidDelegate(IDataRecord reader)
199+
{
200+
if (CompactGuid)
201+
{
202+
return i =>
203+
{
204+
if (reader.IsDBNull(i)) return null;
205+
var guid = reader.GetValue(i);
206+
return new Guid((Byte[])guid);
207+
};
208+
}
209+
return i =>
210+
{
211+
if (reader.IsDBNull(i)) return null;
212+
var guid = reader.GetValue(i);
213+
return new Guid(guid.ToString());
214+
};
215+
}
216+
180217
public override string GetQuotedValue(object value, Type fieldType)
181218
{
182219
if (value == null) return "NULL";
@@ -740,12 +777,9 @@ public override string GetColumnDefinition (string fieldName, Type fieldType,
740777
sql.AppendFormat(DefaultValueFormat, defaultValue);
741778
}
742779

743-
if (!isNullable)
744-
{
745-
sql.Append(" NOT NULL");
746-
}
780+
sql.Append(isNullable ? " NULL" : " NOT NULL");
747781

748-
return sql.ToString();
782+
return sql.ToString();
749783
}
750784

751785

src/ServiceStack.OrmLite/IOrmLiteDialectProvider.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ public interface IOrmLiteDialectProvider
4141

4242
object ConvertDbValue(object value, Type type);
4343

44+
GetValueDelegate GetReaderGuidDelegate(IDataRecord reader);
45+
GetValueDelegate GetReaderNullableGuidDelegate(IDataRecord reader);
46+
4447
string GetQuotedValue(object value, Type fieldType);
4548

4649
IDbConnection CreateConnection(string filePath, Dictionary<string, string> options);

src/ServiceStack.OrmLite/OrmLiteDialectProviderBase.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,16 @@ public virtual object ConvertDbValue(object value, Type type)
368368
}
369369
}
370370

371+
public virtual GetValueDelegate GetReaderGuidDelegate(IDataRecord reader)
372+
{
373+
return i => reader.GetGuid(i);
374+
}
375+
376+
public virtual GetValueDelegate GetReaderNullableGuidDelegate(IDataRecord reader)
377+
{
378+
return i => reader.IsDBNull(i) ? null : (Guid?)reader.GetGuid(i);
379+
}
380+
371381
public virtual string GetQuotedValue(object value, Type fieldType)
372382
{
373383
if (value == null) return "NULL";

src/ServiceStack.OrmLite/OrmLiteReadExtensions.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,8 @@ public static GetValueDelegate GetValueFn<T>(IDataRecord reader)
114114
return i => reader.GetDateTime(i);
115115
}
116116

117-
if (typeof(T) == typeof(Guid))
118-
return i => reader.GetGuid(i);
117+
if (typeof (T) == typeof(Guid))
118+
return OrmLiteConfig.DialectProvider.GetReaderGuidDelegate(reader);
119119
}
120120
else
121121
{
@@ -143,7 +143,7 @@ public static GetValueDelegate GetValueFn<T>(IDataRecord reader)
143143
}
144144

145145
if (typeof(T) == typeof(Guid))
146-
return i => reader.IsDBNull(i) ? null : (Guid?)reader.GetGuid(i);
146+
return OrmLiteConfig.DialectProvider.GetReaderNullableGuidDelegate(reader);
147147
}
148148

149149
return reader.GetValue;

0 commit comments

Comments
 (0)