예제 #1
0
        public static Task <List <T> > FetchAsync <T>(this AP.Database self, FSharpExpr <FSharpFunc <T, bool> > query)
        {
            var translated = ExpressionToSql.Translate(GetDialect(self).Quoter, query, true, ExtractAsyncPocoColumnNameFs,
                                                       EmptyCustomParameterValue, FSharpOption <Translator.ItemInCollectionImpl> .None);

            return(self.FetchAsync <T>(translated.Item1, translated.Item2));
        }
예제 #2
0
        public static Task <List <T> > FetchAsync <T>(
            this AP.Database self, Translator.ConjunctionWord wrd, params Expression <Func <T, bool> >[] queries)
        {
            var translated = ExpressionToSql.Translate(GetDialect(self).Quoter, wrd, queries, true, ExtractAsyncPocoColumnName);

            return(self.FetchAsync <T>(translated.Item1, translated.Item2));
        }
예제 #3
0
        private static Translator.SqlDialect GetDialect(AP.Database db)
        {
            var type = db.Connection.GetType().FullName;

            if (type.ToLower().Contains("sqliteconnection"))
            {
                return(Translator.SqlDialect.Sqlite);
            }
            if (type.Contains("System.Data.SqlClient"))
            {
                return(Translator.SqlDialect.SqlServer);
            }
            if (type.Contains("NpgsqlConnection"))
            {
                //according to https://github.com/npgsql/npgsql/blob/dev/src/Npgsql/NpgsqlConnection.cs
                return(Translator.SqlDialect.Postgresql);
            }
            if (type.Contains(".MySql"))
            {
                //according to https://dev.mysql.com/doc/connector-net/en/connector-net-programming-connecting-open.html
                return(Translator.SqlDialect.MySql);
            }
            if (type.Contains(".Oracle"))
            {
                //according to http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/hol08/dotnet/getstarted-c/getstarted_c_otn.htm
                return(Translator.SqlDialect.Oracle);
            }

            throw new Exception($"unsupported dialect for db: {type}");
        }
예제 #4
0
        public static Task <List <T> > FetchAsync <T>(this AP.Database self, Expression <Func <T, bool> > query)
        {
            var translated = ExpressionToSql.Translate(GetDialect(self).Quoter, query, true, ExtractAsyncPocoColumnName);

            return(self.FetchAsync <T>(translated.Item1, translated.Item2));
        }
예제 #5
0
 public DetailsQueryHandler(Database database)
 {
     _database = database;
 }