Newbie questions about Pliant

Newbie questions about Pliant

Writing Data

Writing data with sub-keys.
Message posted by maybe Willer Alves on 2001/05/15 14:17:10
I've created the following database:

<<
submodule "/pliant/appli/database.pli"

public

type Module
  field Set:Str discipline

type Course
  field Str name
  field Str creator
  field Str update
  field Set:Module module

type CourseDatabase
  field Set:Course course

gvar Database:CourseDatabase course_database

course_database load "security:/course.pdb" mount "/pliant/course"

gvar (Data Set:Course) course :> course_database:data:course

>>
The purpose here is the implementation of a simple course database. Each course has its name, its creator, the last user that updated the database, and a set of modules. Each module has a set of disciplines. How could I create the modules and the disciplines inside each module? I've tried the code below, but it isn't working... Also, Pliant doesn't return an error. It creates the course, but writes just the name, creator and update. It doesn't create the modules and also, I don't know how to write the disciplines inside the modules.

course create id
course:id:name := name
course:id:creator := user_name
course:id:update := user_name
for (var Int i) 1 10
  each cr course filter (keyof cr)=id
    cr:module create "module_"+(string i)

Could you help me with this, or even give me another idea?
Thanks, and sorry the long mail.
Message posted by maybe Hubert Tonneau on 2001/05/15 15:05:08
This is a small bug in Pliant engine database:
there is no data in the modules you create, because they have no 'discipline'
record, so they get lost when the database engine is restarted.

A simple patch is to change 'Module' type with:

type Module
  field Set:Str discipline
  field Void drop
Message posted by maybe Willer Alves on 2001/05/15 18:31:08
Well, I did that and the code is creating these lines in the database:

<pdata path="/course/electric/creator">willer</pdata>
<pdata path="/course/electric/module/module_1/drop"></pdata>
<pdata path="/course/electric/module/module_2/drop"></pdata>
<pdata path="/course/electric/module/module_3/drop"></pdata>
<pdata path="/course/electric/module/module_4/drop"></pdata>
<pdata path="/course/electric/module/module_5/drop"></pdata>
<pdata path="/course/electric/name">Electrical Engineering</pdata>
<pdata path="/course/electric/update">willer</pdata>

Ok, It is creating the modules. But I still don't know how to create my
disciplines into each module. I've tried this:

each cr course filter (keyof cr)=id
  each w cr:module filter (keyof w)="module_1"
    w:discipline create "Algebra"
    w:discipline create "Calculus"
    w:discipline create "Programming"

And also this:

each cr course filter (keyof cr)=id
  each w cr:module filter (keyof w)="module_1"
    w:"module_1":discipline create "Algebra"
    w:"module_1":discipline create "Calculus"
    w:"module_1":discipline create "Programming"

But those codes above are not working.

Thanks for your attention.

Message posted by maybe Hubert Tonneau on 2001/05/15 18:54:13
The first of your samples is working:

<pdata path="/course/abc/creator">hubert.tonneau</pdata>
<pdata path="/course/abc/module/module_1/discipline/Algebra"></pdata>
<pdata path="/course/abc/module/module_1/discipline/Calculus"></pdata>
<pdata path="/course/abc/module/module_1/discipline/Programming"></pdata>
<pdata path="/course/abc/module/module_1/void"></pdata>
<pdata path="/course/abc/module/module_10/void"></pdata>
<pdata path="/course/abc/module/module_2/void"></pdata>
<pdata path="/course/abc/module/module_3/void"></pdata>
<pdata path="/course/abc/module/module_4/void"></pdata>
<pdata path="/course/abc/module/module_5/void"></pdata>
<pdata path="/course/abc/module/module_6/void"></pdata>
<pdata path="/course/abc/module/module_7/void"></pdata>
<pdata path="/course/abc/module/module_8/void"></pdata>
<pdata path="/course/abc/module/module_9/void"></pdata>
<pdata path="/course/abc/name">hubert</pdata>
<pdata path="/course/abc/update">hubert.tonneau</pdata>


Also what's very suprising to me, is things like:
  each cr course filter (keyof cr)=id
    ...

Which is equivalent, but far less efficient than:
  var Data:Course cr :> course id
  ...