Newbie questions about Pliant

Newbie questions about Pliant

Pliant DB server

Message posted by maybe Marcus on 2002/01/16 03:35:24
To experiment with the Pliant DB server, I wrote the following program (db.pli):

submodule "/pliant/appli/database.pli"

public

type mediaElements
  field Str type
  field Str title
  field Str content
  field Str message

type mediaElementsDatabase
  field Set:mediaElements element

gvar Database:mediaElementsDatabase element_database

element_database load "file:/pliant/speakersCorner/temp/mediaD.pdb"

gvar (Data Set:mediaElements) element :> element_database:data:element
------------------------------

To test it, I used the following program (.page):

-------------------
module "db.pli" 
 
title "test" 

var Str id := generate_id
element create id
element:id:type:="test"
----------------------


When I try to view this site, the system returns the error:
 
Failed to compile element   ('create'  'id')
  compile /speakersCorner/temp/mmdb1.page 7 3
  compile /speakersCorner/temp/mmdb1.page 6 65533
  compile /speakersCorner/temp/mmdb1.page 6 65533
  compile /speakersCorner/temp/mmdb1.page 5 1
  compile /speakersCorner/temp/mmdb1.page 5 1
  compile /speakersCorner/temp/mmdb1.page 4 1
  compile /speakersCorner/temp/mmdb1.page 4 1
  compile /speakersCorner/temp/mmdb1.page 3 3
  compile /speakersCorner/temp/mmdb1.page 3 3
  compile /speakersCorner/temp/mmdb1.page 2 1
  compile /speakersCorner/temp/mmdb1.page 2 1
  compile /speakersCorner/temp/mmdb1.page 1 1
  compile /speakersCorner/temp/mmdb1.page 1 1
  compile /speakersCorner/temp/mmdb1.page 1 1
  compile /speakersCorner/temp/mmdb1.page 1 1
  parse /speakersCorner/temp/mmdb1.page 10 65533
  module /speakersCorner/temp/mmdb1.page
  service HTTP request

However, if I restart the server, the program works.

Why is that?

Is it possible to avoid having to restart the server each time I define a new database?

The reason I am asking that is because in the course I teach, my students are using pliant to define databases managed by a *single* Pliant HTTP server. 
Message posted by maybe Hubert Tonneau on 2002/01/16 09:23:05
This is currently beyond Pliant compiler capabilities.
At the moment, defining a data type in a .page is not supported.

The reason is that a type must not be deleted before all instances using it,
and we are not currenly counting these precisely enough because it's not
trivial without impacting execution speed:

Let's assume that you create type A.
Then a type B with one A field inside.
Now, you create a new object with type B.
Should we increment the number of instances of A ?
If yes, it can be slow, if no, we only know that we have to keep A as long as
we have B. If I remember well, Pliant is not even that smart. It will
probably keep A forever, but take with care: this is one part of Pliant
engine that I should review more carrefully at some point because it may well
not do exactly what I think.
Message posted by maybe Marcus on 2002/01/16 12:23:10
I am confused...

- Is there an explanation, in pedestrian terms, for why my program works after I 
restart the server?

- When one defines a data type and a database in a .page file 
(e.g.http://pliant.cx/pliant/fullpliant/once.page), the only way to
 test the program is to restart the server and see if works?
Message posted by maybe Hubert Tonneau on 2002/01/16 13:20:16
> When one defines a data type and a database in a .page file 
> (e.g.http://pliant.cx/pliant/fullpliant/once.page), the only way to
> test the program is to restart the server and see if works?

Yes, also I'd rather say it the other way round:
the database definition (so the data types as well) must be in a .pli,
not a .page

At a later point, we may have better on the fly modules recompiling capabilities,
but at the moment, it's limited because I have not studied carrefully enough the
dependencies between various elements of a program (types, functions, datas).
Freeing functions works nicely, but that's currently all.
Message posted by maybe Hubert Tonneau on 2002/01/16 13:22:06
> Is there an explanation, in pedestrian terms, for why my program works after I 
  restart the server?

Because until you restart the server, you have two definitions for one thing
since the old definition has not been properly drop before starting to recompile
the .page




Message posted by maybe Patrice Ossona de Mendez on 2002/01/16 14:37:02
By the way, looking at the sample, it seems that the database was ACTUALLY
defined in a .pli !
Message posted by maybe Marcus on 2002/01/16 16:25:25
Yes, it was.

It seems now that I have a huge problem at hands: I have initially set up a 
course project where my students are asked to implement a multiemdia database
in Pliant (whithout resorting to mySQL and the like). In our labs we have *one* 
Pliant HTTP server deamon running and there are links from the students's 
directory to the Pliant tree. 

My sys. adminstrators have limited the students's disk use space, so they cannot
install pliant under their own directory and run the server. This, according to
them, would also overload the system (55 pliant deamons running simulateneously).

Message posted by maybe Marcus on 2002/01/16 16:25:44
Yes, it was.

It seems now that I have a huge problem at hands: I have initially set up a 
course project where my students are asked to implement a multiemdia database
in Pliant (whithout resorting to mySQL and the like). In our labs we have *one* 
Pliant HTTP server deamon running and there are links from the students's 
directory to the Pliant tree. 

My sys. adminstrators have limited the students's disk use space, so they cannot
install pliant under their own directory and run the server. This, according to
them, would also overload the system (55 pliant deamons running simulateneously).

Message posted by maybe Hubert Tonneau on 2002/01/16 20:35:34
I had not noticed that the database definition was in a .pli, not a .page
(I've been a bit overflowed these days)

If the database definition is not changing, only the student .page
program accessing it, there should absolutely no problem.

I cannot produce the error you noticed here.
What is the exact sequence to get the error ?
Message posted by maybe Marcus on 2002/01/17 13:08:25
Assuming the Pliant HTTP server deamon is running in the background, just add
add the the two files (the .pli and the .page) to the Pliant tree.

That's how I initially caused the aforementioned error. However, yesterday, while trying to reproduce the same error (in another machine), I didn't get it when 
I first created the database. Only eventually, after restarting the server and 
changing the database definition a couple of times.

Here is how I ended up causing it: to push it further, I changed the database 
definition (totally, names and everything), but using the same .pli and .page 
file names (with the difference that in the .page file, instead of populating the 
database, I was only listing the database data), and reloaded the respective .html file. This turn, Pliant returned the same data I have stored in the initial 
database definition.

Eventually, after restarting the server and changing the database definition a 
couple of times, I ended getting the error.

Message posted by maybe Hubert Tonneau on 2002/01/17 20:36:53
Is it clear for you that the .pli is loaded once by Pliant, and will never
be recompiled on the fly if you change it while the HTTP server is running ?

Only .page (a .page is in facts a Pliant function) file can be recompiled
on the fly when Pliant HTTP server detects that the source code changed.
Message posted by maybe Marcus on 2002/01/18 01:58:46
Yes. That is now crystal clear.

I will prepare a tutorial for my students that mentions these technical details.