# Re: no names allowed, we serve types only

Date: Sun, 14 Feb 2010 22:14:03 -0800 (PST)

Message-ID: <29d1b250-f284-47cd-a655-efefb540907c_at_z26g2000yqm.googlegroups.com>

On Feb 14, 5:22 pm, Nilone <rea..._at_gmail.com> wrote:

> On Feb 13, 10:53 pm, Keith H Duggar <dug..._at_alum.mit.edu> wrote:

*>
**> > I'm wondering, do we really need A? Can we not simplify this
**> > header notion to just a set of types? All we need do then is
**> > supply operators to conveniently "copy" types if or when one
**> > needs multiples attributes of the "same" type.
**>
**> I'm happy to see some activity in here again.
*

Indeed. Thanks for joining ;-)

> Your suggestion could help to force developers to derive uniquely

*> named types for their attributes - Name instead of String, Age instead
**> of Int, and so on. Otherwise, type names aren't descriptive enough
**> and will result in the annotation of schemata with comments, with all
**> the associated problems. It'll happen anyway, of course - if
**> something is optional, people will skip it.
*

Agreed. This is one way to "encourage" more sensible typing. Of course it requires good type support which many current vendors certainly do not provide.

> I also see some problems with type checking. Consider the query

*> "SELECT * FROM Point2D WHERE X = Y". Comparison of the attributes
**> require that they be the same type (or at least, one should be a
**> subtype of the other). Distinguishing unnamed attributes require that
**> they be unique types, which is the reason for copying them, but that
**> contradicts the comparison requirement.
*

As copies of Integer, both X and Y can be coerced to Integer. So we can allow either implicit or explicit type coercion. So either we can allow

** WHERE X = Y
**
by default or require explicit coercion

WHERE Integer(X) = Integer(Y)

by default. And which is allowed or required should again be left to the type system. So when I declare

copy Integer X

it may by default add both explicit and implicit coercion operators

() : X -> Integer

() : X -> Integer

Integer() : X -> Integer

Integer() : X -> Integer

or perhaps the following equality operators

- : Integer , X -> bool
- : X , Integer -> bool

which would allow the simple WHERE X = Y but one should be able to disable that for example by "deleting" those operators

delete () : X -> Integer

delete () : X -> Integer

or

delete = : Integer , X -> bool

delete = : X , Integer -> bool

In which case WHERE X = Y is now illegal and one must write the coercions explicitly such as WHERE Integer(X) = Integer(Y).

**KHD
**
Received on Mon Feb 15 2010 - 07:14:03 CET