Sql es el lenguaje básico de consultas a bases de datos relacionales. Y no está mal para ser un lenguaje al que tildan de declarativo.

Hasta ahora bien, por cierto, ¿sabéis quién ganó el premio O'Reilly y Google al mejor software de fuente abierta en 2005?.

Pues fue ni más ni menos que sqlite, que, puestos a mencionar, hay que decir que tiene unos excelentes bindings a tcl, su (meta)lenguaje interpretado favorito.

No en vano, DRH (D. Richard Hipp) es un auténtico fiera del tcl como podréis comprobar si os asomáis a los foros y al wiki.

Quizás la cita más famosa del mundo del tcl sea la de que everything is a string (o si no es un string tiene una representación que sí lo es).

Y todo esto venía a colación porque una de muchísimas cosas interesantes que encontraréis en las páginas de sqlite es la siguiente declaración:

Manifest typing

Most SQL database engines use static typing. A datatype is associated with each column in a table and only values of that particular datatype are allowed to be stored in that column. SQLite relaxes this restriction by using manifest typing. In manifest typing, the datatype is a property of the value itself, not of the column in which the value is stored. SQLite thus allows the user to store any value of any datatype into any column regardless of the declared type of that column. (There are some exceptions to this rule: An INTEGER PRIMARY KEY column may only store integers. And SQLite attempts to coerce values into the declared datatype of the column when it can.)

The SQL language specification calls for static typing. So some people feel that the use of manifest typing is a bug in SQLite. But the authors of SQLite feel very strongly that this is a feature. The authors argue that static typing is a bug in the SQL specification that SQLite has fixed in a backwards compatible way.

Fijáos que en el segundo párrafo apunta a algo que Sql ha hecho mal en la opinión de los desarrolladores de sqlite.

Y definitivamente he tenido que darle la razón a DRH et al cuando me he encontrado que tenía que leer cosas en bloque como texto de un Excel y tener que desmenuzarle los tipitos a Oracle.

Me parece que todos las comprobaciones de tipos del mundo, esas que parece nos prometen la máxima seguridad en el manejo de nuestros datos, están en cualquier lenguaje para ser violadas. Ya sea con los apropiados casts o de formas más salvajes.

E indeleble al ser humano, creo que siempre encontraremos la manera de necesitar esas excepciones, como cuando en series temporales necesitamos marcar algún dato como desconocido.

Por eso, y por la inherente belleza del paradigma propuesto por tcl y apoyado por sqlite, creo que DRH tiene razón y definitivamente algo había mal pensado en Sql.

Que no está mal para ser declarativo.