Newbie questions about Pliant

Newbie questions about Pliant

Working with Data:X

It seems that although there is automatic conversion
between Link:X and X, there is no such for Data:X and X,
where X is some type. Was this by design ?
Message posted by maybe Boris Reitman on 2004/10/19 02:10:55
Here is an example probram.  If I uncomment the last line "a := bb"
in the main function, I get an compile error.

module "/pliant/language/compiler.pli"
module "/pliant/appli/database.pli"

type Test
  field Int x
  field Int y

gvar (Database Set:Test) dbRecs
dbRecs load "file:/tmp/test.pdb" mount "/sample/test/"
gvar (Data Set:Test) db :> dbRecs:data

function main
  var Test a
  var Link:Test b :> new Test
  b:x := 1
  b:y := 2

  a := b

  db create "key"
  var Data:Test bb :> db:"key"
  bb:x := 1
  bb:y := 2
  #a := bb


The error is,

  Failed to compile :=   (Test rw  (Data Test) rw)
    compile file:t.pli (internals) 24 5

Here is what I am doing.  I have a GUI dialog that has information about
addresses associated to a person. The addresses are stored in a pliant database.
However, a user who is using the dialog, can create new addresses, and until 
the dialog is closed (with OK button) I don't want to save those new address in a database. 
This means that the addresses are just Address objects and not Data:Address.  
So my algorithm for opening the dialog is 

  var List:Address list

  each stored_address person:addresses
    list += stored_address

  # do stuff with 'list' on the dialog, it will keep all the old 
  # and new addresses

  # user clicks OK and closes the dialog, time to save
  each address list
    person add_address address

where add_address will register the address with the db (create a new key, etc.)
Is this a correct idea, to convert all data to transient data, manipulate it 
and then save it all at once ?  If so, should there be an automatic deepcopy
if I do assignment of types 

:= (X  Data:X)

and similarly,

:= (Link:X Data:X) 
:= (Pointer:X Data:X) 

and vice versa,

:= (Data:X X)
:= (Data:X Link:X)
:= (Data:X Pointer:X)


Message posted by hubert.tonneau on 2004/10/26 10:34:10
Pliant database engine currently has no capability to copy records using ':='
Only fields are supported.

On the other hand, the 'data_copy' instruction will do what you expect.