Extension and AND in SQL
The theory book gives the following simple example of relational extension in Tutorial D:
EXTEND IS_CALLED ADD ( FirstLetter ( Name ) AS Initial )
Assuming the user-defined operator FirstLetter is available to the SQL user, this can be expressed easily in SQL but there is a strange quirk in the grammar at play here:
SELECT IC.*, FirstLetter ( Name ) AS Initial
FROM IS_CALLED AS IC
Note very carefully that we have to qualify the * using the range variable, IC, which in this case ranges over the rows of the current value of IS_CALLED. When we use a SELECT clause to "add columns" to the table on which it operates, it seems obvious to write * to specify that every column of that operand table is required and to follow it with a commalist of expressions denoting the additional columns. For some reason the official SQL grammar does not allow additional columns to accompany an unadorned *. When the FROM clause contains several entries, pure extension becomes more difficult to express in SQL. For example, if the FROM clause defines range variables T1, T2, and T3, we could write SELECT T1.*, T2.*, T3.* ..., but that would defeat the purpose. To be able to write just a single * to denote all the columns of the FROM table, we would have to resort to something like
SELECT T.*, ...
FROM (SELECT * FROM T1, T2, T3 WHERE ... ) AS T