On 25-4-2017 18:21, Lester Caine les...@lsces.co.uk [firebird-support] 
wrote:
> On 25/04/17 16:50, Mark Rotteveel m...@lawinegevaar.nl
> [firebird-support] wrote:
>> The SQL standard is quite clear at what needs to happen: adding a new
>> column with a default should behave as if that column has existed from
>> the original create table (btw: irrespective of the NOT NULL constraint,
>> something that if I'm not mistaken also Firebird doesn't do correctly).
>
> Exactly the problem in my book. If you add 'DEFAULT' without a 'NOT
> NULL', then in my book the unpopulated fields should remain NULL unless
> I populate them. When you now add creating the field later then things
> should be consistent but there is no consistent way of handling things
> based on the SQL standard inconsistencies.

I find the opposite a lot more logical. I create a new field with a 
default, the existing records should get the value with that default. If 
you want the value of a field to be null for existing rows, then first 
add it without a default (which implies default null), and then alter 
the default.

This is what the SQL:2011 standard says:
"""
2) Let C be the column added to T.
     Case:
         a) [about generated columns]
[..]
         b) Otherwise, C is a base column.
              Case:
                  i) [about identity columns]
[..]
                  ii) Otherwise, every value in C is the default value 
for C.
[..]
4) In all other respects, the specification of a <column definition> in 
an <alter table statement> has the same effect as specification of the 
<column definition> in the <table definition> for T would have had.
"""

>> This has the effect that all existing records should get the default
>> value as if they had that value from the start (either stored or
>> virtual). It also means that a subsequent alteration of the default (new
>> value or dropping the default), should not lead to changes to the value
>> of those rows that existed before the column was added with; the columns
>> need to retain the original default.
>
> The argument that other engines put forward is this idea that a record
> does not need to store a full set of fields, some can be 'virtual' and
> only exist when something is stored in them. I HOPE that this is not
> something that Firebird plans to adopt? In my book the 'original value'
> is always 'NULL' unless other rules require something replaces it, and
> an empty field magically showing some default value is not a safe way of
> working.

You are misinterpreting my words. With virtual I mean that the value 
might not yet be actually persisted with the record itself, but that for 
all intents and purposes the system behaves as if it **is**. This is BTW 
what Firebird currently does with format versions.

Mark
-- 
Mark Rotteveel
  • [firebird-supp... Maxi maxiroba...@gmail.com [firebird-support]
    • RE: [fire... 'Leyne, Sean' s...@broadviewsoftware.com [firebird-support]
      • Re: [... Maxi maxiroba...@gmail.com [firebird-support]
        • R... Lester Caine les...@lsces.co.uk [firebird-support]
          • ... Mark Rotteveel m...@lawinegevaar.nl [firebird-support]
            • ... Lester Caine les...@lsces.co.uk [firebird-support]
              • ... Mark Rotteveel m...@lawinegevaar.nl [firebird-support]
              • ... Ann Harrison aharri...@ibphoenix.com [firebird-support]
                • ... Lester Caine les...@lsces.co.uk [firebird-support]
    • Re: [fire... Svein Erling Tysvær setys...@gmail.com [firebird-support]
      • Re: [... Maxi maxiroba...@gmail.com [firebird-support]
    • Re: [fire... Mark Rotteveel m...@lawinegevaar.nl [firebird-support]
    • [firebird... hv...@users.sourceforge.net [firebird-support]

Reply via email to