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

Commit dbb5948

Browse files
committed
Merge pull request #447 from yuinlin/master
fixes for oracle provider
2 parents 07f34f1 + 26088a6 commit dbb5948

File tree

4 files changed

+33
-16
lines changed

4 files changed

+33
-16
lines changed

src/ServiceStack.OrmLite/Expressions/ParameterizedSqlExpression.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ protected override void VisitFilter(string operand, object originalLeft, object
5959
ConvertToPlaceholderAndParameter(ref right);
6060
}
6161

62-
protected virtual void OnVisitMemberType(Type modelType)
62+
protected override void OnVisitMemberType(Type modelType)
6363
{
6464
var tableDef = modelType.GetModelDefinition();
6565
if (tableDef != null)

tests/ServiceStack.OrmLite.Tests/CaptureSqlFilterTests.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,8 @@ public void Can_capture_Select_APIs()
6969
i++; db.Select<Person>(x => x.Age > 40);
7070

7171
Assert.That(captured.SqlStatements.Last().NormalizeSql(),
72-
Is.EqualTo("select id, firstname, lastname, age from person where (age > 40)"));
72+
Is.EqualTo("select id, firstname, lastname, age from person where (age > 40)").
73+
Or.EqualTo("select id, firstname, lastname, age from person where (age > @0)"));
7374

7475
i++; db.Select<Person>(q => q.Where(x => x.Age > 40));
7576
i++; db.Select(db.From<Person>().Where(x => x.Age > 40));
@@ -120,7 +121,9 @@ public void Can_capture_all_Single_Apis()
120121
Is.EqualTo("select id, firstname, lastname, age from person where (age = 42) limit 1").
121122
Or.EqualTo("select top 1 id, firstname, lastname, age from person where (age = 42)").
122123
Or.EqualTo("select id, firstname, lastname, age from person where (age = 42) order by 1 offset 0 rows fetch next 1 rows only"). //VistaDB
123-
Or.EqualTo("select * from (\r select ssormlite1.*, rownum rnum from (\r select id, firstname, lastname, age from person where (age = 42) order by person.id) ssormlite1\r where rownum <= 0 + 1) ssormlite2 where ssormlite2.rnum > 0")); //Oracle
124+
Or.EqualTo("select * from (\r select ssormlite1.*, rownum rnum from (\r select id, firstname, lastname, age from person where (age = 42) order by person.id) ssormlite1\r where rownum <= 0 + 1) ssormlite2 where ssormlite2.rnum > 0"). //Oracle
125+
Or.EqualTo("select * from (\r select ssormlite1.*, rownum rnum from (\r select id, firstname, lastname, age from person where (age = @0) order by person.id) ssormlite1\r where rownum <= 0 + 1) ssormlite2 where ssormlite2.rnum > 0") //Oracle with UseParameterizeSqlExpressions
126+
);
124127

125128
i++; db.ExistsFmt<Person>("Age = {0}", 42);
126129
i++; db.Single(db.From<Person>().Where(x => x.Age == 42));

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

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,17 @@ public class LetterStat
3535

3636
public class SqlExpressionTests : ExpressionsTestBase
3737
{
38+
private int letterFrequenceMaxId;
39+
private int letterFrequencyMinId;
40+
private int letterFrequencySumId;
41+
42+
private void GetIdStats(IDbConnection db)
43+
{
44+
letterFrequenceMaxId = db.Scalar<int>(db.From<LetterFrequency>().Select(Sql.Max("Id")));
45+
letterFrequencyMinId = db.Scalar<int>(db.From<LetterFrequency>().Select(Sql.Min("Id")));
46+
letterFrequencySumId = db.Scalar<int>(db.From<LetterFrequency>().Select(Sql.Sum("Id")));
47+
}
48+
3849
public static void InitLetters(IDbConnection db)
3950
{
4051
db.DropAndCreateTable<LetterFrequency>();
@@ -96,6 +107,7 @@ public void Can_Select_as_List_Object()
96107
using (var db = OpenDbConnection())
97108
{
98109
InitLetters(db);
110+
GetIdStats(db);
99111

100112
var query = db.From<LetterFrequency>()
101113
.Select("COUNT(*), MAX(Id), MIN(Id), Sum(Id)");
@@ -107,10 +119,10 @@ public void Can_Select_as_List_Object()
107119
Assert.That(results.Count, Is.EqualTo(1));
108120

109121
var result = results[0];
110-
Assert.That(result[0], Is.EqualTo(10));
111-
Assert.That(result[1], Is.EqualTo(10));
112-
Assert.That(result[2], Is.EqualTo(1));
113-
Assert.That(result[3], Is.EqualTo(55));
122+
Assert.That(Convert.ToInt64(result[0]), Is.EqualTo(10));
123+
Assert.That(Convert.ToInt64(result[1]), Is.EqualTo(letterFrequenceMaxId));
124+
Assert.That(Convert.ToInt64(result[2]), Is.EqualTo(letterFrequencyMinId));
125+
Assert.That(Convert.ToInt64(result[3]), Is.EqualTo(letterFrequencySumId));
114126

115127
results.PrintDump();
116128
}
@@ -122,9 +134,10 @@ public void Can_Select_as_Dictionary_Object()
122134
using (var db = OpenDbConnection())
123135
{
124136
InitLetters(db);
137+
GetIdStats(db);
125138

126139
var query = db.From<LetterFrequency>()
127-
.Select("COUNT(*) Count, MAX(Id) Max, MIN(Id) Min, Sum(Id) Sum");
140+
.Select("COUNT(*) \"Count\", MAX(Id) \"Max\", MIN(Id) \"Min\", Sum(Id) \"Sum\"");
128141

129142
query.ToSelectStatement().Print();
130143

@@ -133,10 +146,10 @@ public void Can_Select_as_Dictionary_Object()
133146
Assert.That(results.Count, Is.EqualTo(1));
134147

135148
var result = results[0];
136-
Assert.That(result["Count"], Is.EqualTo(10));
137-
Assert.That(result["Max"], Is.EqualTo(10));
138-
Assert.That(result["Min"], Is.EqualTo(1));
139-
Assert.That(result["Sum"], Is.EqualTo(55));
149+
Assert.That(Convert.ToInt64(result["Count"]), Is.EqualTo(10));
150+
Assert.That(Convert.ToInt64(result["Max"]), Is.EqualTo(letterFrequenceMaxId));
151+
Assert.That(Convert.ToInt64(result["Min"]), Is.EqualTo(letterFrequencyMinId));
152+
Assert.That(Convert.ToInt64(result["Sum"]), Is.EqualTo(letterFrequencySumId));
140153

141154
results.PrintDump();
142155
}

tests/ServiceStack.OrmLite.Tests/OrmLiteExecFilterTests.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System.Linq;
44
using NUnit.Framework;
55
using ServiceStack.Common.Tests.Models;
6+
using ServiceStack.OrmLite.Tests.Expression;
67
using ServiceStack.OrmLite.Tests.Shared;
78
using ServiceStack.Text;
89

@@ -120,11 +121,11 @@ public void Does_use_StringFilter_on_null_strings()
120121

121122
using (var db = OpenDbConnection())
122123
{
123-
db.DropAndCreateTable<Poco>();
124+
db.DropAndCreateTable<ModelWithIdAndName>();
125+
126+
db.Insert(new ModelWithIdAndName { Name = null });
127+
var row = db.Select<ModelWithIdAndName>().First();
124128

125-
db.Insert(new Poco { Name = null });
126-
var row = db.Select<Poco>().First();
127-
128129
Assert.That(row.Name, Is.EqualTo("NULL"));
129130
}
130131

0 commit comments

Comments
 (0)