Skip to content

Commit

Permalink
105: Allow Adapter to specify Default Schema
Browse files Browse the repository at this point in the history
  • Loading branch information
richardhopton committed Nov 1, 2011
1 parent 3783604 commit 6abd8c2
Show file tree
Hide file tree
Showing 10 changed files with 41 additions and 19 deletions.
2 changes: 1 addition & 1 deletion Simple.Data.Ado/AdoAdapter.IAdapterWithFunctions.cs
Expand Up @@ -18,7 +18,7 @@ public bool IsValidFunction(string functionName)

public IEnumerable<ResultSet> Execute(string functionName, IDictionary<string, object> parameters)
{
var executor = _executors.GetOrAdd(functionName, f => _connectionProvider.GetProcedureExecutor(this, ObjectName.Parse(f)));
var executor = _executors.GetOrAdd(functionName, f => _connectionProvider.GetProcedureExecutor(this, _schema.BuildObjectName(f)));
return executor.Execute(parameters);
}
}
Expand Down
12 changes: 7 additions & 5 deletions Simple.Data.Ado/AdoAdapterFinder.cs
Expand Up @@ -5,6 +5,7 @@
using System.Data.Common;
using System.Linq;
using System.Text;
using Simple.Data.Ado.Schema;

namespace Simple.Data.Ado
{
Expand All @@ -15,6 +16,7 @@ class AdoAdapterFinder
private readonly AdoAdapter _adapter;
private readonly IDbTransaction _transaction;
private readonly IDbConnection _connection;
private readonly DatabaseSchema _schema;

public AdoAdapterFinder(AdoAdapter adapter) : this(adapter, null)
{
Expand All @@ -34,7 +36,7 @@ public AdoAdapterFinder(AdoAdapter adapter, IDbTransaction transaction)

public IDictionary<string, object> FindOne(string tableName, SimpleExpression criteria)
{
if (criteria == null) return FindAll(ObjectName.Parse(tableName)).FirstOrDefault();
if (criteria == null) return FindAll(_adapter.GetSchema().BuildObjectName(tableName)).FirstOrDefault();
var commandTemplate = GetCommandTemplate(tableName, criteria);
return ExecuteSingletonQuery(commandTemplate, criteria.GetValues());
}
Expand All @@ -43,15 +45,15 @@ public AdoAdapterFinder(AdoAdapter adapter, IDbTransaction transaction)
{
if (criteria == null)
{
return _ => FindAll(ObjectName.Parse(tableName)).FirstOrDefault();
return _ => FindAll(_adapter.GetSchema().BuildObjectName(tableName)).FirstOrDefault();
}
var commandTemplate = GetCommandTemplate(tableName, criteria);
return args => ExecuteSingletonQuery(commandTemplate, args);
}

public IEnumerable<IDictionary<string, object>> Find(string tableName, SimpleExpression criteria)
{
if (criteria == null) return FindAll(ObjectName.Parse(tableName));
if (criteria == null) return FindAll(_adapter.GetSchema().BuildObjectName(tableName));
var commandTemplate = GetCommandTemplate(tableName, criteria);
return ExecuteQuery(commandTemplate, criteria.GetValues());
}
Expand All @@ -65,8 +67,8 @@ private CommandTemplate GetCommandTemplate(string tableName, SimpleExpression cr
return tableCommandCache.GetOrAdd(hash,
_ =>
new FindHelper(_adapter.GetSchema())
.GetFindByCommand(ObjectName.Parse(tableName), criteria)
.GetCommandTemplate(_adapter.GetSchema().FindTable(ObjectName.Parse(tableName))));
.GetFindByCommand(_adapter.GetSchema().BuildObjectName(tableName), criteria)
.GetCommandTemplate(_adapter.GetSchema().FindTable(_adapter.GetSchema().BuildObjectName(tableName))));
}

private IEnumerable<IDictionary<string, object>> FindAll(ObjectName tableName)
Expand Down
2 changes: 1 addition & 1 deletion Simple.Data.Ado/Joiner.cs
Expand Up @@ -67,7 +67,7 @@ public IEnumerable<string> GetJoinClauses(IEnumerable<JoinClause> joins, IComman
{
var builder = new StringBuilder(JoinKeyword);
builder.AppendFormat(" JOIN {0}{1} ON ({2})",
_schema.FindTable(ObjectName.Parse(join.Table.ToString())).QualifiedName,
_schema.FindTable(_schema.BuildObjectName(join.Table.ToString())).QualifiedName,
string.IsNullOrWhiteSpace(join.Table.Alias) ? string.Empty : " " + _schema.QuoteObjectName(join.Table.Alias),
expressionFormatter.Format(join.JoinExpression));
yield return builder.ToString().Trim();
Expand Down
10 changes: 1 addition & 9 deletions Simple.Data.Ado/ObjectName.cs
Expand Up @@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Simple.Data.Ado.Schema;

namespace Simple.Data.Ado
{
Expand All @@ -24,15 +25,6 @@ public ObjectName(string schema, string name)
_name = name;
}

public static ObjectName Parse(string text)
{
if (text == null) throw new ArgumentNullException("text");
if (!text.Contains('.')) return new ObjectName(Properties.Settings.Default.DefaultSchema ?? "dbo", text);
var schemaDotTable = text.Split('.');
if (schemaDotTable.Length != 2) throw new InvalidOperationException("Could not parse table name.");
return new ObjectName(schemaDotTable[0], schemaDotTable[1]);
}

public string Name
{
get { return _name; }
Expand Down
2 changes: 1 addition & 1 deletion Simple.Data.Ado/QueryBuilder.cs
Expand Up @@ -70,7 +70,7 @@ private void SetQueryContext(SimpleQuery query)
_havingCriteria = _query.Clauses.OfType<HavingClause>().Aggregate(SimpleExpression.Empty,
(seed, having) => seed && having.Criteria);

_tableName = ObjectName.Parse(query.TableName.Split('.').Last());
_tableName = _schema.BuildObjectName(query.TableName.Split('.').Last());
_table = _schema.FindTable(_tableName);
_commandBuilder.SetText(GetSelectClause(_tableName));
}
Expand Down
16 changes: 15 additions & 1 deletion Simple.Data.Ado/Schema/DatabaseSchema.cs
Expand Up @@ -63,6 +63,11 @@ public Procedure FindProcedure(ObjectName procedureName)
return _lazyProcedures.Value.Find(procedureName);
}

private String GetDefaultSchema()
{
return _schemaProvider.GetDefaultSchema();
}

private TableCollection CreateTableCollection()
{
return new TableCollection(_schemaProvider.GetTables()
Expand Down Expand Up @@ -101,5 +106,14 @@ public static void ClearCache()
{
Instances.Clear();
}

public ObjectName BuildObjectName(String text)
{
if (text == null) throw new ArgumentNullException("text");
if (!text.Contains('.')) return new ObjectName(this.GetDefaultSchema(), text);
var schemaDotTable = text.Split('.');
if (schemaDotTable.Length != 2) throw new InvalidOperationException("Could not parse table name.");
return new ObjectName(schemaDotTable[0], schemaDotTable[1]);
}
}
}
}
1 change: 1 addition & 0 deletions Simple.Data.Ado/Schema/ISchemaProvider.cs
Expand Up @@ -13,5 +13,6 @@ public interface ISchemaProvider
IEnumerable<ForeignKey> GetForeignKeys(Table table);
string QuoteObjectName(string unquotedName);
string NameParameter(string baseName);
string GetDefaultSchema();
}
}
5 changes: 4 additions & 1 deletion Simple.Data.Mocking/Ado/MockSchemaProvider.cs
Expand Up @@ -154,6 +154,9 @@ public void Reset()
_tables.Clear();
}


public String GetDefaultSchema()
{
return "dbo";
}
}
}
5 changes: 5 additions & 0 deletions Simple.Data.SqlCe40/SqlCe40SchemaProvider.cs
Expand Up @@ -165,5 +165,10 @@ private DataTable SelectToDataTable(string sql)

return dataTable;
}

public String GetDefaultSchema()
{
return "dbo";
}
}
}
5 changes: 5 additions & 0 deletions Simple.Data.SqlServer/SqlSchemaProvider.cs
Expand Up @@ -189,5 +189,10 @@ private static SqlDbType DbTypeFromInformationSchemaTypeName(string informationS
{
return DbTypeLookup.GetSqlDbType(informationSchemaTypeName);
}

public String GetDefaultSchema()
{
return "dbo";
}
}
}

0 comments on commit 6abd8c2

Please sign in to comment.