Skip to content

Commit

Permalink
Fixed bug: Method Where<T>(...) fails after NamingStrategy is changed.
Browse files Browse the repository at this point in the history
  • Loading branch information
angelcolmenares committed Apr 1, 2012
1 parent ebcc7b3 commit 7fc0ae9
Show file tree
Hide file tree
Showing 10 changed files with 925 additions and 19 deletions.
22 changes: 20 additions & 2 deletions src/AllDialectsTest/Main.cs
Expand Up @@ -490,11 +490,29 @@ private static void TestDialect(Dialect dialect)
a.City = "Bogota";
author = dbCmd.FirstOrDefault<Author>(q => q.City == a.City);
Console.WriteLine("Expected:{0} ; Selected:{1}, OK? {2}", "Angel Colmenares", author.Name, "Angel Colmenares" == author.Name);



// count test

var expectedCount= authors.Count();
long r7 = dbCmd.GetScalar<Author,long>(e=> Sql.Count(e.Id));
Console.WriteLine("GetScalar long: Expected:{0} Selected {1} {2}",expectedCount,
r7,
expectedCount == r7 ? "OK" : "************** FAILED ***************");

expectedCount= authors.Count(e=> e.City=="Bogota");
r7 = dbCmd.GetScalar<Author,long>(
e=> Sql.Count(e.Id),
e=> e.City=="Bogota" );

Console.WriteLine("GetScalar long: Expected:{0} Selected {1} {2}",expectedCount,
r7,
expectedCount == r7 ? "OK" : "************** FAILED ***************");

DateTime t3= DateTime.Now;
Console.WriteLine("Expressions test in: {0}", t3 - t2);
Console.WriteLine("All test in : {0}", t3 - t1);



}
catch (Exception e)
Expand Down
@@ -0,0 +1,249 @@
using System;
using NUnit.Framework;
using ServiceStack.Common.Tests.Models;

namespace ServiceStack.OrmLite.MySql.Tests
{

[TestFixture]
public class OrmLiteCreateTableWithNamigStrategyTests
: OrmLiteTestBase
{

[Test]
public void Can_create_TableWithNamigStrategy_table_prefix()
{
OrmLite.OrmLiteConfig.DialectProvider.NamingStrategy = new PrefixNamingStrategy
{
TablePrefix ="tab_",
ColumnPrefix = "col_",
};

using (var db = ConnectionString.OpenDbConnection())
using (var dbCmd = db.CreateCommand())
{
dbCmd.CreateTable<ModelWithOnlyStringFields>(true);
}

OrmLite.OrmLiteConfig.DialectProvider.NamingStrategy= new OrmLiteNamingStrategyBase();
}

[Test]
public void Can_create_TableWithNamigStrategy_table_lowered()
{
OrmLite.OrmLiteConfig.DialectProvider.NamingStrategy = new LowercaseNamingStrategy();

using (var db = ConnectionString.OpenDbConnection())
using (var dbCmd = db.CreateCommand())
{
dbCmd.CreateTable<ModelWithOnlyStringFields>(true);
}

OrmLite.OrmLiteConfig.DialectProvider.NamingStrategy= new OrmLiteNamingStrategyBase();
}


[Test]
public void Can_create_TableWithNamigStrategy_table_nameUnderscoreCoumpound()
{
OrmLite.OrmLiteConfig.DialectProvider.NamingStrategy = new UnderscoreSeparatedCompoundNamingStrategy();

using (var db = ConnectionString.OpenDbConnection())
using (var dbCmd = db.CreateCommand())
{
dbCmd.CreateTable<ModelWithOnlyStringFields>(true);
}

OrmLite.OrmLiteConfig.DialectProvider.NamingStrategy= new OrmLiteNamingStrategyBase();
}

[Test]
public void Can_get_data_from_TableWithNamigStrategy_with_GetById()
{
OrmLite.OrmLiteConfig.DialectProvider.NamingStrategy = OrmLite.OrmLiteConfig.DialectProvider.NamingStrategy = new PrefixNamingStrategy
{
TablePrefix = "tab_",
ColumnPrefix = "col_",
};

using (var db = ConnectionString.OpenDbConnection())
using (var dbCmd = db.CreateCommand())
{
dbCmd.CreateTable<ModelWithOnlyStringFields>(true);
ModelWithOnlyStringFields m = new ModelWithOnlyStringFields() { Id= "999", AlbumId = "112", AlbumName="ElectroShip", Name = "MyNameIsBatman"};

dbCmd.Save<ModelWithOnlyStringFields>(m);
var modelFromDb = dbCmd.GetById<ModelWithOnlyStringFields>("999");

Assert.AreEqual(m.Name, modelFromDb.Name);
}

OrmLite.OrmLiteConfig.DialectProvider.NamingStrategy= new OrmLiteNamingStrategyBase();
}


[Test]
public void Can_get_data_from_TableWithNamigStrategy_with_query_by_example()
{
OrmLite.OrmLiteConfig.DialectProvider.NamingStrategy = OrmLite.OrmLiteConfig.DialectProvider.NamingStrategy = new PrefixNamingStrategy
{
TablePrefix = "tab_",
ColumnPrefix = "col_",
};

using (var db = ConnectionString.OpenDbConnection())
using (var dbCmd = db.CreateCommand())
{
dbCmd.CreateTable<ModelWithOnlyStringFields>(true);
ModelWithOnlyStringFields m = new ModelWithOnlyStringFields() { Id = "998", AlbumId = "112", AlbumName = "ElectroShip", Name = "QueryByExample" };

dbCmd.Save<ModelWithOnlyStringFields>(m);
var modelFromDb = dbCmd.Where<ModelWithOnlyStringFields>(new { Name = "QueryByExample" })[0];

Assert.AreEqual(m.Name, modelFromDb.Name);
}

OrmLite.OrmLiteConfig.DialectProvider.NamingStrategy= new OrmLiteNamingStrategyBase();
}


[Test]
public void Can_get_data_from_TableWithNamigStrategy_AfterChangingNamingStrategy()
{
OrmLite.OrmLiteConfig.DialectProvider.NamingStrategy = OrmLite.OrmLiteConfig.DialectProvider.NamingStrategy = new PrefixNamingStrategy
{
TablePrefix = "tab_",
ColumnPrefix = "col_",
};

using (var db = ConnectionString.OpenDbConnection())
using (var dbCmd = db.CreateCommand())
{
dbCmd.CreateTable<ModelWithOnlyStringFields>(true);
ModelWithOnlyStringFields m = new ModelWithOnlyStringFields() { Id = "998", AlbumId = "112", AlbumName = "ElectroShip", Name = "QueryByExample" };

dbCmd.Save<ModelWithOnlyStringFields>(m);
var modelFromDb = dbCmd.Where<ModelWithOnlyStringFields>(new { Name = "QueryByExample" })[0];

Assert.AreEqual(m.Name, modelFromDb.Name);

modelFromDb = dbCmd.GetById<ModelWithOnlyStringFields>("998");
Assert.AreEqual(m.Name, modelFromDb.Name);

}

OrmLite.OrmLiteConfig.DialectProvider.NamingStrategy= new OrmLiteNamingStrategyBase();

using (var db = ConnectionString.OpenDbConnection())
using (var dbCmd = db.CreateCommand())
{
dbCmd.CreateTable<ModelWithOnlyStringFields>(true);
ModelWithOnlyStringFields m = new ModelWithOnlyStringFields() { Id = "998", AlbumId = "112", AlbumName = "ElectroShip", Name = "QueryByExample" };

dbCmd.Save<ModelWithOnlyStringFields>(m);
var modelFromDb = dbCmd.Where<ModelWithOnlyStringFields>(new { Name = "QueryByExample" })[0];

Assert.AreEqual(m.Name, modelFromDb.Name);

modelFromDb = dbCmd.GetById<ModelWithOnlyStringFields>("998");
Assert.AreEqual(m.Name, modelFromDb.Name);
}

OrmLite.OrmLiteConfig.DialectProvider.NamingStrategy = OrmLite.OrmLiteConfig.DialectProvider.NamingStrategy = new PrefixNamingStrategy
{
TablePrefix = "tab_",
ColumnPrefix = "col_",
};

using (var db = ConnectionString.OpenDbConnection())
using (var dbCmd = db.CreateCommand())
{
dbCmd.CreateTable<ModelWithOnlyStringFields>(true);
ModelWithOnlyStringFields m = new ModelWithOnlyStringFields() { Id = "998", AlbumId = "112", AlbumName = "ElectroShip", Name = "QueryByExample" };

dbCmd.Save<ModelWithOnlyStringFields>(m);
var modelFromDb = dbCmd.Where<ModelWithOnlyStringFields>(new { Name = "QueryByExample" })[0];

Assert.AreEqual(m.Name, modelFromDb.Name);

modelFromDb = dbCmd.GetById<ModelWithOnlyStringFields>("998");
Assert.AreEqual(m.Name, modelFromDb.Name);
}

OrmLite.OrmLiteConfig.DialectProvider.NamingStrategy= new OrmLiteNamingStrategyBase();
}

}

public class PrefixNamingStrategy : OrmLiteNamingStrategyBase
{

public string TablePrefix { get; set; }

public string ColumnPrefix { get; set; }

public override string GetTableName(string name)
{
return TablePrefix + name;
}

public override string GetColumnName(string name)
{
return ColumnPrefix + name;
}

}

public class LowercaseNamingStrategy : OrmLiteNamingStrategyBase
{

public override string GetTableName(string name)
{
return name.ToLower();
}

public override string GetColumnName(string name)
{
return name.ToLower();
}

}

public class UnderscoreSeparatedCompoundNamingStrategy : OrmLiteNamingStrategyBase
{

public override string GetTableName(string name)
{
return toUnderscoreSeparatedCompound(name);
}

public override string GetColumnName(string name)
{
return toUnderscoreSeparatedCompound(name);
}


string toUnderscoreSeparatedCompound(string name)
{

string r = char.ToLower(name[0]).ToString();

for (int i = 1; i < name.Length; i++)
{
char c = name[i];
if (char.IsUpper(name[i]))
{
r += "_";
r += char.ToLower(name[i]);
}
else
{
r += name[i];
}
}
return r;
}

}

}
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
Expand Down Expand Up @@ -87,6 +87,7 @@
<Compile Include="UseCase\CustomerOrdersUseCase.cs" />
<Compile Include="UseCase\SimpleUseCase.cs" />
<Compile Include="OrmLiteGetScalarTests.cs" />
<Compile Include="OrmLiteCreateTableWithNamingStrategyTests.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ServiceStack.OrmLite.MySql\ServiceStack.OrmLite.MySql.csproj">
Expand Down

0 comments on commit 7fc0ae9

Please sign in to comment.