private static Compiler ToCompiler(this IProvider provider)
        {
            CompilerType compilerType;

            if (provider is MySqlDatabaseProvider)
            {
                compilerType = CompilerType.MySql;
            }
            else if (provider is PostgreSQLDatabaseProvider)
            {
                compilerType = CompilerType.Postgres;
            }
            else if (provider is FirebirdDbDatabaseProvider)
            {
                compilerType = CompilerType.Firebird;
            }
            else if (provider is SQLiteDatabaseProvider)
            {
                compilerType = CompilerType.SQLite;
            }
            else if (provider is OracleDatabaseProvider)
            {
                compilerType = CompilerType.Oracle;
            }
            else
            {
                compilerType = CompilerType.SqlServer;
            }

            return(DefaultCompilers.Get(compilerType));
        }
 private static Compiler GetCompiler(this IDatabase db)
 {
     if (DefaultCompilers.TryGetCustom(db.Provider, out var compiler))
     {
         return(compiler);
     }
     else
     {
         return(db.Provider.ToCompiler());
     }
 }
        public void Adding_And_Removing_Custom_Works()
        {
            var provider = new MyDatabaseProvider();

            DefaultCompilers.TryGetCustom(provider.GetType(), out var compiler).Should().BeFalse();

            DefaultCompilers.RegisterFor <MyDatabaseProvider>(new PercentCompiler());

            DefaultCompilers.TryGetCustom(provider, out compiler).Should().BeTrue();
            compiler.Should().BeOfType <PercentCompiler>();

            DefaultCompilers.RegisterFor <MyDatabaseProvider>(null);
            DefaultCompilers.TryGetCustom(provider.GetType(), out compiler).Should().BeFalse();
        }
        public void Query_Uses_Custom_Compiler()
        {
            try
            {
                _mockDb.Setup(m => m.Provider).Returns(new MySqlDatabaseProvider());
                DefaultCompilers.RegisterFor <MySqlDatabaseProvider>(new PercentCompiler());

                var input    = new Query("Foo").Select("Bar");
                var output   = _mockDb.Object.Query <SomeClass>(input);
                var expected = "SELECT %%Bar%% FROM %%Foo%%";

                _lastSql.Should().BeEquivalentTo(new Sql(expected));
            }
            finally
            {
                DefaultCompilers.RegisterFor <MySqlDatabaseProvider>(null);
            }
        }
        public void Get_For_Custom_Should_Throw()
        {
            Action act = () => DefaultCompilers.Get(CompilerType.Custom);

            act.Should().Throw <ArgumentException>();
        }
        public void Get_Should_Work_For_Known_Types(CompilerType compilerType, Type compiler)
        {
            var output = DefaultCompilers.Get(compilerType);

            output.Should().BeOfType(compiler);
        }