Skip to content

Commit 6a703b2

Browse files
committed
Fix for issue ThatRendle#190
1 parent efd1b34 commit 6a703b2

2 files changed

Lines changed: 22 additions & 9 deletions

File tree

Simple.Data.BehaviourTest/SchemaQualifiedTableTest.cs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,14 @@ public class SchemaQualifiedTableTest
1515
static Database CreateDatabase(MockDatabase mockDatabase)
1616
{
1717
var mockSchemaProvider = new MockSchemaProvider();
18-
mockSchemaProvider.SetTables(new[] { "foo", "Users", "BASE TABLE" });
18+
mockSchemaProvider.SetTables(new[] {"foo", "Users", "BASE TABLE"},
19+
new[] {"foo.bar", "Test", "BASE TABLE"});
1920
mockSchemaProvider.SetColumns(new[] { "foo", "Users", "Id" },
2021
new[] { "foo", "Users", "Name" },
2122
new[] { "foo", "Users", "Password" },
22-
new[] { "foo", "Users", "Age" });
23+
new[] { "foo", "Users", "Age" },
24+
new[] { "foo.bar", "Test", "Id"},
25+
new[] { "foo.bar", "Test", "Value"});
2326
mockSchemaProvider.SetPrimaryKeys(new object[] { "foo", "Users", "Id", 0 });
2427
return new Database(new AdoAdapter(new MockConnectionProvider(new MockDbConnection(mockDatabase), mockSchemaProvider)));
2528
}
@@ -243,5 +246,15 @@ public void TestInsertOnTable()
243246
Assert.AreEqual("Phil", mockDatabase.Parameters[0]);
244247
Assert.AreEqual(42, mockDatabase.Parameters[1]);
245248
}
249+
250+
[Test]
251+
public void TestFindWithDotInSchemaName()
252+
{
253+
var mockDatabase = new MockDatabase();
254+
dynamic database = CreateDatabase(mockDatabase);
255+
database.foobar.Test.Find(database.foobar.Test.Id == 1);
256+
Assert.AreEqual("select [foo.bar].[Test].[Id], [foo.bar].[Test].[Value] from [foo.bar].[Test] where [foo.bar].[Test].[id] = @p1".ToLowerInvariant(), mockDatabase.Sql.ToLowerInvariant());
257+
Assert.AreEqual(1, mockDatabase.Parameters[0]);
258+
}
246259
}
247260
}

Simple.Data.SqlServer/SqlSchemaProvider.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -156,12 +156,11 @@ public Type DataTypeToClrType(string dataType)
156156

157157
private DataTable GetColumnsDataTable(Table table)
158158
{
159-
var columnSelect =
160-
string.Format(
161-
@"SELECT name, is_identity, type_name(system_type_id) as type_name, max_length from sys.columns
162-
where object_id = object_id('{0}.{1}', 'TABLE') or object_id = object_id('{0}.{1}', 'VIEW') order by column_id",
163-
table.Schema, table.ActualName);
164-
return SelectToDataTable(columnSelect);
159+
const string columnSelect = @"SELECT name, is_identity, type_name(system_type_id) as type_name, max_length from sys.columns
160+
where object_id = object_id(@tableName, 'TABLE') or object_id = object_id(@tableName, 'VIEW') order by column_id";
161+
var @tableName = new SqlParameter("@tableName", SqlDbType.NVarChar, 128);
162+
@tableName.Value = string.Format("[{0}].[{1}]", table.Schema, table.ActualName);
163+
return SelectToDataTable(columnSelect, @tableName);
165164
}
166165

167166
private DataTable GetPrimaryKeys()
@@ -188,13 +187,14 @@ private EnumerableRowCollection<DataRow> GetForeignKeys(string tableName)
188187
row => row["TABLE_NAME"].ToString().Equals(tableName, StringComparison.InvariantCultureIgnoreCase));
189188
}
190189

191-
private DataTable SelectToDataTable(string sql)
190+
private DataTable SelectToDataTable(string sql, params SqlParameter[] parameters)
192191
{
193192
var dataTable = new DataTable();
194193
using (var cn = ConnectionProvider.CreateConnection() as SqlConnection)
195194
{
196195
using (var adapter = new SqlDataAdapter(sql, cn))
197196
{
197+
adapter.SelectCommand.Parameters.AddRange(parameters);
198198
adapter.Fill(dataTable);
199199
}
200200

0 commit comments

Comments
 (0)