On 28 Sep 2009, at 5:51am, Darren Duncan wrote:

> Robustness comes in several ways.  One is that with less code mass  
> their tends
> to be fewer places to have bugs, all other things equal; when you make
> developers write more, they are more likely to make mistakes.   
> Another piece of
> robustness is resilience under change.  If you periodically change  
> what detail
> columns a table has, and you want your queries to return all the  
> detail columns
> in most situations, then any queries not mentioning the detail  
> columns in an
> "except" will automatically work following the updates, same as a  
> "select *"
> does; you don't have to go back and update every instance to just  
> keep up.

Unfortunately, one thing this feature does is add another opportunity  
for producing error messages.  Consider a table with six columns: one  
two three four five six.  I want all but the last one.  Normally I'd do

        SELECT one,two,three,four,five FROM myTable
or
        SELECT * FROM myTable

and just loop through the first five answers.  But with this extension  
I can now do

        SELECT ALLBUT six FROM myTable

which is shorter, so fine.  Over a few months I gradually realise that  
I never use column six any more since I always calculate it from other  
things.  So I drop it from the table.  Once I've done that, both forms  
of the command I used originally

        SELECT one,two,three,four,five FROM myTable
and
        SELECT * FROM myTable

still work perfectly.  But if I've used this new form

        SELECT ALLBUT six FROM myTable

I now have to go through my code changing all those statements to  
something else.  So this new form is not more resilient under change.   
It's more resilient under /some/ types of change but less resilient  
under this type of change that's actually most likely to happen.

Simon.
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to