diff --git a/src/module_qualigeo/README.md b/src/module_qualigeo/README.md new file mode 100644 index 0000000000000000000000000000000000000000..7e56be5ed9de782ba4d5242b2905c65ff5bd49d4 --- /dev/null +++ b/src/module_qualigeo/README.md @@ -0,0 +1,3 @@ +# module_qualigeo + +Module Qualigeo for Vitis \ No newline at end of file diff --git a/src/module_qualigeo/_install/dependency.xml b/src/module_qualigeo/_install/dependency.xml new file mode 100755 index 0000000000000000000000000000000000000000..8dc5e67f64616d008d107b2ec553d85eb3103bb5 --- /dev/null +++ b/src/module_qualigeo/_install/dependency.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- WS Qualigeo --> +<installer> + <schema> + <name>q_constraint</name> + <dependenciesCollection> + <dependency> + <nature>schema</nature> + <name>s_vitis</name> + <object>vitis</object> + </dependency> + <dependency> + <name>postgis</name> + <version>2.0</version> + <nature>extern-pre</nature> + </dependency> + <dependency> + <name>admin-user</name> + <nature>extern-post</nature> + </dependency> + </dependenciesCollection> + </schema> +</installer> diff --git a/src/module_qualigeo/web_service/conf/version.inc b/src/module_qualigeo/web_service/conf/version.inc new file mode 100755 index 0000000000000000000000000000000000000000..034c8379c3e1b539a90b41832711d1dc6ed70c62 --- /dev/null +++ b/src/module_qualigeo/web_service/conf/version.inc @@ -0,0 +1,7 @@ +<?php +// Numéro de la version de Qualigeo +define ("VM_VERSION", "[VERSION]"); +define ("VM_BUILD", "[BUILD]"); +define ("VM_MONTH_YEAR", "[MONTH_YEAR]"); +define ("VM_STATUS", "UNSTABLE"); +?> \ No newline at end of file diff --git a/src/module_qualigeo/web_service/sql/sqlQueries.xml b/src/module_qualigeo/web_service/sql/sqlQueries.xml new file mode 100755 index 0000000000000000000000000000000000000000..4dc234e924a22a2b5316ad718c7e0199928f114c --- /dev/null +++ b/src/module_qualigeo/web_service/sql/sqlQueries.xml @@ -0,0 +1,1173 @@ +<?xml version="1.0" encoding="utf-8"?> +<sqlQueries> + <title>Scripts d''installation de Qualigeo</title> + <queriesCollection> + <query> + <type>init</type> + <version>2017.01.00</version> + <code> + <![CDATA[ + CREATE SCHEMA q_constraint AUTHORIZATION u_vitis; + CREATE SCHEMA q_control AUTHORIZATION u_vitis; + SELECT s_vitis.create_role_if_not_exists('qual_administrator', 'NOSUPERUSER INHERIT NOCREATEDB CREATEROLE NOREPLICATION'); + SELECT s_vitis.create_role_if_not_exists('qual_controler', 'NOSUPERUSER INHERIT NOCREATEDB CREATEROLE NOREPLICATION'); + SELECT s_vitis.create_role_if_not_exists('qual_designer', 'NOSUPERUSER INHERIT NOCREATEDB CREATEROLE NOREPLICATION'); + SET search_path TO q_constraint; + CREATE SEQUENCE seq_qualigeo; + CREATE TABLE geometry_interpretation(id_geometry_interpretation INT4 NOT NULL, geometry_interpretation VARCHAR(50) NULL, CONSTRAINT PK_GEOMETRY_INTERPRETATION primary key (id_geometry_interpretation)); + COMMENT ON TABLE geometry_interpretation IS 'Correspond à l''attribut de format fme_type de FME. cf. http://docs.safe.com/fme/pdf/FMEFundamentals.pdf Fournit des informations sur l''interprétation à donner à chaque géométrie :\n Les valeurs par défaut sont :\n 0:fme_no_geom\n 1:fme_point\n 2:fme_line\n 3:fme_area\n 4:fme_arc\n 5:fme_ellipse\n 6:fme_collection\n 7:fme_raster'; + COMMENT ON COLUMN geometry_interpretation.id_geometry_interpretation IS 'Identifiant de l''interprétation géométrique'; + COMMENT ON COLUMN geometry_interpretation.geometry_interpretation IS 'Nom de l''interprétation'; + INSERT INTO geometry_interpretation (id_geometry_interpretation,geometry_interpretation) values (0, 'fme_no_geom'); + INSERT INTO geometry_interpretation (id_geometry_interpretation,geometry_interpretation) values (1, 'fme_point'); + INSERT INTO geometry_interpretation (id_geometry_interpretation,geometry_interpretation) values (2, 'fme_line'); + INSERT INTO geometry_interpretation (id_geometry_interpretation,geometry_interpretation) values (3, 'fme_area'); + INSERT INTO geometry_interpretation (id_geometry_interpretation,geometry_interpretation) values (4, 'fme_arc'); + INSERT INTO geometry_interpretation (id_geometry_interpretation,geometry_interpretation) values (5, 'fme_ellipse'); + INSERT INTO geometry_interpretation (id_geometry_interpretation,geometry_interpretation) values (6, 'fme_collection'); + INSERT INTO geometry_interpretation (id_geometry_interpretation,geometry_interpretation) values (7, 'fme_raster'); + INSERT INTO geometry_interpretation (id_geometry_interpretation,geometry_interpretation) values (8, 'fme_solid'); + INSERT INTO geometry_interpretation (id_geometry_interpretation,geometry_interpretation) values (9, 'fme_surface'); + INSERT INTO geometry_interpretation (id_geometry_interpretation,geometry_interpretation) values (10,'fme_text'); + CREATE UNIQUE INDEX ik_geometry_interpretation ON geometry_interpretation (geometry_interpretation); + CREATE TABLE geometry_type (id_geometry_type INT4 NOT NULL, geometry_type VARCHAR(50) NULL, CONSTRAINT PK_GEOMETRY_TYPE primary key (id_geometry_type)); + COMMENT ON TABLE geometry_type IS 'Correspond à l''attribut de format fme_geometry de FME. cf. http://docs.safe.com/fme/pdf/FMEFundamentals.pdf\ nFournit des informations sur le type de la géométrie de l''objet :\n Les valeurs par défaut sont :\n 0:fme_undefined\n 1:fme_point\n 2:fme_line\n 3:fme_polygon\n 4:fme_donut\n 5:fme_aggregate'; + INSERT INTO q_constraint.geometry_type (id_geometry_type, geometry_type) VALUES (0,'fme_undefined'); + INSERT INTO q_constraint.geometry_type (id_geometry_type, geometry_type) VALUES (1,'fme_point'); + INSERT INTO q_constraint.geometry_type (id_geometry_type, geometry_type) VALUES (2,'fme_line'); + INSERT INTO q_constraint.geometry_type (id_geometry_type, geometry_type) VALUES (3,'fme_polygon'); + INSERT INTO q_constraint.geometry_type (id_geometry_type, geometry_type) VALUES (4,'fme_donut'); + INSERT INTO q_constraint.geometry_type (id_geometry_type, geometry_type) VALUES (5,'fme_aggregate'); + CREATE UNIQUE INDEX uk_geometry_type ON geometry_type (geometry_type); + CREATE TABLE h_named_expression (name VARCHAR(50) NOT NULL, value TEXT NOT NULL, CONSTRAINT PK_H_NAMED_EXPRESSION primary key (name)); + COMMENT ON TABLE h_named_expression IS 'Liste d''expression régulière. Permet de définir des expressions régulières qui pourront être réutilisés.'; + COMMENT ON COLUMN h_named_expression.name IS 'Nom de l''expression nommée'; + COMMENT ON COLUMN h_named_expression.value IS 'valeur de l''expression régulière'; + CREATE UNIQUE INDEX uk_expression ON h_named_expression (name); + CREATE TABLE rt_existence (id_existence INT4 NOT NULL, existence VARCHAR(20) NULL, CONSTRAINT PK_RT_EXISTENCE primary key (id_existence)); + COMMENT ON TABLE rt_existence IS 'liste les différentes possiblités de présence d''une entité par rapport à une autre.'; + COMMENT ON COLUMN rt_existence.id_existence IS 'Identifiant du type de présence Type INT4 utilisé pour avoir la main sur la clef primaire'; + COMMENT ON COLUMN rt_existence.existence IS 'Label du type de présence'; + CREATE UNIQUE INDEX uk_existence ON rt_existence (existence); + CREATE TABLE h_format_date (name VARCHAR(50) NOT NULL, value VARCHAR(255) NOT NULL, CONSTRAINT PK_H_FORMAT_DATE primary key (name)); + COMMENT ON TABLE h_format_date IS 'Liste différents formats de date.\n Permet de vérifier qu''une date correspond bien au format souhaité.'; + COMMENT ON COLUMN h_format_date.name IS 'Format de la date à laquelle doit correspondre l''attribut'; + CREATE UNIQUE INDEX uk_format_date ON h_format_date (name); + CREATE TABLE rt_stat_type (id_stat_type INT4 NOT NULL, stat_type VARCHAR(20) NULL, CONSTRAINT PK_RT_STAT_TYPE primary key (id_stat_type)); + COMMENT ON TABLE rt_stat_type IS 'Permet de définir le type de l''attribut.\n Est aussi utilisée pour faire des statisiques sur les différents type de données\n String : NULL ou NOT NULL\n Numérique : valeurs Min et Max\n Domaine : Nombre d''occurence'; + COMMENT ON COLUMN rt_stat_type.id_stat_type IS 'Identifiant du type de donnée\n Type INT4 utilisé pour avoir la main sur la clef primaire'; + COMMENT ON COLUMN rt_stat_type.stat_type IS 'Label du type de donnée'; + CREATE UNIQUE INDEX uk_stat_type ON rt_stat_type (stat_type); + CREATE TABLE rt_topology_constraint (id_topology_constraint INT4 NOT NULL, topology_constraint VARCHAR(40) NOT NULL, CONSTRAINT PK_RT_TOPOLOGY_CONSTRAINT primary key (id_topology_constraint)); + COMMENT ON TABLE rt_topology_constraint IS 'Liste les différentes contrainte topologiques'; + COMMENT ON COLUMN rt_topology_constraint.id_topology_constraint IS 'Identifiant de la contrainte topologique\n Type INT4 utilisé pour avoir la main sur la clef primaire'; + COMMENT ON COLUMN rt_topology_constraint.topology_constraint IS 'Label de la contrainte topologique'; + CREATE UNIQUE INDEX uk_topology_constraint ON rt_topology_constraint (topology_constraint); + CREATE TABLE "q_constraint"."rt_build_constraint"("id_build_constraint" Integer NOT NULL, "build_constraint" Character varying(255) NOT NULL)WITH (OIDS=FALSE); + ALTER TABLE "q_constraint"."rt_build_constraint" ADD CONSTRAINT "Key1" PRIMARY KEY ("id_build_constraint"); + CREATE TABLE h_spatial_domain (spatial_domain VARCHAR(255) NOT NULL, x_min FLOAT4 NULL DEFAULT '0', y_min FLOAT4 NULL DEFAULT '0', z_min FLOAT4 NULL DEFAULT '0', x_max FLOAT4 NULL DEFAULT '0', y_max FLOAT4 NULL DEFAULT '0', z_max FLOAT4 NULL DEFAULT '0', limited_coordsys BOOL NULL, coordsys VARCHAR(50) NULL, CONSTRAINT PK_SPATIAL_DOMAIN primary key (spatial_domain)); + COMMENT ON TABLE h_spatial_domain IS 'Liste les coordonnées spatiales dans lesquels doit être inclus le schéma'; + COMMENT ON COLUMN h_spatial_domain.spatial_domain IS 'Identifiant du domaine spatial'; + CREATE TABLE spatial_operator (id_operator VARCHAR(20) NOT NULL, name VARCHAR(50) NOT NULL, is_build_constraint BOOL NULL, CONSTRAINT PK_SPATIAL_OPERATOR primary key (id_operator)); + COMMENT ON TABLE spatial_operator IS 'Liste les différents opérateurs spatiaux'; + COMMENT ON COLUMN spatial_operator.id_operator IS 'Identifiant de l''opérateur'; + CREATE UNIQUE INDEX uk_name_sp ON spatial_operator (name); + CREATE TABLE schema ( id_schema INT4 NOT NULL DEFAULT nextval('q_constraint.seq_qualigeo'::regclass), schema VARCHAR(70) NOT NULL, "precision" INT4 NULL, tolerance real NULL, date_schema TIMESTAMP WITH TIME ZONE NULL DEFAULT 'now()', comment TEXT NULL, version INT4 NULL DEFAULT 1, deny_undefined_ft BOOL NULL DEFAULT FALSE, x_min FLOAT4 NULL DEFAULT '0', y_min FLOAT4 NULL DEFAULT '0', z_min FLOAT4 NULL DEFAULT '0', x_max FLOAT4 NULL DEFAULT '0', y_max FLOAT4 NULL DEFAULT '0', z_max FLOAT4 NULL DEFAULT '0', limited_coordsys BOOL NULL, coordsys VARCHAR(50) NULL, deny_undefined_attribute BOOL NULL DEFAULT FALSE, public BOOL NULL DEFAULT false, "user" varchar(50) NULL DEFAULT "current_user"(), CONSTRAINT PK_SCHEMA primary key (id_schema)); + COMMENT ON TABLE schema IS 'Liste les différents schémas à controler dans un jeu de données.\n Les schémas correspondent aux modèles de données (structures)\n Permet de vérifier que les jeu de données correspondent bien au modèle souhaité.\n Un modèle de donnée peut s''appliquer à plusieurs jeu de donnée et pour un jeu de donnée il peut y avoir plusieurs modèles de données en fonction des contraintes que l''ON souhaite vérifier'; + COMMENT ON COLUMN schema.id_schema IS 'Identifiant du schéma'; + COMMENT ON COLUMN schema.schema IS 'Label du schéma'; + COMMENT ON COLUMN schema.date_schema IS 'date de création du schéma\n Voir si par la suite date de modification\n mise à jour avec trigger\n valeur par défaut : ''now ()''\n représente date et heure du jour'; + COMMENT ON COLUMN schema.comment IS 'Commentaire sur le schéma'; + COMMENT ON COLUMN schema.version IS 'n° de version du schéma. Incrémentation automatique à partir d''une séquence à chaque changement du schéma ou d''une table liée. Mise à jour par trigger\n Valeur par défaut Now()'; + COMMENT ON COLUMN schema.coordsys IS 'Système de coord. du jeu de données. Utiliser la dénommination des coordsys de FME (CS_NAME).'; + CREATE UNIQUE INDEX uk_schema ON schema (schema); + CREATE TABLE code (id_schema INT4 NOT NULL DEFAULT nextval('q_constraint.seq_qualigeo'::regclass), code_language VARCHAR(20) NOT NULL, code TEXT NULL, CONSTRAINT PK_CODE primary key (id_schema, code_language), CONSTRAINT FK_CODE_REFERENCE_SCHEMA foreign key (id_schema) REFERENCES schema (id_schema) ON DELETE CASCADE ON UPDATE CASCADE); + COMMENT ON COLUMN code.id_schema IS 'Identifiant du schéma'; + CREATE TABLE q_constraint.schema_constraint (id_schema_constraint INT4 NOT NULL DEFAULT nextval('q_constraint.seq_qualigeo'::regclass), id_schema INT4 NOT NULL, name VARCHAR(50) NOT NULL, code_constraint TEXT NULL,code_language VARCHAR(20) NOT NULL, enabled BOOL DEFAULT true, CONSTRAINT PK_SCHEMA_CONSTRAINT primary key (id_schema_constraint), CONSTRAINT FK_SCHEMA_C_REFERENCE_SCHEMA foreign key (id_schema) REFERENCES schema (id_schema) ON DELETE CASCADE ON UPDATE CASCADE); + COMMENT ON COLUMN schema_constraint.id_schema IS 'Identifiant du schéma'; + CREATE UNIQUE INDEX uk_id_schema_name ON schema_constraint (id_schema, name); + CREATE TABLE feature_type (id_ft INT4 NOT NULL DEFAULT nextval('q_constraint.seq_qualigeo'::regclass), id_schema INT4 NULL, feature_type VARCHAR(100) NOT NULL, id_existence INT4 NULL DEFAULT 1, expression VARCHAR(255) NULL, color_border VARCHAR(7) NULL, color_fill VARCHAR(7) NULL, ogc_validation BOOL NULL DEFAULT FALSE, enabled BOOL NULL DEFAULT TRUE, id_build_constraint Integer NULL, code_language VARCHAR(20) NULL, code_validation_rule TEXT NULL, enabled_build BOOL NULL DEFAULT TRUE, CONSTRAINT PK_FEATURE_TYPE primary key (id_ft), CONSTRAINT FK_FEATURE__REFERENCE_RT_EXIST foreign key (id_existence) REFERENCES rt_existence (id_existence) ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT FK_FEATURE__REFERENCE_SCHEMA foreign key (id_schema) REFERENCES schema (id_schema) ON DELETE CASCADE ON UPDATE CASCADE); + COMMENT ON TABLE feature_type IS 'Liste les différents types d''entités que l''ON souhaite controler dans un schéma'; + COMMENT ON COLUMN feature_type.id_ft IS 'Identifiant du type d''entité'; + COMMENT ON COLUMN feature_type.id_schema IS 'Identifiant du schéma associé'; + COMMENT ON COLUMN feature_type.feature_type IS 'Label du Type d''entité'; + COMMENT ON COLUMN feature_type.id_existence IS 'Identifiant du type de présence dune entité sur le jeu de donnée'; + COMMENT ON COLUMN feature_type.expression IS 'expression régulière pour définir si d''autres types d''entités peuvent être ou non présentes'; + COMMENT ON COLUMN feature_type.color_border IS 'couleur de bordure en hexadécimal\n ex : #459862'; + COMMENT ON COLUMN feature_type.color_fill IS 'couleur du fond en hexadécimal\n ex : #459862'; + COMMENT ON COLUMN feature_type.ogc_validation IS 'Booleen qui définit sur le type d''entité doit être validé par l''ogc'; + CREATE INDEX ndx_constraint ON feature_type (id_existence); + CREATE INDEX ndx_tr_constraint_ft ON feature_type (id_schema); + CREATE UNIQUE INDEX uk_schema_and_ft ON feature_type (id_schema,feature_type); + CREATE TABLE ft_geometry_interpretation (id_geometry_interpretation INT4 NOT NULL, id_ft INT4 NOT NULL, id_schema INT4 NOT NULL, CONSTRAINT PK_FT_GEOMETRY_INTERPRETATION primary key (id_geometry_interpretation, id_ft), CONSTRAINT FK_FT_GEOME_REFERENCE_GEOMETRY foreign key (id_geometry_interpretation) REFERENCES geometry_interpretation (id_geometry_interpretation) ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT FK_FT_GEO_REF_FT_FT foreign key (id_ft) REFERENCES feature_type (id_ft) ON DELETE CASCADE ON UPDATE CASCADE); + COMMENT ON TABLE ft_geometry_interpretation IS 'Liste les relations entre les types d''entités et les interprétations géométriques'; + COMMENT ON COLUMN ft_geometry_interpretation.id_geometry_interpretation IS 'identifiant de l''interprétation géométrique'; + COMMENT ON COLUMN ft_geometry_interpretation.id_ft IS 'Identifiant du type d''entité'; + CREATE TABLE feature_constraint (id_feature_constraint INT4 NOT NULL DEFAULT nextval('q_constraint.seq_qualigeo'::regclass), id_ft INT4 NOT NULL, name VARCHAR(50) NOT NULL, code_constraint TEXT NULL, code_language VARCHAR(20) NOT NULL, id_schema INT4 NOT NULL, enabled BOOL DEFAULT true, CONSTRAINT PK_FEATURE_CONSTRAINT primary key (id_feature_constraint), CONSTRAINT FK_FEATURE__REFERENCE_FEATURE_ foreign key (id_ft) REFERENCES feature_type (id_ft) ON DELETE CASCADE ON UPDATE CASCADE); + COMMENT ON TABLE feature_constraint IS 'Décrit les contraintes applicables au niveau d''un type d''entité. Une contrainte est une formule qui renvoie une résultat booléen. si le résultat de l''évaluation de la formule est Vrai/1 la contrainte est satisfaite, sinon elle ne l''est pas. La syntaxe a utiliser est celle de la fonction @Evaluate() de FME qui correspond à ExpressionEvaluator. Cette syntaxe permet des comparaisons entre attributs ainsi que l''appel de fonction fme telles que le calcul de superficie ou de longueur.\n cf. http://www.safe.com/elqNow/elqRedir.htm?ref=http://docs.safe.com/fme/pdf/FMEFunctionsFactories.pdf\n Exemple :\n ((@Value(POP_DEP)*1.0)/@Area())>1e-4\n renvoie 1 si la densité de population (valeur de l''attribut POP_DEP sur la superficie) est supérieure à 1.10e-4\n @Dimension()=3 \n renvoie 1 si la géométrie de l''objet est en 3D'; + COMMENT ON COLUMN feature_constraint.id_ft IS 'Identifiant du type d''entité'; + CREATE INDEX ndx_id_ft_constraint ON feature_constraint (id_ft); + CREATE UNIQUE INDEX uk_id_ft_name ON feature_constraint (id_ft,name); + CREATE TABLE relation (id_relation INT4 NOT NULL DEFAULT nextval('q_constraint.seq_qualigeo'::regclass), name VARCHAR(50) NULL, id_ft_parent INT4 NULL, id_ft_child INT4 NULL, cardinality_child_parent_min VARCHAR(10) NULL DEFAULT '0', cardinality_child_parent_max VARCHAR(10) NULL DEFAULT '1', cardinality_parent_child_min VARCHAR(10) NULL DEFAULT '0', cardinality_parent_child_max VARCHAR(10) NULL DEFAULT 'n', comment TEXT NULL, id_schema INT4 NOT NULL, enabled BOOL DEFAULT true, CONSTRAINT PK_RELATION primary key (id_relation), CONSTRAINT FK_REL_REF_FT_PARENT foreign key (id_ft_parent) REFERENCES feature_type (id_ft) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT FK_REL_REF_FT_CHILD foreign key (id_ft_child) REFERENCES feature_type (id_ft) ON DELETE CASCADE ON UPDATE CASCADE); + COMMENT ON TABLE relation IS 'Liste les relations parent enfant entre deux types d''entités. Permet aussi de définir les cardinalités entre deux types d''entités.'; + COMMENT ON COLUMN relation.id_relation IS 'identifiant de la relation de cardianlité'; + COMMENT ON COLUMN relation.id_ft_parent IS 'Identifiant du type d''entité parent'; + COMMENT ON COLUMN relation.id_ft_child IS 'Identifiant du type d''entité enfant'; + COMMENT ON COLUMN relation.cardinality_child_parent_min IS 'cardinalité enfant parent min'; + COMMENT ON COLUMN relation.cardinality_child_parent_max IS 'cardinalité enfant parent max'; + COMMENT ON COLUMN relation.cardinality_parent_child_min IS 'cardinalité parent enfant max'; + COMMENT ON COLUMN relation.cardinality_parent_child_max IS 'cardinalité parent enfant min'; + COMMENT ON COLUMN relation.comment IS 'commentaire'; + CREATE TABLE spatial_relation (id_sp_rel INT4 NOT NULL DEFAULT nextval('q_constraint.seq_qualigeo'::regclass), name VARCHAR(50) NULL, id_ft INT4 NULL, id_linked_ft INT4 NULL, id_relation INT4 NULL, id_schema INT4 NOT NULL, enabled BOOL DEFAULT true, CONSTRAINT PK_SPATIAL_RELATION primary key (id_sp_rel), CONSTRAINT FK_SPATIAL__REFERENCE_FEATURE_1 foreign key (id_ft) REFERENCES feature_type (id_ft) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT FK_SPATIAL__REFERENCE_FEATURE_2 foreign key (id_linked_ft) REFERENCES feature_type (id_ft) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT FK_SPATIAL__REFERENCE_RELATION foreign key (id_relation) REFERENCES relation (id_relation) ON DELETE set NULL); + COMMENT ON TABLE spatial_relation IS 'liste la relation entre deux entités'; + COMMENT ON COLUMN spatial_relation.id_sp_rel IS 'Identifiant de la relation entre deux entité'; + COMMENT ON COLUMN spatial_relation.id_ft IS 'Identifiant dy type d''entité'; + COMMENT ON COLUMN spatial_relation.id_linked_ft IS 'Identifiant du type d''entité lié'; + COMMENT ON COLUMN spatial_relation.id_relation IS 'identifiant de la relation de cardianlité'; + CREATE INDEX ndx_sr_te ON spatial_relation (id_ft); + CREATE UNIQUE INDEX uk_ft_and_link ON spatial_relation (id_ft,id_linked_ft); + CREATE INDEX ndx_link_te ON spatial_relation (id_linked_ft); + CREATE TABLE topology (id_topology INT4 NOT NULL DEFAULT nextval('q_constraint.seq_qualigeo'::regclass), id_ft INT4 NULL, id_topology_constraint INT4 NULL, code_validation_rule TEXT NULL, code_language VARCHAR(20) NULL, comment TEXT NULL, id_schema INT4 NOT NULL, enabled BOOL DEFAULT true, CONSTRAINT PK_TOPOLOGY primary key (id_topology), CONSTRAINT FK_TOPOLOGY_REFERENCE_FEATURE_ foreign key (id_ft) REFERENCES feature_type (id_ft) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT FK_TOPOLOGY_REFERENCE_RT_TOPOL foreign key (id_topology_constraint) REFERENCES rt_topology_constraint (id_topology_constraint) ON DELETE RESTRICT ON UPDATE CASCADE); + COMMENT ON TABLE topology IS 'Liste les différentes relations de contraintes topologiques aux entités. Permet de définir le format d''une entité'; + COMMENT ON COLUMN topology.id_topology IS 'Identifiant de la relation de contrainte topologique'; + COMMENT ON COLUMN topology.id_ft IS 'Identifiant du type d''entité'; + COMMENT ON COLUMN topology.id_topology_constraint IS 'Identifiant de la contrainte topologique'; + CREATE UNIQUE INDEX uk_topology ON topology (id_ft,id_topology_constraint); + CREATE TABLE unique_constraint (id_unique_constraint INT4 NOT NULL DEFAULT nextval('q_constraint.seq_qualigeo'::regclass), id_ft INT4 NULL, primary_key BOOL NULL DEFAULT TRUE, old_id_unique_constraint INT4, enabled BOOL DEFAULT true, CONSTRAINT PK_UNIQUE_CONSTRAINT primary key (id_unique_constraint), id_schema INT4 NOT NULL, CONSTRAINT FK_UNIQUE_C_REFERENCE_FEATURE_ foreign key (id_ft) REFERENCES feature_type (id_ft) ON DELETE CASCADE ON UPDATE CASCADE); + COMMENT ON COLUMN unique_constraint.id_ft IS 'Identifiant du type d''entité'; + CREATE INDEX ndx_ft_unique ON unique_constraint (id_ft); + CREATE TABLE ft_geometry_type ( id_geometry_type INT4 NOT NULL, id_ft INT4 NOT NULL, id_schema INT4 NOT NULL, CONSTRAINT PK_FT_GEOMETRY_TYPE primary key (id_geometry_type, id_ft), CONSTRAINT FK_FT_GEO_REF_GEO_TY foreign key (id_geometry_type) REFERENCES geometry_type (id_geometry_type) ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT FK_FT_GEO_REF_FT_TY foreign key (id_ft) REFERENCES feature_type (id_ft)ON DELETE CASCADE ON UPDATE CASCADE); + COMMENT ON TABLE ft_geometry_type IS 'Liste les relation entre les types d''entités et les types de géométrie de l''objet'; + COMMENT ON COLUMN ft_geometry_type.id_geometry_type IS 'identifiant du type de géométrie'; + COMMENT ON COLUMN ft_geometry_type.id_ft IS 'Identifiant du type d''entité'; + CREATE TABLE rt_attribute_type (id_type INT4 NOT NULL, attribute_type VARCHAR(20) NOT NULL, CONSTRAINT PK_RT_ATTRIBUT_TYPE primary key (id_type)); + CREATE TABLE attribute (id_attribute INT4 NOT NULL DEFAULT nextval('q_constraint.seq_qualigeo'::regclass), id_ft INT4 NOT NULL, null_allowed BOOL NULL DEFAULT True, length FLOAT4 NULL, expression TEXT NULL, min FLOAT4 NULL, max FLOAT4 NULL, id_stat_type INT4 NULL, id_type INT4 NULL, code_constraint TEXT NULL, code_language VARCHAR(20) NULL, enabled BOOL NULL DEFAULT FALSE, format_date VARCHAR(255) NULL, name VARCHAR(100) NOT NULL, id_schema INT4 NOT NULL, CONSTRAINT PK_ATTRIBUT primary key (id_attribute), CONSTRAINT FK_ATTRIBUT_REFERENCE_FEATURE_ foreign key (id_ft) REFERENCES feature_type (id_ft) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT FK_ATTRIBUT_REFERENCE_RT_STAT_ foreign key (id_stat_type) REFERENCES rt_stat_type (id_stat_type) ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT FK_ATTRIBUT_REFERENCE_RT_ATTRI foreign key (id_type) REFERENCES rt_attribute_type (id_type) ON DELETE RESTRICT ON UPDATE RESTRICT); + COMMENT ON TABLE attribute IS 'Liste les différentes attributs associées aux entités. Permet de définir aussi les contraintes liées à ces attributs\n Nom de table attribut_ remplacer par attribut\n Olivier avait donné ce nom car il avait eu un problème !!!'; + COMMENT ON COLUMN attribute.id_attribute IS 'Identifiant de l''attribut'; + COMMENT ON COLUMN attribute.id_ft IS 'Identifiant du type d''entité'; + COMMENT ON COLUMN attribute.null_allowed IS 'Booleen pour savoir si la valeur NULL est autorisée\n n''est pas ajouté dans rt_attr_constraint car il est possible d''avoir une valeur unique NULL'; + COMMENT ON COLUMN attribute.length IS 'Longueur maximale de l''attribut'; + COMMENT ON COLUMN attribute.expression IS 'Expression régulière à laquelle l''attribut doit correspondre'; + COMMENT ON COLUMN attribute.min IS 'Valeur Min de l''attribut\n Concerne seulement les valeurs numériques'; + COMMENT ON COLUMN attribute.max IS 'Valeur Max de l''attribut\n Concerne seulement les valeurs numériques'; + COMMENT ON COLUMN attribute.id_stat_type IS 'Type de l''attribut\n l''attribut doit être du type défini dans ce champs. Permet aussi de faire des statistiques'; + COMMENT ON COLUMN attribute.code_constraint IS 'Expression tcl que doit valider l''attribut'; + COMMENT ON COLUMN attribute.code_language IS 'Expression python que doit valider l''attribut'; + CREATE INDEX ndx_ft_attribut ON attribute (id_ft); + CREATE UNIQUE INDEX uk_ft_and_name ON attribute (id_ft,name); + CREATE INDEX ndx_stat_type ON attribute (id_stat_type); + CREATE TABLE domain_value (value VARCHAR(255) NOT NULL, id_attribute INT4 NOT NULL, id_schema INT4 NOT NULL, CONSTRAINT PK_DOMAIN_VALUE primary key (value, id_attribute), CONSTRAINT FK_DOMAIN_V_REFERENCE_ATTRIBUT foreign key (id_attribute) REFERENCES attribute (id_attribute) ON DELETE CASCADE ON UPDATE CASCADE); + COMMENT ON TABLE domain_value IS 'Liste des différentes valeurs de chaque domaine'; + COMMENT ON COLUMN domain_value.value IS 'valeur contenue dans le domaine'; + COMMENT ON COLUMN domain_value.id_attribute IS 'Identifiant de l''attribut'; + CREATE TABLE sp_operator_sp_relation (id_operator VARCHAR(20) NOT NULL, id_sp_rel INT4 NOT NULL, id_schema INT4 NOT NULL, CONSTRAINT PK_SP_OPERATOR_SP_RELATION primary key (id_operator, id_sp_rel), CONSTRAINT FK_SPATIAL__REF_SPATIAL_OP foreign key (id_operator) REFERENCES spatial_operator (id_operator) ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT FK_SPATIAL__REF_SPATIAL_REL foreign key (id_sp_rel) REFERENCES spatial_relation (id_sp_rel) ON DELETE CASCADE ON UPDATE CASCADE); + COMMENT ON TABLE sp_operator_sp_relation IS 'Liste les différentes traduction des operateurs spatiaux'; + COMMENT ON COLUMN sp_operator_sp_relation.id_operator IS 'Identifiant de l''opérateur'; + COMMENT ON COLUMN sp_operator_sp_relation.id_sp_rel IS 'Identifiant de la relation entre deux entité'; + CREATE TABLE topology_group_by (id_topology INT4 NOT NULL, id_attribute INT4 NOT NULL, id_schema INT4 NOT NULL, CONSTRAINT PK_TOPOLOGY_GROUP_BY primary key (id_topology, id_attribute), CONSTRAINT FK_TOPOLOGY_REFERENCE_TOPOLOGY foreign key (id_topology) REFERENCES topology (id_topology) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT FK_TOPOLOGY_REFERENCE_ATTRIBUT foreign key (id_attribute) REFERENCES attribute (id_attribute) ON DELETE CASCADE ON UPDATE CASCADE); + COMMENT ON TABLE topology_group_by IS 'Liste les regroupements topologiques'; + COMMENT ON COLUMN topology_group_by.id_topology IS 'Identifiant de la relation de contraintes topologiques'; + COMMENT ON COLUMN topology_group_by.id_attribute IS 'Identifiant de l''attribut contenant le nom du regroupement topologie'; + CREATE TABLE attribute_unique_constraint (id_unique_constraint INT4 NOT NULL, id_attribute INT4 NOT NULL, id_schema INT4 NOT NULL, CONSTRAINT PK_ATTRIBUT_UNIQUE_CONSTRAINT primary key (id_unique_constraint, id_attribute), CONSTRAINT FK_ATTRIBUT_REFERENCE_UNIQUE_C foreign key (id_unique_constraint) REFERENCES unique_constraint (id_unique_constraint) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT FK_ATTRIBUT_REFERENCE_ATTRIBUT foreign key (id_attribute) REFERENCES attribute (id_attribute) ON DELETE CASCADE ON UPDATE CASCADE); + COMMENT ON COLUMN attribute_unique_constraint.id_attribute IS 'Identifiant de l''attribut'; + CREATE TABLE relation_attribute (id_relation INT4 NOT NULL, id_attribute_parent INT4 NOT NULL, id_attribute_child INT4 NOT NULL, id_schema INT4 NOT NULL, CONSTRAINT PK_RELATION_ATTRIBUT primary key (id_relation, id_attribute_parent, id_attribute_child), CONSTRAINT FK_RELATION_REFERENCE_RELATION foreign key (id_relation) REFERENCES relation (id_relation) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT FK_RELATION_REFERENCE_ATTRIBUT foreign key (id_attribute_parent) REFERENCES attribute (id_attribute) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT FK_REL_REF_ATTRIBUT_CHILD foreign key (id_attribute_child) REFERENCES attribute (id_attribute) ON DELETE CASCADE ON UPDATE CASCADE); + COMMENT ON TABLE relation_attribute IS 'Liste les attributs parent et enfant qui doivent satifaire la relation entre parents et enfants'; + COMMENT ON COLUMN relation_attribute.id_attribute_parent IS 'Identifiant de l''attribut'; + COMMENT ON COLUMN relation_attribute.id_attribute_child IS 'Identifiant de l''attribut'; + CREATE TABLE "q_constraint"."build_ref_ft"("id_ft" Integer DEFAULT nextval('seq_qualigeo'::regclass) NOT NULL, "id_ref_ft" Integer DEFAULT nextval('seq_qualigeo'::regclass) NOT NULL) WITH (OIDS=FALSE); + ALTER TABLE "q_constraint"."build_ref_ft" ADD CONSTRAINT "Key2" PRIMARY KEY ("id_ft","id_ref_ft"); + ALTER TABLE "q_constraint"."build_ref_ft" ADD CONSTRAINT "fk_build_constraint_ft_ref" FOREIGN KEY ("id_ref_ft") REFERENCES "q_constraint"."feature_type" ("id_ft") ON DELETE CASCADE ON UPDATE CASCADE; + ALTER TABLE "q_constraint"."build_ref_ft" ADD CONSTRAINT "fk_build_constraint_ft" FOREIGN KEY ("id_ft") REFERENCES "q_constraint"."feature_type" ("id_ft") ON DELETE CASCADE ON UPDATE CASCADE; + CREATE TABLE q_constraint.h_domain (name character varying(50) NOT NULL,values text NOT NULL, CONSTRAINT pk_h_domain PRIMARY KEY (name)) WITH (OIDS=FALSE); + ALTER TABLE q_constraint.h_domain OWNER TO u_vitis; + GRANT ALL ON TABLE q_constraint.h_domain TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_constraint.h_domain TO qual_designer; + GRANT SELECT ON TABLE q_constraint.h_domain TO qual_controler; + REVOKE ALL ON TABLE q_constraint.h_domain FROM u_vitis; + CREATE TABLE q_constraint.geometry_validation (id_geometry_validation integer NOT NULL, geometry_validation character varying(50), CONSTRAINT pk_geometry_validation PRIMARY KEY (id_geometry_validation)) WITH (OIDS=FALSE); + CREATE UNIQUE INDEX ik_geometry_validation ON q_constraint.geometry_validation USING btree (geometry_validation COLLATE pg_catalog."default"); + INSERT INTO q_constraint.geometry_validation (id_geometry_validation,geometry_validation) values (0, 'type_repair'); + INSERT INTO q_constraint.geometry_validation (id_geometry_validation,geometry_validation) values (1, 'self_intersecting'); + INSERT INTO q_constraint.geometry_validation (id_geometry_validation,geometry_validation) values (2, 'consecutiv_3d_points'); + INSERT INTO q_constraint.geometry_validation (id_geometry_validation,geometry_validation) values (3, 'consecutiv_2d_points'); + INSERT INTO q_constraint.geometry_validation (id_geometry_validation,geometry_validation) values (4, 'nan_removal'); + INSERT INTO q_constraint.geometry_validation (id_geometry_validation,geometry_validation) values (5, 'null_removal'); + INSERT INTO q_constraint.geometry_validation (id_geometry_validation,geometry_validation) values (6, 'missing_vertex_normals'); + INSERT INTO q_constraint.geometry_validation (id_geometry_validation,geometry_validation) values (7, 'planar_surface'); + INSERT INTO q_constraint.geometry_validation (id_geometry_validation,geometry_validation) values (8, 'shell_validation'); + INSERT INTO q_constraint.geometry_validation (id_geometry_validation,geometry_validation) values (9, 'solid_void_repair'); + INSERT INTO q_constraint.geometry_validation (id_geometry_validation,geometry_validation) values (10, 'ogc_simple_check'); + INSERT INTO q_constraint.geometry_validation (id_geometry_validation,geometry_validation) values (11, 'ogc_valid_check'); + INSERT INTO q_constraint.geometry_validation (id_geometry_validation,geometry_validation) values (12, 'missing_texture_coordinates'); + INSERT INTO q_constraint.geometry_validation (id_geometry_validation,geometry_validation) values (13, 'area_orientation'); + CREATE TABLE q_constraint.ft_geometry_validation (id_geometry_validation integer NOT NULL, id_ft integer NOT NULL, id_schema integer NOT NULL, CONSTRAINT pk_ft_geometry_validation PRIMARY KEY (id_geometry_validation, id_ft), CONSTRAINT fk_ft_geo_ref_ft_ft FOREIGN KEY (id_ft) REFERENCES q_constraint.feature_type (id_ft) MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE, CONSTRAINT fk_ft_geome_reference_geometry FOREIGN KEY (id_geometry_validation) REFERENCES q_constraint.geometry_validation (id_geometry_validation) MATCH SIMPLE ON UPDATE CASCADE ON DELETE RESTRICT) WITH (OIDS=FALSE); + CREATE TABLE version (version character varying(10) NOT NULL, build integer NOT NULL, date timestamp with time zone NOT NULL, active boolean); + ALTER TABLE ONLY version ADD CONSTRAINT pk_version PRIMARY KEY (version); + ALTER TABLE version OWNER TO u_vitis; + CREATE OR REPLACE VIEW q_constraint.v_schema_engine AS SELECT schema.id_schema, schema.schema, schema."precision", schema.tolerance, schema.version, schema.deny_undefined_ft, schema.deny_undefined_attribute, schema.date_schema, schema.comment, schema.x_min, schema.y_min, schema.z_min, schema.x_max, schema.y_max, schema.z_max, schema.coordsys, schema.limited_coordsys FROM q_constraint.schema; + ALTER TABLE q_constraint.v_schema_engine OWNER TO u_vitis; + CREATE OR REPLACE VIEW q_constraint.v_concat_topology_engine AS SELECT topology.id_topology, topology.id_ft, topology.id_topology_constraint, topology.code_validation_rule, topology.code_language, array_to_string(ARRAY( SELECT attribute.name FROM q_constraint.attribute LEFT JOIN q_constraint.topology_group_by ON attribute.id_attribute = topology_group_by.id_attribute WHERE topology_group_by.id_topology = topology.id_topology), ' '::text) AS attributes FROM q_constraint.topology; + ALTER TABLE q_constraint.v_concat_topology_engine OWNER TO u_vitis; + CREATE OR REPLACE VIEW q_constraint.v_attribute_engine AS SELECT attribute.id_attribute, attribute.id_schema, attribute.name, attribute.enabled, attribute.id_stat_type, attribute.null_allowed, attribute.length, dv.id_attribute IS NOT NULL AS has_domain, attribute.expression, attribute.min, attribute.max, attribute.format_date, feature_type.feature_type, attribute.id_ft, attribute.code_language, attribute.code_constraint, attribute.id_type, dv.string_agg AS domain FROM q_constraint.attribute JOIN q_constraint.feature_type ON attribute.id_ft = feature_type.id_ft LEFT JOIN ( SELECT DISTINCT domain_value.id_attribute, string_agg(('"'::text || domain_value.value::text) || '"'::text, ','::text) AS string_agg FROM q_constraint.domain_value GROUP BY domain_value.id_attribute) dv ON attribute.id_attribute = dv.id_attribute WHERE attribute.enabled = true; + ALTER TABLE q_constraint.v_attribute_engine OWNER TO u_vitis; + CREATE OR REPLACE VIEW q_constraint.v_ft_geometry_type_engine AS SELECT feature_type.feature_type, feature_type.id_ft, ft_geometry_type.id_geometry_type, geometry_type.geometry_type FROM q_constraint.feature_type LEFT OUTER JOIN q_constraint.ft_geometry_type ON feature_type.id_ft = ft_geometry_type.id_ft LEFT OUTER JOIN q_constraint.geometry_type ON ft_geometry_type.id_geometry_type = geometry_type.id_geometry_type WHERE ft_geometry_type.id_ft IS NOT NULL AND feature_type.enabled = true; + ALTER TABLE q_constraint.v_ft_geometry_type_engine OWNER TO u_vitis; + CREATE OR REPLACE VIEW q_constraint.v_ft_geometry_interpretation_engine AS SELECT q_constraint.feature_type.feature_type, q_constraint.feature_type.id_ft, q_constraint.ft_geometry_interpretation.id_geometry_interpretation, q_constraint.geometry_interpretation.geometry_interpretation FROM q_constraint.feature_type LEFT OUTER JOIN q_constraint.ft_geometry_interpretation ON q_constraint.feature_type.id_ft = q_constraint.ft_geometry_interpretation.id_ft LEFT OUTER JOIN q_constraint.geometry_interpretation ON q_constraint.ft_geometry_interpretation.id_geometry_interpretation = q_constraint.geometry_interpretation.id_geometry_interpretation WHERE ft_geometry_interpretation.id_ft IS NOT NULL AND feature_type.enabled = true; + ALTER TABLE q_constraint.v_ft_geometry_interpretation_engine OWNER TO u_vitis; + CREATE OR REPLACE VIEW q_constraint.v_ft_geometry_validation_engine AS SELECT feature_type.feature_type, feature_type.id_ft, ft_geometry_validation.id_geometry_validation, geometry_validation.geometry_validation FROM q_constraint.feature_type LEFT JOIN q_constraint.ft_geometry_validation ON feature_type.id_ft = ft_geometry_validation.id_ft LEFT JOIN q_constraint.geometry_validation ON ft_geometry_validation.id_geometry_validation = geometry_validation.id_geometry_validation WHERE ft_geometry_validation.id_ft IS NOT NULL AND feature_type.enabled = true; + ALTER TABLE q_constraint.v_ft_geometry_validation_engine OWNER TO u_vitis; + CREATE OR REPLACE VIEW q_constraint.v_spatial_relation_engine AS SELECT spatial_relation.id_ft, spatial_relation.id_sp_rel, spatial_operator.name, sp_operator_sp_relation.id_operator, spatial_relation.id_linked_ft, ft.feature_type AS ft, linked_ft.feature_type AS linked_ft FROM q_constraint.spatial_relation LEFT JOIN q_constraint.sp_operator_sp_relation ON spatial_relation.id_sp_rel = sp_operator_sp_relation.id_sp_rel LEFT JOIN q_constraint.spatial_operator ON sp_operator_sp_relation.id_operator::text = spatial_operator.id_operator::text JOIN q_constraint.feature_type ft ON ft.id_ft = spatial_relation.id_ft JOIN q_constraint.feature_type linked_ft ON linked_ft.id_ft = spatial_relation.id_linked_ft WHERE spatial_relation.enabled = True; + ALTER TABLE q_constraint.v_spatial_relation_engine OWNER TO u_vitis; + CREATE OR REPLACE VIEW q_constraint.v_unique_engine AS SELECT attribute_unique_constraint.id_unique_constraint, attribute_unique_constraint.id_attribute, attribute.name, unique_constraint.id_ft, unique_constraint.primary_key FROM q_constraint.attribute_unique_constraint JOIN q_constraint.attribute ON attribute_unique_constraint.id_attribute = attribute.id_attribute JOIN q_constraint.unique_constraint ON attribute_unique_constraint.id_unique_constraint = unique_constraint.id_unique_constraint; + ALTER TABLE q_constraint.v_unique_engine OWNER TO u_vitis; + CREATE OR REPLACE VIEW q_constraint.v_relation_engine AS SELECT relation.id_relation, relation.id_ft_parent, parent_f.feature_type AS feature_type_parent, relation.id_ft_child, child_f.feature_type AS feature_type_child, relation.cardinality_child_parent_min, relation.cardinality_child_parent_max, relation.cardinality_parent_child_min, relation.cardinality_parent_child_max, relation_attribute.id_attribute_parent, parent.name AS name_attr_parent, relation_attribute.id_attribute_child, child.name AS name_attr_child FROM q_constraint.relation_attribute INNER JOIN q_constraint.relation ON relation.id_relation = relation_attribute.id_relation INNER JOIN q_constraint.attribute AS parent ON parent.id_attribute=relation_attribute.id_attribute_parent INNER JOIN q_constraint.attribute AS child ON child.id_attribute=relation_attribute.id_attribute_child INNER JOIN q_constraint.feature_type AS child_f ON child_f.id_ft=relation.id_ft_child INNER JOIN q_constraint.feature_type AS parent_f ON parent_f.id_ft=relation.id_ft_parent; + ALTER TABLE q_constraint.v_relation_engine OWNER TO u_vitis; + CREATE OR REPLACE VIEW q_constraint.v_concat_unique_constraint_soft AS SELECT unique_constraint.id_unique_constraint, unique_constraint.id_ft, feature_type.feature_type, feature_type.id_schema, unique_constraint.primary_key, (array_to_string(ARRAY( SELECT attribute.name FROM q_constraint.attribute_unique_constraint JOIN q_constraint.attribute ON attribute_unique_constraint.id_attribute = attribute.id_attribute WHERE attribute_unique_constraint.id_unique_constraint = unique_constraint.id_unique_constraint), ','::text))::text AS "values", unique_constraint.enabled FROM q_constraint.unique_constraint JOIN q_constraint.feature_type ON unique_constraint.id_ft = feature_type.id_ft; + ALTER TABLE q_constraint.v_concat_unique_constraint_soft OWNER TO u_vitis; + CREATE OR REPLACE VIEW q_constraint.v_concat_ft_soft AS SELECT feature_type.id_ft, schema.schema, schema.id_schema, feature_type.feature_type, feature_type.id_existence, feature_type.expression, feature_type.color_border, feature_type.color_fill, CASE feature_type.enabled WHEN true THEN 1 ELSE 0 END AS enabled, CASE feature_type.ogc_validation WHEN true THEN 1 ELSE 0 END AS ogc_validation,array_to_string(ARRAY( SELECT geometry_type.geometry_type FROM q_constraint.geometry_type JOIN q_constraint.ft_geometry_type ON ft_geometry_type.id_geometry_type = geometry_type.id_geometry_type WHERE ft_geometry_type.id_ft = feature_type.id_ft), ', '::text) AS geometry_type, array_to_string(ARRAY( SELECT geometry_interpretation.geometry_interpretation FROM q_constraint.geometry_interpretation JOIN q_constraint.ft_geometry_interpretation ON ft_geometry_interpretation.id_geometry_interpretation = geometry_interpretation.id_geometry_interpretation WHERE ft_geometry_interpretation.id_ft = feature_type.id_ft), ', '::text) AS geometry_interpretation, feature_type.id_build_constraint, feature_type.code_language, feature_type.code_validation_rule, array_to_string(ARRAY( SELECT feature_type2.feature_type FROM q_constraint.feature_type feature3 JOIN q_constraint.build_ref_ft ON build_ref_ft.id_ft = feature3.id_ft LEFT JOIN q_constraint.feature_type feature_type2 ON build_ref_ft.id_ref_ft = feature_type2.id_ft WHERE feature_type.id_ft = build_ref_ft.id_ft), ','::text) AS fts, CASE feature_type.enabled_build WHEN true THEN 1 ELSE 0 END AS enabled_build, array_to_string(ARRAY( SELECT geometry_validation.geometry_validation FROM q_constraint.geometry_validation JOIN q_constraint.ft_geometry_validation ON ft_geometry_validation.id_geometry_validation = geometry_validation.id_geometry_validation WHERE ft_geometry_validation.id_ft = feature_type.id_ft), ', '::text) AS geometry_validation FROM q_constraint.feature_type JOIN q_constraint.schema ON feature_type.id_schema = schema.id_schema; + ALTER TABLE q_constraint.v_concat_ft_soft OWNER TO u_vitis; + GRANT ALL ON TABLE q_constraint.v_concat_ft_soft TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_constraint.v_concat_ft_soft TO qual_designer; + GRANT SELECT ON TABLE q_constraint.v_concat_ft_soft TO qual_controler; + REVOKE ALL ON TABLE q_constraint.v_concat_ft_soft FROM u_vitis; + CREATE OR REPLACE VIEW q_constraint.v_concat_sp_relation_soft AS SELECT spatial_relation.id_ft, spatial_relation.id_linked_ft, spatial_relation.id_relation, spatial_relation.id_sp_rel, ft.feature_type AS ft, linked_ft.feature_type AS linked_ft, ft.id_schema, array_to_string(ARRAY( SELECT spatial_operator.name FROM q_constraint.spatial_operator JOIN q_constraint.sp_operator_sp_relation ON sp_operator_sp_relation.id_operator::text = spatial_operator.id_operator::text WHERE sp_operator_sp_relation.id_sp_rel = spatial_relation.id_sp_rel), ', '::text) AS spatial_operator, spatial_relation.name, spatial_relation.enabled FROM q_constraint.spatial_relation JOIN q_constraint.feature_type ft ON ft.id_ft = spatial_relation.id_ft JOIN q_constraint.feature_type linked_ft ON linked_ft.id_ft = spatial_relation.id_linked_ft; + ALTER TABLE q_constraint.v_concat_sp_relation_soft OWNER TO u_vitis; + CREATE OR REPLACE FUNCTION q_constraint.insert_concat_view(text, integer, text, text, text, text, text, integer) RETURNS void AS $BODY$ DECLARE concat_values ALIAS FOR $1;id_parent ALIAS FOR $2;column_id_value ALIAS FOR $3;tablename_recup_id ALIAS FOR $4;column_value ALIAS FOR $5;table_insert ALIAS FOR $6;column_id_parent ALIAS FOR $7;id_schema ALIAS FOR $8; req_select text;req_insert text;i int := 0; word text;valeur text;rec record; BEGIN LOOP i := i + 1; word := '';SELECT INTO word split_part(concat_values, ', ', i);IF word = '' OR word IS NULL THEN EXIT;END IF;RAISE NOTICE '%', word;req_select:= 'SELECT ' || column_id_value || ' FROM ' || tablename_recup_id || ' WHERE ' ||column_value || ' = ' || quote_literal(word) || ';';RAISE NOTICE '%' , req_select;EXECUTE req_select INTO rec;RAISE NOTICE '%', rec;SELECT into valeur btrim(CAST( rec as text), '()');EXECUTE 'INSERT INTO ' || table_insert || ' (' || column_id_value || ', ' || column_id_parent || ', id_schema) values (' || valeur || ', ' || id_parent || ', ' || id_schema || ');';END LOOP;END;$BODY$ LANGUAGE plpgsql VOLATILE COST 100; + ALTER FUNCTION q_constraint.insert_concat_view(text, integer, text, text, text, text, text, integer) OWNER TO u_vitis; + CREATE OR REPLACE FUNCTION q_constraint.update_build_constraint(integer, integer, text) RETURNS void AS $BODY$ DECLARE id int;i int := 0; word text;req_select text;rec record;valeur text;BEGIN DELETE FROM q_constraint.build_ref_ft WHERE build_ref_ft.id_ft = $2; LOOP i := i + 1;word := '';SELECT INTO word split_part($3, ',', i);IF word = '' OR word IS NULL THEN EXIT;END IF;RAISE NOTICE '%', word;req_select:= 'SELECT id_ft FROM q_constraint.feature_type WHERE feature_type = ' || quote_literal(word) || ' AND id_schema = ' || $1 || ';';RAISE NOTICE '%' , req_select;EXECUTE req_select INTO rec;RAISE NOTICE '%', rec;SELECT into valeur btrim(CAST( rec as text), '()'); EXECUTE 'INSERT INTO q_constraint.build_ref_ft (id_ft, id_ref_ft) values (' || $2 || ', ' || valeur || ');';END LOOP;END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; + ALTER FUNCTION q_constraint.update_build_constraint(integer, integer, text) OWNER TO u_vitis; + CREATE OR REPLACE FUNCTION q_constraint.insert_feature_type(integer, text, integer, text, text, text, integer, text, text, integer, integer, text, text, text,integer, text) RETURNS void AS $BODY$ DECLARE id int;BEGIN INSERT INTO q_constraint.feature_type (id_schema, feature_type, id_existence, expression, color_border, color_fill, ogc_validation, enabled, id_build_constraint, code_language, code_validation_rule, enabled_build) VALUES ($1,$2, $3, $4, $5, $6,CASE $7 WHEN 1 THEN true ELSE false END, CASE $10 WHEN 1 THEN true ELSE false END, $11, $12, $13, CASE $15 WHEN 1 THEN true ELSE false END) RETURNING id_ft INTO id; RAISE NOTICE '%', id;PERFORM q_constraint.insert_concat_view($8, id, 'id_geometry_type', 'q_constraint.geometry_type', 'geometry_type', 'q_constraint.ft_geometry_type', 'id_ft', $1);PERFORM q_constraint.insert_concat_view($9, id, 'id_geometry_interpretation', 'q_constraint.geometry_interpretation','geometry_interpretation', 'q_constraint.ft_geometry_interpretation', 'id_ft', $1);PERFORM q_constraint.insert_concat_view($16, id, 'id_geometry_validation', 'q_constraint.geometry_validation', 'geometry_validation', 'q_constraint.ft_geometry_validation', 'id_ft', $1);PERFORM q_constraint.update_build_constraint($1, id, $14); END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; + ALTER FUNCTION q_constraint.insert_feature_type(integer, text, integer, text, text, text, integer, text, text, integer, integer, text, text, text, integer, text)OWNER TO u_vitis; + CREATE OR REPLACE FUNCTION q_constraint.insert_spatial_relation(integer, integer, text, integer, integer, text, boolean) RETURNS void AS $BODY$ DECLARE id int;BEGIN INSERT INTO q_constraint.spatial_relation (id_ft, id_linked_ft, id_relation, id_schema, "name", enabled) VALUES ($1,$2, $4, $5, $6, $7)RETURNING id_sp_rel INTO id;RAISE NOTICE '%', id;PERFORM q_constraint.insert_concat_view($3, id, 'id_operator', 'q_constraint.spatial_operator', 'name','q_constraint.sp_operator_sp_relation', 'id_sp_rel', $5);END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; + ALTER FUNCTION q_constraint.insert_spatial_relation(integer, integer, text, integer, integer, text, boolean) OWNER TO u_vitis; + CREATE OR REPLACE RULE insert_ft_constraint AS ON INSERT TO q_constraint.v_concat_ft_soft DO INSTEAD SELECT q_constraint.insert_feature_type(new.id_schema, new.feature_type::text, CASE WHEN new.id_existence IS NULL THEN 1 ELSE new.id_existence END, new.expression::text, new.color_border::text, new.color_fill::text, new.ogc_validation, new.geometry_type, new.geometry_interpretation, new.enabled, new.id_build_constraint, new.code_language::text, new.code_validation_rule, new.fts, new.enabled_build, new.geometry_validation) AS insert_feature_type; + CREATE OR REPLACE RULE update_ft_constraint AS ON UPDATE TO q_constraint.v_concat_ft_soft DO INSTEAD ( UPDATE q_constraint.feature_type SET feature_type = new.feature_type, id_existence = new.id_existence, expression = new.expression, color_border = new.color_border, color_fill = new.color_fill, ogc_validation = CASE new.ogc_validation WHEN 1 THEN true ELSE false END, enabled = CASE new.enabled WHEN 1 THEN true ELSE false END, id_build_constraint = new.id_build_constraint, code_language = new.code_language, code_validation_rule = new.code_validation_rule, enabled_build = CASE new.enabled_build WHEN 1 THEN true ELSE false END WHERE feature_type.id_ft = old.id_ft; DELETE FROM q_constraint.ft_geometry_interpretation WHERE ft_geometry_interpretation.id_ft = old.id_ft; DELETE FROM q_constraint.ft_geometry_type WHERE ft_geometry_type.id_ft = old.id_ft; DELETE FROM q_constraint.ft_geometry_validation WHERE ft_geometry_validation.id_ft = old.id_ft; SELECT q_constraint.insert_concat_view(new.geometry_type, old.id_ft, 'id_geometry_type'::text, 'q_constraint.geometry_type'::text, 'geometry_type'::text, 'q_constraint.ft_geometry_type'::text, 'id_ft'::text, new.id_schema) AS insert_concat_view; SELECT q_constraint.insert_concat_view(new.geometry_interpretation, old.id_ft, 'id_geometry_interpretation'::text, 'q_constraint.geometry_interpretation'::text, 'geometry_interpretation'::text, 'q_constraint.ft_geometry_interpretation'::text, 'id_ft'::text, new.id_schema) AS insert_concat_view; SELECT q_constraint.insert_concat_view(new.geometry_validation, old.id_ft, 'id_geometry_validation'::text, 'q_constraint.geometry_validation'::text, 'geometry_validation'::text, 'q_constraint.ft_geometry_validation'::text, 'id_ft'::text, new.id_schema) AS insert_concat_view; SELECT q_constraint.update_build_constraint(new.id_schema, old.id_ft, new.fts) AS update_build_constraint;); + CREATE OR REPLACE RULE insert_spatial_relation AS ON INSERT TO q_constraint.v_concat_sp_relation_soft DO INSTEAD SELECT q_constraint.insert_spatial_relation(new.id_ft, new.id_linked_ft, new.spatial_operator, new.id_relation, new.id_schema, new.name, new.enabled) AS insert_spatial_relation; + CREATE OR REPLACE RULE update_spatial_relation AS ON UPDATE TO q_constraint.v_concat_sp_relation_soft DO INSTEAD ( UPDATE q_constraint.spatial_relation SET id_ft = new.id_ft, id_linked_ft = new.id_linked_ft, id_relation = new.id_relation, id_schema = new.id_schema, name=new.name, enabled=new.enabled WHERE spatial_relation.id_sp_rel = old.id_sp_rel; DELETE FROM q_constraint.sp_operator_sp_relation WHERE sp_operator_sp_relation.id_sp_rel = old.id_sp_rel; SELECT q_constraint.insert_concat_view(new.spatial_operator, old.id_sp_rel, 'id_operator'::text, 'q_constraint.spatial_operator'::text, 'name'::text, 'q_constraint.sp_operator_sp_relation'::text, 'id_sp_rel'::text, new.id_schema) AS insert_concat_view;); + CREATE OR REPLACE VIEW q_constraint.v_feature_type_engine AS SELECT DISTINCT feature_type.id_ft, feature_type.id_schema, feature_type.feature_type, feature_type.id_existence, feature_type.expression, feature_type.color_border, feature_type.color_fill, feature_type.ogc_validation, feature_type.enabled, array_to_string(ARRAY( SELECT spatial_relation.id_sp_rel FROM q_constraint.spatial_relation WHERE feature_type.id_ft = spatial_relation.id_ft OR feature_type.id_ft = spatial_relation.id_linked_ft), ' '::text) AS id_sp_rel FROM q_constraint.feature_type LEFT JOIN q_constraint.spatial_relation ON feature_type.id_ft = spatial_relation.id_ft OR feature_type.id_ft = spatial_relation.id_linked_ft; + ALTER TABLE q_constraint.v_feature_type_engine OWNER TO u_vitis; + CREATE OR REPLACE VIEW q_constraint.v_domain_engine AS SELECT schema.schema, domain_value.id_attribute, domain_value.value FROM q_constraint.domain_value JOIN q_constraint.attribute ON domain_value.id_attribute = attribute.id_attribute JOIN q_constraint.schema ON attribute.id_schema = schema.id_schema; + ALTER TABLE q_constraint.v_domain_engine OWNER TO u_vitis; + CREATE OR REPLACE VIEW q_constraint.v_build_ref_ft_engine AS SELECT feature_type.id_build_constraint, feature_type.feature_type, feature_type.id_ft, build_ref_ft.id_ref_ft, feature_ref.feature_type AS feature_ref, feature_type.code_validation_rule FROM q_constraint.feature_type JOIN q_constraint.build_ref_ft ON feature_type.id_ft = build_ref_ft.id_ft JOIN q_constraint.feature_type feature_ref ON build_ref_ft.id_ref_ft = feature_ref.id_ft where feature_type.enabled_build = True; + ALTER TABLE q_constraint.v_build_ref_ft_engine OWNER TO u_vitis; + CREATE OR REPLACE VIEW q_constraint.v_spatial_coord_engine AS SELECT feature_type.id_ft FROM q_constraint.schema, q_constraint.feature_type WHERE schema.id_schema = feature_type.id_schema AND (schema.x_min <> 0::double precision OR schema.x_max <> 0::double precision OR schema.y_min <> 0::double precision OR schema.y_max <> 0::double precision OR schema.z_min <> 0::double precision OR schema.z_max <> 0::double precision OR schema.limited_coordsys <> false); + ALTER TABLE q_constraint.v_spatial_coord_engine OWNER TO u_vitis; + CREATE OR REPLACE VIEW q_constraint.v_constraints AS SELECT test.id_ft, test.categorie FROM ((((((((((SELECT DISTINCT v_ft_geometry_type_engine.id_ft, 'type_geometrie'::text AS categorie FROM q_constraint.v_ft_geometry_type_engine UNION ALL SELECT DISTINCT v_ft_geometry_interpretation_engine.id_ft, 'interpretation_geometrie'::text AS categorie FROM q_constraint.v_ft_geometry_interpretation_engine) UNION ALL SELECT DISTINCT v_unique_engine.id_ft, 'unicite'::text AS categorie FROM q_constraint.v_unique_engine) UNION ALL SELECT DISTINCT v_concat_topology_engine.id_ft, 'tesselation'::text AS categorie FROM q_constraint.v_concat_topology_engine) UNION ALL SELECT DISTINCT feature_constraint.id_ft,'contrainte_specifique_entite'::text AS categorie FROM q_constraint.feature_constraint WHERE feature_constraint.enabled = true) UNION ALL SELECT DISTINCT v_spatial_coord_engine.id_ft, 'domaine_spatial'::text AS categorie FROM q_constraint.v_spatial_coord_engine) UNION ALL SELECT DISTINCT relation.id_ft, 'cardinalite'::text AS categorie FROM (SELECT v_relation_engine.id_ft_parent AS id_ft FROM q_constraint.v_relation_engine UNION ALL SELECT v_relation_engine.id_ft_child AS id_ft FROM q_constraint.v_relation_engine) relation) UNION ALL SELECT DISTINCT construction.id_ft, 'contrainte_construction'::text AS categorie FROM ( SELECT v_build_ref_ft_engine.id_ft FROM q_constraint.v_build_ref_ft_engine UNION ALL SELECT v_build_ref_ft_engine.id_ref_ft AS id_ft FROM q_constraint.v_build_ref_ft_engine) construction) UNION ALL SELECT DISTINCT v_feature_type_engine.id_ft,'relation_spatiale'::text AS categorie FROM q_constraint.v_feature_type_engine WHERE v_feature_type_engine.id_sp_rel <> ''::text) UNION ALL SELECT DISTINCT v_ft_geometry_validation_engine.id_ft, 'validation_geometrie'::text AS categorie FROM q_constraint.v_ft_geometry_validation_engine) UNION ALL SELECT DISTINCT v_attribute_engine.id_ft, 'controle_attributs'::text AS categorie FROM q_constraint.v_attribute_engine) test; + ALTER TABLE q_constraint.v_constraints OWNER TO u_vitis; + CREATE OR REPLACE FUNCTION q_constraint.insert_unique_constraint(integer, integer, boolean, text, boolean) RETURNS void AS $BODY$ DECLARE id int;i int := 0;word text;req_select text;rec record;valeur text;BEGIN INSERT INTO q_constraint.unique_constraint(id_schema, id_ft, primary_key, enabled) VALUES ($1,$2, $3, $5) RETURNING id_unique_constraint INTO id;RAISE NOTICE '%', id;LOOP i := i + 1;word := '';SELECT INTO word split_part($4, ',', i);IF word = '' OR word IS NULL THEN EXIT;END IF;RAISE NOTICE '%', word;req_select:= 'SELECT id_attribute FROM q_constraint.attribute WHERE name = ' || quote_literal(word) || ' AND id_schema = ' || $1 || ' AND id_ft = '|| $2 || ';';RAISE NOTICE '%' , req_select;EXECUTE req_select INTO rec;RAISE NOTICE '%', rec;SELECT into valeur btrim(CAST( rec as text), '()');EXECUTE 'INSERT INTO q_constraint.attribute_unique_constraint (id_unique_constraint, id_attribute, id_schema) values (' || id || ', ' || valeur || ', ' || $1 || ');';END LOOP;END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; + ALTER FUNCTION q_constraint.insert_unique_constraint(integer, integer, boolean, text, boolean) OWNER TO u_vitis; + CREATE OR REPLACE RULE insert_unique_constraint AS ON INSERT TO q_constraint.v_concat_unique_constraint_soft DO INSTEAD SELECT q_constraint.insert_unique_constraint(new.id_schema, new.id_ft, new.primary_key, new.values::text, new.enabled) AS insert_unique_constraint; + CREATE OR REPLACE FUNCTION q_constraint.update_unique_constraint(integer, integer, text, integer) RETURNS void AS $BODY$ DECLARE id int; i int := 0;word text;req_select text;rec record;valeur text;BEGIN LOOP i := i + 1;word := '';SELECT INTO word split_part($3, ',', i);IF word = '' OR word IS NULL THEN EXIT;END IF;RAISE NOTICE '%', word;req_select:= 'SELECT id_attribute FROM q_constraint.attribute WHERE name = ' || quote_literal(word) || ' AND id_schema = ' || $1 || ' AND id_ft = '|| $2 || ';';RAISE NOTICE '%' , req_select;EXECUTE req_select INTO rec;RAISE NOTICE '%', rec;SELECT into valeur btrim(CAST( rec as text), '()');EXECUTE 'INSERT INTO q_constraint.attribute_unique_constraint (id_unique_constraint, id_attribute, id_schema) values (' || $4 || ', ' || valeur || ', ' || $1 || ');';END LOOP;END;$BODY$ LANGUAGE plpgsql VOLATILE COST 100; + ALTER FUNCTION q_constraint.update_unique_constraint(integer, integer, text, integer) OWNER TO u_vitis; + CREATE OR REPLACE RULE update_unique_constraint AS ON UPDATE TO q_constraint.v_concat_unique_constraint_soft DO INSTEAD (UPDATE q_constraint.unique_constraint SET id_ft = new.id_ft, primary_key = new.primary_key, enabled = new.enabled WHERE id_unique_constraint = old.id_unique_constraint; DELETE FROM q_constraint.attribute_unique_constraint WHERE attribute_unique_constraint.id_unique_constraint = old.id_unique_constraint; SELECT q_constraint.update_unique_constraint(new.id_schema, new.id_ft, new."values", old.id_unique_constraint) AS update_unique_constraint;); + CREATE OR REPLACE VIEW q_constraint.v_concat_topology_soft AS SELECT topology.id_topology, topology.id_ft, topology.id_topology_constraint, topology.code_validation_rule, topology.code_language, array_to_string(ARRAY( SELECT attribute.name FROM q_constraint.attribute LEFT JOIN q_constraint.topology_group_by ON attribute.id_attribute = topology_group_by.id_attribute WHERE topology_group_by.id_topology = topology.id_topology), ','::text) AS attributes, topology.id_schema, topology.comment, topology.enabled FROM q_constraint.topology; + ALTER TABLE q_constraint.v_concat_topology_soft OWNER TO u_vitis; + GRANT ALL ON TABLE q_constraint.v_concat_topology_soft TO qual_administrator; + GRANT SELECT ON TABLE q_constraint.v_concat_topology_soft TO qual_designer; + GRANT SELECT ON TABLE q_constraint.v_concat_topology_soft TO qual_controler; + REVOKE ALL ON TABLE q_constraint.v_concat_topology_soft FROM u_vitis; + CREATE OR REPLACE FUNCTION q_constraint.insert_topo_constraint(integer, integer, integer,text,text, text, text, boolean) RETURNS void AS $BODY$ DECLARE id int;i int := 0;word text;req_select text;rec record;valeur text;BEGIN INSERT INTO q_constraint.topology(id_schema, id_ft, id_topology_constraint, code_validation_rule, code_language, comment, enabled) VALUES ($1,$2, $3, $4,$5, $6, $8) RETURNING id_topology INTO id;RAISE NOTICE '%', id;LOOP i := i + 1;word := '';SELECT INTO word split_part($7, ',', i);IF word = '' OR word IS NULL THEN EXIT;END IF;RAISE NOTICE '%', word;req_select:= 'SELECT id_attribute FROM q_constraint.attribute WHERE name = ' || quote_literal(word) || ' AND id_schema = ' || $1 || ' AND id_ft = '|| $2 || ';';RAISE NOTICE '%' , req_select;EXECUTE req_select INTO rec;RAISE NOTICE '%', rec;SELECT into valeur btrim(CAST( rec as text), '()');EXECUTE 'INSERT INTO q_constraint.topology_group_by (id_topology, id_attribute, id_schema) values (' || id || ', ' || valeur || ', ' || $1 || ');';END LOOP; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; + ALTER FUNCTION q_constraint.insert_topo_constraint( integer, integer, integer, text, text, text, text, boolean) OWNER TO u_vitis; + CREATE OR REPLACE RULE insert_topo_constraint AS ON INSERT TO q_constraint.v_concat_topology_soft DO INSTEAD SELECT q_constraint.insert_topo_constraint(new.id_schema, new.id_ft, new.id_topology_constraint, new.code_validation_rule, new.code_language, new.comment, new."attributes", new.enabled) AS insert_topo_constraint; + CREATE OR REPLACE FUNCTION q_constraint.update_topo_constraint(integer, integer, text, integer) RETURNS void AS $BODY$ DECLARE id int;i int := 0;word text;req_select text;rec record;valeur text; BEGIN LOOP i := i + 1;word := '';SELECT INTO word split_part($3, ',', i);IF word = '' OR word IS NULL THEN EXIT;END IF;RAISE NOTICE '%', word;req_select:= 'SELECT id_attribute FROM q_constraint.attribute WHERE name = ' || quote_literal(word) || ' AND id_schema = ' || $1 || ' AND id_ft = '|| $2 || ';';RAISE NOTICE '%' , req_select;EXECUTE req_select INTO rec;RAISE NOTICE '%', rec;SELECT into valeur btrim(CAST( rec as text), '()'); EXECUTE 'INSERT INTO q_constraint.topology_group_by (id_topology, id_attribute, id_schema) values (' || $4 || ', ' || valeur || ', ' || $1 || ');';END LOOP;END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; + ALTER FUNCTION q_constraint.update_topo_constraint(integer, integer, text, integer) OWNER TO u_vitis; + CREATE OR REPLACE RULE update_topo_constraint AS ON UPDATE TO q_constraint.v_concat_topology_soft DO INSTEAD (UPDATE q_constraint.topology SET id_ft = new.id_ft, id_topology_constraint = new.id_topology_constraint, code_validation_rule= new.id_topology_constraint, code_language = new.code_language, comment = new.comment, enabled = new.enabled WHERE id_topology = old.id_topology; DELETE FROM q_constraint.topology_group_by WHERE topology_group_by.id_topology = old.id_topology; SELECT q_constraint.update_topo_constraint(new.id_schema, new.id_ft, new.attributes, old.id_topology) AS update_unique_constraint;); + CREATE OR REPLACE VIEW q_constraint.v_concat_attribute_soft as SELECT id_attribute, id_ft, null_allowed, length, expression, min, max, id_stat_type, id_type, code_constraint, code_language, enabled, format_date, name, id_schema, array_to_string(ARRAY( SELECT domain_value.value FROM q_constraint.domain_value WHERE domain_value.id_attribute = attribute.id_attribute), ','::text) AS values FROM q_constraint.attribute ; + ALTER TABLE q_constraint.v_concat_attribute_soft OWNER TO u_vitis; + GRANT ALL ON TABLE q_constraint.v_concat_attribute_soft TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_constraint.v_concat_attribute_soft TO qual_designer; + GRANT SELECT ON TABLE q_constraint.v_concat_attribute_soft TO qual_controler; + REVOKE ALL ON TABLE q_constraint.v_concat_attribute_soft FROM u_vitis; + CREATE OR REPLACE FUNCTION q_constraint.insert_attribute(integer,boolean,real,text,double precision,double precision,integer,integer,text,text,boolean,text,text,integer,text) RETURNS void AS $BODY$ DECLARE id int;i int := 0;word text;req_select text;rec record;valeur text; BEGIN RAISE NOTICE '%', $3; LOOP i := i + 1;word := '';SELECT INTO word split_part($3, ',', i);IF word = '' OR word IS NULL THEN EXIT;END IF;RAISE NOTICE '%', word;EXECUTE 'INSERT INTO q_constraint.domain_value (id_attribute, value, id_schema) values (' || $1 || ', ' || quote_literal(word) || ', ' || $2 || ');';END LOOP;END;$BODY$ LANGUAGE plpgsql VOLATILE COST 100; + CREATE OR REPLACE FUNCTION q_constraint.update_attribute_f(integer,integer, text) RETURNS void AS $BODY$ DECLARE id int; i int := 0; word text; req_select text; rec record; valeur text; BEGIN RAISE NOTICE '%', $3; LOOP i := i + 1; word := ''; SELECT INTO word split_part($3, ',', i); IF word = '' OR word IS NULL THEN EXIT; END IF; RAISE NOTICE '%', word; EXECUTE 'INSERT INTO q_constraint.domain_value (id_attribute, value, id_schema) values (' || $1 || ', ' || quote_literal(word) || ', ' || $2 || ');'; END LOOP; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; + ALTER FUNCTION q_constraint.update_attribute_f(integer, integer, text) OWNER TO u_vitis; + CREATE OR REPLACE RULE insert_attribute AS ON INSERT TO q_constraint.v_concat_attribute_soft DO INSTEAD SELECT q_constraint.insert_attribute(new.id_ft, new.null_allowed, new.length, new.expression, new.min, new.max, new.id_stat_type, new.id_type, new.code_constraint, new.code_language, new.enabled, new.format_date, new.name, new.id_schema, new.values) AS insert_attribute; + CREATE OR REPLACE RULE update_attribute AS ON UPDATE TO q_constraint.v_concat_attribute_soft DO INSTEAD (UPDATE q_constraint.attribute SET id_ft = new.id_ft, null_allowed = new.null_allowed, length=new.length, expression=new.expression, min = new.min, max = new.max, id_stat_type = new.id_stat_type, id_type = new.id_type, code_constraint = new.code_constraint, code_language = new.code_language, enabled = new.enabled, format_date = new.format_date, name = new.name WHERE id_attribute = old.id_attribute; DELETE FROM q_constraint.domain_value WHERE domain_value.id_attribute = old.id_attribute; SELECT q_constraint.update_attribute_f(old.id_attribute, new.id_schema, new.values) AS update_attribute_f;); + CREATE OR REPLACE VIEW q_constraint.v_concat_relation_soft AS SELECT relation.id_relation,relation.id_ft_parent,relation.id_ft_child,relation.cardinality_child_parent_min,relation.cardinality_child_parent_max,relation.cardinality_parent_child_min,relation.cardinality_parent_child_max,array_to_string(ARRAY( SELECT (a_parent.name::text || '|'::text) || a_child.name::text FROM q_constraint.relation_attribute JOIN q_constraint.attribute a_child ON relation_attribute.id_attribute_child = a_child.id_attribute JOIN q_constraint.attribute a_parent ON relation_attribute.id_attribute_parent = a_parent.id_attribute WHERE relation_attribute.id_relation = relation.id_relation), ','::text) AS "values",relation.id_schema,relation.comment,relation.name,relation.enabled FROM q_constraint.relation; + ALTER TABLE q_constraint.v_concat_relation_soft OWNER TO u_vitis; + GRANT ALL ON TABLE q_constraint.v_concat_relation_soft TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_constraint.v_concat_relation_soft TO qual_designer; + GRANT SELECT ON TABLE q_constraint.v_concat_relation_soft TO qual_controler; + REVOKE ALL ON TABLE q_constraint.v_concat_relation_soft FROM u_vitis; + CREATE OR REPLACE FUNCTION q_constraint.insert_relation(integer,integer,text,text,text,text,text,integer,text,text,boolean) RETURNS void AS $BODY$ DECLARE id int;i int := 0;word text;word_child text;word_parent text;req_select_parent text;rec_parent record;req_select_child text;rec_child record;valeur_child text;valeur_parent text; BEGIN INSERT INTO q_constraint.relation (id_ft_parent, id_ft_child, cardinality_child_parent_min, cardinality_child_parent_max, cardinality_parent_child_min, cardinality_parent_child_max, id_schema, comment, name, enabled) VALUES ($1,$2, $3, $4, $5, $6, $8, $9, $10, $11) RETURNING id_relation INTO id;RAISE NOTICE '%', id;LOOP i := i + 1;word := '';SELECT INTO word split_part($7, ',', i);IF word = '' OR word IS NULL THEN EXIT;END IF;RAISE NOTICE '%', word;SELECT INTO word_parent split_part(word, '|', 1);SELECT INTO word_child split_part(word, '|', 2);req_select_parent:= 'SELECT id_attribute FROM q_constraint.attribute WHERE name = ' || quote_literal(word_parent) || ' AND id_schema = ' || $8 || ' AND id_ft = '|| $1 || ';';RAISE NOTICE '%' , req_select_parent;EXECUTE req_select_parent INTO rec_parent;RAISE NOTICE '%', rec_parent;SELECT into valeur_parent btrim(CAST( rec_parent as text), '()');req_select_child:= 'SELECT id_attribute FROM q_constraint.attribute WHERE name = ' || quote_literal(word_child) || ' AND id_schema = ' || $8 || ' AND id_ft = '|| $2 || ';';RAISE NOTICE '%' , req_select_child;EXECUTE req_select_child INTO rec_child;RAISE NOTICE '%', rec_child;SELECT into valeur_child btrim(CAST( rec_child as text), '()');EXECUTE 'INSERT INTO q_constraint.relation_attribute (id_relation, id_attribute_parent, id_attribute_child, id_schema) values (' || id || ', ' || valeur_parent || ', ' || valeur_child || ', ' || $8 || ');';END LOOP;END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; + ALTER FUNCTION q_constraint.insert_relation(integer, integer, text, text, text, text, text, integer, text, text, boolean) OWNER TO u_vitis; + CREATE OR REPLACE RULE insert_relation AS ON INSERT TO q_constraint.v_concat_relation_soft DO INSTEAD SELECT q_constraint.insert_relation(new.id_ft_parent, new.id_ft_child, new.cardinality_child_parent_min, new.cardinality_child_parent_max, new.cardinality_parent_child_min, new.cardinality_parent_child_max, new.values, new.id_schema, new.comment, new.name, new.enabled) AS insert_spatial_relation; + CREATE OR REPLACE FUNCTION q_constraint.update_relation(integer,integer,text,integer,integer) RETURNS void AS $BODY$ DECLARE i int := 0;word text;word_child text;word_parent text;req_select_parent text;rec_parent record;req_select_child text;rec_child record;valeur_child text;valeur_parent text;BEGIN LOOP i := i + 1;word := '';SELECT INTO word split_part($3, ',', i);IF word = '' OR word IS NULL THEN EXIT;END IF;RAISE NOTICE '%', word;SELECT INTO word_parent split_part(word, '|', 1);SELECT INTO word_child split_part(word, '|', 2);req_select_parent:= 'SELECT id_attribute FROM q_constraint.attribute WHERE name = ' || quote_literal(word_parent) || ' AND id_schema = ' || $4 || ' AND id_ft = '|| $1 || ';';RAISE NOTICE '%' , req_select_parent;EXECUTE req_select_parent INTO rec_parent;RAISE NOTICE '%', rec_parent;SELECT into valeur_parent btrim(CAST( rec_parent as text), '()');req_select_child:= 'SELECT id_attribute FROM q_constraint.attribute WHERE name = ' || quote_literal(word_child) || ' AND id_schema = ' || $4 || ' AND id_ft = '|| $2 || ';';RAISE NOTICE '%' , req_select_child;EXECUTE req_select_child INTO rec_child;RAISE NOTICE '%', rec_child;SELECT into valeur_child btrim(CAST( rec_child as text), '()');EXECUTE 'INSERT INTO q_constraint.relation_attribute (id_relation, id_attribute_parent, id_attribute_child, id_schema) values (' || $5 || ', ' || valeur_parent || ', ' || valeur_child || ', ' || $4 || ');';END LOOP;END;$BODY$ LANGUAGE plpgsql VOLATILE COST 100; + ALTER FUNCTION q_constraint.update_relation(integer, integer, text, integer, integer) OWNER TO u_vitis; + CREATE OR REPLACE RULE update_relation AS ON UPDATE TO q_constraint.v_concat_relation_soft DO INSTEAD ( UPDATE q_constraint.relation SET id_ft_parent = new.id_ft_parent, id_ft_child = new.id_ft_child, cardinality_child_parent_min = new.cardinality_child_parent_min, cardinality_child_parent_max = new.cardinality_child_parent_max, cardinality_parent_child_min= new.cardinality_parent_child_min, cardinality_parent_child_max=new.cardinality_parent_child_max, name = new.name, comment=new.comment, enabled = new.enabled WHERE relation.id_relation = old.id_relation; DELETE FROM q_constraint.relation_attribute WHERE relation_attribute.id_relation = old.id_relation; SELECT q_constraint.update_relation(new.id_ft_parent, new.id_ft_child, new.values, new.id_schema, old.id_relation) AS insert_concat_view;); + GRANT qual_administrator TO u_vitis; + GRANT ALL ON SCHEMA q_constraint TO u_vitis; + GRANT USAGE ON SCHEMA q_constraint TO qual_administrator; + GRANT USAGE ON SCHEMA q_constraint TO qual_controler; + GRANT USAGE ON SCHEMA q_constraint TO qual_designer; + REVOKE ALL ON TABLE q_constraint.attribute FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.attribute FROM public; + GRANT ALL ON TABLE q_constraint.attribute TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_constraint.attribute TO qual_designer; + GRANT SELECT ON TABLE q_constraint.attribute TO qual_controler; + REVOKE ALL ON TABLE q_constraint.attribute_unique_constraint FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.attribute_unique_constraint FROM public; + GRANT ALL ON TABLE q_constraint.attribute_unique_constraint TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_constraint.attribute_unique_constraint TO qual_designer; + GRANT SELECT ON TABLE q_constraint.attribute_unique_constraint TO qual_controler; + REVOKE ALL ON TABLE q_constraint.code FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.code FROM public; + GRANT ALL ON TABLE q_constraint.code TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_constraint.code TO qual_designer; + GRANT SELECT ON TABLE q_constraint.code TO qual_controler; + REVOKE ALL ON TABLE q_constraint.domain_value FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.domain_value FROM public; + GRANT ALL ON TABLE q_constraint.domain_value TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_constraint.domain_value TO qual_designer; + GRANT SELECT ON TABLE q_constraint.domain_value TO qual_controler; + REVOKE ALL ON TABLE q_constraint.feature_type FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.feature_type FROM public; + GRANT ALL ON TABLE q_constraint.feature_type TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_constraint.feature_type TO qual_designer; + GRANT SELECT ON TABLE q_constraint.feature_type TO qual_controler; + REVOKE ALL ON TABLE q_constraint.feature_constraint FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.feature_constraint FROM public; + GRANT ALL ON TABLE q_constraint.feature_constraint TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_constraint.feature_constraint TO qual_designer; + GRANT SELECT ON TABLE q_constraint.feature_constraint TO qual_controler; + REVOKE ALL ON TABLE q_constraint.ft_geometry_interpretation FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.ft_geometry_interpretation FROM public; + GRANT ALL ON TABLE q_constraint.ft_geometry_interpretation TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_constraint.ft_geometry_interpretation TO qual_designer; + GRANT SELECT ON TABLE q_constraint.ft_geometry_interpretation TO qual_controler; + REVOKE ALL ON TABLE q_constraint.ft_geometry_type FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.ft_geometry_type FROM public; + GRANT ALL ON TABLE q_constraint.ft_geometry_type TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_constraint.ft_geometry_type TO qual_designer; + GRANT SELECT ON TABLE q_constraint.ft_geometry_type TO qual_controler; + REVOKE ALL ON TABLE q_constraint.geometry_interpretation FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.geometry_interpretation FROM public; + GRANT ALL ON TABLE q_constraint.geometry_interpretation TO qual_administrator; + GRANT SELECT ON TABLE q_constraint.geometry_interpretation TO qual_designer; + GRANT SELECT ON TABLE q_constraint.geometry_interpretation TO qual_controler; + REVOKE ALL ON TABLE q_constraint.geometry_type FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.geometry_type FROM public; + GRANT ALL ON TABLE q_constraint.geometry_type TO qual_administrator; + GRANT SELECT ON TABLE q_constraint.geometry_type TO qual_designer; + GRANT SELECT ON TABLE q_constraint.geometry_type TO qual_controler; + REVOKE ALL ON TABLE q_constraint.h_named_expression FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.h_named_expression FROM public; + GRANT ALL ON TABLE q_constraint.h_named_expression TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_constraint.h_named_expression TO qual_designer; + GRANT SELECT ON TABLE q_constraint.h_named_expression TO qual_controler; + REVOKE ALL ON TABLE q_constraint.relation FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.relation FROM public; + GRANT ALL ON TABLE q_constraint.relation TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_constraint.relation TO qual_designer; + GRANT SELECT ON TABLE q_constraint.relation TO qual_controler; + REVOKE ALL ON TABLE q_constraint.relation_attribute FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.relation_attribute FROM public; + GRANT ALL ON TABLE q_constraint.relation_attribute TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_constraint.relation_attribute TO qual_designer; + GRANT SELECT ON TABLE q_constraint.relation_attribute TO qual_controler; + REVOKE ALL ON TABLE q_constraint.rt_existence FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.rt_existence FROM public; + GRANT ALL ON TABLE q_constraint.rt_existence TO qual_administrator; + GRANT SELECT,UPDATE ON TABLE q_constraint.rt_existence TO qual_designer; + GRANT SELECT,UPDATE ON TABLE q_constraint.rt_existence TO qual_controler; + REVOKE ALL ON TABLE q_constraint.h_format_date FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.h_format_date FROM public; + GRANT ALL ON TABLE q_constraint.h_format_date TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_constraint.h_format_date TO qual_designer; + GRANT SELECT ON TABLE q_constraint.h_format_date TO qual_controler; + REVOKE ALL ON TABLE q_constraint.rt_stat_type FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.rt_stat_type FROM public; + GRANT ALL ON TABLE q_constraint.rt_stat_type TO qual_administrator; + GRANT SELECT,UPDATE ON TABLE q_constraint.rt_stat_type TO qual_designer; + GRANT SELECT,UPDATE ON TABLE q_constraint.rt_stat_type TO qual_controler; + REVOKE ALL ON TABLE q_constraint.rt_topology_constraint FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.rt_topology_constraint FROM public; + GRANT ALL ON TABLE q_constraint.rt_topology_constraint TO qual_administrator; + GRANT SELECT,UPDATE ON TABLE q_constraint.rt_topology_constraint TO qual_designer; + GRANT SELECT,UPDATE ON TABLE q_constraint.rt_topology_constraint TO qual_controler; + REVOKE ALL ON TABLE q_constraint.rt_attribute_type FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.rt_attribute_type FROM public; + GRANT ALL ON TABLE q_constraint.rt_attribute_type TO qual_administrator; + GRANT SELECT,UPDATE, UPDATE, INSERT, DELETE ON TABLE q_constraint.rt_attribute_type TO qual_designer; + GRANT SELECT,UPDATE ON TABLE q_constraint.rt_attribute_type TO qual_controler; + REVOKE ALL ON TABLE q_constraint.schema_constraint FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.schema_constraint FROM public; + GRANT ALL ON TABLE q_constraint.schema_constraint TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_constraint.schema_constraint TO qual_designer; + GRANT SELECT ON TABLE q_constraint.schema_constraint TO qual_controler; + REVOKE ALL ON TABLE q_constraint.schema FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.schema FROM public; + GRANT ALL ON TABLE q_constraint.schema TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_constraint.schema TO qual_designer; + GRANT SELECT ON TABLE q_constraint.schema TO qual_controler; + REVOKE ALL ON TABLE q_constraint.sp_operator_sp_relation FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.sp_operator_sp_relation FROM public; + GRANT ALL ON TABLE q_constraint.sp_operator_sp_relation TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_constraint.sp_operator_sp_relation TO qual_designer; + GRANT SELECT ON TABLE q_constraint.sp_operator_sp_relation TO qual_controler; + REVOKE ALL ON TABLE q_constraint.h_spatial_domain FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.h_spatial_domain FROM public; + GRANT ALL ON TABLE q_constraint.h_spatial_domain TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_constraint.h_spatial_domain TO qual_designer; + GRANT SELECT ON TABLE q_constraint.h_spatial_domain TO qual_controler; + REVOKE ALL ON TABLE q_constraint.spatial_operator FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.spatial_operator FROM public; + GRANT ALL ON TABLE q_constraint.spatial_operator TO qual_administrator; + GRANT SELECT,UPDATE ON TABLE q_constraint.spatial_operator TO qual_designer; + GRANT SELECT,UPDATE ON TABLE q_constraint.spatial_operator TO qual_controler; + REVOKE ALL ON TABLE q_constraint.spatial_relation FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.spatial_relation FROM public; + GRANT ALL ON TABLE q_constraint.spatial_relation TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_constraint.spatial_relation TO qual_designer; + GRANT SELECT ON TABLE q_constraint.spatial_relation TO qual_controler; + REVOKE ALL ON TABLE q_constraint.topology FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.topology FROM public; + GRANT ALL ON TABLE q_constraint.topology TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_constraint.topology TO qual_designer; + GRANT SELECT ON TABLE q_constraint.topology TO qual_controler; + REVOKE ALL ON TABLE q_constraint.topology_group_by FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.topology_group_by FROM public; + GRANT ALL ON TABLE q_constraint.topology_group_by TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_constraint.topology_group_by TO qual_designer; + GRANT SELECT ON TABLE q_constraint.topology_group_by TO qual_controler; + REVOKE ALL ON TABLE q_constraint.unique_constraint FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.unique_constraint FROM public; + GRANT ALL ON TABLE q_constraint.unique_constraint TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_constraint.unique_constraint TO qual_designer; + GRANT SELECT ON TABLE q_constraint.unique_constraint TO qual_controler; + REVOKE ALL ON TABLE q_constraint.v_ft_geometry_type_engine FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.v_ft_geometry_type_engine FROM public; + GRANT ALL ON TABLE q_constraint.v_ft_geometry_type_engine TO qual_administrator; + GRANT SELECT ON TABLE q_constraint.v_ft_geometry_type_engine TO qual_designer; + GRANT SELECT ON TABLE q_constraint.v_ft_geometry_type_engine TO qual_controler; + REVOKE ALL ON TABLE q_constraint.v_ft_geometry_validation_engine FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.v_ft_geometry_validation_engine FROM public; + GRANT ALL ON TABLE q_constraint.v_ft_geometry_validation_engine TO qual_administrator; + GRANT SELECT ON TABLE q_constraint.v_ft_geometry_validation_engine TO qual_designer; + GRANT SELECT ON TABLE q_constraint.v_ft_geometry_validation_engine TO qual_controler; + REVOKE ALL ON TABLE q_constraint.v_ft_geometry_interpretation_engine FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.v_ft_geometry_interpretation_engine FROM public; + GRANT ALL ON TABLE q_constraint.v_ft_geometry_interpretation_engine TO qual_administrator; + GRANT SELECT ON TABLE q_constraint.v_ft_geometry_interpretation_engine TO qual_designer; + GRANT SELECT ON TABLE q_constraint.v_ft_geometry_interpretation_engine TO qual_controler; + REVOKE ALL ON TABLE q_constraint.v_spatial_relation_engine FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.v_spatial_relation_engine FROM public; + GRANT ALL ON TABLE q_constraint.v_spatial_relation_engine TO qual_administrator; + GRANT SELECT ON TABLE q_constraint.v_spatial_relation_engine TO qual_designer; + GRANT SELECT ON TABLE q_constraint.v_spatial_relation_engine TO qual_controler; + REVOKE ALL ON TABLE q_constraint.v_attribute_engine FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.v_attribute_engine FROM public; + GRANT ALL ON TABLE q_constraint.v_attribute_engine TO qual_administrator; + GRANT SELECT ON TABLE q_constraint.v_attribute_engine TO qual_designer; + GRANT SELECT ON TABLE q_constraint.v_attribute_engine TO qual_controler; + REVOKE ALL ON TABLE q_constraint.v_unique_engine FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.v_unique_engine FROM public; + GRANT ALL ON TABLE q_constraint.v_unique_engine TO qual_administrator; + GRANT SELECT ON TABLE q_constraint.v_unique_engine TO qual_designer; + GRANT SELECT ON TABLE q_constraint.v_unique_engine TO qual_controler; + REVOKE ALL ON TABLE q_constraint.v_relation_engine FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.v_relation_engine FROM public; + GRANT ALL ON TABLE q_constraint.v_relation_engine TO qual_administrator; + GRANT SELECT ON TABLE q_constraint.v_relation_engine TO qual_designer; + GRANT SELECT ON TABLE q_constraint.v_relation_engine TO qual_controler; + REVOKE ALL ON TABLE q_constraint.v_concat_unique_constraint_soft FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.v_concat_unique_constraint_soft FROM public; + GRANT ALL ON TABLE q_constraint.v_concat_unique_constraint_soft TO qual_administrator; + GRANT SELECT ON TABLE q_constraint.v_concat_unique_constraint_soft TO qual_designer; + GRANT SELECT ON TABLE q_constraint.v_concat_unique_constraint_soft TO qual_controler; + REVOKE ALL ON TABLE q_constraint.v_concat_ft_soft FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.v_concat_ft_soft FROM public; + GRANT ALL ON TABLE q_constraint.v_concat_ft_soft TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_constraint.v_concat_ft_soft TO qual_designer; + GRANT SELECT ON TABLE q_constraint.v_concat_ft_soft TO qual_controler; + REVOKE ALL ON TABLE q_constraint.v_concat_sp_relation_soft FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.v_concat_sp_relation_soft FROM public; + GRANT ALL ON TABLE q_constraint.v_concat_sp_relation_soft TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_constraint.v_concat_sp_relation_soft TO qual_designer; + GRANT SELECT ON TABLE q_constraint.v_concat_sp_relation_soft TO qual_controler; + REVOKE ALL ON TABLE q_constraint.v_concat_topology_engine FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.v_concat_topology_engine FROM public; + GRANT ALL ON TABLE q_constraint.v_concat_topology_engine TO qual_administrator; + GRANT SELECT ON TABLE q_constraint.v_concat_topology_engine TO qual_designer; + GRANT SELECT ON TABLE q_constraint.v_concat_topology_engine TO qual_controler; + REVOKE ALL ON TABLE q_constraint.seq_qualigeo FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.seq_qualigeo FROM public; + GRANT ALL ON TABLE q_constraint.seq_qualigeo TO qual_administrator; + GRANT SELECT, UPDATE, USAGE ON TABLE q_constraint.seq_qualigeo TO qual_designer; + GRANT SELECT ON TABLE q_constraint.seq_qualigeo TO qual_controler; + REVOKE ALL ON TABLE q_constraint.v_schema_engine FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.v_schema_engine FROM public; + GRANT ALL ON TABLE q_constraint.v_schema_engine TO qual_administrator; + GRANT SELECT ON TABLE q_constraint.v_schema_engine TO qual_designer; + GRANT SELECT ON TABLE q_constraint.v_schema_engine TO qual_controler; + REVOKE ALL ON TABLE q_constraint.v_feature_type_engine FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.v_feature_type_engine FROM public; + GRANT ALL ON TABLE q_constraint.v_feature_type_engine TO qual_administrator; + GRANT SELECT ON TABLE q_constraint.v_feature_type_engine TO qual_designer; + GRANT SELECT ON TABLE q_constraint.v_feature_type_engine TO qual_controler; + REVOKE ALL ON TABLE q_constraint.v_domain_engine FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.v_domain_engine FROM public; + GRANT ALL ON TABLE q_constraint.v_domain_engine TO qual_administrator; + GRANT SELECT ON TABLE q_constraint.v_domain_engine TO qual_designer; + GRANT SELECT ON TABLE q_constraint.v_schema_engine TO qual_controler; + REVOKE ALL ON TABLE q_constraint.build_ref_ft FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.build_ref_ft FROM public; + GRANT ALL ON TABLE q_constraint.build_ref_ft TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_constraint.build_ref_ft TO qual_designer; + GRANT SELECT ON TABLE q_constraint.build_ref_ft TO qual_controler; + REVOKE ALL ON TABLE q_constraint.v_build_ref_ft_engine FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.v_build_ref_ft_engine FROM public; + GRANT ALL ON TABLE q_constraint.v_build_ref_ft_engine TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_constraint.v_build_ref_ft_engine TO qual_designer; + GRANT SELECT ON TABLE q_constraint.v_build_ref_ft_engine TO qual_controler; + REVOKE ALL ON TABLE q_constraint.v_constraints FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.v_constraints FROM public; + GRANT ALL ON TABLE q_constraint.v_constraints TO qual_administrator; + GRANT SELECT ON TABLE q_constraint.v_constraints TO qual_designer; + GRANT SELECT ON TABLE q_constraint.v_constraints TO qual_controler; + REVOKE ALL ON TABLE q_constraint.v_spatial_coord_engine FROM u_vitis; + REVOKE ALL ON TABLE q_constraint.v_spatial_coord_engine FROM public; + GRANT ALL ON TABLE q_constraint.v_spatial_coord_engine TO qual_administrator; + GRANT SELECT ON TABLE q_constraint.v_spatial_coord_engine TO qual_designer; + GRANT SELECT ON TABLE q_constraint.v_spatial_coord_engine TO qual_controler; + ALTER TABLE q_constraint.geometry_validation OWNER TO u_vitis; + GRANT ALL ON TABLE q_constraint.geometry_validation TO qual_administrator; + GRANT SELECT ON TABLE q_constraint.geometry_validation TO qual_designer; + GRANT SELECT ON TABLE q_constraint.geometry_validation TO qual_controler; + REVOKE ALL ON TABLE q_constraint.geometry_validation FROM u_vitis; + ALTER TABLE q_constraint.ft_geometry_validation OWNER TO u_vitis; + GRANT ALL ON TABLE q_constraint.ft_geometry_validation TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_constraint.ft_geometry_validation TO qual_designer; + GRANT SELECT ON TABLE q_constraint.ft_geometry_validation TO qual_controler; + REVOKE ALL ON TABLE q_constraint.ft_geometry_validation FROM u_vitis; + SET search_path TO q_constraint; + CREATE FUNCTION up_schema() RETURNS TRIGGER AS 'BEGIN IF NEW.version IS NULL THEN New.version = old.version + 1;END IF;IF NEW.date_schema IS NULL THEN New.date_schema = Now();END IF;return New;END;'LANGUAGE 'plpgsql'; + CREATE TRIGGER trig_schema_version BEFORE UPDATE ON q_constraint."schema" FOR EACH ROW EXECUTE PROCEDURE up_schema(); + CREATE FUNCTION up_schema_1() RETURNS TRIGGER AS 'declare versioning integer;BEGIN select into versioning version from q_constraint.schema where schema.id_schema = New.id_schema;versioning = versioning + 1;UPDATE q_constraint.schema SET date_schema = now(), version = versioning where schema.id_schema = New.id_schema;return NEW;END; 'LANGUAGE 'plpgsql'; + CREATE TRIGGER trig_schema_version BEFORE UPDATE OR INSERT ON q_constraint."schema_constraint" FOR EACH ROW EXECUTE PROCEDURE up_schema_1(); + CREATE TRIGGER trig_schema_version BEFORE UPDATE OR INSERT ON q_constraint."feature_type" FOR EACH ROW EXECUTE PROCEDURE up_schema_1(); + CREATE TRIGGER trig_schema_version BEFORE UPDATE OR INSERT ON q_constraint."code" FOR EACH ROW EXECUTE PROCEDURE up_schema_1(); + CREATE FUNCTION up_schema_2() RETURNS TRIGGER AS'declare versioning integer;BEGIN select into versioning version from q_constraint.schema where schema.id_schema = old.id_schema;versioning = versioning + 1;UPDATE q_constraint.schema SET date_schema = now(), version = versioning where schema.id_schema = old.id_schema;return NEW;END;'LANGUAGE 'plpgsql'; + CREATE TRIGGER trig_schema_version_2 AFTER DELETE ON q_constraint."schema_constraint" FOR EACH ROW EXECUTE PROCEDURE up_schema_2(); + CREATE TRIGGER trig_schema_version_2 AFTER DELETE ON q_constraint."feature_type" FOR EACH ROW EXECUTE PROCEDURE up_schema_2(); + CREATE TRIGGER trig_schema_version_2 AFTER DELETE ON q_constraint."code" FOR EACH ROW EXECUTE PROCEDURE up_schema_2(); + CREATE FUNCTION up_schema_3() RETURNS TRIGGER AS 'declare values q_constraint.schema%ROWTYPE;BEGIN select into values * from q_constraint.schema INNER JOIN q_constraint.feature_type ON schema.id_schema = feature_type.id_schema where feature_type.id_ft = new.id_ft; values.version = values.version + 1;UPDATE q_constraint.schema SET date_schema = now(), version = values.version where schema.id_schema = values.id_schema;return NEW;END;'LANGUAGE 'plpgsql'; + CREATE TRIGGER trig_schema_version BEFORE UPDATE OR INSERT ON q_constraint."attribute" FOR EACH ROW EXECUTE PROCEDURE up_schema_3(); + CREATE TRIGGER trig_schema_version BEFORE UPDATE OR INSERT ON q_constraint."build_ref_ft" FOR EACH ROW EXECUTE PROCEDURE up_schema_3(); + CREATE TRIGGER trig_schema_version BEFORE UPDATE OR INSERT ON q_constraint."unique_constraint" FOR EACH ROW EXECUTE PROCEDURE up_schema_3(); + CREATE TRIGGER trig_schema_version BEFORE UPDATE OR INSERT ON q_constraint."feature_constraint" FOR EACH ROW EXECUTE PROCEDURE up_schema_3(); + CREATE TRIGGER trig_schema_version BEFORE UPDATE OR INSERT ON q_constraint."topology" FOR EACH ROW EXECUTE PROCEDURE up_schema_3(); + CREATE TRIGGER trig_schema_version BEFORE UPDATE OR INSERT ON q_constraint."spatial_relation" FOR EACH ROW EXECUTE PROCEDURE up_schema_3(); + CREATE FUNCTION up_schema_4() RETURNS TRIGGER AS'declare values q_constraint.schema%ROWTYPE;BEGIN select into values * from q_constraint.schema INNER JOIN q_constraint.feature_type ON schema.id_schema = feature_type.id_schema where feature_type.id_ft = old.id_ft;values.version = values.version + 1;UPDATE q_constraint.schema SET date_schema = now(), version = values.version where schema.id_schema = values.id_schema;return NEW;END;'LANGUAGE 'plpgsql'; + CREATE TRIGGER trig_schema_version_2 AFTER DELETE ON q_constraint."attribute" FOR EACH ROW EXECUTE PROCEDURE up_schema_4(); + CREATE TRIGGER trig_schema_version_2 AFTER DELETE ON q_constraint."build_ref_ft" FOR EACH ROW EXECUTE PROCEDURE up_schema_4(); + CREATE TRIGGER trig_schema_version_2 AFTER DELETE ON q_constraint."unique_constraint" FOR EACH ROW EXECUTE PROCEDURE up_schema_4(); + CREATE TRIGGER trig_schema_version_2 AFTER DELETE ON q_constraint."feature_constraint" FOR EACH ROW EXECUTE PROCEDURE up_schema_4(); + CREATE TRIGGER trig_schema_version_2 AFTER DELETE ON q_constraint."topology" FOR EACH ROW EXECUTE PROCEDURE up_schema_4(); + CREATE TRIGGER trig_schema_version_2 AFTER DELETE ON q_constraint."spatial_relation" FOR EACH ROW EXECUTE PROCEDURE up_schema_4(); + CREATE FUNCTION up_schema_6() RETURNS TRIGGER AS 'declare values q_constraint.schema%ROWTYPE;BEGIN select into values * from q_constraint.schema INNER JOIN q_constraint.feature_type ON schema.id_schema = feature_type.id_schema INNER JOIN q_constraint.attribute ON feature_type.id_ft = attribute.id_ft where attribute.id_attribute = old.id_attribute;values.version = values.version + 1;UPDATE q_constraint.schema SET date_schema = now(), version = values.version where schema.id_schema = values.id_schema;return NEW;END;'LANGUAGE'plpgsql'; + CREATE FUNCTION up_schema_7() RETURNS TRIGGER AS'declare values q_constraint.schema%ROWTYPE; BEGIN select into values * from q_constraint.schema INNER JOIN q_constraint.feature_type ON schema.id_schema = feature_type.id_schema where feature_type.id_ft = new.id_ft_parent;values.version = values.version + 1;UPDATE q_constraint.schema SET date_schema = now(), version = values.version where schema.id_schema = values.id_schema;return NEW;END;'LANGUAGE 'plpgsql'; + CREATE FUNCTION up_schema_8()RETURNS TRIGGER AS 'declare values q_constraint.schema%ROWTYPE;BEGIN select into values * from q_constraint.schema INNER JOIN q_constraint.feature_type ON schema.id_schema = feature_type.id_schema where feature_type.id_ft = old.id_ft_parent;values.version = values.version + 1; UPDATE q_constraint.schema SET date_schema = now(), version = values.version where schema.id_schema = values.id_schema; return NEW;END;'LANGUAGE 'plpgsql'; + CREATE TRIGGER trig_schema_version BEFORE INSERT OR UPDATE ON q_constraint."relation" FOR EACH ROW EXECUTE PROCEDURE up_schema_7(); + CREATE TRIGGER trig_schema_version_2 AFTER DELETE ON q_constraint."relation" FOR EACH ROW EXECUTE PROCEDURE up_schema_8(); + INSERT INTO q_constraint.rt_existence (id_existence, existence) VALUES (1, 'autorisé'); + INSERT INTO q_constraint.rt_existence (id_existence, existence) VALUES (3, 'obligatoire'); + INSERT INTO q_constraint.rt_stat_type (id_stat_type, stat_type) VALUES (1, 'Chaine de caractères'); + INSERT INTO q_constraint.rt_stat_type (id_stat_type, stat_type) VALUES (2, 'Numérique'); + INSERT INTO q_constraint.rt_stat_type (id_stat_type, stat_type) VALUES (3, 'Domaine'); + INSERT INTO q_constraint.rt_attribute_type (id_type, attribute_type) VALUES (1, 'Alphanumérique'); + INSERT INTO q_constraint.rt_attribute_type (id_type, attribute_type) VALUES (2, 'Numérique'); + INSERT INTO q_constraint.rt_attribute_type (id_type, attribute_type) VALUES (3, 'Entier'); + INSERT INTO q_constraint.spatial_operator (id_operator, name) VALUES ('WITHIN', 'A l''intérieur'); + INSERT INTO q_constraint.spatial_operator (id_operator, name) VALUES ('OVERLAPS', 'Chevauche'); + INSERT INTO q_constraint.spatial_operator (id_operator, name) VALUES ('CONTAINS', 'Contient'); + INSERT INTO q_constraint.spatial_operator (id_operator, name) VALUES ('CROSSES', 'Croise'); + INSERT INTO q_constraint.spatial_operator (id_operator, name) VALUES ('EQUALS', 'Egale'); + INSERT INTO q_constraint.spatial_operator (id_operator, name) VALUES ('DISJOINT', 'Disjoint'); + INSERT INTO q_constraint.spatial_operator (id_operator, name) VALUES ('INTERSECTS', 'Intersecte'); + INSERT INTO q_constraint.spatial_operator (id_operator, name) VALUES ('TOUCHES', 'Touche'); + INSERT INTO q_constraint.rt_topology_constraint (id_topology_constraint, topology_constraint) VALUES (1, 'Tesselation'); + INSERT INTO q_constraint.h_named_expression ( name, value) VALUES ('adresse mail', E'^[a-zA-Z0-9][-._a-zA-Z0-9]*@[a-zA-Z0-9]*\\.[a-zA-Z]{2,4}$'); + INSERT INTO q_constraint.h_named_expression ( name, value) VALUES ('entier', '^[0-9]*$'); + INSERT INTO q_constraint.h_named_expression ( name, value) VALUES ('code postal françaIS ', '^(2[AB]|[0-9]|[1-8][0-9]|9[0-5]|97|98)[0-9]{3}$'); + INSERT INTO q_constraint.h_named_expression ( name, value) VALUES ('code commune', '^(2[AB]|(0[1-9])|[1-8][0-9]|9[0-5]|97|98)(00[1-9]|0[1-9][0-9]|[1-9][0-9][0-9])$'); + INSERT INTO q_constraint.h_format_date (name, value) VALUES ('jj/mm/aaaa', '%d/%m/%Y'); + INSERT INTO q_constraint.h_format_date (name, value) VALUES ('jj.mm.aaaa', '%d.%m.%Y'); + INSERT INTO q_constraint.h_format_date (name, value) VALUES ('jour de la semaine', '%a'); + INSERT INTO q_constraint.h_format_date (name, value) VALUES ('aa/mm/jj', '%y/%m/%d '); + INSERT INTO q_constraint.h_format_date (name, value) VALUES ('Le ''jour de la semaine'' puis jj/mm/dd', 'Le %a, %d/%m/%y'); + INSERT INTO q_constraint.rt_build_constraint (id_build_constraint, build_constraint) VALUES (1, 'Appui sur vertex'); + INSERT INTO q_constraint.rt_build_constraint (id_build_constraint, build_constraint) VALUES (2, 'Appui strict sur segment'); + INSERT INTO q_constraint.rt_build_constraint (id_build_constraint, build_constraint) VALUES (3, 'Appui sur segment, partie de segment ou extérieur'); + INSERT INTO q_constraint.rt_build_constraint (id_build_constraint, build_constraint) VALUES (4, 'Appui sur polygone ou partie de polygone'); + --INSERT INTO q_constraint.h_domain (name, "values") VALUES ('Nombre entre 1 et 10', '1|2|3|4|5|6|7|8|9|10'); + --INSERT INTO q_constraint.rt_existence (id_existence, existence) VALUES (1, 'authorized'); + --INSERT INTO q_constraint.rt_existence (id_existence, existence) VALUES (3, 'compulsory'); + --INSERT INTO q_constraint.rt_stat_type (id_stat_type, stat_type) VALUES (1, 'String'); + --INSERT INTO q_constraint.rt_stat_type (id_stat_type, stat_type) VALUES (2, 'Numeric'); + --INSERT INTO q_constraint.rt_stat_type (id_stat_type, stat_type) VALUES (3, 'Domain'); + --INSERT INTO q_constraint.rt_attribute_type (id_type, attribut_type) VALUES (1, 'Alphanumeric'); + --INSERT INTO q_constraint.rt_attribute_type (id_type, attribut_type) VALUES (2, 'Numeric'); + --INSERT INTO q_constraint.rt_attribute_type (id_type, attribut_type) VALUES (3, 'Integer'); + --INSERT INTO q_constraint.spatial_operator (id_operator, name) VALUES ('WITHIN', 'Within'); + --INSERT INTO q_constraint.spatial_operator (id_operator, name) VALUES ('OVERLAPS', 'Overlaps'); + --INSERT INTO q_constraint.spatial_operator (id_operator, name) VALUES ('CONTAINS', 'Contains'); + --INSERT INTO q_constraint.spatial_operator (id_operator, name) VALUES ('CROSSES', 'Crosses'); + --INSERT INTO q_constraint.spatial_operator (id_operator, name) VALUES ('EQUALS', 'Equals'); + --INSERT INTO q_constraint.spatial_operator (id_operator, name) VALUES ('DISJOINT', 'Disjoint'); + --INSERT INTO q_constraint.spatial_operator (id_operator, name) VALUES ('INTERSECTS', 'Intersects'); + --INSERT INTO q_constraint.spatial_operator (id_operator, name) VALUES ('TOUCHES', 'Touches'); + --INSERT INTO q_constraint.rt_topology_constraint (id_topology_constraint, topology_constraint) VALUES (1, 'Tesselation'); + --INSERT INTO q_constraint.h_named_expression ( name, value) VALUES ('E-mail address', E'^[a-zA-Z0-9][-._a-zA-Z0-9]*@[a-zA-Z0-9]*\\.[a-zA-Z]{2,4}$'); + --INSERT INTO q_constraint.h_named_expression ( name, value) VALUES ('Integer ', '^[0-9]*$'); + --INSERT INTO q_constraint.h_named_expression ( name, value) VALUES ('French zip code', '^(2[AB]|[0-9]|[1-8][0-9]|9[0-5]|97|98)[0-9]{3}$'); + --INSERT INTO q_constraint.h_named_expression ( name, value) VALUES ('Code municipality', '^(2[AB]|(0[1-9])|[1-8][0-9]|9[0-5]|97|98)(00[1-9]|0[1-9][0-9]|[1-9][0-9][0-9])$'); + --INSERT INTO q_constraint.h_format_date (name, value) VALUES ('dd/mm/yyyy', '%d/%m/%Y'); + --INSERT INTO q_constraint.h_format_date (name, value) VALUES ('dd.mm.yyyy', '%d.%m.%Y'); + --INSERT INTO q_constraint.h_format_date (name, value) VALUES ('week day', '%a'); + --INSERT INTO q_constraint.h_format_date (name, value) VALUES ('yy/mm/dd', '%y/%m/%d '); + --INSERT INTO q_constraint.h_format_date (name, value) VALUES (''week day'' the dd/mm/yy', 'Le %a, %d/%m/%y'); + --INSERT INTO q_constraint.rt_build_constraint (id_build_constraint, build_constraint) VALUES (1, 'Support ON vertex'); + --INSERT INTO q_constraint.rt_build_constraint (id_build_constraint, build_constraint) VALUES (2, 'Strict support ON segment'); + --INSERT INTO q_constraint.rt_build_constraint (id_build_constraint, build_constraint) VALUES (3, 'Support ON segment, part of segment or outside'); + --INSERT INTO q_constraint.rt_build_constraint (id_build_constraint, build_constraint) VALUES (4, 'Support ON polygon or part of polygon'); + --INSERT INTO q_constraint.h_domain (name, "values") VALUES ('Number between 1 and 10', '1|2|3|4|5|6|7|8|9|10'); + SET search_path TO q_control; + CREATE SEQUENCE ERROR_ID_ERROR_SEQ; + CREATE SEQUENCE SEQ_CONTROL; + CREATE SEQUENCE STAT_ATTR_DOMAIN_ID_STAT_ATTR_DOMAIN_SEQ; + CREATE TABLE h_named_expression (name VARCHAR(50) NOT NULL,value TEXT NOT NULL,use_for_name BOOLEAN NULL,use_for_vintage Boolean NULL,CONSTRAINT PK_H_NAMED_EXPRESSION primary key (name)); + COMMENT ON TABLE h_named_expression IS 'Liste d''expression régulière. Permet de définir des expressions régulières qui pourront être réutilisés.'; + COMMENT ON COLUMN h_named_expression.name IS 'Nom de l''expression nommée'; + COMMENT ON COLUMN h_named_expression.value IS 'valeur de l''expression régulière'; + CREATE UNIQUE INDEX uk_expression ON h_named_expression (name); + CREATE TABLE CONTROL_STATUS (ID_STATUS INT4 NOT NULL,NAME VARCHAR(30) NULL,CONSTRAINT PK_CONTROL_STATUS primary key (ID_STATUS)); + COMMENT ON TABLE CONTROL_STATUS IS 'Définit l''état du control\n 1. En cours\n 2. Terminé\n 3. En échec'; + CREATE UNIQUE INDEX UK_NAME ON CONTROL_STATUS (NAME); + CREATE TABLE ERROR_CLASS (id_error_class INT4 NOT NULL,name VARCHAR(255) NULL,CONSTRAINT PK_ERROR_CLASS primary key (id_error_class)); + COMMENT ON TABLE ERROR_CLASS IS 'Liste les classes d''erreurs possibles'; + COMMENT ON COLUMN ERROR_CLASS.id_error_class IS 'Element sur lequel s''applique l''erreur\n Géométrie\n Entité\n Jeu de donnée\n ...\n Type INT4 utilisé pour avoir la main sur la clef primaire'; + COMMENT ON COLUMN ERROR_CLASS.name IS 'nom de la classe d''erreur\n Element sur lequel s''applique l''erreur\n Géométrie\n Entité\n Jeu de donnée\n ...'; + CREATE UNIQUE INDEX uk_index ON ERROR_CLASS (name); + CREATE TABLE ERROR_TYPE (id_error_type VARCHAR(5) NOT NULL,id_error_class INT4 NULL,name VARCHAR(255) NULL,map BOOL NULL,CONSTRAINT PK_ERROR_TYPE primary key (id_error_type),CONSTRAINT FK_ERROR_TY_REFERENCE_ERROR_CL foreign key (id_error_class)REFERENCES ERROR_CLASS (id_error_class)ON DELETE RESTRICT ON UPDATE CASCADE); + COMMENT ON TABLE ERROR_TYPE IS 'Liste les classes d''erreurs possibles'; + COMMENT ON COLUMN ERROR_TYPE.id_error_type IS 'Identifiant du type d''erreur'; + COMMENT ON COLUMN ERROR_TYPE.id_error_class IS 'Identifiant de la classe d''erreur'; + COMMENT ON COLUMN ERROR_TYPE.name IS 'Texte associé à l''erreur'; + COMMENT ON COLUMN ERROR_TYPE.map IS 'Image associée à la class d''erreur'; + CREATE UNIQUE INDEX uk_error_class_and_name ON ERROR_TYPE (id_error_class,name); + CREATE INDEX NDX_ERROR_CLASS ON ERROR_TYPE (id_error_class); + CREATE TABLE FORMAT (id_format VARCHAR(40) NOT NULL,format VARCHAR(80) NOT NULL,type VARCHAR(40) NULL,source_type VARCHAR(40) NULL,extensions VARCHAR(60) NULL,exportable boolean NOT NULL DEFAULT false,format_schema VARCHAR(40) NULL,CONSTRAINT FK_format_id foreign key (format_schema) REFERENCES FORMAT (id_format),CONSTRAINT PK_FORMAT primary key (id_format)); + COMMENT ON TABLE FORMAT IS 'Liste les différents formats des jeu de données utilisables pour les contrôles'; + COMMENT ON COLUMN FORMAT.id_format IS 'Nom court du format (terminologie FME).\n Exemple : "ACAD"'; + COMMENT ON COLUMN FORMAT.format IS 'Nom du format, utilisé comme libellé, peut être la description du format dans FME.\n Exemple : "Autodesk AutoCAD DWG/DXF"'; + COMMENT ON COLUMN FORMAT.type IS '2D, 3D, RASTER'; + COMMENT ON COLUMN FORMAT.source_type IS 'File, database, web'; + COMMENT ON COLUMN FORMAT.extensions IS 'Motif correspondant aux noms de fichier du format.\n Par exemple :\n "*.shp"\n "*.dxf|*.dwg"\n à préciser...'; + CREATE UNIQUE INDEX uk_format ON FORMAT (format); + CREATE TABLE CONTROL (ID_CONTROL INT4 NOT NULL default nextval('q_control.seq_control'::regclass),schema_id VARCHAR(255) NOT NULL,schema_version VARCHAR(40) NULL,id_data_format VARCHAR(40) NULL,id_coordsys VARCHAR(50) NULL,ID_SCHEMA_FORMAT VARCHAR(40) NULL,AUTHOR VARCHAR(30) NULL default current_user,control_date_begin TIMESTAMP WITH TIME ZONE NULL,CONTROL_DATE_END TIMESTAMP WITH TIME ZONE NULL,ID_STATUS INT4 NULL,dataset TEXT NULL,"dataset_name" VARCHAR(50) NULL,"dataset_date" VARCHAR(20) NULL,dataset_crc VARCHAR(20) NULL,error_number INT4 NULL,comment TEXT NULL,fme_version VARCHAR(40) NULL,control_engine_version VARCHAR(40) NULL,LOG TEXT NULL,parameters text,CONSTRAINT PK_CONTROL primary key (ID_CONTROL),CONSTRAINT FK_CONTROL_REFERENCE_FORMAT foreign key (id_data_format) REFERENCES FORMAT (id_format) ON DELETE RESTRICT ON UPDATE CASCADE,CONSTRAINT FK_CONTROL_REFERENCE_CONTROL_ foreign key (ID_STATUS) REFERENCES CONTROL_STATUS (ID_STATUS) ON DELETE RESTRICT ON UPDATE CASCADE,CONSTRAINT FK_CONTROL_REF_FORMAT_SCHEMA foreign key (ID_SCHEMA_FORMAT) REFERENCES FORMAT (id_format) ON DELETE RESTRICT ON UPDATE CASCADE); + COMMENT ON TABLE CONTROL IS 'Liste les contrôles effectués'; + COMMENT ON COLUMN CONTROL.ID_CONTROL IS 'Identifiant du controle'; + COMMENT ON COLUMN CONTROL.schema_id IS 'Identification du schéma. Doit mémoriser la connection ainsi que le nom du schéma'; + COMMENT ON COLUMN CONTROL.schema_version IS 'Version du schéma dans la base de règle.Il faut prévoir un mécanisme pour mettre à jour automatiquement l''attribut schema.date à chaque mise à jour du schéma.\n Exemple : 2010-07-30 09:32:42+02'; + COMMENT ON COLUMN CONTROL.id_data_format IS 'format du jeu de donnée'; + COMMENT ON COLUMN CONTROL.id_coordsys IS 'Système de coord. du jeu de données. Permet à l''utilisateur de spécifier le coordsys lorsque le format ne permet pas stocker cette informaton (dwg, dgn, csv...).'; + COMMENT ON COLUMN CONTROL.ID_SCHEMA_FORMAT IS 'Nom court du format (terminologie FME).\n Exemple : "ACAD"'; + COMMENT ON COLUMN CONTROL.AUTHOR IS 'Auteur du controle'; + COMMENT ON COLUMN CONTROL.control_date_begin IS 'Date du control'; + COMMENT ON COLUMN CONTROL.dataset IS 'Chemin du jeu de données.'; + COMMENT ON COLUMN CONTROL.dataset_crc IS 'Identifiant ''Unique'' du jeu de donnée basé sur les informations du jeu de données.'; + COMMENT ON COLUMN CONTROL.error_number IS 'Nombre d''erreur'; + COMMENT ON COLUMN CONTROL.comment IS 'Commentaire sur le contrôle'; + COMMENT ON COLUMN CONTROL.fme_version IS 'Build du moteur FME utilisé pour le contrôle.\n exemple : 6128'; + COMMENT ON COLUMN CONTROL.control_engine_version IS 'Version du script de contrôle (control.fmw).\n Date du fichier. Evolution possible vers un numéro lors du passage à control.fme.'; + CREATE INDEX NDX_DATA_FORMAT ON CONTROL (id_data_format); + CREATE INDEX NDX_COORDSYS ON CONTROL (id_coordsys); + CREATE INDEX NDX_STATUS ON CONTROL (ID_STATUS); + CREATE INDEX NDX_SCHEMA_FORMAT ON CONTROL (ID_SCHEMA_FORMAT); + CREATE TABLE ERROR (ID_ERROR INT4 NOT NULL default nextval('q_control.error_id_error_seq'::regclass),id_error_type VARCHAR(5) NULL,id_control INT4 NULL,message TEXT NULL,map_name VARCHAR(255) NULL,feature_type VARCHAR(100) NULL,feature_id VARCHAR(255) NULL,geom public.geometry,attribute VARCHAR(100) NULL,exception BOOL NULL,checked BOOL NULL DEFAULT false,comment TEXT NULL,CONSTRAINT PK_ERROR primary key (ID_ERROR),CONSTRAINT FK_ERROR_REFERENCE_CONTROL foreign key (id_control) REFERENCES CONTROL (ID_CONTROL) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT FK_ERROR_REFERENCE_ERROR_TY foreign key (id_error_type) REFERENCES ERROR_TYPE (id_error_type) ON DELETE RESTRICT ON UPDATE CASCADE); + COMMENT ON TABLE ERROR IS 'Liste les différentes erreurs trouvées'; + COMMENT ON COLUMN ERROR.ID_ERROR IS 'Identifiant de l''erreur'; + COMMENT ON COLUMN ERROR.id_error_type IS 'Identifiant dy type d''erreur'; + COMMENT ON COLUMN ERROR.id_control IS 'Identifiant du controle dans lequel a été trouvé l''erreur'; + COMMENT ON COLUMN ERROR.message IS 'message de l''erreur'; + COMMENT ON COLUMN ERROR.geom IS 'définition de la géométrie sur laquelle s''applique l''erreur'; + COMMENT ON COLUMN ERROR.map_name IS 'Nom de la map d''erreur générée'; + COMMENT ON COLUMN ERROR.feature_type IS 'Nom du type d''entité basé sur feature_type du schéma contrainte'; + COMMENT ON COLUMN ERROR.feature_id IS 'Identifiant de l''entité en erreur.\n A ne pas confondre avec id_ft qui est l''identifiant du type d''entité dans la base de règle.'; + COMMENT ON COLUMN ERROR.attribute IS 'Nom de l''attribut basé sur attribut du schéma contrainte'; + CREATE INDEX ndx_control_error ON ERROR (id_control); + CREATE INDEX NDX_TYPE_ERREUR ON ERROR (id_error_type); + CREATE INDEX ndx_error_geom ON q_control.error USING gist (geom); + CREATE TABLE STAT_ATTR_DOMAIN (ID_STAT_ATTR_DOMAIN INT4 NOT NULL default nextval('q_control.stat_attr_domain_id_stat_attr_domain_seq'::regclass),id_control INT4 NOT NULL,feature_type VARCHAR(50) NOT NULL,attribute VARCHAR(30) NOT NULL,value VARCHAR(255) NULL,number INT4 NULL,CONSTRAINT PK_STAT_ATTR_DOMAIN primary key (ID_STAT_ATTR_DOMAIN),CONSTRAINT FK_ST_ATTR__REF_CONTROLE_dom foreign key (id_control) REFERENCES CONTROL (ID_CONTROL) ON DELETE CASCADE ON UPDATE CASCADE); + COMMENT ON TABLE STAT_ATTR_DOMAIN IS 'Liste des statistiques d''attributs de type domaine'; + COMMENT ON COLUMN STAT_ATTR_DOMAIN.id_control IS 'Identifiant du controle'; + COMMENT ON COLUMN STAT_ATTR_DOMAIN.feature_type IS 'Nom du type d''entité basé sur feature_type du schéma contrainte'; + COMMENT ON COLUMN STAT_ATTR_DOMAIN.attribute IS 'Nom de l''attribut basé sur attribut du schéma contrainte'; + COMMENT ON COLUMN STAT_ATTR_DOMAIN.value IS 'Valeur du domaine'; + COMMENT ON COLUMN STAT_ATTR_DOMAIN.number IS 'Nombre d''occurence de la valeur de l''attribut'; + CREATE INDEX ndx_control_attr_dom ON STAT_ATTR_DOMAIN (id_control); + CREATE TABLE STAT_ATTR_STR (id_control INT4 NOT NULL,feature_type VARCHAR(50) NOT NULL,attribute VARCHAR(30) NOT NULL,number INT4 NULL,"NULL" INT4 NULL,not_null INT4 NULL,CONSTRAINT PK_STAT_ATTR_STR primary key (id_control, attribute, feature_type),CONSTRAINT FK_ST_ATTRI_REF_CONTROLE_str foreign key (id_control) REFERENCES CONTROL (ID_CONTROL) ON DELETE CASCADE ON UPDATE CASCADE); + COMMENT ON TABLE STAT_ATTR_STR IS 'Liste les stats des attributs de type string'; + COMMENT ON COLUMN STAT_ATTR_STR.id_control IS 'Identifiant du controle'; + COMMENT ON COLUMN STAT_ATTR_STR.feature_type IS 'Nom du type d''entité basé sur feature_type du schéma contrainte'; + COMMENT ON COLUMN STAT_ATTR_STR.attribute IS 'Nom de l''attribut basé sur attribut du schéma contrainte'; + COMMENT ON COLUMN STAT_ATTR_STR.number IS 'nombre d''occurence de type chaine de caractère pour un controle, un type d''entité et un attribut donné'; + COMMENT ON COLUMN STAT_ATTR_STR."NULL" IS 'nombre d''occurence nul'; + COMMENT ON COLUMN STAT_ATTR_STR.not_null IS 'Nombre d''occurence non nul'; + create index ndx_control_attribut_str ON STAT_ATTR_STR (id_control); + CREATE TABLE stat_attr_numeric (id_control INT4 NOT NULL,feature_type VARCHAR(50) NOT NULL,attribute VARCHAR(30) NOT NULL,min FLOAT4 NULL,max FLOAT4 NULL,median FLOAT4 NULL,number INT4 NULL,numeric_number INT4 NULL,sum FLOAT4 NULL,mean FLOAT4 NULL,stdev FLOAT4 NULL,mode FLOAT4 NULL,CONSTRAINT PK_STAT_ATTR_NUMERIC primary key (id_control, feature_type, attribute),CONSTRAINT FK_ST_ATTR__REF_CONTROLE_num foreign key (id_control) REFERENCES CONTROL (ID_CONTROL) ON DELETE CASCADE ON UPDATE CASCADE); + COMMENT ON TABLE stat_attr_numeric IS 'Liste des statistiques de type numérique'; + COMMENT ON COLUMN stat_attr_numeric.id_control IS 'Identifiant du controle'; + COMMENT ON COLUMN stat_attr_numeric.feature_type IS 'Nom du type d''entité basé sur feature_type du schéma contrainte'; + COMMENT ON COLUMN stat_attr_numeric.attribute IS 'Nom de l''attribut basé sur attribut du schéma contrainte'; + COMMENT ON COLUMN stat_attr_numeric.min IS 'Valeur min'; + COMMENT ON COLUMN stat_attr_numeric.max IS 'Valeur max'; + COMMENT ON COLUMN stat_attr_numeric.median IS 'Valeur médiane'; + COMMENT ON COLUMN stat_attr_numeric.number IS 'Nombre'; + COMMENT ON COLUMN stat_attr_numeric.numeric_number IS 'Nombre de type numéric'; + COMMENT ON COLUMN stat_attr_numeric.sum IS 'Somme'; + COMMENT ON COLUMN stat_attr_numeric.mean IS 'moyenne'; + COMMENT ON COLUMN stat_attr_numeric.stdev IS 'Ecart type'; + COMMENT ON COLUMN stat_attr_numeric.mode IS 'Mode'; + CREATE INDEX ndx_control_attr_num ON stat_attr_numeric (id_control); + CREATE TABLE stat_ft (id_control INT4 NOT NULL,feature_type VARCHAR(50) NOT NULL,number INT4 NULL,CONSTRAINT PK_STAT_FT primary key (id_control, feature_type),CONSTRAINT FK_STAT_FT_REFERENCE_CONTROL foreign key (id_control) REFERENCES CONTROL (ID_CONTROL) ON DELETE CASCADE ON UPDATE CASCADE); + COMMENT ON TABLE stat_ft IS 'liste les stats effectuées sur les types d''entités.'; + COMMENT ON COLUMN stat_ft.feature_type IS 'Nom du type d''entité basé sur feature_type du schéma contrainte'; + COMMENT ON COLUMN stat_ft.number IS 'Nombre d''occurence de chaque type d''entité'; + CREATE INDEX ndx_control_ft ON stat_ft (id_control); + CREATE INDEX ndx_st_ft_id_te ON stat_ft (feature_type); + CREATE INDEX ndx_stat_ft ON stat_ft (feature_type); + CREATE TABLE stylesheet (NAME VARCHAR(50) NOT NULL,ENABLED BOOL NULL,MULTIREPORT BOOL NULL,CODE TEXT NULL,CONSTRAINT PK_XSL primary key (NAME)); + COMMENT ON TABLE stylesheet IS 'Table contenant les feuilles xsl pour générer les rapports'; + CREATE TABLE q_control.rt_coordsys(coordsys_id VARCHAR(100) NOT NULL,label VARCHAR(100) NOT NULL,CONSTRAINT PK_RT_COORDSYS primary key (coordsys_id)); + INSERT INTO rt_coordsys (coordsys_id,label) values ('EPSG:27561', 'NTF.Lambert-1'); + INSERT INTO rt_coordsys (coordsys_id,label) values ('EPSG:27562', 'NTF.Lambert-2'); + INSERT INTO rt_coordsys (coordsys_id,label) values ('EPSG:27563', 'NTF.Lambert-3'); + INSERT INTO rt_coordsys (coordsys_id,label) values ('EPSG:27564', 'NTF.Lambert-4'); + INSERT INTO rt_coordsys (coordsys_id,label) values ('EPSG:27571', 'NTF.Lambert-1C'); + INSERT INTO rt_coordsys (coordsys_id,label) values ('EPSG:27572', 'NTF.Lambert-2C'); + INSERT INTO rt_coordsys (coordsys_id,label) values ('EPSG:27573', 'NTF.Lambert-3C'); + INSERT INTO rt_coordsys (coordsys_id,label) values ('EPSG:27574', 'NTF.Lambert-4C'); + INSERT INTO rt_coordsys (coordsys_id,label) values ('EPSG:2154', 'Lambert93'); + INSERT INTO rt_coordsys (coordsys_id,label) values ('EPSG:3942', 'RGF93.Lambert CC42 Zone 1'); + INSERT INTO rt_coordsys (coordsys_id,label) values ('EPSG:3943', 'RGF93.Lambert CC43 Zone 2'); + INSERT INTO rt_coordsys (coordsys_id,label) values ('EPSG:3944', 'RGF93.Lambert CC44 Zone 3'); + INSERT INTO rt_coordsys (coordsys_id,label) values ('EPSG:3945', 'RGF93.Lambert CC45 Zone 4'); + INSERT INTO rt_coordsys (coordsys_id,label) values ('EPSG:3946', 'RGF93.Lambert CC46 Zone 5'); + INSERT INTO rt_coordsys (coordsys_id,label) values ('EPSG:3947', 'RGF93.Lambert CC47 Zone 6'); + INSERT INTO rt_coordsys (coordsys_id,label) values ('EPSG:3948', 'RGF93.Lambert CC48 Zone 7'); + INSERT INTO rt_coordsys (coordsys_id,label) values ('EPSG:3949', 'RGF93.Lambert CC49 Zone 8'); + INSERT INTO rt_coordsys (coordsys_id,label) values ('EPSG:3950', 'RGF93.Lambert CC50 Zone 9'); + INSERT INTO rt_coordsys (coordsys_id,label) values ('EPSG:4326', 'LL Degrés sur WGS84'); + CREATE OR REPLACE VIEW q_control.v_error_engine AS SELECT error.id_error, error.id_error_type, error.id_control, error.message, public.st_asewkt(error.geom)as wkt_geometry, error.map_name, error.feature_type, error.feature_id, error.attribute, error.exception, error.checked, error."comment", error_class.id_error_class, error_class.name AS error_class, error_type.name AS error_type FROM q_control.error LEFT JOIN q_control.error_type ON error.id_error_type::text = error_type.id_error_type::text LEFT JOIN q_control.error_class ON error_type.id_error_class = error_class.id_error_class; + ALTER TABLE q_control.v_error_engine OWNER TO u_vitis; + CREATE OR REPLACE VIEW q_control.v_error_line AS SELECT error.id_error, error.id_error_type, error_type.id_error_class, error.id_control, error.message, error.map_name, error.feature_type, error.feature_id, error.attribute, error.exception, error.comment, error.geom FROM q_control.error JOIN q_control.error_type ON error.id_error_type::text = error_type.id_error_type::text WHERE public.st_geometrytype(error.geom) ~~ '%ST_MultiLineString%'::text OR public.st_geometrytype(error.geom) ~~ '%ST_LineString%'::text; + ALTER TABLE q_control.v_error_line OWNER TO u_vitis; + CREATE OR REPLACE VIEW q_control.v_error_point AS SELECT error.id_error, error.id_error_type, error_type.id_error_class, error.id_control, error.message, error.map_name, error.feature_type, error.feature_id, error.attribute, error.exception, error.comment, error.geom FROM q_control.error JOIN q_control.error_type ON error.id_error_type::text = error_type.id_error_type::text WHERE public.st_geometrytype(error.geom) ~~ '%ST_MultiPoint%'::text OR public.st_geometrytype(error.geom) ~~ '%ST_Point%'::text; + ALTER TABLE q_control.v_error_point OWNER TO u_vitis; + CREATE OR REPLACE VIEW q_control.v_error_polygon AS SELECT error.id_error, error.id_error_type, error_type.id_error_class, error.id_control, error.message, error.map_name, error.feature_type, error.feature_id, error.attribute, error.exception, error.comment, error.geom FROM q_control.error JOIN q_control.error_type ON error.id_error_type::text = error_type.id_error_type::text WHERE public.st_geometrytype(error.geom) ~~ '%ST_MultiPolygon%'::text OR public.st_geometrytype(error.geom) ~~ '%ST_Polygon%'::text; + ALTER TABLE q_control.v_error_polygon OWNER TO u_vitis; + GRANT qual_administrator TO u_vitis; + GRANT SELECT ON TABLE public.geography_columns to qual_administrator; + GRANT SELECT ON TABLE public.geography_columns to qual_designer; + GRANT SELECT ON TABLE public.geography_columns to qual_controler; + GRANT ALL ON SCHEMA q_control TO u_vitis; + GRANT USAGE ON SCHEMA q_control TO qual_administrator; + GRANT USAGE ON SCHEMA q_control TO qual_controler; + GRANT USAGE ON SCHEMA q_control TO qual_designer; + REVOKE ALL ON TABLE q_control.control FROM u_vitis; + REVOKE ALL ON TABLE q_control.control FROM public; + GRANT ALL ON TABLE q_control.control TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_control.control TO qual_designer; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_control.control TO qual_controler; + REVOKE ALL ON TABLE q_control.control_status FROM u_vitis; + REVOKE ALL ON TABLE q_control.control_status FROM public; + GRANT ALL ON TABLE q_control.control_status TO qual_administrator; + GRANT SELECT, UPDATE ON TABLE q_control.control_status TO qual_designer; + GRANT SELECT, UPDATE ON TABLE q_control.control_status TO qual_controler; + REVOKE ALL ON TABLE q_control.error FROM u_vitis; + REVOKE ALL ON TABLE q_control.error FROM public; + GRANT ALL ON TABLE q_control.error TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_control.error TO qual_designer; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_control.error TO qual_controler; + REVOKE ALL ON TABLE q_control.error_class FROM u_vitis; + REVOKE ALL ON TABLE q_control.error_class FROM public; + GRANT ALL ON TABLE q_control.error_class TO qual_administrator; + GRANT SELECT, UPDATE ON TABLE q_control.error_class TO qual_designer; + GRANT SELECT, UPDATE ON TABLE q_control.error_class TO qual_controler; + REVOKE ALL ON TABLE q_control.error_type FROM u_vitis; + REVOKE ALL ON TABLE q_control.error_type FROM public; + GRANT ALL ON TABLE q_control.error_type TO qual_administrator; + GRANT SELECT, UPDATE ON TABLE q_control.error_type TO qual_designer; + GRANT SELECT, UPDATE ON TABLE q_control.error_type TO qual_controler; + REVOKE ALL ON TABLE q_control.format FROM u_vitis; + REVOKE ALL ON TABLE q_control.format FROM public; + GRANT ALL ON TABLE q_control.format TO qual_administrator; + GRANT SELECT ON TABLE q_control.format TO qual_designer; + GRANT SELECT ON TABLE q_control.format TO qual_controler; + REVOKE ALL ON TABLE q_control.stat_attr_domain FROM u_vitis; + REVOKE ALL ON TABLE q_control.stat_attr_domain FROM public; + GRANT ALL ON TABLE q_control.stat_attr_domain TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_control.stat_attr_domain TO qual_designer; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_control.stat_attr_domain TO qual_controler; + REVOKE ALL ON TABLE q_control.stat_attr_numeric FROM u_vitis; + REVOKE ALL ON TABLE q_control.stat_attr_numeric FROM public; + GRANT ALL ON TABLE q_control.stat_attr_numeric TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_control.stat_attr_numeric TO qual_designer; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_control.stat_attr_numeric TO qual_controler; + REVOKE ALL ON TABLE q_control.stat_attr_str FROM u_vitis; + REVOKE ALL ON TABLE q_control.stat_attr_str FROM public; + GRANT ALL ON TABLE q_control.stat_attr_str TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_control.stat_attr_str TO qual_designer; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_control.stat_attr_str TO qual_controler; + REVOKE ALL ON TABLE q_control.seq_control FROM u_vitis; + REVOKE ALL ON TABLE q_control.seq_control FROM public; + GRANT ALL ON TABLE q_control.seq_control TO qual_administrator; + GRANT SELECT, UPDATE, USAGE ON TABLE q_control.seq_control TO qual_designer; + GRANT SELECT, UPDATE, USAGE ON TABLE q_control.seq_control TO qual_controler; + REVOKE ALL ON TABLE q_control.error_id_error_seq FROM u_vitis; + REVOKE ALL ON TABLE q_control.error_id_error_seq FROM public; + GRANT ALL ON TABLE q_control.error_id_error_seq TO qual_administrator; + GRANT SELECT, UPDATE, USAGE ON TABLE q_control.error_id_error_seq TO qual_designer; + GRANT SELECT, UPDATE, USAGE ON TABLE q_control.error_id_error_seq TO qual_controler; + REVOKE ALL ON TABLE q_control.v_error_engine FROM u_vitis; + REVOKE ALL ON TABLE q_control.v_error_engine FROM public; + GRANT ALL ON TABLE q_control.v_error_engine TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_control.v_error_engine TO qual_designer; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_control.v_error_engine TO qual_controler; + REVOKE ALL ON TABLE q_control.stat_attr_domain_id_stat_attr_domain_seq FROM u_vitis; + REVOKE ALL ON TABLE q_control.stat_attr_domain_id_stat_attr_domain_seq FROM public; + GRANT ALL ON TABLE q_control.stat_attr_domain_id_stat_attr_domain_seq TO qual_administrator; + GRANT SELECT, UPDATE, USAGE ON TABLE q_control.stat_attr_domain_id_stat_attr_domain_seq TO qual_designer; + GRANT SELECT, UPDATE, USAGE ON TABLE q_control.stat_attr_domain_id_stat_attr_domain_seq TO qual_controler; + REVOKE ALL ON TABLE q_control.stat_ft FROM u_vitis; + REVOKE ALL ON TABLE q_control.stat_ft FROM public; + GRANT ALL ON TABLE q_control.stat_ft TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_control.stat_ft TO qual_designer; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_control.stat_ft TO qual_controler; + REVOKE ALL ON TABLE q_control.stylesheet FROM u_vitis; + REVOKE ALL ON TABLE q_control.stylesheet FROM public; + GRANT ALL ON TABLE q_control.stylesheet TO qual_administrator; + GRANT SELECT ON TABLE q_control.stylesheet TO qual_designer; + GRANT SELECT ON TABLE q_control.stylesheet TO qual_controler; + REVOKE ALL ON TABLE q_control.h_named_expression FROM u_vitis; + REVOKE ALL ON TABLE q_control.h_named_expression FROM public; + GRANT ALL ON TABLE q_control.h_named_expression TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_control.h_named_expression TO qual_designer; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_control.h_named_expression TO qual_controler; + --GRANT ALL ON TABLE q_control.v_error_line TO sig; + GRANT ALL ON TABLE q_control.v_error_line TO u_vitis; + GRANT ALL ON TABLE q_control.v_error_line TO qual_administrator; + GRANT SELECT ON TABLE q_control.v_error_line TO qual_designer; + GRANT SELECT ON TABLE q_control.v_error_line TO qual_controler; + --GRANT ALL ON TABLE q_control.v_error_point TO sig; + GRANT ALL ON TABLE q_control.v_error_point TO u_vitis; + GRANT ALL ON TABLE q_control.v_error_point TO qual_administrator; + GRANT SELECT ON TABLE q_control.v_error_point TO qual_designer; + GRANT SELECT ON TABLE q_control.v_error_point TO qual_controler; + --GRANT ALL ON TABLE q_control.v_error_polygon TO sig; + GRANT ALL ON TABLE q_control.v_error_polygon TO u_vitis; + GRANT ALL ON TABLE q_control.v_error_polygon TO qual_administrator; + GRANT SELECT ON TABLE q_control.v_error_polygon TO qual_designer; + GRANT SELECT ON TABLE q_control.v_error_polygon TO qual_controler; + REVOKE ALL ON TABLE q_control.rt_coordsys FROM u_vitis; + REVOKE ALL ON TABLE q_control.rt_coordsys FROM public; + GRANT SELECT ON TABLE q_control.rt_coordsys TO qual_controler; + GRANT ALL ON TABLE q_control.rt_coordsys TO qual_designer; + GRANT ALL ON TABLE q_control.rt_coordsys TO qual_administrator; + CREATE OR REPLACE FUNCTION q_control.up_control() RETURNS trigger AS $BODY$ declare verify integer;verify2 integer;BEGIN select into verify count(*) from q_control.error where error.id_control = New.id_control and checked <> TRUE;IF verify = 0 THEN update q_control.control SET id_status = 5 where control.id_control = New.id_control;ELSE select into verify2 count(*) from q_control.error where error.id_control = New.id_control;if verify2 <> verify THEN update q_control.control SET id_status = 4 where control.id_control = New.id_control;END IF;END IF;return NEW;END;$BODY$ LANGUAGE plpgsql VOLATILE COST 100; + ALTER FUNCTION q_control.up_control() OWNER TO u_vitis; + CREATE TRIGGER trig_control_status AFTER UPDATE ON q_control.error FOR EACH ROW EXECUTE PROCEDURE q_control.up_control(); + INSERT INTO q_control.control_status (id_status, name) values (1,'En Cours de traitement'); + INSERT INTO q_control.control_status (id_status, name) values (2,'Traitement terminé'); + INSERT INTO q_control.control_status (id_status, name) values (3,'Traitement en échec'); + INSERT INTO q_control.control_status (id_status, name) values (4,'En cours de vérification'); + INSERT INTO q_control.control_status (id_status, name) values (5,'Vérification terminée'); + INSERT INTO q_control.error_class(id_error_class, name) values ('1', 'Jeu de données'); + INSERT INTO q_control.error_class(id_error_class, name) values ('2', 'Entité'); + INSERT INTO q_control.error_class(id_error_class, name) values ('3', 'Type d''entité'); + INSERT INTO q_control.error_class(id_error_class, name) values ('4', 'Géométrie'); + INSERT INTO q_control.error_class(id_error_class, name) values ('5', 'Code'); + INSERT INTO q_control.error_class(id_error_class, name) values ('6', 'Format Personnalisé'); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0003', 3, 'Attribut non autorisé', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0004', 3, 'Attribut obligatoire absent', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0007', 2, 'Taille de l''attribut trop grande', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0008', 2, 'Violation de la contrainte d''unicité', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0009', 2, 'Violation de contrainte de non nullité', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0010', 2, 'Valeur d''attribut hors domaine', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0012', 2, 'Valeur d''attribut hors expression régulière', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0013', 2, 'Valeur d''attribut hors expression régulière nommée', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0014', 4, 'Violation de la contrainte de tesselation : chevauchement', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0015', 4, 'Violation de la contrainte de tesselation : espace', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0017', 1, 'Nombre d''erreurs maximum dépassé', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0018', 4, 'Géométrie non valide : Erreur indéterminée (erreur OGC_validator : 0)', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0019', 4, 'Géométrie non valide : Point répété (erreur OGC_validator : 1)', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0021', 4, 'Géométrie non valide : Trous imbriqués (erreur OGC_validator : 3)', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0022', 4, 'Géométrie non valide : Disconnected Interior (erreur OGC_validator : 4 )', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0023', 4, 'Géométrie non valide : Auto-intersection (erreur OGC_validator : 5)', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0024', 4, 'Géométrie non valide : Anneau auto-intersecté (erreur OGC_validator : 6)', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0025', 4, 'Géométrie non valide : Nested Shells (erreur OGC_validator : 7)', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0026', 4, 'Géométrie non valide : Anneaux dupliqués (erreur OGC_validator : 8)', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0027', 4, 'Géométrie non valide : Pas assez de points (erreur OGC_validator : 9)', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0028', 4, 'Géométrie non valide : Coordonnée invalide (erreur OGC_validator : 10)', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0029', 4, 'Géométrie non valide : Anneau non fermé (erreur OGC_validator : 11)', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0034', 2, 'Date non conforme', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0035', 2, 'Non respect de la contrainte sur l''entité', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0001', 1, 'Type d''entité interdit', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0006', 1, 'Type d''entité obligatoire absent (T.E. défini par une expression régulière)', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0005', 1, 'Type d''entité obligatoire absent', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0011', 4, 'Violation de la contrainte de relation spatiale', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0002', 4, 'Géométrie non conforme (interprétation de la géométrie).', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0016', 2, 'Valeur d''attribut hors expression régulière décrite par code tcl', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0037', 4, 'Non respect du domaine spatial. Données en dehors des bornes.', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0036', 4, 'Non respect du domaine spatial. Système de coordonnées différent du système de référence.', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0030', 2, 'Violation de la contrainte de cardinalité : Enfant avec trop de parents', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0031', 2, 'Violation de la contrainte de cardinalité : Enfant sans parent', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0033', 2, 'Violation de la contrainte de cardinalité : Parent sans enfant', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0038', 4, 'Géométrie non conforme (type de géométrie).', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0032', 2, 'Violation de la contrainte de cardinalité : Parent avec trop d''enfants', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0020', 4, 'Géométrie non valide : Trou à l''extérieur de l''enveloppe (erreur OGC_validator : 2)', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0039', 2, 'Valeur d''attribut inférieure au minimum', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0040', 2, 'Valeur d''attribut supérieure au maximum', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0041', 4, 'Relation spatiale impossible, géométrie non conforme', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0042', 4, 'Problème de relation spatiale, géométrie de l''entité liée non conforme', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0043', 2, 'Type d''attribut non conforme', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0044', 1, 'Type d''entité non défini', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0045', 2, 'Violation de la contrainte Python sur l''entité', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0046', 5, 'Erreur de codage de la contrainte Python sur l''entité', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0047', 2, 'Valeur d''attribut hors expression régulière décrite par code python', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0048', 1, 'Violation de la contrainte spécifique (Python) sur le jeu de données', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0049', 5, 'Erreur de codage de la contrainte Python sur l''attribut', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0050', 4, 'Erreur de contrainte de construction stricte - segment', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0051', 4, 'Erreur de contrainte de construction stricte - vertex', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0052', 4, 'Erreur de contrainte de construction permissive - segment', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0053', 4, 'Géométrie non valide : Point(s) dupliqué(s) avec précision', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0054', 4, 'Erreur de contrainte de construction permissive - polygone', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0055', 6, 'Erreur définie et testée dans le format personnalisé', false); + INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0056', 2, 'Erreur d''encodage de la valeur de l''attribut', false); + INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('ACAD', 'Autodesk AutoCAD DWG/DXF', '2D', 'FILE', '*.dwg|*.dxf|*.*', false); + INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('DBF', 'dBASE (DBF)', '2D', 'FILE', '*.dbf|*.*', true); + INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('DGNV8', 'Bentley MicroStation Design (V8)', '2D', 'FILE', '*.dgn|*.*', false); + INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('E00', 'ESRI ArcInfo Export (E00)', '2D', 'FILE', '*.e00|*.*', false); + INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('FFS', 'FME Feature Store (FFS)', '2D', 'FILE', '*.ffs|*.*', true); + INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('GMl', 'GML (Geography Markup Language)', '2D', 'FILE', '*.gml|*.xml|*.gz|*.*', true); + INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('MAPINFO', 'MapInfo TAB (MFAL)', '2D', 'FILE', '*.tab|*.*', true); + INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('MITAB', 'MapInfo TAB (MITAB)', '2D', 'FILE', '*.tab|*.*', true); + INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('MIF', 'MapInfo MIF/MID', '2D', 'FILE', '*.mif|*.*', true); + INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('SHAPE', 'ESRI Shape', '2D', 'FILE', '*.shp|*.*', true); + INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('XLSXR', 'Microsoft Excel Lecture', '2D', 'FILE', '*.xlsx|*.xlsm|*.xls|*.*', false); + INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('XLSXW', 'Microsoft Excel Export', '2D', 'FILE', '*.xlsx|*.xlsm|*.xls|*.*', true); + INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('XMl', 'XML (Extensible Markup Language)', '2D', 'FILE', '*.xml|*.gml|*.gz|*.*', true); + INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('GEODATABASE_FILE', 'ESRI Geodatabase (File-based)', '2D', 'DIRECTORY', '*.gdb', true); + INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('GEODATABASE_MDB', 'ESRI Geodatabase (MDB)', '2D', 'FILE', '*.mdb|*.*', true); + INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('MDB', 'Microsoft Access ODBC', '2D', 'FILE', '*.mdb|*.*', false); + INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('MDB_ADO', 'Microsoft Access', '2D', 'FILE', '*.mdb|*.accdb|*.*', true); + INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('IGDS', 'Bentley MicroStation Design (V7)', '2D', 'FILE', '*.dgn|*.fc1|*.pos|*.*', false); + INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('EDIGEO', 'EDIGéO', '2D', 'FILE', '*.zip|*.tar|*.tar.gz|*.thf|*.tar.bz2|*.tgz|*.tbz2|*.*', false); + INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('EDIGEO-PCI', 'EDIGEO-PCI', '2D', 'FILE', '*.thf|*.tar.bz2|*.zip|*.*', false); + INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('GEOCONCEPT', 'GeoConcept Map', '2D', 'FILE', '*.gcm|*.*', true); + INSERT INTO q_control.format (id_format, format, type, source_type, exportable) Values ('ORACLE8I', 'Oracle Spatial Object', '3D', 'DATABASE', false); + INSERT INTO q_control.format (id_format, format, type, source_type, exportable) Values ('ORACLE8I_DB', 'Oracle Non-spatial', 'NON_SPATIAl', 'DATABASE', false); + INSERT INTO q_control.format (id_format, format, type, source_type, exportable) Values ('POSTGIS ', 'PostGIS ', '2D', 'DATABASE', false); + INSERT INTO q_control.format (id_format, format, type, source_type, exportable) Values ('POSTGRES', 'PostgreSQl', 'NON_SPATIAl', 'DATABASE', false); + INSERT INTO q_control.format (id_format, format, type, source_type, exportable) Values ('GEODATABASE_SDE', 'ESRI Geodatabase (ArcSDE)', '2D', 'DATABASE', false); + INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('PATH', 'PATH', 'NON_SPATIAl', 'FILE', '*.*', false); + INSERT INTO q_control.stylesheet (name, enabled, multireport, code) VALUES ('simple', true, false, '<?xml version="1.0" encoding="iso-8859-1"?>' || chr(13) || ' <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fme="http://www.safe.com/xml/xmltables">' || chr(13) || ' <xsl:template match="/">' || chr(13) || ' <html>' || chr(13) || ' <head>' || chr(13) || ' <style type="text/css"> ' || chr(13) || ' body{font-family:arial, sans-serif;color:#000000;max-width:840px;}' || chr(13) || ' h1{font-size:22px;color:#ffffff;font-family:arial, sans-serif;text-transform:uppercase;margin-top:10px;background-color:#A5B800;padding:5px}' || chr(13) || ' h2{font-size:20px;color:#A2549E;margin-top:40px;text-transform:uppercase;font-family:tahoma, sans-serif;line-height:10px;}' || chr(13) || ' h3{font-size:17px;color:#9E9A9E;font-family:tahoma, sans-serif;text-transform:uppercase;margin-top:-10px;}' || chr(13) || ' td{background-color:#E8E6E8;}' || chr(13) || ' div{margin-top:60px;}' || chr(13) || ' table.description td{background-color:#ECEBD4;}' || chr(13) || ' table{font-size:13px;}' || chr(13) || ' table.logo tr td{background-color:#ffffff;border:none;padding-right:40px;}' || chr(13) || ' .images{border:1px solid #E8E6E8;background-color:#ffffff;}' || chr(13) || ' .head{background-color:#cccccc;}.haut{margin-bottom:50px;background-color:#eeeeee;padding:5px;}' || chr(13) || ' </style>' || chr(13) || ' <title>Rapport Qualigéo</title>' || chr(13) || ' </head>' || chr(13) || ' <body>' || chr(13) || ' <table class="logo">' || chr(13) || ' <tbody>' || chr(13) || ' <tr>' || chr(13) || ' <td><img src="http://www.veremes.com/sites/default/files/styles/produit-visuel/public/logo_qualigeo.png" alt="logo u_vitis, rapport de contrôle" /></td>' || chr(13) || ' <td><h1>Rapport de contrôle</h1></td>' || chr(13) || ' </tr>' || chr(13) || ' </tbody>' || chr(13) || ' </table>' || chr(13) || ' <div>' || chr(13) || ' <h3>Résumé</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5" class="description" >' || chr(13) || ' <tr>' || chr(13) || ' <td><strong>N° de contrôle</strong></td>' || chr(13) || ' <td><xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:id_control"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td><strong>Date du contrôle</strong></td>' || chr(13) || ' <td><xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:date_controle"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td><strong>Jeu de données</strong></td>' || chr(13) || ' <td><xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:dataset"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td><strong>Auteur</strong></td>' || chr(13) || ' <td><xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:author"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td><strong>Nombre d''erreurs</strong></td>' || chr(13) || ' <td><xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:error_number"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td><strong>Schéma de référence</strong></td>' || chr(13) || ' <td><xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:schema_id"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td><strong>Description</strong></td>' || chr(13) || ' <td><xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:comment"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td><strong>Informations complémentaires</strong></td>' || chr(13) || ' <td>Version de FME : <xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:fme_version"/><br/>' || chr(13) || ' Version du contrôle : <xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:control_engine_version"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td><strong>Système de coordonnées</strong></td>' || chr(13) || ' <td><xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:id_coordsys"/></td>' || chr(13) || ' </tr>' || chr(13) || ' </table>' || chr(13) || ' <h2>Statistiques</h2>' || chr(13) || ' <h3>Types d''entités</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Nombre d''enregistrements</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:st_type_entite-table/fme:st_type_entite">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:number"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Attributs de type Chaîne de caractères</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Attribut</td>' || chr(13) || ' <td class="head">Nombre</td>' || chr(13) || ' <td class="head">Nul</td>' || chr(13) || ' <td class="head">Non nul</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:st_attribut_chaine-table/fme:st_attribut_chaine">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:attribut"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:number"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:nul"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:not_null"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Attributs de type Numérique</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Attribut</td>' || chr(13) || ' <td class="head">Min</td>' || chr(13) || ' <td class="head">Max</td>' || chr(13) || ' <td class="head">Médiane</td>' || chr(13) || ' <td class="head">Nombre</td>' || chr(13) || ' <td class="head">Nombre de valeurs<BR/>numériques</td>' || chr(13) || ' <td class="head">Somme</td>' || chr(13) || ' <td class="head">Moyenne</td>' || chr(13) || ' <td class="head">Ecart-type</td>' || chr(13) || ' <td class="head">Mode</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:st_attr_numerique-table/fme:st_attr_numerique">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:attribut"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:min"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:max"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:median"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:number"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:numeric_number"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:sum"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:mean"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:stdev"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:mode"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Attributs de type Domaine</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Attribut</td>' || chr(13) || ' <td class="head">Valeur</td>' || chr(13) || ' <td class="head">Nombre</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:st_attr_domaine-table/fme:st_attr_domaine">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:attribut"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:value"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:number"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <h2>Erreurs</h2>' || chr(13) || ' <h3>Types d''erreurs</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Code d''erreur</td>' || chr(13) || ' <td class="head">Type d''erreur</td>' || chr(13) || ' <td class="head">Nombre</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:synthese-table/fme:synthese">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:error_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:nombre"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Détail</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">id erreur</td>' || chr(13) || ' <td class="head">Code erreur</td>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Identifiant</td>' || chr(13) || ' <td class="head">Message</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:detail_sans_image-table/fme:detail_sans_image">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_id"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:message"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">id erreur</td>' || chr(13) || ' <td class="head">Code erreur</td>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Identifiant</td>' || chr(13) || ' <td class="head">Message</td>' || chr(13) || ' <td class="head">Image</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:detail_avec_image-table/fme:detail_avec_image">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_id"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:message"/>' || chr(13) || ' </td>' || chr(13) || ' <td class="images">' || chr(13) || ' <xsl:element name="img">' || chr(13) || ' <xsl:attribute name="width">80</xsl:attribute>' || chr(13) || ' <xsl:attribute name="height">80</xsl:attribute>' || chr(13) || ' <xsl:attribute name="src"><xsl:value-of select="fme:map_name"/></xsl:attribute>' || chr(13) || ' </xsl:element>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' </div>' || chr(13) || ' </body>' || chr(13) || ' </html>' || chr(13) || ' </xsl:template>' || chr(13) || ' </xsl:stylesheet>'); + INSERT INTO q_control.stylesheet (name, enabled, multireport, code) VALUES ('multi', true, true, '<?xml version="1.0" encoding="iso-8859-1"?>' || chr(13) || ' <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fme="http://www.safe.com/xml/xmltables">' || chr(13) || ' <xsl:template match="/">' || chr(13) || ' <html>' || chr(13) || ' <head>' || chr(13) || ' <style type="text/css"> ' || chr(13) || ' body{font-family:arial, sans-serif;color:#000000;max-width:840px;}' || chr(13) || ' h1{font-size:22px;color:#ffffff;font-family:arial, sans-serif;text-transform:uppercase;margin-top:10px;background-color:#A5B800;padding:5px}' || chr(13) || ' h2{font-size:20px;color:#A2549E;margin-top:40px;text-transform:uppercase;font-family:tahoma, sans-serif;line-height:10px;}' || chr(13) || ' h3{font-size:17px;color:#9E9A9E;font-family:tahoma, sans-serif;text-transform:uppercase;margin-top:-10px;}' || chr(13) || ' td{background-color:#E8E6E8;}' || chr(13) || ' div{margin-top:60px;}' || chr(13) || ' table.description td{background-color:#ECEBD4;}' || chr(13) || ' table{font-size:13px;}' || chr(13) || ' table.logo tr td{background-color:#ffffff;border:none;padding-right:40px;}' || chr(13) || ' .images{border:1px solid #E8E6E8;background-color:#ffffff;}' || chr(13) || ' .head{background-color:#cccccc;}.haut{margin-bottom:50px;background-color:#eeeeee;padding:5px;}' || chr(13) || ' </style>' || chr(13) || ' <title>Rapport Qualigéo</title>' || chr(13) || ' </head>' || chr(13) || ' <body>' || chr(13) || ' <table class="logo">' || chr(13) || ' <tbody>' || chr(13) || ' <tr>' || chr(13) || ' <td><img src="http://www.veremes.com/sites/default/files/styles/produit-visuel/public/logo_qualigeo.png" alt="logo u_vitis, rapport de contrôle" /></td>' || chr(13) || ' <td><h1>Rapport de contrôle</h1></td>' || chr(13) || ' </tr>' || chr(13) || ' </tbody>' || chr(13) || ' </table>' || chr(13) || ' <div>' || chr(13) || ' <h2>Résumé</h2>' || chr(13) || ' <table cellspacing="2" cellpadding="5" class="description" >' || chr(13) || ' <tr>' || chr(13) || ' <td><strong>Liste des contrôles</strong></td>' || chr(13) || ' <td><xsl:value-of select="fme:xml-tables/fme:controles-table/fme:controles/fme:idControle"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td><strong>Nombre d''erreurs</strong></td>' || chr(13) || ' <td><xsl:value-of select="fme:xml-tables/fme:controles-table/fme:controles/fme:error_number"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td><strong>Schéma de référence</strong></td>' || chr(13) || ' <td><xsl:value-of select="fme:xml-tables/fme:controles-table/fme:controles/fme:schema_id"/></td>' || chr(13) || ' </tr>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>contrôles</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">N° de contrôle</td>' || chr(13) || ' <td class="head">Date du contrôle</td>' || chr(13) || ' <td class="head">Jeu de données</td>' || chr(13) || ' <td class="head">Auteur</td>' || chr(13) || ' <td class="head">Nombre d''erreurs</td>' || chr(13) || ' <td class="head">Description</td>' || chr(13) || ' <td class="head">Informations complémentaires</td>' || chr(13) || ' <td class="head">Système de coordonnées</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:controle-table/fme:controle">' || chr(13) || ' <xsl:sort select="fme:id_control" />' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_control"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:date_controle"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:dataset"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:author"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:error_number"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:comment"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' Version de FME : <xsl:value-of select="fme:fme_version"/> Version du contrôle : <xsl:value-of select="fme:control_engine_version"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_coordsys"/>' || chr(13) || ' </td>' || chr(13) || '' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h2>Statistiques</h2>' || chr(13) || ' <h3>Types d''entités</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Nombre d''enregistrements</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:st_type_entite-table/fme:st_type_entite">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:number"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Attributs de type Chaîne de caractères</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Attribut</td>' || chr(13) || ' <td class="head">Nombre</td>' || chr(13) || ' <td class="head">Nul</td>' || chr(13) || ' <td class="head">Non nul</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:st_attribut_chaine-table/fme:st_attribut_chaine">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:attribut"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:number"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:nul"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:not_null"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Attributs de type Numérique</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Attribut</td>' || chr(13) || ' <td class="head">Min</td>' || chr(13) || ' <td class="head">Max</td>' || chr(13) || ' <td class="head">Nombre</td>' || chr(13) || ' <td class="head">Nombre de valeurs<BR/>numériques</td>' || chr(13) || ' <td class="head">Somme</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:st_attr_numerique-table/fme:st_attr_numerique">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:attribut"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:min"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:max"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:number"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:numeric_number"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:sum"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Attributs de type Domaine</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Attribut</td>' || chr(13) || ' <td class="head">Valeur</td>' || chr(13) || ' <td class="head">Nombre</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:st_attr_domaine-table/fme:st_attr_domaine">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:attribut"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:value"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:number"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <h2>Erreurs</h2>' || chr(13) || ' <h3>Types d''erreurs</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Code d''erreur</td>' || chr(13) || ' <td class="head">Type d''erreur</td>' || chr(13) || ' <td class="head">Nombre</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:synthese-table/fme:synthese">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:error_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:nombre"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Détail</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">id contrôle</td>' || chr(13) || ' <td class="head">id erreur</td>' || chr(13) || ' <td class="head">Code erreur</td>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Identifiant</td>' || chr(13) || ' <td class="head">Message</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:detail_sans_image-table/fme:detail_sans_image">' || chr(13) || ' <xsl:sort select="fme:id_control" />' || chr(13) || '' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_control"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_id"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:message"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">id contrôle</td>' || chr(13) || ' <td class="head">id erreur</td>' || chr(13) || ' <td class="head">Code erreur</td>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Identifiant</td>' || chr(13) || ' <td class="head">Message</td>' || chr(13) || ' <td class="head">Image</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:detail_avec_image-table/fme:detail_avec_image">' || chr(13) || ' <xsl:sort select="fme:id_control" />' || chr(13) || '' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_control"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_id"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:message"/>' || chr(13) || ' </td>' || chr(13) || ' <td class="images">' || chr(13) || ' <xsl:element name="img">' || chr(13) || ' <xsl:attribute name="width">80</xsl:attribute>' || chr(13) || ' <xsl:attribute name="height">80</xsl:attribute>' || chr(13) || ' <xsl:attribute name="src"><xsl:value-of select="fme:map_name"/></xsl:attribute>' || chr(13) || ' </xsl:element>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' </div>' || chr(13) || ' </body>' || chr(13) || ' </html>' || chr(13) || ' </xsl:template>' || chr(13) || ' </xsl:stylesheet>'); + INSERT INTO q_control.stylesheet (name, enabled, multireport, code) VALUES ('simple_2016', true, false, '<?xml version="1.0" encoding="iso-8859-1"?>' || chr(13) || ' <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fme="http://www.safe.com/xml/xmltables">' || chr(13) || ' <xsl:variable name="logo_qualigeo" select=''"data:image/png;base64,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"''/>' || chr(13) || ' <xsl:template match="/">' || chr(13) || ' <html>' || chr(13) || ' <head>' || chr(13) || ' <style type="text/css"> ' || chr(13) || ' body{font-family:arial,sans-serif;color:#000000;max-width:840px;}' || chr(13) || ' h1{font-size:29px;color:#00124c;font-family:arial,sans-serif;margin:30px 0px 30px 0px;text-align:center;}' || chr(13) || ' h2{font-size:20px;color:#00124c;margin-top:22px;font-family:arial,sans-serif;line-height:10px;text-align:center;}' || chr(13) || ' h3{font-size:17px;color:#00124c;font-family:arial,sans-serif;margin-bottom:5px;}' || chr(13) || ' td{background-color:#E8E6E8;}' || chr(13) || ' table.description td{background-color:#ECEBD4;}' || chr(13) || ' table{font-size:13px;}' || chr(13) || ' table.logo tr td{background-color:#ffffff;border:none;padding-right:40px;}' || chr(13) || ' .images{border:1px solid #E8E6E8;background-color:#ffffff;}' || chr(13) || ' .head{background-color:#00124c;color:white;}' || chr(13) || ' .left-column{background-color:#00124c !important; color: white !important;}' || chr(13) || ' .right-column{background-color:#E8E6E8 !important;}' || chr(13) || ' .resume{border: 1px solid #00124c; width: 800px; margin: 0px; padding: 20px;}' || chr(13) || ' .stat{border: 1px solid #00124c; width: 800px; margin-top: 64px; padding: 0px 20px 20px 20px;}' || chr(13) || ' .erreur{border: 1px solid #00124c; width: 800px; margin-top: 64px; padding: 0px 20px 20px 20px;}' || chr(13) || ' .break-work{word-break:break-all;}' || chr(13) || ' </style>' || chr(13) || ' <title>Rapport Qualigéo</title>' || chr(13) || ' </head>' || chr(13) || ' <body>' || chr(13) || ' <table class="logo" style="width: 840px;">' || chr(13) || ' <tbody>' || chr(13) || ' <tr>' || chr(13) || ' <td style="text-align: center;padding: 0px;">' || chr(13) || ' <img src="{$logo_qualigeo}" alt="logo u_vitis, rapport de contrôle" style="margin-left: auto;margin-right: auto;" />' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </tbody>' || chr(13) || ' </table>' || chr(13) || ' <div>' || chr(13) || ' <div style="text-align: center;">' || chr(13) || ' <h1>Rapport de contrôle</h1>' || chr(13) || ' </div>' || chr(13) || ' <div class="resume">' || chr(13) || ' <h2 style="margin: 0px 0px 20px 0px;">Résumé</h2>' || chr(13) || ' <table cellspacing="2" cellpadding="5" class="description" style=" width: 100%;">' || chr(13) || ' <tbody>' || chr(13) || ' <tr>' || chr(13) || ' <td class="left-column"><strong>N° de contrôle</strong></td>' || chr(13) || ' <td class="right-column"><xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:id_control"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td class="left-column"><strong>Date du contrôle</strong></td>' || chr(13) || ' <td class="right-column"><xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:date_controle"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td class="left-column"><strong>Jeu de données</strong></td>' || chr(13) || ' <td class="right-column break-work"><xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:dataset"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td class="left-column"><strong>Auteur</strong></td>' || chr(13) || ' <td class="right-column"><xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:author"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td class="left-column"><strong>Nombre d''erreurs</strong></td>' || chr(13) || ' <td class="right-column"><xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:error_number"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td class="left-column"><strong>Schéma de référence</strong></td>' || chr(13) || ' <td class="right-column"><xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:schema_id"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td class="left-column"><strong>Description</strong></td>' || chr(13) || ' <td class="right-column"><xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:comment"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td class="left-column"><strong>Informations complémentaires</strong></td>' || chr(13) || ' <td class="right-column">Version de FME : <xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:fme_version"/><br/>' || chr(13) || ' Version du contrôle : <xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:control_engine_version"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td class="left-column"><strong>Système de coordonnées</strong></td>' || chr(13) || ' <td class="right-column"><xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:id_coordsys"/></td>' || chr(13) || ' </tr>' || chr(13) || ' </tbody>' || chr(13) || ' </table>' || chr(13) || ' </div>' || chr(13) || ' ' || chr(13) || ' <div class="stat">' || chr(13) || ' <h2>Statistiques</h2>' || chr(13) || ' <h3>Types d''entités</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Nombre d''enregistrements</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:st_type_entite-table/fme:st_type_entite">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:number"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Attributs de type Chaîne de caractères</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Attribut</td>' || chr(13) || ' <td class="head">Nombre</td>' || chr(13) || ' <td class="head">Nul</td>' || chr(13) || ' <td class="head">Non nul</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:st_attribut_chaine-table/fme:st_attribut_chaine">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:attribut"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:number"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:nul"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:not_null"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Attributs de type Numérique</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Attribut</td>' || chr(13) || ' <td class="head">Min</td>' || chr(13) || ' <td class="head">Max</td>' || chr(13) || ' <td class="head">Médiane</td>' || chr(13) || ' <td class="head">Nombre</td>' || chr(13) || ' <td class="head">Nombre de valeurs<BR/>numériques</td>' || chr(13) || ' <td class="head">Somme</td>' || chr(13) || ' <td class="head">Moyenne</td>' || chr(13) || ' <td class="head">Ecart-type</td>' || chr(13) || ' <td class="head">Mode</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:st_attr_numerique-table/fme:st_attr_numerique">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:attribut"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:min"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:max"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:median"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:number"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:numeric_number"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:sum"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:mean"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:stdev"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:mode"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Attributs de type Domaine</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Attribut</td>' || chr(13) || ' <td class="head">Valeur</td>' || chr(13) || ' <td class="head">Nombre</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:st_attr_domaine-table/fme:st_attr_domaine">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:attribut"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:value"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:number"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' </div> ' || chr(13) || '' || chr(13) || ' <div class="erreur"> ' || chr(13) || ' <h2>Erreurs</h2>' || chr(13) || ' <h3>Types d''erreurs</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Code d''erreur</td>' || chr(13) || ' <td class="head">Type d''erreur</td>' || chr(13) || ' <td class="head">Nombre</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:synthese-table/fme:synthese">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:error_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:nombre"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Détail</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">id erreur</td>' || chr(13) || ' <td class="head">Code erreur</td>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Identifiant</td>' || chr(13) || ' <td class="head">Message</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:detail_sans_image-table/fme:detail_sans_image">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_id"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:message"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <xsl:if test="count(fme:xml-tables/fme:detail_avec_image-table/fme:detail_avec_image) > 0">' || chr(13) || ' <br/>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">id erreur</td>' || chr(13) || ' <td class="head">Code erreur</td>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Identifiant</td>' || chr(13) || ' <td class="head">Message</td>' || chr(13) || ' <td class="head">Image</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:detail_avec_image-table/fme:detail_avec_image">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_id"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:message"/>' || chr(13) || ' </td>' || chr(13) || ' <td class="images">' || chr(13) || ' <xsl:element name="img">' || chr(13) || ' <xsl:attribute name="width">80</xsl:attribute>' || chr(13) || ' <xsl:attribute name="height">80</xsl:attribute>' || chr(13) || ' <xsl:attribute name="src"><xsl:value-of select="fme:map_name"/></xsl:attribute>' || chr(13) || ' </xsl:element>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' </xsl:if>' || chr(13) || ' </div>' || chr(13) || ' </div>' || chr(13) || ' </body>' || chr(13) || ' </html>' || chr(13) || ' </xsl:template>' || chr(13) || ' </xsl:stylesheet>'); + INSERT INTO q_control.stylesheet (name, enabled, multireport, code) VALUES ('multi2016', true, true, '<?xml version="1.0" encoding="iso-8859-1"?>' || chr(13) || ' <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fme="http://www.safe.com/xml/xmltables">' || chr(13) || ' <xsl:variable name="logo_qualigeo" select=''"data:image/png;base64,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"''/>' || chr(13) || ' <xsl:template match="/">' || chr(13) || ' <html>' || chr(13) || ' <head>' || chr(13) || ' <style type="text/css"> ' || chr(13) || ' body{font-family:arial,sans-serif;color:#000000;max-width:840px;}' || chr(13) || ' h1{font-size:29px;color:#00124c;font-family:arial,sans-serif;margin:30px 0px 30px 0px;text-align:center;}' || chr(13) || ' h2{font-size:20px;color:#00124c;margin-top:22px;font-family:arial,sans-serif;line-height:10px;text-align:center;}' || chr(13) || ' h3{font-size:17px;color:#00124c;font-family:arial,sans-serif;margin-bottom:5px;}' || chr(13) || ' td{background-color:#E8E6E8;}' || chr(13) || ' table.description td{background-color:#ECEBD4;}' || chr(13) || ' table{font-size:13px;}' || chr(13) || ' table.logo tr td{background-color:#ffffff;border:none;padding-right:40px;}' || chr(13) || ' .images{border:1px solid #E8E6E8;background-color:#ffffff;}' || chr(13) || ' .head{background-color:#00124c;color:white;}' || chr(13) || ' .break-work{word-break:break-all;}' || chr(13) || ' .left-column{background-color:#00124c !important; color: white !important;}' || chr(13) || ' .right-column{background-color:#E8E6E8 !important;}' || chr(13) || ' .resume{border: 1px solid #00124c; width: 800px; margin: 0px; padding: 20px;}' || chr(13) || ' .stat{border: 1px solid #00124c; width: 800px; margin-top: 64px; padding: 0px 20px 20px 20px;}' || chr(13) || ' .erreur{border: 1px solid #00124c; width: 800px; margin-top: 64px; padding: 0px 20px 20px 20px;}' || chr(13) || ' </style>' || chr(13) || ' <title>Rapport Qualigéo</title>' || chr(13) || ' </head>' || chr(13) || ' <body>' || chr(13) || ' <table class="logo" style="width: 840px;">' || chr(13) || ' <tbody>' || chr(13) || ' <tr>' || chr(13) || ' <td style="text-align: center;padding: 0px;">' || chr(13) || ' <img src="{$logo_qualigeo}" alt="logo u_vitis, rapport de contrôle" style="margin-left: auto;margin-right: auto;" />' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </tbody>' || chr(13) || ' </table>' || chr(13) || ' <div>' || chr(13) || ' <div style="text-align: center;">' || chr(13) || ' <h1>Rapport de contrôle</h1>' || chr(13) || ' </div>' || chr(13) || ' ' || chr(13) || ' <div class="resume">' || chr(13) || ' <h2 style="margin: 0px 0px 20px 0px;">Résumé</h2>' || chr(13) || ' <table cellspacing="2" cellpadding="5" class="description" style=" width: 100%;">' || chr(13) || ' <tbody>' || chr(13) || ' <tr>' || chr(13) || ' <td class="left-column"><strong>Liste des contrôles</strong></td>' || chr(13) || ' <td class="right-column"><xsl:value-of select="fme:xml-tables/fme:controles-table/fme:controles/fme:idControle"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td class="left-column"><strong>Nombre d''erreurs</strong></td>' || chr(13) || ' <td class="right-column"><xsl:value-of select="fme:xml-tables/fme:controles-table/fme:controles/fme:error_number"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td class="left-column"><strong>Schéma de référence</strong></td>' || chr(13) || ' <td class="right-column"><xsl:value-of select="fme:xml-tables/fme:controles-table/fme:controles/fme:schema_id"/></td>' || chr(13) || ' </tr>' || chr(13) || ' </tbody>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Contrôles</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">N° de contrôle</td>' || chr(13) || ' <td class="head">Date du contrôle</td>' || chr(13) || ' <td class="head">Jeu de données</td>' || chr(13) || ' <td class="head">Auteur</td>' || chr(13) || ' <td class="head">Nombre d''erreurs</td>' || chr(13) || ' <td class="head">Description</td>' || chr(13) || ' <td class="head">Informations complémentaires</td>' || chr(13) || ' <td class="head">Système de coordonnées</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:controle-table/fme:controle">' || chr(13) || ' <xsl:sort select="fme:id_control" />' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_control"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:date_controle"/>' || chr(13) || ' </td>' || chr(13) || ' <td class="break-work">' || chr(13) || ' <xsl:value-of select="fme:dataset"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:author"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:error_number"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:comment"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' Version de FME : <xsl:value-of select="fme:fme_version"/> Version du contrôle : <xsl:value-of select="fme:control_engine_version"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_coordsys"/>' || chr(13) || ' </td>' || chr(13) || ' ' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' </div>' || chr(13) || ' ' || chr(13) || ' <div class="stat">' || chr(13) || ' <h2>Statistiques</h2>' || chr(13) || ' <h3>Types d''entités</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Nombre d''enregistrements</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:st_type_entite-table/fme:st_type_entite">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:number"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Attributs de type Chaîne de caractères</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Attribut</td>' || chr(13) || ' <td class="head">Nombre</td>' || chr(13) || ' <td class="head">Nul</td>' || chr(13) || ' <td class="head">Non nul</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:st_attribut_chaine-table/fme:st_attribut_chaine">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:attribut"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:number"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:nul"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:not_null"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Attributs de type Numérique</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Attribut</td>' || chr(13) || ' <td class="head">Min</td>' || chr(13) || ' <td class="head">Max</td>' || chr(13) || ' <td class="head">Nombre</td>' || chr(13) || ' <td class="head">Nombre de valeurs<BR/>numériques</td>' || chr(13) || ' <td class="head">Somme</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:st_attr_numerique-table/fme:st_attr_numerique">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:attribut"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:min"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:max"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:number"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:numeric_number"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:sum"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Attributs de type Domaine</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Attribut</td>' || chr(13) || ' <td class="head">Valeur</td>' || chr(13) || ' <td class="head">Nombre</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:st_attr_domaine-table/fme:st_attr_domaine">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:attribut"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:value"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:number"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' </div>' || chr(13) || ' ' || chr(13) || ' <div class="erreur">' || chr(13) || ' <h2>Erreurs</h2>' || chr(13) || ' <h3>Types d''erreurs</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Code d''erreur</td>' || chr(13) || ' <td class="head">Type d''erreur</td>' || chr(13) || ' <td class="head">Nombre</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:synthese-table/fme:synthese">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:error_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:nombre"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Détail</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">id contrôle</td>' || chr(13) || ' <td class="head">id erreur</td>' || chr(13) || ' <td class="head">Code erreur</td>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Identifiant</td>' || chr(13) || ' <td class="head">Message</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:detail_sans_image-table/fme:detail_sans_image">' || chr(13) || ' <xsl:sort select="fme:id_control" />' || chr(13) || ' ' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_control"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_id"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:message"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <xsl:if test="count(fme:xml-tables/fme:detail_avec_image-table/fme:detail_avec_image) > 0">' || chr(13) || ' <br/>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">id contrôle</td>' || chr(13) || ' <td class="head">id erreur</td>' || chr(13) || ' <td class="head">Code erreur</td>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Identifiant</td>' || chr(13) || ' <td class="head">Message</td>' || chr(13) || ' <td class="head">Image</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:detail_avec_image-table/fme:detail_avec_image">' || chr(13) || ' <xsl:sort select="fme:id_control" />' || chr(13) || ' ' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_control"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_id"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:message"/>' || chr(13) || ' </td>' || chr(13) || ' <td class="images">' || chr(13) || ' <xsl:element name="img">' || chr(13) || ' <xsl:attribute name="width">80</xsl:attribute>' || chr(13) || ' <xsl:attribute name="height">80</xsl:attribute>' || chr(13) || ' <xsl:attribute name="src"><xsl:value-of select="fme:map_name"/></xsl:attribute>' || chr(13) || ' </xsl:element>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' </xsl:if>' || chr(13) || ' </div>' || chr(13) || ' </div>' || chr(13) || ' </body>' || chr(13) || ' </html>' || chr(13) || ' </xsl:template>' || chr(13) || ' </xsl:stylesheet>'); + --INSERT INTO q_control.control_status (id_status, name) values (1,'Under process'); + --INSERT INTO q_control.control_status (id_status, name) values (2,'Ended processing'); + --INSERT INTO q_control.control_status (id_status, name) values (3,'Processing in failure'); + --INSERT INTO q_control.control_status (id_status, name) values (4,'In the course of check'); + --INSERT INTO q_control.control_status (id_status, name) values (5,'Ended check'); + --INSERT INTO q_control.error_class(id_error_class, name) values ('1', 'Dataset'); + --INSERT INTO q_control.error_class(id_error_class, name) values ('2', 'Feature'); + --INSERT INTO q_control.error_class(id_error_class, name) values ('3', 'Feature type'); + --INSERT INTO q_control.error_class(id_error_class, name) values ('4', 'Geometry'); + --INSERT INTO q_control.error_class(id_error_class, name) values ('5', 'Code'); + --INSERT INTO q_control.error_class(id_error_class, name) VALUES (6,'Custom Format'); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0003', 3, 'Forbidden attribute', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0004', 3, 'Absent compulsory attribute', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0007', 2, 'Oversized attribute', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0008', 2, 'Violation of unicity constraint', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0009', 2, 'Violation of input constraint', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0010', 2, 'Attribute value outside field', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0012', 2, 'Attribute value outside regular expression', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0013', 2, 'Attribute value outside named regular expression', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0014', 4, 'Violation of tesselation constraint: overlapping', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0015', 4, 'Violation of tesselation constraint: space', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0017', 1, 'Maximum number of errors exceeded', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0018', 4, 'Non valid geometry: indefinite Error (error OGC_validator: 0)', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0019', 4, 'Non valid geometry: repeated (error OGC_validator: 1)', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0021', 4, 'Non valid geometry: imbricated Holes (error OGC_validator: 3)', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0022', 4, 'Non valid geometry: Disconnected Interior (error OGC_validator: 4)', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0023', 4, 'Non valid geometry: Auto-intersection (error OGC_validator: 5)', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0024', 4, 'Non valid geometry: auto-intersected ring (error OGC_validator: 6) ', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0025', 4, 'Non valid geometry: Nested Shells (error OGC_validator : 7)', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0026', 4, 'Non valid geometry: duplicated ring (error OGC_validator : 8)', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0027', 4, 'Non valid geometry: insufficientpoints (error OGC_validator : 9)', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0028', 4, 'Non enough points: Non valid coordinate (error OGC_validator: 10)', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0029', 4, 'Non valid geometry: not closed ring (error OGC_validator: 11)', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0034', 2, 'Non corresponding date', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0035', 2, 'Non compliance with the constraint on the feature', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0001', 1, 'Forbidden feature type', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0006', 1, 'Absent compulsory feature type (F.T. defined by a regular expression)', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0005', 1, 'Absent compulsory feature type', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0011', 4, 'Violation of spatial relation constraint', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0002', 4, 'Non corresponding geometry (geometry interpretation).', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0016', 2, 'Attribute value outside expression described by code tcl', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0037', 4, 'Non compliance with spatial domain. Data outside limits.', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0036', 4, 'Non compliance with spatial domain. System coordinates different from reference system.', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0030', 2, 'Violation of cardinality constraint: child with too many parents', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0031', 2, 'Violation of cardinality constraint: Child without parent', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0033', 2, 'Violation of cardinality constraint: Parent without child', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0038', 4, 'Non corresponding geometry (geometry type ).', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0032', 2, 'Violation of cardinality constraint: parent with too many children', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0020', 4, 'Non valid geometry: hole outside of the envelope (error OGC_validator: 2)', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0039', 2, 'Attribute value inferior to minimum.', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0040', 2, 'Attribute value superior to maximum.', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0041', 4, 'Impossible spatial relation, non corresponding geometry', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0042', 4, 'Spatial relation Problem, non corresponding geometry of bounded feature', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0043', 2, 'Type of attribute does not correspond', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0044', 1, 'Undefined feature type', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0045', 2, 'Violation of Python constraint on feature', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0046', 5, 'Coding error of Python constraint on feature', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0047', 2, 'Attribute value outside regular expression described by python code', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0048', 1, 'Violation of specific constraint (Python) of the dataset', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0049', 5, 'Error of coding of Python constraint on attribute', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0050', 4, 'Error of constraint of strict build - segment', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0051', 4, 'Error of constraint of strict build - vertex', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0052', 4, 'Error of constraint of tolerant build - segment', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0053', 4, 'Non valid geometry : repeated with precision', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ('E0054', 4, 'Error of constraint of tolerant build - polygon', false); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ("E0055", 6, "Error defined and tested in the custom format", FALSE); + --INSERT INTO q_control.error_type (id_error_type, id_error_class, name, map) VALUES ("E0056", 2, "Error in the encoding of the value", FALSE); + --INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('ACAD', 'Autodesk AutoCAD DWG/DXF', '2D', 'FILE', '*.dwg|*.dxf|*.*', false); + --INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('DBF', 'dBASE (DBF)', '2D', 'FILE', '*.dbf|*.*', true); + --INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('DGNV8', 'Bentley MicroStation Design (V8)', '2D', 'FILE', '*.dgn|*.*', false); + --INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('E00', 'ESRI ArcInfo Export (E00)', '2D', 'FILE', '*.e00|*.*', false); + --INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('FFS', 'FME Feature Store (FFS)', '2D', 'FILE', '*.ffs|*.*', true); + --INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('GMl', 'GML (Geography Markup Language)', '2D', 'FILE', '*.gml|*.xml|*.gz|*.*', true); + --INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('MAPINFO', 'MapInfo TAB (MFAL)', '2D', 'FILE', '*.tab|*.*', true); + --INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('MITAB', 'MapInfo TAB (MITAB)', '2D', 'FILE', '*.tab|*.*', true); + --INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('MIF', 'MapInfo MIF/MID', '2D', 'FILE', '*.mif|*.*', true); + --INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('SHAPE', 'ESRI Shape', '2D', 'FILE', '*.shp|*.*', true); + --INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('XLSXR', 'Microsoft Excel Reader', '2D', 'FILE', '*.xlsx|*.xlsm|*.xls|*.*', false); + --INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('XLSXW', 'Microsoft Excel Export', '2D', 'FILE', '*.xlsx|*.xlsm|*.xls|*.*', true); + --INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('XMl', 'XML (Extensible Markup Language)', '2D', 'FILE', '*.xml|*.gml|*.gz|*.*', true); + --INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('GEODATABASE_FILE', 'ESRI Geodatabase (File-based)', '2D', 'DIRECTORY', '*.gdb', true); + --INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('GEODATABASE_MDB', 'ESRI Geodatabase (MDB)', '2D', 'FILE', '*.mdb|*.*', true); + --INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('MDB', 'Microsoft Access ODBC', '2D', 'FILE', '*.mdb|*.*', false); + --INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('MDB_ADO', 'Microsoft Access', '2D', 'FILE', '*.mdb|*.accdb|*.*', true); + --INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('IGDS', 'Bentley MicroStation Design (V7)', '2D', 'FILE', '*.dgn|*.fc1|*.pos|*.*', false); + --INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('EDIGEO', 'EDIGéO', '2D', 'FILE', '*.zip|*.tar|*.tar.gz|*.thf|*.tar.bz2|*.tgz|*.tbz2|*.*', false); + --INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('EDIGEO-PCI', 'EDIGEO-PCI', '2D', 'FILE', '*.thf|*.tar.bz2|*.zip|*.*', false); + --INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('GEOCONCEPT', 'GeoConcept Map', '2D', 'FILE', '*.gcm|*.*', true); + --INSERT INTO q_control.format (id_format, format, type, source_type, exportable) Values ('ORACLE8I', 'Oracle Spatial Object', '3D', 'DATABASE', false); + --INSERT INTO q_control.format (id_format, format, type, source_type, exportable) Values ('ORACLE8I_DB', 'Oracle Non-spatial', 'NON_SPATIAl', 'DATABASE', false); + --INSERT INTO q_control.format (id_format, format, type, source_type, exportable) Values ('POSTGIS ', 'PostGIS ', '2D', 'DATABASE', false); + --INSERT INTO q_control.format (id_format, format, type, source_type, exportable) Values ('POSTGRES', 'PostgreSQl', 'NON_SPATIAl', 'DATABASE', false); + --INSERT INTO q_control.format (id_format, format, type, source_type, exportable) Values ('GEODATABASE_SDE', 'ESRI Geodatabase (ArcSDE)', '2D', 'DATABASE', false); + --INSERT INTO q_control.format (id_format, format, type, source_type, extensions, exportable) Values ('PATH', 'PATH', 'NON_SPATIAl', 'FILE', '*.*', false); + INSERT INTO q_control.stylesheet (name, enabled, multireport, code) VALUES ('simple_fr', true, false, '<?xml version="1.0" encoding="iso-8859-1"?>' || chr(13) || ' <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fme="http://www.safe.com/xml/xmltables">' || chr(13) || ' <xsl:template match="/">' || chr(13) || ' <html>' || chr(13) || ' <head>' || chr(13) || ' <style type="text/css"> ' || chr(13) || ' body{font-family:arial, sans-serif;color:#000000;max-width:840px;}' || chr(13) || ' h1{font-size:22px;color:#ffffff;font-family:arial, sans-serif;text-transform:uppercase;margin-top:10px;background-color:#A5B800;padding:5px}' || chr(13) || ' h2{font-size:20px;color:#A2549E;margin-top:40px;text-transform:uppercase;font-family:tahoma, sans-serif;line-height:10px;}' || chr(13) || ' h3{font-size:17px;color:#9E9A9E;font-family:tahoma, sans-serif;text-transform:uppercase;margin-top:-10px;}' || chr(13) || ' td{background-color:#E8E6E8;}' || chr(13) || ' div{margin-top:60px;}' || chr(13) || ' table.description td{background-color:#ECEBD4;}' || chr(13) || ' table{font-size:13px;}' || chr(13) || ' table.logo tr td{background-color:#ffffff;border:none;padding-right:40px;}' || chr(13) || ' .images{border:1px solid #E8E6E8;background-color:#ffffff;}' || chr(13) || ' .head{background-color:#cccccc;}.haut{margin-bottom:50px;background-color:#eeeeee;padding:5px;}' || chr(13) || ' </style>' || chr(13) || ' <title>Rapport Qualigéo</title>' || chr(13) || ' </head>' || chr(13) || ' <body>' || chr(13) || ' <table class="logo">' || chr(13) || ' <tbody>' || chr(13) || ' <tr>' || chr(13) || ' <td><img src="http://www.veremes.com/images/qualigeo_logo.png" alt="logo u_vitis, rapport de contrôle" /></td>' || chr(13) || ' <td><h1>Rapport de contrôle</h1></td>' || chr(13) || ' </tr>' || chr(13) || ' </tbody>' || chr(13) || ' </table>' || chr(13) || ' <div>' || chr(13) || ' <h3>Résumé</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5" class="description" >' || chr(13) || ' <tr>' || chr(13) || ' <td><strong>N° de contrôle</strong></td>' || chr(13) || ' <td><xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:id_control"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td><strong>Date du contrôle</strong></td>' || chr(13) || ' <td><xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:date_controle"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td><strong>Jeu de données</strong></td>' || chr(13) || ' <td><xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:dataset"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td><strong>Auteur</strong></td>' || chr(13) || ' <td><xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:author"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td><strong>Nombre d''erreurs</strong></td>' || chr(13) || ' <td><xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:error_number"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td><strong>Schéma de référence</strong></td>' || chr(13) || ' <td><xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:schema_id"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td><strong>Description</strong></td>' || chr(13) || ' <td><xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:comment"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td><strong>Informations complémentaires</strong></td>' || chr(13) || ' <td>Version de FME : <xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:fme_version"/><br/>' || chr(13) || ' Version du contrôle : <xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:control_engine_version"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td><strong>Système de coordonnées</strong></td>' || chr(13) || ' <td><xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:id_coordsys"/></td>' || chr(13) || ' </tr>' || chr(13) || ' </table>' || chr(13) || ' <h2>Statistiques</h2>' || chr(13) || ' <h3>Types d''entités</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Nombre d''enregistrements</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:st_type_entite-table/fme:st_type_entite">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:number"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Attributs de type Chaîne de caractères</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Attribut</td>' || chr(13) || ' <td class="head">Nombre</td>' || chr(13) || ' <td class="head">Nul</td>' || chr(13) || ' <td class="head">Non nul</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:st_attribut_chaine-table/fme:st_attribut_chaine">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:attribut"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:number"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:nul"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:not_null"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Attributs de type Numérique</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Attribut</td>' || chr(13) || ' <td class="head">Min</td>' || chr(13) || ' <td class="head">Max</td>' || chr(13) || ' <td class="head">Médiane</td>' || chr(13) || ' <td class="head">Nombre</td>' || chr(13) || ' <td class="head">Nombre de valeurs<BR/>numériques</td>' || chr(13) || ' <td class="head">Somme</td>' || chr(13) || ' <td class="head">Moyenne</td>' || chr(13) || ' <td class="head">Ecart-type</td>' || chr(13) || ' <td class="head">Mode</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:st_attr_numerique-table/fme:st_attr_numerique">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:attribut"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:min"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:max"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:median"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:number"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:numeric_number"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:sum"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:mean"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:stdev"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:mode"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Attributs de type Domaine</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Attribut</td>' || chr(13) || ' <td class="head">Valeur</td>' || chr(13) || ' <td class="head">Nombre</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:st_attr_domaine-table/fme:st_attr_domaine">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:attribut"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:value"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:number"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <h2>Erreurs</h2>' || chr(13) || ' <h3>Types d''erreurs</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Code d''erreur</td>' || chr(13) || ' <td class="head">Type d''erreur</td>' || chr(13) || ' <td class="head">Nombre</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:synthese-table/fme:synthese">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:error_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:nombre"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Détail</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">id erreur</td>' || chr(13) || ' <td class="head">Code erreur</td>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Identifiant</td>' || chr(13) || ' <td class="head">Message</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:detail_sans_image-table/fme:detail_sans_image">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_id"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:message"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">id erreur</td>' || chr(13) || ' <td class="head">Code erreur</td>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Identifiant</td>' || chr(13) || ' <td class="head">Message</td>' || chr(13) || ' <td class="head">Image</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:detail_avec_image-table/fme:detail_avec_image">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_id"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:message"/>' || chr(13) || ' </td>' || chr(13) || ' <td class="images">' || chr(13) || ' <xsl:element name="img">' || chr(13) || ' <xsl:attribute name="width">80</xsl:attribute>' || chr(13) || ' <xsl:attribute name="height">80</xsl:attribute>' || chr(13) || ' <xsl:attribute name="src"><xsl:value-of select="fme:map_name"/></xsl:attribute>' || chr(13) || ' </xsl:element>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' </div>' || chr(13) || ' </body>' || chr(13) || ' </html>' || chr(13) || ' </xsl:template>' || chr(13) || ' </xsl:stylesheet>'); + INSERT INTO q_control.stylesheet (name, enabled, multireport, code) VALUES ('multi_fr', true, true, '<?xml version="1.0" encoding="iso-8859-1"?>' || chr(13) || ' <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fme="http://www.safe.com/xml/xmltables">' || chr(13) || ' <xsl:template match="/">' || chr(13) || ' <html>' || chr(13) || ' <head>' || chr(13) || ' <style type="text/css"> ' || chr(13) || ' body{font-family:arial, sans-serif;color:#000000;max-width:840px;}' || chr(13) || ' h1{font-size:22px;color:#ffffff;font-family:arial, sans-serif;text-transform:uppercase;margin-top:10px;background-color:#A5B800;padding:5px}' || chr(13) || ' h2{font-size:20px;color:#A2549E;margin-top:40px;text-transform:uppercase;font-family:tahoma, sans-serif;line-height:10px;}' || chr(13) || ' h3{font-size:17px;color:#9E9A9E;font-family:tahoma, sans-serif;text-transform:uppercase;margin-top:-10px;}' || chr(13) || ' td{background-color:#E8E6E8;}' || chr(13) || ' div{margin-top:60px;}' || chr(13) || ' table.description td{background-color:#ECEBD4;}' || chr(13) || ' table{font-size:13px;}' || chr(13) || ' table.logo tr td{background-color:#ffffff;border:none;padding-right:40px;}' || chr(13) || ' .images{border:1px solid #E8E6E8;background-color:#ffffff;}' || chr(13) || ' .head{background-color:#cccccc;}.haut{margin-bottom:50px;background-color:#eeeeee;padding:5px;}' || chr(13) || ' </style>' || chr(13) || ' <title>Rapport Qualigéo</title>' || chr(13) || ' </head>' || chr(13) || ' <body>' || chr(13) || ' <table class="logo">' || chr(13) || ' <tbody>' || chr(13) || ' <tr>' || chr(13) || ' <td><img src="http://www.veremes.com/images/qualigeo_logo.png" alt="logo u_vitis, rapport de contrôle" /></td>' || chr(13) || ' <td><h1>Rapport de contrôle</h1></td>' || chr(13) || ' </tr>' || chr(13) || ' </tbody>' || chr(13) || ' </table>' || chr(13) || ' <div>' || chr(13) || ' <h2>Résumé</h2>' || chr(13) || ' <table cellspacing="2" cellpadding="5" class="description" >' || chr(13) || ' <tr>' || chr(13) || ' <td><strong>Liste des contrôles</strong></td>' || chr(13) || ' <td><xsl:value-of select="fme:xml-tables/fme:controles-table/fme:controles/fme:idControle"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td><strong>Nombre d''erreurs</strong></td>' || chr(13) || ' <td><xsl:value-of select="fme:xml-tables/fme:controles-table/fme:controles/fme:error_number"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td><strong>Schéma de référence</strong></td>' || chr(13) || ' <td><xsl:value-of select="fme:xml-tables/fme:controles-table/fme:controles/fme:schema_id"/></td>' || chr(13) || ' </tr>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>contrôles</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">N° de contrôle</td>' || chr(13) || ' <td class="head">Date du contrôle</td>' || chr(13) || ' <td class="head">Jeu de données</td>' || chr(13) || ' <td class="head">Auteur</td>' || chr(13) || ' <td class="head">Nombre d''erreurs</td>' || chr(13) || ' <td class="head">Description</td>' || chr(13) || ' <td class="head">Informations complémentaires</td>' || chr(13) || ' <td class="head">Système de coordonnées</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:controle-table/fme:controle">' || chr(13) || ' <xsl:sort select="fme:id_control" />' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_control"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:date_controle"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:dataset"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:author"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:error_number"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:comment"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' Version de FME : <xsl:value-of select="fme:fme_version"/> Version du contrôle : <xsl:value-of select="fme:control_engine_version"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_coordsys"/>' || chr(13) || ' </td>' || chr(13) || '' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h2>Statistiques</h2>' || chr(13) || ' <h3>Types d''entités</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Nombre d''enregistrements</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:st_type_entite-table/fme:st_type_entite">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:number"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Attributs de type Chaîne de caractères</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Attribut</td>' || chr(13) || ' <td class="head">Nombre</td>' || chr(13) || ' <td class="head">Nul</td>' || chr(13) || ' <td class="head">Non nul</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:st_attribut_chaine-table/fme:st_attribut_chaine">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:attribut"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:number"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:nul"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:not_null"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Attributs de type Numérique</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Attribut</td>' || chr(13) || ' <td class="head">Min</td>' || chr(13) || ' <td class="head">Max</td>' || chr(13) || ' <td class="head">Nombre</td>' || chr(13) || ' <td class="head">Nombre de valeurs<BR/>numériques</td>' || chr(13) || ' <td class="head">Somme</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:st_attr_numerique-table/fme:st_attr_numerique">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:attribut"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:min"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:max"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:number"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:numeric_number"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:sum"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Attributs de type Domaine</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Attribut</td>' || chr(13) || ' <td class="head">Valeur</td>' || chr(13) || ' <td class="head">Nombre</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:st_attr_domaine-table/fme:st_attr_domaine">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:attribut"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:value"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:number"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <h2>Erreurs</h2>' || chr(13) || ' <h3>Types d''erreurs</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Code d''erreur</td>' || chr(13) || ' <td class="head">Type d''erreur</td>' || chr(13) || ' <td class="head">Nombre</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:synthese-table/fme:synthese">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:error_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:nombre"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Détail</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">id contrôle</td>' || chr(13) || ' <td class="head">id erreur</td>' || chr(13) || ' <td class="head">Code erreur</td>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Identifiant</td>' || chr(13) || ' <td class="head">Message</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:detail_sans_image-table/fme:detail_sans_image">' || chr(13) || ' <xsl:sort select="fme:id_control" />' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_control"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_id"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:message"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">id contrôle</td>' || chr(13) || ' <td class="head">id erreur</td>' || chr(13) || ' <td class="head">Code erreur</td>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Identifiant</td>' || chr(13) || ' <td class="head">Message</td>' || chr(13) || ' <td class="head">Image</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:detail_avec_image-table/fme:detail_avec_image">' || chr(13) || ' <xsl:sort select="fme:id_control" />' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_control"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_id"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:message"/>' || chr(13) || ' </td>' || chr(13) || ' <td class="images">' || chr(13) || ' <xsl:element name="img">' || chr(13) || ' <xsl:attribute name="width">80</xsl:attribute>' || chr(13) || ' <xsl:attribute name="height">80</xsl:attribute>' || chr(13) || ' <xsl:attribute name="src"><xsl:value-of select="fme:map_name"/></xsl:attribute>' || chr(13) || ' </xsl:element>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' </div>' || chr(13) || ' </body>' || chr(13) || ' </html>' || chr(13) || ' </xsl:template>' || chr(13) || ' </xsl:stylesheet>'); + --INSERT INTO stylesheet (name, enabled, multireport, code) VALUES ('simple_2016', true, false, '<?xml version="1.0" encoding="iso-8859-1"?>' || chr(13) || ' <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fme="http://www.safe.com/xml/xmltables">' || chr(13) || ' <xsl:variable name="logo_qualigeo" select=''"data:image/png;base64,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"''/>' || chr(13) || ' <xsl:template match="/">' || chr(13) || ' <html>' || chr(13) || ' <head>' || chr(13) || ' <style type="text/css"> ' || chr(13) || ' body{font-family:arial,sans-serif;color:#000000;max-width:840px;}' || chr(13) || ' h1{font-size:29px;color:#00124c;font-family:arial,sans-serif;margin:30px 0px 30px 0px;text-align:center;}' || chr(13) || ' h2{font-size:20px;color:#00124c;margin-top:22px;font-family:arial,sans-serif;line-height:10px;text-align:center;}' || chr(13) || ' h3{font-size:17px;color:#00124c;font-family:arial,sans-serif;margin-bottom:5px;}' || chr(13) || ' td{background-color:#E8E6E8;}' || chr(13) || ' table.description td{background-color:#ECEBD4;}' || chr(13) || ' table{font-size:13px;}' || chr(13) || ' table.logo tr td{background-color:#ffffff;border:none;padding-right:40px;}' || chr(13) || ' .images{border:1px solid #E8E6E8;background-color:#ffffff;}' || chr(13) || ' .head{background-color:#00124c;color:white;}' || chr(13) || ' .left-column{background-color:#00124c !important; color: white !important;}' || chr(13) || ' .right-column{background-color:#E8E6E8 !important;}' || chr(13) || ' .resume{border: 1px solid #00124c; width: 800px; margin: 0px; padding: 20px;}' || chr(13) || ' .stat{border: 1px solid #00124c; width: 800px; margin-top: 64px; padding: 0px 20px 20px 20px;}' || chr(13) || ' .erreur{border: 1px solid #00124c; width: 800px; margin-top: 64px; padding: 0px 20px 20px 20px;}' || chr(13) || ' .break-work{word-break:break-all;}' || chr(13) || ' </style>' || chr(13) || ' <title>Rapport Qualigéo</title>' || chr(13) || ' </head>' || chr(13) || ' <body>' || chr(13) || ' <table class="logo" style="width: 840px;">' || chr(13) || ' <tbody>' || chr(13) || ' <tr>' || chr(13) || ' <td style="text-align: center;padding: 0px;">' || chr(13) || ' <img src="{$logo_qualigeo}" alt="logo u_vitis, rapport de contrôle" style="margin-left: auto;margin-right: auto;" />' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </tbody>' || chr(13) || ' </table>' || chr(13) || ' <div>' || chr(13) || ' <div style="text-align: center;">' || chr(13) || ' <h1>Rapport de contrôle</h1>' || chr(13) || ' </div>' || chr(13) || ' <div class="resume">' || chr(13) || ' <h2 style="margin: 0px 0px 20px 0px;">Résumé</h2>' || chr(13) || ' <table cellspacing="2" cellpadding="5" class="description" style=" width: 100%;">' || chr(13) || ' <tbody>' || chr(13) || ' <tr>' || chr(13) || ' <td class="left-column"><strong>N° de contrôle</strong></td>' || chr(13) || ' <td class="right-column"><xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:id_control"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td class="left-column"><strong>Date du contrôle</strong></td>' || chr(13) || ' <td class="right-column"><xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:date_controle"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td class="left-column"><strong>Jeu de données</strong></td>' || chr(13) || ' <td class="right-column break-work"><xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:dataset"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td class="left-column"><strong>Auteur</strong></td>' || chr(13) || ' <td class="right-column"><xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:author"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td class="left-column"><strong>Nombre d''erreurs</strong></td>' || chr(13) || ' <td class="right-column"><xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:error_number"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td class="left-column"><strong>Schéma de référence</strong></td>' || chr(13) || ' <td class="right-column"><xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:schema_id"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td class="left-column"><strong>Description</strong></td>' || chr(13) || ' <td class="right-column"><xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:comment"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td class="left-column"><strong>Informations complémentaires</strong></td>' || chr(13) || ' <td class="right-column">Version de FME : <xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:fme_version"/><br/>' || chr(13) || ' Version du contrôle : <xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:control_engine_version"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td class="left-column"><strong>Système de coordonnées</strong></td>' || chr(13) || ' <td class="right-column"><xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:id_coordsys"/></td>' || chr(13) || ' </tr>' || chr(13) || ' </tbody>' || chr(13) || ' </table>' || chr(13) || ' </div>' || chr(13) || ' ' || chr(13) || ' <div class="stat">' || chr(13) || ' <h2>Statistiques</h2>' || chr(13) || ' <h3>Types d''entités</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Nombre d''enregistrements</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:st_type_entite-table/fme:st_type_entite">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:number"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Attributs de type Chaîne de caractères</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Attribut</td>' || chr(13) || ' <td class="head">Nombre</td>' || chr(13) || ' <td class="head">Nul</td>' || chr(13) || ' <td class="head">Non nul</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:st_attribut_chaine-table/fme:st_attribut_chaine">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:attribut"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:number"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:nul"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:not_null"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Attributs de type Numérique</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Attribut</td>' || chr(13) || ' <td class="head">Min</td>' || chr(13) || ' <td class="head">Max</td>' || chr(13) || ' <td class="head">Médiane</td>' || chr(13) || ' <td class="head">Nombre</td>' || chr(13) || ' <td class="head">Nombre de valeurs<BR/>numériques</td>' || chr(13) || ' <td class="head">Somme</td>' || chr(13) || ' <td class="head">Moyenne</td>' || chr(13) || ' <td class="head">Ecart-type</td>' || chr(13) || ' <td class="head">Mode</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:st_attr_numerique-table/fme:st_attr_numerique">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:attribut"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:min"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:max"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:median"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:number"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:numeric_number"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:sum"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:mean"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:stdev"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:mode"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Attributs de type Domaine</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Attribut</td>' || chr(13) || ' <td class="head">Valeur</td>' || chr(13) || ' <td class="head">Nombre</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:st_attr_domaine-table/fme:st_attr_domaine">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:attribut"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:value"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:number"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' </div> ' || chr(13) || '' || chr(13) || ' <div class="erreur"> ' || chr(13) || ' <h2>Erreurs</h2>' || chr(13) || ' <h3>Types d''erreurs</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Code d''erreur</td>' || chr(13) || ' <td class="head">Type d''erreur</td>' || chr(13) || ' <td class="head">Nombre</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:synthese-table/fme:synthese">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:error_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:nombre"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Détail</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">id erreur</td>' || chr(13) || ' <td class="head">Code erreur</td>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Identifiant</td>' || chr(13) || ' <td class="head">Message</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:detail_sans_image-table/fme:detail_sans_image">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_id"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:message"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <xsl:if test="count(fme:xml-tables/fme:detail_avec_image-table/fme:detail_avec_image) > 0">' || chr(13) || ' <br/>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">id erreur</td>' || chr(13) || ' <td class="head">Code erreur</td>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Identifiant</td>' || chr(13) || ' <td class="head">Message</td>' || chr(13) || ' <td class="head">Image</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:detail_avec_image-table/fme:detail_avec_image">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_id"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:message"/>' || chr(13) || ' </td>' || chr(13) || ' <td class="images">' || chr(13) || ' <xsl:element name="img">' || chr(13) || ' <xsl:attribute name="width">80</xsl:attribute>' || chr(13) || ' <xsl:attribute name="height">80</xsl:attribute>' || chr(13) || ' <xsl:attribute name="src"><xsl:value-of select="fme:map_name"/></xsl:attribute>' || chr(13) || ' </xsl:element>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' </xsl:if>' || chr(13) || ' </div>' || chr(13) || ' </div>' || chr(13) || ' </body>' || chr(13) || ' </html>' || chr(13) || ' </xsl:template>' || chr(13) || ' </xsl:stylesheet>'); + --INSERT INTO stylesheet (name, enabled, multireport, code) VALUES ('multi2016', true, true, '<?xml version="1.0" encoding="iso-8859-1"?>' || chr(13) || ' <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fme="http://www.safe.com/xml/xmltables">' || chr(13) || ' <xsl:variable name="logo_qualigeo" select=''"data:image/png;base64,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"''/>' || chr(13) || ' <xsl:template match="/">' || chr(13) || ' <html>' || chr(13) || ' <head>' || chr(13) || ' <style type="text/css"> ' || chr(13) || ' body{font-family:arial,sans-serif;color:#000000;max-width:840px;}' || chr(13) || ' h1{font-size:29px;color:#00124c;font-family:arial,sans-serif;margin:30px 0px 30px 0px;text-align:center;}' || chr(13) || ' h2{font-size:20px;color:#00124c;margin-top:22px;font-family:arial,sans-serif;line-height:10px;text-align:center;}' || chr(13) || ' h3{font-size:17px;color:#00124c;font-family:arial,sans-serif;margin-bottom:5px;}' || chr(13) || ' td{background-color:#E8E6E8;}' || chr(13) || ' table.description td{background-color:#ECEBD4;}' || chr(13) || ' table{font-size:13px;}' || chr(13) || ' table.logo tr td{background-color:#ffffff;border:none;padding-right:40px;}' || chr(13) || ' .images{border:1px solid #E8E6E8;background-color:#ffffff;}' || chr(13) || ' .head{background-color:#00124c;color:white;}' || chr(13) || ' .break-work{word-break:break-all;}' || chr(13) || ' .left-column{background-color:#00124c !important; color: white !important;}' || chr(13) || ' .right-column{background-color:#E8E6E8 !important;}' || chr(13) || ' .resume{border: 1px solid #00124c; width: 800px; margin: 0px; padding: 20px;}' || chr(13) || ' .stat{border: 1px solid #00124c; width: 800px; margin-top: 64px; padding: 0px 20px 20px 20px;}' || chr(13) || ' .erreur{border: 1px solid #00124c; width: 800px; margin-top: 64px; padding: 0px 20px 20px 20px;}' || chr(13) || ' </style>' || chr(13) || ' <title>Rapport Qualigéo</title>' || chr(13) || ' </head>' || chr(13) || ' <body>' || chr(13) || ' <table class="logo" style="width: 840px;">' || chr(13) || ' <tbody>' || chr(13) || ' <tr>' || chr(13) || ' <td style="text-align: center;padding: 0px;">' || chr(13) || ' <img src="{$logo_qualigeo}" alt="logo u_vitis, rapport de contrôle" style="margin-left: auto;margin-right: auto;" />' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </tbody>' || chr(13) || ' </table>' || chr(13) || ' <div>' || chr(13) || ' <div style="text-align: center;">' || chr(13) || ' <h1>Rapport de contrôle</h1>' || chr(13) || ' </div>' || chr(13) || ' ' || chr(13) || ' <div class="resume">' || chr(13) || ' <h2 style="margin: 0px 0px 20px 0px;">Résumé</h2>' || chr(13) || ' <table cellspacing="2" cellpadding="5" class="description" style=" width: 100%;">' || chr(13) || ' <tbody>' || chr(13) || ' <tr>' || chr(13) || ' <td class="left-column"><strong>Liste des contrôles</strong></td>' || chr(13) || ' <td class="right-column"><xsl:value-of select="fme:xml-tables/fme:controles-table/fme:controles/fme:idControle"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td class="left-column"><strong>Nombre d''erreurs</strong></td>' || chr(13) || ' <td class="right-column"><xsl:value-of select="fme:xml-tables/fme:controles-table/fme:controles/fme:error_number"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td class="left-column"><strong>Schéma de référence</strong></td>' || chr(13) || ' <td class="right-column"><xsl:value-of select="fme:xml-tables/fme:controles-table/fme:controles/fme:schema_id"/></td>' || chr(13) || ' </tr>' || chr(13) || ' </tbody>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Contrôles</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">N° de contrôle</td>' || chr(13) || ' <td class="head">Date du contrôle</td>' || chr(13) || ' <td class="head">Jeu de données</td>' || chr(13) || ' <td class="head">Auteur</td>' || chr(13) || ' <td class="head">Nombre d''erreurs</td>' || chr(13) || ' <td class="head">Description</td>' || chr(13) || ' <td class="head">Informations complémentaires</td>' || chr(13) || ' <td class="head">Système de coordonnées</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:controle-table/fme:controle">' || chr(13) || ' <xsl:sort select="fme:id_control" />' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_control"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:date_controle"/>' || chr(13) || ' </td>' || chr(13) || ' <td class="break-work">' || chr(13) || ' <xsl:value-of select="fme:dataset"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:author"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:error_number"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:comment"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' Version de FME : <xsl:value-of select="fme:fme_version"/> Version du contrôle : <xsl:value-of select="fme:control_engine_version"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_coordsys"/>' || chr(13) || ' </td>' || chr(13) || ' ' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' </div>' || chr(13) || ' ' || chr(13) || ' <div class="stat">' || chr(13) || ' <h2>Statistiques</h2>' || chr(13) || ' <h3>Types d''entités</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Nombre d''enregistrements</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:st_type_entite-table/fme:st_type_entite">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:number"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Attributs de type Chaîne de caractères</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Attribut</td>' || chr(13) || ' <td class="head">Nombre</td>' || chr(13) || ' <td class="head">Nul</td>' || chr(13) || ' <td class="head">Non nul</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:st_attribut_chaine-table/fme:st_attribut_chaine">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:attribut"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:number"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:nul"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:not_null"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Attributs de type Numérique</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Attribut</td>' || chr(13) || ' <td class="head">Min</td>' || chr(13) || ' <td class="head">Max</td>' || chr(13) || ' <td class="head">Nombre</td>' || chr(13) || ' <td class="head">Nombre de valeurs<BR/>numériques</td>' || chr(13) || ' <td class="head">Somme</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:st_attr_numerique-table/fme:st_attr_numerique">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:attribut"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:min"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:max"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:number"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:numeric_number"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:sum"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Attributs de type Domaine</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Attribut</td>' || chr(13) || ' <td class="head">Valeur</td>' || chr(13) || ' <td class="head">Nombre</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:st_attr_domaine-table/fme:st_attr_domaine">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:attribut"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:value"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:number"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' </div>' || chr(13) || ' ' || chr(13) || ' <div class="erreur">' || chr(13) || ' <h2>Erreurs</h2>' || chr(13) || ' <h3>Types d''erreurs</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Code d''erreur</td>' || chr(13) || ' <td class="head">Type d''erreur</td>' || chr(13) || ' <td class="head">Nombre</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:synthese-table/fme:synthese">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:error_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:nombre"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Détail</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">id contrôle</td>' || chr(13) || ' <td class="head">id erreur</td>' || chr(13) || ' <td class="head">Code erreur</td>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Identifiant</td>' || chr(13) || ' <td class="head">Message</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:detail_sans_image-table/fme:detail_sans_image">' || chr(13) || ' <xsl:sort select="fme:id_control" />' || chr(13) || ' ' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_control"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_id"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:message"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <xsl:if test="count(fme:xml-tables/fme:detail_avec_image-table/fme:detail_avec_image) > 0">' || chr(13) || ' <br/>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">id contrôle</td>' || chr(13) || ' <td class="head">id erreur</td>' || chr(13) || ' <td class="head">Code erreur</td>' || chr(13) || ' <td class="head">Type d''entité</td>' || chr(13) || ' <td class="head">Identifiant</td>' || chr(13) || ' <td class="head">Message</td>' || chr(13) || ' <td class="head">Image</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:detail_avec_image-table/fme:detail_avec_image">' || chr(13) || ' <xsl:sort select="fme:id_control" />' || chr(13) || ' ' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_control"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_id"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:message"/>' || chr(13) || ' </td>' || chr(13) || ' <td class="images">' || chr(13) || ' <xsl:element name="img">' || chr(13) || ' <xsl:attribute name="width">80</xsl:attribute>' || chr(13) || ' <xsl:attribute name="height">80</xsl:attribute>' || chr(13) || ' <xsl:attribute name="src"><xsl:value-of select="fme:map_name"/></xsl:attribute>' || chr(13) || ' </xsl:element>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' </xsl:if>' || chr(13) || ' </div>' || chr(13) || ' </div>' || chr(13) || ' </body>' || chr(13) || ' </html>' || chr(13) || ' </xsl:template>' || chr(13) || ' </xsl:stylesheet>'); + --INSERT INTO q_control.stylesheet (name, enabled, multireport, code) VALUES ('simple_en', true, false, '<?xml version="1.0" encoding="iso-8859-1"?>' || chr(13) || ' <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fme="http://www.safe.com/xml/xmltables">' || chr(13) || ' <xsl:template match="/">' || chr(13) || ' <html>' || chr(13) || ' <head>' || chr(13) || ' <style type="text/css"> ' || chr(13) || ' body{font-family:arial, sans-serif;color:#000000;max-width:840px;}' || chr(13) || ' h1{font-size:22px;color:#ffffff;font-family:arial, sans-serif;text-transform:uppercase;margin-top:10px;background-color:#A5B800;padding:5px}' || chr(13) || ' h2{font-size:20px;color:#A2549E;margin-top:40px;text-transform:uppercase;font-family:tahoma, sans-serif;line-height:10px;}' || chr(13) || ' h3{font-size:17px;color:#9E9A9E;font-family:tahoma, sans-serif;text-transform:uppercase;margin-top:-10px;}' || chr(13) || ' td{background-color:#E8E6E8;}' || chr(13) || ' div{margin-top:60px;}' || chr(13) || ' table.description td{background-color:#ECEBD4;}' || chr(13) || ' table{font-size:13px;}' || chr(13) || ' table.logo tr td{background-color:#ffffff;border:none;padding-right:40px;}' || chr(13) || ' .images{border:1px solid #E8E6E8;background-color:#ffffff;}' || chr(13) || ' .head{background-color:#cccccc;}.haut{margin-bottom:50px;background-color:#eeeeee;padding:5px;}' || chr(13) || ' </style>' || chr(13) || ' <title>Qualigeo Report</title>' || chr(13) || ' </head>' || chr(13) || ' <body>' || chr(13) || ' <table class="logo">' || chr(13) || ' <tbody>' || chr(13) || ' <tr>' || chr(13) || ' <td><img src="http://www.veremes.com/images/qualigeo_logo.png" alt="logo u_vitis, rapport de contrôle" /></td>' || chr(13) || ' <td><h1>Control report</h1></td>' || chr(13) || ' </tr>' || chr(13) || ' </tbody>' || chr(13) || ' </table>' || chr(13) || ' <div>' || chr(13) || ' <h3>Summary</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5" class="description" >' || chr(13) || ' <tr>' || chr(13) || ' <td><strong>Control No</strong></td>' || chr(13) || ' <td><xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:id_control"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td><strong>Control date</strong></td>' || chr(13) || ' <td><xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:date_controle"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td><strong>Dataset</strong></td>' || chr(13) || ' <td><xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:dataset"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td><strong>Author</strong></td>' || chr(13) || ' <td><xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:author"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td><strong>Number of Errors</strong></td>' || chr(13) || ' <td><xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:error_number"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td><strong>Schema reference</strong></td>' || chr(13) || ' <td><xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:schema_id"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td><strong>Description</strong></td>' || chr(13) || ' <td><xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:comment"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td><strong>Further information</strong></td>' || chr(13) || ' <td>FME version: <xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:fme_version"/><br/>' || chr(13) || ' Control version: <xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:control_engine_version"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td><strong>System Coordinates</strong></td>' || chr(13) || ' <td><xsl:value-of select="fme:xml-tables/fme:controle-table/fme:controle/fme:id_coordsys"/></td>' || chr(13) || ' </tr>' || chr(13) || ' </table>' || chr(13) || ' <h2>Statistics</h2>' || chr(13) || ' <h3>Feature types</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Feature type</td>' || chr(13) || ' <td class="head">Number of recordings</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:st_type_entite-table/fme:st_type_entite">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:number"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>String Attributes</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Feature type</td>' || chr(13) || ' <td class="head">Attribute</td>' || chr(13) || ' <td class="head">Number</td>' || chr(13) || ' <td class="head">Blank</td>' || chr(13) || ' <td class="head">Non blank</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:st_attribut_chaine-table/fme:st_attribut_chaine">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:attribut"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:number"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:nul"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:not_null"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Numerical attributes</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Feature type</td>' || chr(13) || ' <td class="head">Attribute</td>' || chr(13) || ' <td class="head">Min</td>' || chr(13) || ' <td class="head">Max</td>' || chr(13) || ' <td class="head">Median</td>' || chr(13) || ' <td class="head">Number</td>' || chr(13) || ' <td class="head">Number of numerical values <BR/>numériques</td>' || chr(13) || ' <td class="head">Sum</td>' || chr(13) || ' <td class="head">Average</td>' || chr(13) || ' <td class="head">Standard deviation</td>' || chr(13) || ' <td class="head">Mode</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:st_attr_numerique-table/fme:st_attr_numerique">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:attribut"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:min"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:max"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:median"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:number"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:numeric_number"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:sum"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:mean"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:stdev"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:mode"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Attributs de type Domaine</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Feature type</td>' || chr(13) || ' <td class="head">Attribute</td>' || chr(13) || ' <td class="head">Value</td>' || chr(13) || ' <td class="head">Number</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:st_attr_domaine-table/fme:st_attr_domaine">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:attribut"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:value"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:number"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <h2>Errors</h2>' || chr(13) || ' <h3>Error types</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Error code</td>' || chr(13) || ' <td class="head">Error type</td>' || chr(13) || ' <td class="head">Number</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:synthese-table/fme:synthese">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:error_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:nombre"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Détail</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Error Id</td>' || chr(13) || ' <td class="head">Error code</td>' || chr(13) || ' <td class="head">Feature type</td>' || chr(13) || ' <td class="head">Identifier</td>' || chr(13) || ' <td class="head">Message</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:detail_sans_image-table/fme:detail_sans_image">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_id"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:message"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Error Id</td>' || chr(13) || ' <td class="head">Error code</td>' || chr(13) || ' <td class="head">Feature type</td>' || chr(13) || ' <td class="head">Identifier</td>' || chr(13) || ' <td class="head">Message</td>' || chr(13) || ' <td class="head">Image</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:detail_avec_image-table/fme:detail_avec_image">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_id"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:message"/>' || chr(13) || ' </td>' || chr(13) || ' <td class="images">' || chr(13) || ' <xsl:element name="img">' || chr(13) || ' <xsl:attribute name="width">80</xsl:attribute>' || chr(13) || ' <xsl:attribute name="height">80</xsl:attribute>' || chr(13) || ' <xsl:attribute name="src"><xsl:value-of select="fme:map_name"/></xsl:attribute>' || chr(13) || ' </xsl:element>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' </div>' || chr(13) || ' </body>' || chr(13) || ' </html>' || chr(13) || ' </xsl:template>' || chr(13) || ' </xsl:stylesheet>'); + --INSERT INTO q_control.stylesheet (name, enabled, multireport, code) VALUES ('multi_en', true, true, '<?xml version="1.0" encoding="iso-8859-1"?>' || chr(13) || ' <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fme="http://www.safe.com/xml/xmltables">' || chr(13) || ' <xsl:template match="/">' || chr(13) || ' <html>' || chr(13) || ' <head>' || chr(13) || ' <style type="text/css"> ' || chr(13) || ' body{font-family:arial, sans-serif;color:#000000;max-width:840px;}' || chr(13) || ' h1{font-size:22px;color:#ffffff;font-family:arial, sans-serif;text-transform:uppercase;margin-top:10px;background-color:#A5B800;padding:5px}' || chr(13) || ' h2{font-size:20px;color:#A2549E;margin-top:40px;text-transform:uppercase;font-family:tahoma, sans-serif;line-height:10px;}' || chr(13) || ' h3{font-size:17px;color:#9E9A9E;font-family:tahoma, sans-serif;text-transform:uppercase;margin-top:-10px;}' || chr(13) || ' td{background-color:#E8E6E8;}' || chr(13) || ' div{margin-top:60px;}' || chr(13) || ' table.description td{background-color:#ECEBD4;}' || chr(13) || ' table{font-size:13px;}' || chr(13) || ' table.logo tr td{background-color:#ffffff;border:none;padding-right:40px;}' || chr(13) || ' .images{border:1px solid #E8E6E8;background-color:#ffffff;}' || chr(13) || ' .head{background-color:#cccccc;}.haut{margin-bottom:50px;background-color:#eeeeee;padding:5px;}' || chr(13) || ' </style>' || chr(13) || ' <title>Qualigeo Report</title>' || chr(13) || ' </head>' || chr(13) || ' <body>' || chr(13) || ' <table class="logo">' || chr(13) || ' <tbody>' || chr(13) || ' <tr>' || chr(13) || ' <td><img src="http://www.veremes.com/images/qualigeo_logo.png" alt="logo u_vitis, rapport de contrôle" /></td>' || chr(13) || ' <td><h1>Control report</h1></td>' || chr(13) || ' </tr>' || chr(13) || ' </tbody>' || chr(13) || ' </table>' || chr(13) || ' <div>' || chr(13) || ' <h2>Summary</h2>' || chr(13) || ' <table cellspacing="2" cellpadding="5" class="description" >' || chr(13) || ' <tr>' || chr(13) || ' <td><strong>Controls list</strong></td>' || chr(13) || ' <td><xsl:value-of select="fme:xml-tables/fme:controles-table/fme:controles/fme:idControle"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td><strong>Number of Errors</strong></td>' || chr(13) || ' <td><xsl:value-of select="fme:xml-tables/fme:controles-table/fme:controles/fme:error_number"/></td>' || chr(13) || ' </tr>' || chr(13) || ' <tr>' || chr(13) || ' <td><strong>Schema reference</strong></td>' || chr(13) || ' <td><xsl:value-of select="fme:xml-tables/fme:controles-table/fme:controles/fme:schema_id"/></td>' || chr(13) || ' </tr>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Controls</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Control No</td>' || chr(13) || ' <td class="head">Control Date</td>' || chr(13) || ' <td class="head">Dataset</td>' || chr(13) || ' <td class="head">Author</td>' || chr(13) || ' <td class="head">Number of Errors</td>' || chr(13) || ' <td class="head">Description</td>' || chr(13) || ' <td class="head">Further information</td>' || chr(13) || ' <td class="head">System Coordinates</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:controle-table/fme:controle">' || chr(13) || ' <xsl:sort select="fme:id_control" />' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_control"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:date_controle"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:dataset"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:author"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:error_number"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:comment"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' FME version: <xsl:value-of select="fme:fme_version"/> Control version: <xsl:value-of select="fme:control_engine_version"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_coordsys"/>' || chr(13) || ' </td>' || chr(13) || '' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h2>Statistics</h2>' || chr(13) || ' <h3>Feature types</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Feature type</td>' || chr(13) || ' <td class="head">Number of recordings</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:st_type_entite-table/fme:st_type_entite">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:number"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>String Attributes</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Feature type</td>' || chr(13) || ' <td class="head">Attribute</td>' || chr(13) || ' <td class="head">Number</td>' || chr(13) || ' <td class="head">Blank</td>' || chr(13) || ' <td class="head">Non blank</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:st_attribut_chaine-table/fme:st_attribut_chaine">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:attribut"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:number"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:nul"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:not_null"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Numerical attributes</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Feature type</td>' || chr(13) || ' <td class="head">Attribute</td>' || chr(13) || ' <td class="head">Min</td>' || chr(13) || ' <td class="head">Max</td>' || chr(13) || ' <td class="head">Number</td>' || chr(13) || ' <td class="head">Number of numerical values</td>' || chr(13) || ' <td class="head">Sum</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:st_attr_numerique-table/fme:st_attr_numerique">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:attribut"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:min"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:max"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:number"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:numeric_number"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:sum"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Domain Attibutes</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Feature type</td>' || chr(13) || ' <td class="head">Attribute</td>' || chr(13) || ' <td class="head">Value</td>' || chr(13) || ' <td class="head">Number</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:st_attr_domaine-table/fme:st_attr_domaine">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:attribut"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:value"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:number"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <h2>Errors</h2>' || chr(13) || ' <h3>Error type</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Error code</td>' || chr(13) || ' <td class="head">Error type</td>' || chr(13) || ' <td class="head">Number</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:synthese-table/fme:synthese">' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:error_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:nombre"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <h3>Detail</h3>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Control id</td>' || chr(13) || ' <td class="head">Error id</td>' || chr(13) || ' <td class="head">Error code</td>' || chr(13) || ' <td class="head">Feature type</td>' || chr(13) || ' <td class="head">Identifier</td>' || chr(13) || ' <td class="head">Message</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:detail_sans_image-table/fme:detail_sans_image">' || chr(13) || ' <xsl:sort select="fme:id_control" />' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_control"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_id"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:message"/>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' <br/>' || chr(13) || ' <table cellspacing="2" cellpadding="5">' || chr(13) || ' <tr>' || chr(13) || ' <td class="head">Control id</td>' || chr(13) || ' <td class="head">Error id</td>' || chr(13) || ' <td class="head">Error code</td>' || chr(13) || ' <td class="head">Feature type</td>' || chr(13) || ' <td class="head">Identifier</td>' || chr(13) || ' <td class="head">Message</td>' || chr(13) || ' <td class="head">Image</td>' || chr(13) || ' </tr>' || chr(13) || ' <xsl:for-each select="fme:xml-tables/fme:detail_avec_image-table/fme:detail_avec_image">' || chr(13) || ' <xsl:sort select="fme:id_control" />' || chr(13) || ' <tr>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_control"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:id_error_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_type"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:feature_id"/>' || chr(13) || ' </td>' || chr(13) || ' <td>' || chr(13) || ' <xsl:value-of select="fme:message"/>' || chr(13) || ' </td>' || chr(13) || ' <td class="images">' || chr(13) || ' <xsl:element name="img">' || chr(13) || ' <xsl:attribute name="width">80</xsl:attribute>' || chr(13) || ' <xsl:attribute name="height">80</xsl:attribute>' || chr(13) || ' <xsl:attribute name="src"><xsl:value-of select="fme:map_name"/></xsl:attribute>' || chr(13) || ' </xsl:element>' || chr(13) || ' </td>' || chr(13) || ' </tr>' || chr(13) || ' </xsl:for-each>' || chr(13) || ' </table>' || chr(13) || ' </div>' || chr(13) || ' </body>' || chr(13) || ' </html>' || chr(13) || ' </xsl:template>' || chr(13) || ' </xsl:stylesheet>' || chr(13) || ' '); + CREATE OR REPLACE VIEW q_constraint.v_unique_engine AS SELECT attribute_unique_constraint.id_unique_constraint, attribute_unique_constraint.id_attribute, attribute.name, unique_constraint.id_ft, unique_constraint.primary_key FROM q_constraint.attribute_unique_constraint JOIN q_constraint.attribute ON attribute_unique_constraint.id_attribute = attribute.id_attribute JOIN q_constraint.unique_constraint ON attribute_unique_constraint.id_unique_constraint = unique_constraint.id_unique_constraint AND unique_constraint.enabled = TRUE; + CREATE OR REPLACE VIEW q_constraint.v_concat_topology_engine AS SELECT topology.id_topology, topology.id_ft, topology.id_topology_constraint, topology.code_validation_rule, topology.code_language, array_to_string(ARRAY( SELECT attribute.name FROM q_constraint.attribute LEFT JOIN q_constraint.topology_group_by ON attribute.id_attribute = topology_group_by.id_attribute WHERE topology_group_by.id_topology = topology.id_topology), ' '::text) AS attributes, topology.enabled FROM q_constraint.topology; + CREATE OR REPLACE VIEW q_constraint.v_relation_engine AS SELECT relation.id_relation,relation.id_ft_parent, parent_f.feature_type AS feature_type_parent,relation.id_ft_child, child_f.feature_type AS feature_type_child, relation.cardinality_child_parent_min, relation.cardinality_child_parent_max, relation.cardinality_parent_child_min, relation.cardinality_parent_child_max, relation_attribute.id_attribute_parent, parent.name AS name_attr_parent, relation_attribute.id_attribute_child, child.name AS name_attr_child, relation.enabled as enabled FROM q_constraint.relation_attribute JOIN q_constraint.relation ON relation.id_relation = relation_attribute.id_relation JOIN q_constraint.attribute parent ON parent.id_attribute = relation_attribute.id_attribute_parent JOIN q_constraint.attribute child ON child.id_attribute = relation_attribute.id_attribute_child JOIN q_constraint.feature_type child_f ON child_f.id_ft = relation.id_ft_child JOIN q_constraint.feature_type parent_f ON parent_f.id_ft = relation.id_ft_parent; + CREATE OR REPLACE VIEW q_constraint.v_constraints AS SELECT test.id_ft, test.categorie FROM ( SELECT DISTINCT v_ft_geometry_type_engine.id_ft, 'type_geometrie'::text AS categorie FROM q_constraint.v_ft_geometry_type_engine UNION ALL SELECT DISTINCT v_ft_geometry_interpretation_engine.id_ft, 'interpretation_geometrie'::text AS categorie FROM q_constraint.v_ft_geometry_interpretation_engine UNION ALL SELECT DISTINCT v_unique_engine.id_ft, 'unicite'::text AS categorie FROM q_constraint.v_unique_engine UNION ALL SELECT DISTINCT v_concat_topology_engine.id_ft, 'tesselation'::text AS categorie FROM q_constraint.v_concat_topology_engine WHERE v_concat_topology_engine.enabled = true UNION ALL SELECT DISTINCT feature_constraint.id_ft, 'contrainte_specifique_entite'::text AS categorie FROM q_constraint.feature_constraint WHERE feature_constraint.enabled = true UNION ALL SELECT DISTINCT v_spatial_coord_engine.id_ft, 'domaine_spatial'::text AS categorie FROM q_constraint.v_spatial_coord_engine UNION ALL SELECT DISTINCT relation.id_ft, 'cardinalite'::text AS categorie FROM ( SELECT v_relation_engine.id_ft_parent AS id_ft FROM q_constraint.v_relation_engine where v_relation_engine.enabled = true UNION ALL SELECT v_relation_engine.id_ft_child AS id_ft FROM q_constraint.v_relation_engine where v_relation_engine.enabled = true) relation UNION ALL SELECT DISTINCT construction.id_ft, 'contrainte_construction'::text AS categorie FROM ( SELECT v_build_ref_ft_engine.id_ft FROM q_constraint.v_build_ref_ft_engine UNION ALL SELECT v_build_ref_ft_engine.id_ref_ft AS id_ft FROM q_constraint.v_build_ref_ft_engine) construction UNION ALL SELECT DISTINCT v_feature_type_engine.id_ft, 'relation_spatiale'::text AS categorie FROM q_constraint.v_feature_type_engine WHERE v_feature_type_engine.id_sp_rel <> ''::text UNION ALL SELECT DISTINCT v_ft_geometry_validation_engine.id_ft, 'validation_geometrie'::text AS categorie FROM q_constraint.v_ft_geometry_validation_engine UNION ALL SELECT DISTINCT v_attribute_engine.id_ft, 'controle_attributs'::text AS categorie FROM q_constraint.v_attribute_engine) test; + -- Frédéric le 07/11/2017 à 11:22 + ALTER FUNCTION q_constraint.insert_feature_type(integer, text, integer, text, text, text, integer, text, text, integer, integer, text, text, text, integer, text)OWNER TO u_vitis; + ALTER FUNCTION q_constraint.insert_topo_constraint( integer, integer, integer, text, text, text, text, boolean) OWNER TO u_vitis; + ALTER FUNCTION q_constraint.insert_relation(integer, integer, text, text, text, text, text, integer, text, text, boolean) OWNER TO u_vitis; + ALTER FUNCTION q_constraint.update_relation(integer, integer, text, integer, integer) OWNER TO u_vitis; + ALTER FUNCTION q_control.up_control() OWNER TO u_vitis; + ]]> + </code> + </query> + <query> + <type>update</type> + <version>2018.01.00</version> + <code> + <![CDATA[ + + -- Sofian le 30/01/2018 à 9:19 + GRANT ALL ON TABLE q_constraint.rt_build_constraint TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_constraint.rt_build_constraint TO qual_designer; + GRANT SELECT ON TABLE q_constraint.rt_build_constraint TO qual_controler; + GRANT ALL ON TABLE q_constraint.version TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_constraint.version TO qual_designer; + GRANT SELECT ON TABLE q_constraint.version TO qual_controler; + CREATE OR REPLACE FUNCTION q_constraint.insert_concat_view(text, integer, text, text, text, text, text, integer) RETURNS void AS $BODY$ DECLARE concat_values ALIAS FOR $1;id_parent ALIAS FOR $2;column_id_value ALIAS FOR $3;tablename_recup_id ALIAS FOR $4;column_value ALIAS FOR $5;table_insert ALIAS FOR $6;column_id_parent ALIAS FOR $7;id_schema ALIAS FOR $8; req_select text;req_insert text;i int := 0; word text;valeur text;rec record; BEGIN LOOP i := i + 1; word := '';SELECT INTO word split_part(concat_values, ', ', i);IF word = '' OR word IS NULL THEN EXIT;END IF;RAISE NOTICE '%', word;req_select:= 'SELECT ' || column_id_value || ' FROM ' || tablename_recup_id || ' WHERE ' ||column_value || ' = ' || quote_literal(word) || ';';RAISE NOTICE '%' , req_select;EXECUTE req_select INTO rec;RAISE NOTICE '%', rec;SELECT into valeur btrim(CAST( rec as text), '()');EXECUTE 'INSERT INTO ' || table_insert || ' (' || column_id_value || ', ' || column_id_parent || ', id_schema) values (''' || valeur || ''', ''' || id_parent || ''', ''' || id_schema || ''');';END LOOP;END;$BODY$ LANGUAGE plpgsql VOLATILE COST 100; + ALTER FUNCTION q_constraint.insert_concat_view(text, integer, text, text, text, text, text, integer) OWNER TO u_vitis; + CREATE OR REPLACE FUNCTION q_constraint.insert_attribute(integer, boolean, real, text, double precision, double precision, integer, integer, text, text, boolean, text, text, integer, text) RETURNS void AS $BODY$ DECLARE id int; i int := 0; word text; req_select text; rec record; valeur text; BEGIN INSERT INTO q_constraint.attribute(id_ft, null_allowed, length, expression, min, max, id_stat_type, id_type, code_constraint, code_language, enabled, format_date, name, id_schema) VALUES ($1,$2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14) RETURNING id_attribute INTO id; RAISE NOTICE '%', id; LOOP i := i + 1; word := ''; SELECT INTO word split_part($15, ',', i); IF word = '' OR word IS NULL THEN EXIT; END IF; RAISE NOTICE '%', word; EXECUTE 'INSERT INTO q_constraint.domain_value (id_attribute, value, id_schema) values (' || id || ', ' || quote_literal(word) || ', ' || $14 || ');'; END LOOP; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; + ALTER FUNCTION q_constraint.insert_attribute(integer, boolean, real, text, double precision, double precision, integer, integer, text, text, boolean, text, text, integer, text) OWNER TO postgres; + -- Sofian le 30/01/2018 à 9:19 + GRANT ALL ON TABLE q_constraint.rt_build_constraint TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_constraint.rt_build_constraint TO qual_designer; + GRANT SELECT ON TABLE q_constraint.rt_build_constraint TO qual_controler; + GRANT ALL ON TABLE q_constraint.version TO qual_administrator; + GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE q_constraint.version TO qual_designer; + GRANT SELECT ON TABLE q_constraint.version TO qual_controler; + CREATE OR REPLACE FUNCTION q_constraint.insert_concat_view(text, integer, text, text, text, text, text, integer) RETURNS void AS $BODY$ DECLARE concat_values ALIAS FOR $1;id_parent ALIAS FOR $2;column_id_value ALIAS FOR $3;tablename_recup_id ALIAS FOR $4;column_value ALIAS FOR $5;table_insert ALIAS FOR $6;column_id_parent ALIAS FOR $7;id_schema ALIAS FOR $8; req_select text;req_insert text;i int := 0; word text;valeur text;rec record; BEGIN LOOP i := i + 1; word := '';SELECT INTO word split_part(concat_values, ', ', i);IF word = '' OR word IS NULL THEN EXIT;END IF;RAISE NOTICE '%', word;req_select:= 'SELECT ' || column_id_value || ' FROM ' || tablename_recup_id || ' WHERE ' ||column_value || ' = ' || quote_literal(word) || ';';RAISE NOTICE '%' , req_select;EXECUTE req_select INTO rec;RAISE NOTICE '%', rec;SELECT into valeur btrim(CAST( rec as text), '()');EXECUTE 'INSERT INTO ' || table_insert || ' (' || column_id_value || ', ' || column_id_parent || ', id_schema) values (''' || valeur || ''', ''' || id_parent || ''', ''' || id_schema || ''');';END LOOP;END;$BODY$ LANGUAGE plpgsql VOLATILE COST 100; + ALTER FUNCTION q_constraint.insert_concat_view(text, integer, text, text, text, text, text, integer) OWNER TO u_vitis; + CREATE OR REPLACE FUNCTION q_constraint.insert_attribute(integer, boolean, real, text, double precision, double precision, integer, integer, text, text, boolean, text, text, integer, text) RETURNS void AS $BODY$ DECLARE id int; i int := 0; word text; req_select text; rec record; valeur text; BEGIN INSERT INTO q_constraint.attribute(id_ft, null_allowed, length, expression, min, max, id_stat_type, id_type, code_constraint, code_language, enabled, format_date, name, id_schema) VALUES ($1,$2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14) RETURNING id_attribute INTO id; RAISE NOTICE '%', id; LOOP i := i + 1; word := ''; SELECT INTO word split_part($15, ',', i); IF word = '' OR word IS NULL THEN EXIT; END IF; RAISE NOTICE '%', word; EXECUTE 'INSERT INTO q_constraint.domain_value (id_attribute, value, id_schema) values (' || id || ', ' || quote_literal(word) || ', ' || $14 || ');'; END LOOP; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; + ALTER FUNCTION q_constraint.insert_attribute(integer, boolean, real, text, double precision, double precision, integer, integer, text, text, boolean, text, text, integer, text) OWNER TO u_vitis; + -- Sofian le 23/03/2018 à 14:46 + GRANT INSERT ON TABLE public.spatial_ref_sys TO PUBLIC; + -- Sofian le 18/04/2018 + INSERT INTO q_control.format(id_format, format, type, source_type, extensions, exportable, format_schema) VALUES ('ACAD_QUALI', 'ACAD_QUALI', '2D', 'FILE', '*.*', false, 'ACAD_QUALI'); + --Sofian le 7/06/2018 à 10:49 + ]]> + </code> + </query> + <query> + <type>update</type> + <version>2018.02.00</version> + <code> + <![CDATA[ + CREATE OR REPLACE VIEW q_constraint.v_spatial_relation_engine AS SELECT spatial_relation.id_ft, spatial_relation.id_sp_rel, spatial_operator.name, sp_operator_sp_relation.id_operator, spatial_relation.id_linked_ft, ft.feature_type AS ft, linked_ft.feature_type AS linked_ft, spatial_relation.id_relation FROM q_constraint.spatial_relation LEFT JOIN q_constraint.sp_operator_sp_relation ON spatial_relation.id_sp_rel = sp_operator_sp_relation.id_sp_rel LEFT JOIN q_constraint.spatial_operator ON sp_operator_sp_relation.id_operator::text = spatial_operator.id_operator::text JOIN q_constraint.feature_type ft ON ft.id_ft = spatial_relation.id_ft JOIN q_constraint.feature_type linked_ft ON linked_ft.id_ft = spatial_relation.id_linked_ft WHERE spatial_relation.enabled = TRUE; + INSERT INTO s_vitis.privileges VALUES ('qual_controler', 'rôle de contrôle de Qualigéo'); + --Sofian le 18/06/2018 à 10:27 + CREATE OR REPLACE RULE update_topo_constraint AS ON UPDATE TO q_constraint.v_concat_topology_soft DO INSTEAD ( UPDATE q_constraint.topology SET id_ft = new.id_ft, id_topology_constraint = new.id_topology_constraint, code_validation_rule= new.code_validation_rule, code_language = new.code_language, COMMENT = new.comment, enabled = new.enabled WHERE id_topology = old.id_topology; DELETE FROM q_constraint.topology_group_by WHERE topology_group_by.id_topology = old.id_topology; SELECT q_constraint.update_topo_constraint(new.id_schema, new.id_ft, new.attributes, old.id_topology) AS update_unique_constraint; ); + --Sofian le 19/06/2018 à 11:23 + UPDATE q_constraint.attribute SET null_allowed = TRUE WHERE null_allowed IS NULL; + --Sofian le 25/06/2018 à 09:20 + DELETE FROM q_control.stylesheet WHERE name = 'multi'; + DELETE FROM q_control.stylesheet WHERE name = 'multi_fr'; + DELETE FROM q_control.stylesheet WHERE name = 'simple'; + DELETE FROM q_control.stylesheet WHERE name = 'simple_fr'; + UPDATE q_control.stylesheet SET name = 'multi_2018' WHERE name = 'multi2016'; + UPDATE q_control.stylesheet SET name = 'simple_2018' WHERE name = 'simple_2016'; + --Romain le 06/07/2018 à 09:57 + CREATE OR REPLACE VIEW q_constraint.v_spatial_relation_engine AS SELECT spatial_relation.id_ft, spatial_relation.id_sp_rel, spatial_operator.name, sp_operator_sp_relation.id_operator, spatial_relation.id_linked_ft, ft.feature_type AS ft, linked_ft.feature_type AS linked_ft, spatial_relation.id_relation FROM q_constraint.spatial_relation LEFT JOIN q_constraint.sp_operator_sp_relation ON spatial_relation.id_sp_rel = sp_operator_sp_relation.id_sp_rel LEFT JOIN q_constraint.spatial_operator ON sp_operator_sp_relation.id_operator::text = spatial_operator.id_operator::text JOIN q_constraint.feature_type ft ON ft.id_ft = spatial_relation.id_ft JOIN q_constraint.feature_type linked_ft ON linked_ft.id_ft = spatial_relation.id_linked_ft WHERE spatial_relation.enabled = TRUE; + -- Sofian le 09/08/2018 + CREATE TABLE q_constraint.schema_group ( id_schema integer NOT NULL, group_id integer NOT NULL, schema_group_id integer NOT NULL, CONSTRAINT pk_schema_group PRIMARY KEY (schema_group_id), CONSTRAINT fk_group_id FOREIGN KEY (group_id) REFERENCES s_vitis."group" (group_id) MATCH SIMPLE ON UPDATE RESTRICT ON DELETE CASCADE, CONSTRAINT fk_schema_id FOREIGN KEY (id_schema) REFERENCES q_constraint.schema (id_schema) MATCH SIMPLE ON UPDATE RESTRICT ON DELETE CASCADE) WITH ( OIDS = FALSE) TABLESPACE pg_default; + ALTER TABLE q_constraint.schema_group OWNER TO u_vitis; + GRANT INSERT, SELECT, UPDATE, DELETE ON TABLE q_constraint.schema_group TO gtf_user; + GRANT ALL ON TABLE q_constraint.schema_group TO u_vitis; + CREATE OR REPLACE VIEW q_constraint.v_schema_group AS SELECT schema.schema, schema_group.id_schema, schema_group.group_id, schema_group.schema_group_id FROM q_constraint.schema_group LEFT JOIN q_constraint.schema ON schema.id_schema = schema_group.id_schema; + ALTER TABLE q_constraint.v_schema_group OWNER TO u_vitis; + GRANT INSERT, SELECT, UPDATE, DELETE ON TABLE q_constraint.v_schema_group TO qual_controler; + GRANT ALL ON TABLE q_constraint.v_schema_group TO u_vitis; + GRANT ALL ON TABLE q_constraint.v_schema_group TO u_vitis; + CREATE OR REPLACE RULE delete_v_schema_group AS ON DELETE TO q_constraint.v_schema_group DO INSTEAD DELETE FROM q_constraint.schema_group WHERE schema_group.group_id = old.group_id; + CREATE OR REPLACE RULE insert_v_schema_group AS ON INSERT TO q_constraint.v_schema_group DO INSTEAD INSERT INTO q_constraint.schema_group (id_schema, group_id, schema_group_id) VALUES (new.id_schema, new.group_id, new.schema_group_id); + CREATE OR REPLACE RULE update_v_schema_group AS ON INSERT TO q_constraint.v_schema_group DO INSTEAD UPDATE q_constraint.schema_group SET id_schema = new.id_schema, group_id = new.group_id, schema_group_id = new.schema_group_id; + -- Sofian le 04/09/2018 à 12:02 + INSERT INTO s_vitis.vm_string(string, string_id) VALUES ('Section Qualigéo', 'qualigeo_1'); + CREATE OR REPLACE FUNCTION s_vitis.create_qualigeo_section( OUT success boolean) RETURNS boolean LANGUAGE 'plpgsql' COST 100 VOLATILE AS $BODY$ BEGIN IF NOT EXISTS (select module_id from s_vitis.vm_module where module_id = 'gtf') THEN success := FALSE; ELSE EXECUTE 'INSERT INTO s_vitis.vm_section(section_id, label_id, name, index, event, tab_id, template, ressource_id, module) VALUES ((select nextval(''s_vitis.seq_vm''::regclass)), ''qualigeo_1'', ''qualigeo'', 3, '''', 6, ''simpleFormTpl.html'', ''gtf/schemagroups'', ''gtf'');'; success := TRUE; END IF; END $BODY$; + ALTER FUNCTION s_vitis.create_qualigeo_section() OWNER TO u_vitis; + SELECT s_vitis.create_qualigeo_section(); + INSERT INTO s_vitis.vm_translation(translation_id, lang, translation) VALUES ('qualigeo_1', 'en', 'Qualigeo'); + INSERT INTO s_vitis.vm_translation(translation_id, lang, translation) VALUES ('qualigeo_1', 'fr', 'Qualigéo'); + ]]> + </code> + </query> + </queriesCollection> +</sqlQueries>