You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
EntityFrameworkCore.Jet/test/System.Data.Jet.Performance.../CheckTableExistenceTest.cs

151 lines
3.9 KiB
C#

using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace System.Data.Jet.PerformanceTest
{
//[TestClass]
public class CheckTableExistenceTest
{
[TestInitialize]
public void Initialize()
{
using (JetConnection connection = JetDatabaseFixture.GetConnection())
{
connection.Open();
for (int i = 0; i < 300; i++)
{
string sql = $@"
CREATE TABLE [Employees_{i}] (
[EmployeeID] int IDENTITY (1, 1) NOT NULL ,
[LastName] varchar (20) NOT NULL ,
[FirstName] varchar (10) NOT NULL ,
[Title] varchar (30) NULL ,
[TitleOfCourtesy] varchar (25) NULL ,
[BirthDate] datetime NULL ,
[HireDate] datetime NULL ,
[Address] varchar (60) NULL ,
[City] varchar (15) NULL ,
[Region] varchar (15) NULL ,
[PostalCode] varchar (10) NULL ,
[Country] varchar (15) NULL ,
[HomePhone] varchar (24) NULL ,
[Extension] varchar (4) NULL ,
[Photo] image NULL ,
[Notes] text NULL ,
[ReportsTo] int NULL ,
[PhotoPath] varchar (255) NULL ,
CONSTRAINT [PK_Employees] PRIMARY KEY
(
[EmployeeID]
)
);
CREATE INDEX [LastName] ON [Employees_{i}]([LastName]);
CREATE INDEX [PostalCode] ON [Employees_{i}]([PostalCode]);
";
connection.CreateCommand(sql).ExecuteNonQuery();
}
}
}
[TestCleanup]
public void Cleanup()
{
using (JetConnection connection = JetDatabaseFixture.GetConnection())
{
connection.Open();
for (int i = 0; i < 300; i++)
{
string sql = $@"DROP TABLE [Employees_{i}]";
connection.CreateCommand(sql).ExecuteNonQuery();
}
}
}
[TestMethod]
public void TryCatch()
{
int exists = 0;
int notExists = 0;
using(new Timer("TryCatch"))
using (JetConnection connection = JetDatabaseFixture.GetConnection())
{
connection.Open();
for (int i = 0; i < 1000; i++)
{
if (TableExistsTryCatch(connection, $"Employees_{i % 500}"))
exists++;
else
notExists++;
}
}
Assert.AreEqual(600, exists);
Assert.AreEqual(400, notExists);
}
[TestMethod]
public void ShowWhere()
{
int exists = 0;
int notExists = 0;
using (new Timer("ShowWhere"))
using (JetConnection connection = JetDatabaseFixture.GetConnection())
{
connection.Open();
for (int i = 0; i < 1000; i++)
{
if (TableExistsShowWhere(connection, $"Employees_{i % 500}"))
exists++;
else
notExists++;
}
}
Assert.AreEqual(600, exists);
Assert.AreEqual(400, notExists);
}
public bool TableExistsTryCatch(JetConnection connection, string tableName)
{
bool tableExists;
try
{
string sqlFormat = "select Top 1 * from [{0}]";
connection.CreateCommand(String.Format(sqlFormat, tableName)).ExecuteNonQuery();
tableExists = true;
}
catch
{
tableExists = false;
}
return tableExists;
}
public bool TableExistsShowWhere(JetConnection connection, string tableName)
{
string sqlFormat = "show tables where name = '{0}'";
return connection.CreateCommand(String.Format(sqlFormat, tableName.Replace("'", "''"))).ExecuteScalar() != DBNull.Value;
}
}
}