README.md in bmg-0.21.2 vs README.md in bmg-0.21.3

- old
+ new

@@ -1,8 +1,8 @@ # Bmg, a relational algebra (Alf's successor)! -Bmg is a relational algebra implemented as a ruby library. It implements the +Bmg is a relational algebra implemented as a Ruby library. It implements the [Relation as First-Class Citizen](http://www.try-alf.org/blog/2013-10-21-relations-as-first-class-citizen) paradigm contributed with [Alf](http://www.try-alf.org/) a few years ago. Bmg can be used to query relations in memory, from various files, SQL databases, and any data source that can be seen as serving relations. Cross data-sources @@ -13,11 +13,11 @@ * [Example](#example) * [Where are base relations coming from?](#where-are-base-relations-coming-from) * [Memory relations](#memory-relations) * [Connecting to SQL databases](#connecting-to-sql-databases) - * [Reading files (csv, excel, text)](#reading-files-csv-excel-text) + * [Reading files (csv, Excel, text)](#reading-files-csv-excel-text) * [Connecting to Redis databases](#connecting-to-redis-databases) * [Your own relations](#your-own-relations) * [List of supported operators](#supported-operators) * [How is this different?](#how-is-this-different) * [... from similar libraries](#-from-similar-libraries) @@ -115,11 +115,11 @@ # [:sid, :name, :status] # :suppliers_in # {:array=>false}) ``` -### Reading files (csv, excel, text) +### Reading files (csv, Excel, text) Bmg provides simple adapters to read files and reach Relationland as soon as possible. #### CSV files @@ -127,11 +127,11 @@ ```ruby csv_options = { col_sep: ",", quote_char: '"' } r = Bmg.csv("path/to/a/file.csv", csv_options) ``` -Options are directly transmitted to `::CSV.new`, check ruby's standard +Options are directly transmitted to `::CSV.new`, check Ruby's standard library. #### Excel files You will need to add [`roo`](https://github.com/roo-rb/roo) to your Gemfile to @@ -300,38 +300,38 @@ .union(...) .summarize(...) # aka group by .where(...) ``` -2. Bmg supports in memory relations, json relations, csv relations, SQL +2. Bmg supports in-memory relations, JSON relations, csv relations, SQL relations and so on. It's not tight to SQL generation, and supports queries accross multiple data sources. 3. Bmg makes a best effort to optimize queries, simplifying both generated SQL code (low-level accesses to datasources) and in-memory operations. 4. Bmg supports various *structuring* operators (group, image, autowrap, autosummarize, etc.) and allows building 'non flat' relations. -5. Bmg can use full ruby power when that helps (e.g. regular expressions in - WHERE clauses or ruby code in EXTEND clauses). This may prevent Bmg from +5. Bmg can use full Ruby power when that helps (e.g. regular expressions in + WHERE clauses or Ruby code in EXTEND clauses). This may prevent Bmg from delegating work to underlying data sources (e.g. SQL server) and should therefore be used with care though. ### ... from Alf? If you use Alf (or used it in the past), below are the main differences between Bmg and Alf. Bmg has NOT been written to be API-compatible with Alf and will probably never be. -1. Bmg's implementation is much simpler than Alf and uses no ruby core +1. Bmg's implementation is much simpler than Alf and uses no Ruby core extention. 2. We are confident using Bmg in production. Systematic inspection of query plans is advised though. Alf was a bit too experimental to be used on (critical) production systems. -3. Alf exposes a functional syntax, command line tool, restful tools and +3. Alf exposes a functional syntax, command-line tool, restful tools and many more. Bmg is limited to the core algebra, main Relation abstraction and SQL generation. 4. Bmg is less strict regarding conformance to relational theory, and may actually expose non relational features (such as support for null,