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

Commit 7071b39

Browse files
committed
More schema refactoring + add pseudo schema support for MySql
1 parent 103c041 commit 7071b39

File tree

7 files changed

+54
-49
lines changed

7 files changed

+54
-49
lines changed

src/ServiceStack.OrmLite.MySql/MySqlDialectProvider.cs

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,11 @@ public override string ToPostDropTableStatement(ModelDefinition modelDef)
4545
{
4646
if (modelDef.RowVersion != null)
4747
{
48-
var triggerName = RowVersionTriggerFormat.Fmt(modelDef.ModelName);
49-
return "DROP TRIGGER IF EXISTS {0}".Fmt(GetQuotedTableName(triggerName));
48+
var triggerName = RowVersionTriggerFormat.Fmt(GetTableName(modelDef));
49+
return "DROP TRIGGER IF EXISTS {0}".Fmt(GetQuotedName(triggerName));
5050
}
5151

52+
5253
return null;
5354
}
5455

@@ -61,7 +62,7 @@ public override string ToPostCreateTableStatement(ModelDefinition modelDef)
6162
modelDef.RowVersion.FieldName.SqlColumn(this));
6263

6364
var sql = "CREATE TRIGGER {0} BEFORE UPDATE ON {1} FOR EACH ROW BEGIN {2} END;".Fmt(
64-
triggerName, modelDef.ModelName, triggerBody);
65+
triggerName, GetTableName(modelDef), triggerBody);
6566

6667
return sql;
6768
}
@@ -122,19 +123,18 @@ value is bool
122123
return base.ConvertDbValue(value, type);
123124
}
124125

125-
public override string GetQuotedTableName(ModelDefinition modelDef)
126-
{
127-
return string.Format("`{0}`", NamingStrategy.GetTableName(modelDef.ModelName));
128-
}
129-
130-
public override string GetQuotedTableName(string tableName)
126+
public override string GetTableName(string table, string schema = null)
131127
{
132-
return string.Format("`{0}`", NamingStrategy.GetTableName(tableName));
128+
return schema != null
129+
? string.Format("{0}_{1}",
130+
NamingStrategy.GetSchemaName(schema),
131+
NamingStrategy.GetTableName(table))
132+
: NamingStrategy.GetTableName(table);
133133
}
134134

135-
public override string GetQuotedColumnName(string columnName)
135+
public override string GetQuotedTableName(string tableName, string schema = null)
136136
{
137-
return string.Format("`{0}`", NamingStrategy.GetColumnName(columnName));
137+
return GetQuotedName(GetTableName(tableName, schema));
138138
}
139139

140140
public override string GetQuotedName(string name)
@@ -153,10 +153,7 @@ public override bool DoesTableExist(IDbCommand dbCmd, string tableName, string s
153153
var sql = ("SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES " +
154154
"WHERE TABLE_NAME = {0} AND " +
155155
"TABLE_SCHEMA = {1}")
156-
.SqlFmt(tableName, dbCmd.Connection.Database);
157-
158-
//if (!string.IsNullOrEmpty(schemaName))
159-
// sql += " AND TABLE_SCHEMA = {0}".SqlFmt(schemaName);
156+
.SqlFmt(GetTableName(tableName, schema), dbCmd.Connection.Database);
160157

161158
dbCmd.CommandText = sql;
162159
var result = dbCmd.LongScalar();

src/ServiceStack.OrmLite.Oracle/OracleOrmLiteDialectProvider.cs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -945,9 +945,13 @@ public override string GetQuotedTableName(ModelDefinition modelDef)
945945
return Quote(NamingStrategy.GetTableName(modelDef));
946946
}
947947

948-
public override string GetQuotedTableName(string tableName)
948+
public override string GetQuotedTableName(string tableName, string schema=null)
949949
{
950-
return Quote(NamingStrategy.GetTableName(tableName));
950+
return schema == null
951+
? Quote(NamingStrategy.GetTableName(tableName))
952+
: Quote(NamingStrategy.GetSchemaName(schema))
953+
+ "."
954+
+ Quote(NamingStrategy.GetTableName(tableName));
951955
}
952956

953957
public override string GetQuotedColumnName(string fieldName)
@@ -982,12 +986,15 @@ public override SqlExpression<T> SqlExpression<T>()
982986
return new OracleSqlExpression<T>(this);
983987
}
984988

985-
public override bool DoesTableExist(IDbCommand dbCmd, string tableName, string schema = null)
989+
public override bool DoesTableExist(IDbCommand dbCmd, string tableName, string schema=null)
986990
{
987991
if (!WillQuote(tableName)) tableName = tableName.ToUpper();
988992

989993
var sql = "SELECT count(*) FROM USER_TABLES WHERE TABLE_NAME = {0}".SqlFmt(tableName);
990994

995+
if (schema != null)
996+
sql += " AND OWNER = {0}".SqlFmt(schema);
997+
991998
dbCmd.CommandText = sql;
992999
var result = dbCmd.LongScalar();
9931000

src/ServiceStack.OrmLite.SqlServer/SqlServerOrmLiteDialectProvider.cs

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -93,15 +93,6 @@ public override IDbConnection CreateConnection(string connectionString, Dictiona
9393
return new SqlConnection(connectionString);
9494
}
9595

96-
public override string GetQuotedTableName(ModelDefinition modelDef)
97-
{
98-
if (!modelDef.IsInSchema)
99-
return base.GetQuotedTableName(modelDef);
100-
101-
var escapedSchema = modelDef.Schema.Replace(".", "\".\"");
102-
return string.Format("\"{0}\".\"{1}\"", escapedSchema, NamingStrategy.GetTableName(modelDef.ModelName));
103-
}
104-
10596
public override void SetDbValue(FieldDefinition fieldDef, IDataReader reader, int colIndex, object instance)
10697
{
10798
if (fieldDef.IsRowVersion)

src/ServiceStack.OrmLite.Sqlite/SqliteOrmLiteDialectProviderBase.cs

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public override string ToPostDropTableStatement(ModelDefinition modelDef)
4141
if (modelDef.RowVersion != null)
4242
{
4343
var triggerName = GetTriggerName(modelDef);
44-
return "DROP TRIGGER IF EXISTS {0}".Fmt(GetQuotedTableName(triggerName));
44+
return "DROP TRIGGER IF EXISTS {0}".Fmt(GetQuotedName(triggerName));
4545
}
4646

4747
return null;
@@ -134,7 +134,7 @@ public override IDbConnection CreateConnection(string connectionString, Dictiona
134134

135135
protected abstract IDbConnection CreateConnection(string connectionString);
136136

137-
public virtual string GetTableName(string table, string schema=null)
137+
public override string GetTableName(string table, string schema=null)
138138
{
139139
return schema != null
140140
? string.Format("{0}_{1}",
@@ -143,18 +143,9 @@ public virtual string GetTableName(string table, string schema=null)
143143
: NamingStrategy.GetTableName(table);
144144
}
145145

146-
public virtual string GetTableName(ModelDefinition modelDef)
146+
public override string GetQuotedTableName(string tableName, string schema = null)
147147
{
148-
return GetTableName(modelDef.ModelName, modelDef.Schema);
149-
}
150-
151-
public override string GetQuotedTableName(ModelDefinition modelDef)
152-
{
153-
if (!modelDef.IsInSchema)
154-
return base.GetQuotedTableName(modelDef);
155-
156-
return string.Format("\"{0}\"",
157-
GetTableName(modelDef.ModelName, modelDef.Schema));
148+
return GetQuotedName(GetTableName(tableName, schema));
158149
}
159150

160151
public override object ConvertDbValue(object value, Type type)

src/ServiceStack.OrmLite/IOrmLiteDialectProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public interface IOrmLiteDialectProvider
5353

5454
string GetQuotedTableName(ModelDefinition modelDef);
5555

56-
string GetQuotedTableName(string tableName);
56+
string GetQuotedTableName(string tableName, string schema=null);
5757

5858
string GetQuotedColumnName(string columnName);
5959

src/ServiceStack.OrmLite/OrmLiteDialectProviderBase.cs

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -286,19 +286,41 @@ public virtual string GetQuotedValue(string paramValue)
286286
return "'" + paramValue.Replace("'", "''") + "'";
287287
}
288288

289+
public virtual string GetTableName(ModelDefinition modelDef)
290+
{
291+
return GetTableName(modelDef.ModelName, modelDef.Schema);
292+
}
293+
294+
public virtual string GetTableName(string table, string schema = null)
295+
{
296+
return schema != null
297+
? string.Format("{0}.{1}",
298+
NamingStrategy.GetSchemaName(schema),
299+
NamingStrategy.GetTableName(table))
300+
: NamingStrategy.GetTableName(table);
301+
}
302+
289303
public virtual string GetQuotedTableName(ModelDefinition modelDef)
290304
{
291-
return GetQuotedTableName(modelDef.ModelName);
305+
return GetQuotedTableName(modelDef.ModelName, modelDef.Schema);
292306
}
293307

294-
public virtual string GetQuotedTableName(string tableName)
308+
public virtual string GetQuotedTableName(string tableName, string schema = null)
295309
{
296-
return string.Format("\"{0}\"", namingStrategy.GetTableName(tableName));
310+
if (schema == null)
311+
return GetQuotedName(NamingStrategy.GetTableName(tableName));
312+
313+
var escapedSchema = NamingStrategy.GetSchemaName(schema)
314+
.Replace(".", "\".\"");
315+
316+
return GetQuotedName(escapedSchema)
317+
+ "."
318+
+ GetQuotedName(NamingStrategy.GetTableName(tableName));
297319
}
298320

299321
public virtual string GetQuotedColumnName(string columnName)
300322
{
301-
return string.Format("\"{0}\"", namingStrategy.GetColumnName(columnName));
323+
return GetQuotedName(namingStrategy.GetColumnName(columnName));
302324
}
303325

304326
public virtual string GetQuotedName(string name)

tests/ServiceStack.OrmLite.Tests/Issues/MismatchSchemaTests.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,6 @@ public class Poco
7474
[Test]
7575
public void Can_change_schema_at_runtime()
7676
{
77-
if (Dialect == Dialect.MySql)
78-
return; //No custom schema support
79-
8077
using (var captured = new CaptureSqlFilter())
8178
using (var db = OpenDbConnection())
8279
{

0 commit comments

Comments
 (0)