mnesia:transform_table(Tab, Fun, NewAttributeList)

Rudolph van Graan rvg@REDACTED
Thu Jul 6 20:15:01 CEST 2006

Hi Andreas,

On 06 Jul 2006, at 7:46 PM, Trap Exit wrote:

> The problem is that I have been thought to to assume that records  
> are tuples.

Your assumption is correct.

> You cant have a record name with two definitions, if you have  
> diffrent name, you will have to enter the new recordnam into the  
> databas.

The record definition is not stored in a/the database. Mnesia  
translates the record tuple into an internal format based on the  
schema of the table. The purpose of the transform function is to give  
you an opportunity of changing this schema and at the same time to  
update all the old records to the new specification. If your function  
does not change the records to the new format, they will still be  
stored in mnesia in the old format, with the additional problem that  
your new record definition and mnesia's is now out of sync. The  
moment you change the record definition and recompile, all your code  
will understand the new format. But mnesia won't. This is the purpose  
of the transform functions.

> * When changeing the recodord defintion for at mnesia table change  
> the record name, or

No. use the same record name.

> * Use the tuple definition of records. The code will only be used  
> once so who cares, or

You will probably have to, as when you run this function *your*  
definition has already changed, but mnesia's has not. Match on the  
old record as a tuple and populate the new record. Something like this:

{record, A, B, C} = OldRecord,
NewRecord = #record{a = A, b = B, c = C, d = 123},

Rudolph van Graan

Telecommunications Specialist
Pattern Matched Technologies

E-Mail:  rvg@REDACTED
Mobile:  +27 83 390 7767
Fax:     +27 12 667 5342

More information about the erlang-questions mailing list