Pliant talk forum

Pliant talk forum

Bug report: Recursive database types

I think recursive types should be allowed in a database.
Message posted by maybe Gordon Matzigkeit on 2002/03/19 22:48:28

Why does the following:
type O
 field Str data
 field Set:O links

gvar (Database Set:O) db

give a segmentation fault?  (After doing `module "/pliant/appli/database.pli"' of course).

Thanks,
Gord.
Message posted by maybe Hubert Tonneau on 2002/03/19 22:58:23
Because it's behond Pliant database engine design.
Probably 'Set' requires the type it receives as an argument to be fully defined
already.

If you want to store recursive trees using the Pliant database engine, then you
can use 'Anything' data

type.type O
 field Str data
 field Set:Anything links

Also you cannot use directly an 'Anything' data: you have to map it to another
data type using 'pmap'
Message posted by maybe Gordon Matzigkeit on 2002/03/20 17:02:06
I cannot test this yet.  I tried the database example, verbatim
from the appli/database/index.page, but found the following error:
Failed to compile db   (Str rc)
This was on the line containing:
console db:"abc":i eol

Help?

Thanks, 
Gord
Message posted by maybe Gordon Matzigkeit on 2002/03/20 17:39:36
BTW, this is with release 74.
Message posted by hubert.tonneau on 2002/03/20 22:24:25
At some point it changed in the code, but I forgot to update the documentation:
  console db:"abc":i eol
should now be:
  console db:data:"abc":i eol

In the sample 'db' is a database so it's root element is accessed through
'data' field. There used to be an implicit casting from the database to it's
root element, but it was a bad idea, so I removed it.

About the 'O' data type you tried to define: it's just what 'Anything' data
type contains:
one string value for each node,
and a set of subtrees that also have 'Anything' data type.

Assuming that 'a' is of type Data:Anything, then you can do things like:

console (a pmap "" Str) eol
console (a pmap "" Set:Str):"abc" eol
console (a "/abc" pmap Str) eol

the two last examples produce the same result.