Re: Flash to JOG

From: Cimode <cimode_at_hotmail.com>
Date: Thu, 13 Mar 2008 11:10:57 -0700 (PDT)
Message-ID: <1f469718-3952-4970-bf5c-12494a39b54c_at_s12g2000prg.googlegroups.com>


On Mar 13, 3:51 pm, paul c <toledoby..._at_ac.ooyah> wrote:

> JOG wrote:
> > ...
> > Rel also looked interesting, and I liked some of the syntax -
> > especially the fact that for relvar datatypes, A + B is the union of A
> > and B, and hence A += B is an insert, etc.
>
> I think it's more than syntax, TTM defines it that way.

I used a similar syntax on the current complier I am building...I allowed the possibility to switch operator "+" with "UNION".

Considering relation A, B...

What is between [] is a relation
What is between {} are is an attribute set or subset What is between || is a constraint (either expressed litteraly or as a the constraint for an existing relation)

[INT_RANGE = | INT BETWEEN 10 AND 50 | ] --> INT_RANGE un-ary
relation (new type) is defined from INT data type --> IN_RANGE is derived from INT.

[MAKE A={A1 INT_RANGE, A2 INT, A3 INT}] --> A header and constraint
set is constituted. It is benefiting from INT_RANGE constraint set through simple typing.

[MAKE A={A1 INT_RANGE, A2 INT, A3 INT}] --> The traditional way
OR
[MAKE HEADER[A]=HEADER[B]] --> On this, I thought about openning the
possibility to create headers independently from relations at definition time. The system keeps in the repository headers and associates constraints to them. That way relation header B is constituted and the constraints are implicitely implemented through this mechanism...

The logic is

--> When a relation A is constituted a header[A] is necessarily constituted and stored in the repository. --> The above header can be assigned to another *unexisting* relation and automatically defines a typing/constraining for all attributes at once.

[MAKE C = [A + B]] --> Adds relation A to relation B and constitutes
new relation C body --> UNION (at relation level) /INSERT (at tuple level)
[MAKE C = [A - B]] --> Substracts relation B from relation A and
constitutes new relation C body --> MINUS (at relation level) /DELETE (at tuple level)

[MAKE C = [A * B]] --> multiples A per B (full cartesian product) and
assigns body to relation C body --> FULL JOIN (relation level)/
[MAKE C = [A/B{A1, .....AN}]] --> divides A per B and assigns result
to relation C body. --> GROUP BY

The rest is just presenting

PRESENT2D [C] --> Tabular format

Let me know what you think... Received on Thu Mar 13 2008 - 19:10:57 CET

Original text of this message