<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>

<blockquote TYPE=CITE>
<pre>Bjorn Gustavsson wrote:

> In R8, we preliminary plan to stricten the test for valid records

Great. Are there any plans of inserting generic functions on records as
well (or implementing O'Keef's suggestion from 1998)?</pre>
</blockquote>

<p><br>i would not mind a link ?
<br> 
<blockquote TYPE=CITE>
<pre>Due to their
implementation, it is today impossible to write generic code using
different record types. There are however many cases where different
records can be treated equally as they share some common denominators.

Generic code of this kind is today handled by using the tuple
representation of records. (Do as I say, don't do as I do is what I end
up preaching....) And the code is static anyhow, as every time you add a
new record, you have to recompile the file with the generic stuff (or go
through a call back module which makes the code yucky and hard to
follow).

Functions (BIFs) could include

get_record(RecordType) -> #RecordType{}
get_record_name(Record) -> RecordType
get_record_fields(RecordName) -> [FieldName1,...]
lookup_record_field(Record, FieldName1) -> Element</pre>
</blockquote>
here are the corresponding functions in attached files
<br> 
<p>Function : prototype/2
<br>%% Purpose : create One Empty record  of type Table, according
to Schema
<br>%%---------------------------------------
<br>%%---------------------------------------
<br>%% Function : info/2
<br>%% Purpose : entity | relations for a Record
<br>%% Arg: entity| relation, Record, grmSchema
<br>%%---------------------------------------
<br>grm_mnesia:field_value(Record,Field)->
<br>%%---------------------------------------
<br>  grm_mnesia:retrieve(Table,Key) when atom(Key)
<br>%%---------------------------------------
<br> Function :grm_mnesia: retrieve/3
<br>%% Purpose : retrieve the records referenced by a given record
<br>%% Arg: Relation, Record | [Record], Schema
<p>in the attached grm_mnesia, files, ull find the corresponding functions.
<br>(still work in progress).
<br>they suppose your database is defined in a grm schema like
<p>schema()->
<br>      [
<br>    {entity,
<br>     [description,indexing,responsabilities,services,suppliers,states,invariant,component,precondition,postcondition,predicate,menu,commands,queries,dialog]},
<p> {relation,
<br>    [{component,composition,states},
<br>     {states,reference,description},
<br>     {component,reference,description},
<br>     {component,composition,commands},
<br>     {component,composition,queries},
<br>  %   {features,reference,description},
<br>%     {features,composition,commands},
<br> %    {features,composition,queries},
<p>with manipulation functions in grm_schema
<br>supported_relationships()->
<br> [attribute,dependency,reference,composition].
<p>also an example kit_schema, and the kit_lib in case of dependencies.
<br> 
<p>this is work in progress, and need a lot of restructuring ( a few things
are in grm_schema/mnesia now, but need some to be moved out.)
<p>(GRM stands for generic relationship management, i believe, (kilov work
on formal semantics, an iso standard now. (kilov worked in RM_ODP may be
known by you, telecom guys. i can search links if interested)
<p>i was surprised how little overhead  i found (maybe 10-20%, i was
expecting 100-200, compared to "compiled coded" records. (well , i dont
have soft real time requirement)
<br>btw, there is a few utilitaries that create db schema, or records headers
based on the schema
<p>%% Purpose : give the records definition (.hrl)
<br>%% Arg: headers,Schema
<br>%% Return : -record (tablename,[fieldsname]), string-ified.
<br>%%---------------------------------------
<br>info(headers,S)->
<p>%%---------------------------------------
<br>%% Function : info/2
<br>%% Purpose : give the table definition (like mnesia:save_to_text would)
<br>%% Arg: table,Schema
<br>%% Return : {table, [{tablename,[fieldsname]}]}
<br>%%---------------------------------------
<p>info(tables,S)->
<br> 
<br> 
<p>got some more things, if interested.
<br> 
<blockquote TYPE=CITE>
<pre>Just in time for xmas?? :-)

Regards,</pre>
</blockquote>

<pre>-- 
First, they ignore you.
Then, they laugh at you.
Then, they fight you.
Then, you win.

--- Gandhi.

Working code is what matter, not your market capitalization.
--Kurt granroth</pre>
 </html>