/// <inheritdoc/> public object Execute(Expression expression) { PostgresVisitor visitor = new PostgresVisitor(); visitor.Visit(expression); var exp = visitor.ToString(); return(null); }
/// <inheritdoc/> public TResult Execute <TResult>(Expression expression) { Type tr = typeof(TResult); PostgresVisitor visitor = new PostgresVisitor(); visitor.Visit(expression); var exp = visitor.ToString(); using (var cmd = this.connection.CreateCommand()) { cmd.CommandText = exp; int id = 0; foreach (var param in visitor.Parameters) { var p = new NpgsqlParameter("p" + (++id), param) { NpgsqlDbType = GetDbType(param.GetType()) }; cmd.Parameters.Add(p); } cmd.Prepare(); using (var reader = cmd.ExecuteReader()) { if (tr.GenericTypeArguments.Length == 0) { // This is probably a scalar. reader.Read(); object value = reader.GetValue(0); if (value is DBNull) { return(default(TResult)); } return((TResult)(dynamic)value); } var rowResult = typeof(TResult).GenericTypeArguments[0]; if (rowResult == typeof(Transaction)) { var results = new List <Transaction>(); while (reader.Read()) { results.Add(this.MapTransaction(reader)); } return((TResult)(object)results); } } } return(default(TResult)); }