Skip to content

Commit 28da710

Browse files
committed
Fix for issue ThatRendle#163
1 parent 8a6d905 commit 28da710

File tree

7 files changed

+113
-4
lines changed

7 files changed

+113
-4
lines changed

Simple.Data.SqlServer/DbTypeLookup.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ internal static class DbTypeLookup
4242
{"nchar", SqlDbType.NChar},
4343
{"xml", SqlDbType.Xml},
4444
{"image", SqlDbType.Image},
45+
{"geography", SqlDbType.Udt},
46+
{"geometry", SqlDbType.Udt},
47+
{"hierarchyid", SqlDbType.Udt},
4548
};
4649

4750
public static SqlDbType GetSqlDbType(string typeName)

Simple.Data.SqlServer/SqlSchemaProvider.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,9 @@ public IEnumerable<Column> GetColumns(Table table)
4141
return cols.AsEnumerable().Select(row => SchemaRowToColumn(table, row));
4242
}
4343

44-
45-
4644
private static Column SchemaRowToColumn(Table table, DataRow row)
4745
{
48-
var sqlDbType = DbTypeFromInformationSchemaTypeName((string)row["type_name"]);
46+
var sqlDbType = row.IsNull("type_name") ? SqlDbType.Udt : DbTypeFromInformationSchemaTypeName((string)row["type_name"]);
4947
var size = (short)row["max_length"];
5048
switch (sqlDbType)
5149
{
@@ -156,7 +154,8 @@ private DataTable GetColumnsDataTable(Table table)
156154
{
157155
var columnSelect =
158156
string.Format(
159-
"SELECT name, is_identity, type_name(system_type_id) as type_name, max_length from sys.columns where object_id = object_id('{0}.{1}', 'TABLE') or object_id = object_id('{0}.{1}', 'VIEW') order by column_id",
157+
@"SELECT name, is_identity, type_name(system_type_id) as type_name, max_length from sys.columns
158+
where object_id = object_id('{0}.{1}', 'TABLE') or object_id = object_id('{0}.{1}', 'VIEW') order by column_id",
160159
table.Schema, table.ActualName);
161160
return SelectToDataTable(columnSelect);
162161
}

Simple.Data.SqlTest/FindTests.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,5 +212,14 @@ public void ExpressionAndWithClauseShouldCastToStaticTypeWithCollection()
212212
Assert.AreEqual(1, actual.Orders.Single().OrderId);
213213
Assert.AreEqual(new DateTime(2010, 10, 10), actual.Orders.Single().OrderDate);
214214
}
215+
216+
[Test]
217+
public void SelectClauseShouldRestrictColumn()
218+
{
219+
var db = DatabaseHelper.Open();
220+
var actual = db.Customers.Select(db.Customers.Name).FindByCustomerId(1).ToScalar();
221+
Assert.AreEqual("Test", actual);
222+
223+
}
215224
}
216225
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
6+
namespace Simple.Data.SqlTest
7+
{
8+
using NUnit.Framework;
9+
10+
[TestFixture]
11+
public class FunctionTest
12+
{
13+
[Test]
14+
public void CoalesceFunctionWorks()
15+
{
16+
var db = DatabaseHelper.Open();
17+
var date = new DateTime(1900, 1, 1);
18+
List<dynamic> q = db.Orders.Query(db.Orders.OrderDate.Coalesce(date) < DateTime.Now).ToList();
19+
Assert.AreNotEqual(0, q.Count);
20+
}
21+
}
22+
}

Simple.Data.SqlTest/Resources/DatabaseReset.txt

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,12 @@ BEGIN
6262
DROP TABLE [dbo].[DeleteTest]
6363
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[DecimalTest]') AND type in (N'U'))
6464
DROP TABLE [dbo].[DecimalTest]
65+
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[GeographyTest]') AND type in (N'U'))
66+
DROP TABLE [dbo].[GeographyTest]
67+
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[GeometryTest]') AND type in (N'U'))
68+
DROP TABLE [dbo].[GeometryTest]
69+
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[HierarchyIdTest]') AND type in (N'U'))
70+
DROP TABLE [dbo].[HierarchyIdTest]
6571

6672
CREATE TABLE [dbo].[Users] (
6773
[Id] INT IDENTITY (1, 1) NOT NULL,
@@ -166,6 +172,33 @@ BEGIN
166172
[Value] [decimal](20,6) NOT NULL
167173
)
168174

175+
CREATE TABLE [dbo].[GeographyTest](
176+
[Id] [int] IDENTITY(1,1) NOT NULL,
177+
[Description] [nvarchar](50) NOT NULL,
178+
[Place] [geography] NULL,
179+
CONSTRAINT [PK_GeographyTest] PRIMARY KEY CLUSTERED
180+
(
181+
[Id] ASC
182+
))
183+
184+
CREATE TABLE [dbo].[GeometryTest](
185+
[Id] [int] IDENTITY(1,1) NOT NULL,
186+
[Description] [nvarchar](50) NOT NULL,
187+
[Place] [geography] NULL,
188+
CONSTRAINT [PK_GeometryTest] PRIMARY KEY CLUSTERED
189+
(
190+
[Id] ASC
191+
))
192+
193+
CREATE TABLE [dbo].[HierarchyIdTest](
194+
[Id] [int] IDENTITY(1,1) NOT NULL,
195+
[Description] [nvarchar](50) NOT NULL,
196+
[Place] [geography] NULL,
197+
CONSTRAINT [PK_HierarchyIdTest] PRIMARY KEY CLUSTERED
198+
(
199+
[Id] ASC
200+
))
201+
169202
BEGIN TRANSACTION
170203
SET IDENTITY_INSERT [dbo].[Customers] ON
171204
INSERT INTO [dbo].[Customers] ([CustomerId], [Name], [Address]) VALUES (1, N'Test', N'100 Road')

Simple.Data.SqlTest/Simple.Data.SqlTest.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@
6565
<Compile Include="ConversionTests.cs" />
6666
<Compile Include="DatabaseHelper.cs" />
6767
<Compile Include="DatabaseOpenerTests.cs" />
68+
<Compile Include="FunctionTest.cs" />
69+
<Compile Include="WeirdTypeTest.cs" />
6870
<Compile Include="SchemaTests\DataTypeTests.cs" />
6971
<Compile Include="DbImage.cs" />
7072
<Compile Include="DeleteTest.cs" />
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
6+
namespace Simple.Data.SqlTest
7+
{
8+
using NUnit.Framework;
9+
10+
[TestFixture]
11+
public class WeirdTypeTest
12+
{
13+
[TestFixtureSetUp]
14+
public void Setup()
15+
{
16+
DatabaseHelper.Reset();
17+
}
18+
19+
[Test]
20+
public void TestInsertOnGeography()
21+
{
22+
var db = DatabaseHelper.Open();
23+
var actual = db.GeographyTest.Insert(Description: "Test");
24+
Assert.IsNotNull(actual);
25+
}
26+
[Test]
27+
public void TestInsertOnGeometry()
28+
{
29+
var db = DatabaseHelper.Open();
30+
var actual = db.GeometryTest.Insert(Description: "Test");
31+
Assert.IsNotNull(actual);
32+
}
33+
[Test]
34+
public void TestInsertOnHierarchyId()
35+
{
36+
var db = DatabaseHelper.Open();
37+
var actual = db.HierarchyIdTest.Insert(Description: "Test");
38+
Assert.IsNotNull(actual);
39+
}
40+
}
41+
}

0 commit comments

Comments
 (0)