Tables Are Collections

last modified: January 6, 2013

TopMind is often seen arguing about the inherent superiority of TOP to functional programming. He claims that 'smart' tables are much better than 'dumb' collections. However, I think that this is in fact a meaningless debate, because tables are merely a type of collection, and database queries are the higher-order operations that sort and filter and scan and update them.

This can be most clearly seen in the LanguageIntegratedQuery [MS LINQ] project, essentially a LispMacro in a language that doesn't have LispMacros.

For instance,

from o <- someTable
where o.FrozzBozz
select o.FirstName + " " + o.LastName

translates to

someTable
  .Filter( delegate (o) {return o.FrozzBozz()}, )
  .Map( delegate (o) {return o.FirstName + " " + o.LastName}, )

In a language with a better syntax for anonymous functions, it would be:

someTable.filter(o => o.frozzBozz).map(o => o.firstName ++ " " ++ o.lastName)

or (shock!) you could get away with writing it cleanly without the macro, as in:

someTable filter (_.frozzBozz) map (o => o.firstName ++ " " ++ o.lastName)

[this is ScalaLanguage, which is really d*mn good at making DomainSpecificLangauges without ever breaking out the macros. RubyLanguage is also good for this...]

Order by?

(<some_long_query>).sort_by {|a| a.prod_num},

Even delete from:

date = now()
orderDB.reject! { |rec| rec.date < date - (7 years) },

Microsoft also offers a kind of "RAM table" type that allows one to do "regular" SQL on it. The advantage of this is that one can switch the implementation to a full RDBMS if the requirements grow without rewriting the queries. (I'm not sure if LINQ can do that for non-MS databases.) You are essentially reinventing a query languages with lots of "funny punctuation" in it. If we are going to start over, then let's plan a good query language this time (HowOtherQueryLanguagesAddressSqlFlaws). Ideally the query language should be app-language-independent such that I don't have to learn/use one query language for Ruby and another for PHP, etc. Query languages and GUI languages should strive to be app-language-independent in my opinion. -t


CategoryFunctionalProgramming


Loading...