# nulib\schema

* rajouter l'attribut "size" pour spécifier la taille maximale des valeurs
  * cela pourrait servir pour générer automatiquement des tables SQL
  * ou pour modéliser un schéma FSV

* support allowed_values

* valeurs composite/computed
  * analyse / vérification de la valeur complète après calcul du résultat, si
    tous les résultats sont bons
  * calcul des valeurs composites/computed par une fonction avant/après l'analyse
    globale si résultat ok
  * fonction getter_func, setter_func, deleter_func pour les propriétés de type
    computed
* tdate et tdatetime. qu'en est-il des autres classes (delay, etc.)
  * parse_format pour spécifier le format d'analyse au lieu de l'auto-détecter

* ScalarSchema::from_property()

* l'argument $format de AssocWrapper::format() est un tableau associatif
  `[$key => $format]`
  cela permet de spécifier des format spécifiques pour certains champs.
  * cela signifie que la valeur de retour n'est pas string :-(
    retourner string|array

* dans AssocSchema, support `[key_prefix]` qui permet de spécifier un préfixe
  commun aux champs dans le tableau destination, e.g
  ~~~php
  $wrapper = Schema::ns($schema, [
    "a" => "?string",
    "b" => "?int",
  ])->newWrapper();
  $value = ["x_a" => 5, "x_b" => "10"],
  $wrapper->reset($value, null, [
    "key_prefix" => "x_",
  ]);
  # $value vaut ["x_a" => "5", "x_b" => 10];
  ~~~
  définir si le préfixe doit être spécifié sur le schéma ou sur la valeur...
  actuellement, le code ne permet pas de définir de tels paramètres...

  alternative: c'est lors de la *définition* du schéma que le préfixe est ajouté
  e.g
  ~~~php
  $wrapper = Schema::ns($schema, [
    "a" => "?string",
    "b" => "?int",
  ], [
    "key_prefix" => "x_",
  ])->newWrapper();
  $value = ["x_a" => 5, "x_b" => "10"],
  $wrapper->reset($value);
  # $value vaut ["x_a" => "5", "x_b" => 10];
  ~~~
* actuellement, pour un schéma associatif, si on normalise un tableau séquentiel,
  chaque valeur correspond à la clé de même rang, eg. pour un schéma
  ~~~php
  const SCHEMA = ["first" => DEF, "second" => DEF];
  const ARRAY = ["first", "second"];
  ~~~
  la valeur normalisée de `ARRAY` est `["first" => "first", "second" => "second"]`

  cependant, dans certaines circonstances (notamment pour des paramètres), on
  devrait pouvoir considérer une valeur indexée comme un flag, i.e la valeur
  normalisée de ARRAY serait `["first" => true, "second" => true]`

  la définition de ces "circonstances" est encore à faire: soit un paramètre
  lors de la définition du schéma, soit un truc magique du genre "toutes les
  valeurs séquentielles sont des clés du schéma", soit un mode automatique
  activé par un paramètre où une valeur "val" devient "val"=>true si la clé
  "val" existe dans le schéma

-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary