From: | damien clochard <damien(at)dalibo(dot)info> |
---|---|
To: | Samuel ROZE <samuel(dot)roze(at)gmail(dot)com> |
Cc: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: Gestion des adresses URL avec parse_url |
Date: | 2009-10-22 08:38:42 |
Message-ID: | 4AE01A12.7090403@dalibo.info |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-fr-generale |
Samuel ROZE a écrit :
> Bonjour à tous,
>
> Je viens ici demander quelques feedbacks à propos d'une fonctionnalité
> que je suis en train de développer.
>
> Je suis en train de développer une série de fonctions permettant de
> manipuler des adresses URL directement dans la base de données. Pour le
> moment, j'ai fait le plus dur avec ces fonctions:
> - url *parse_url_exec (char * url_str) - utilisée par les deux
> fonctions suivantes
> - Datum parse_url_key (PG_FUNCTION_ARGS) qui prend deux arguments:
> - text: L'adresse URL
> - text: Quoi récupérer dans cette liste: scheme (http, https, ftp,
> etc...), user (le nom d'utilisateur quand il y a), pass (mot de passe
> quand il y a), host (nom de domaine), path, query (requête - i.e. après
> "?"), fragment (quel endroit de la page - i.e. après "#")
> - Datum parse_url_record (PG_FUNCTION_ARGS) qui prend un seul argument
> (text), l'adresse URL. Elle retourne un tuple de char*. i.e. un record.
>
> Pour simplifier la vie pour la récupération du record, j'ai fait un type
> SQL "url" comme ceci:
> ------------------------------------------------------------
> CREATE TYPE url AS ("scheme" text, "user" text, "pass" text, "host"
> text, "port" integer, "path" text, "query" text, "fragment" text);
> ------------------------------------------------------------
>
> Les deux fonctions C sont définies comme ça:
> ------------------------------------------------------------
> CREATE FUNCTION parse_url(text, text) RETURNS text AS 'parse_url.so',
> 'parse_url_key' LANGUAGE C STRICT;
> ------------------------------------------------------------
> CREATE FUNCTION parse_url (text) RETURNS url AS 'parse_url.so',
> 'parse_url_record' LANGUAGE C STRICT;
> ------------------------------------------------------------
>
> Vous pouvez télécharger le code dans une archive contenant le fichier .c
> et .h, le Makefile ainsi que un fichier SQL qui contient ce que je vous
> ai présenté ci-dessus.
> http://www.d-sites.com/wp-content/uploads/2009/10/parse_url.tar.gz
>
> En toute logique, je vais continuer pour créer un "vrai" type de donnée
> "url" utilisable en tant que champ SQL, qui permettra ensuite de bien
> mieux gérer les adresses URL.
>
> Je souhaites avoir des retours de votre part avant d'en faire part à la
> mailing "pgsql-hackers@" ainsi qu'avant publication sur mon blog.
>
Salut !
Je viens de tester avec une 8.3.8 et j'ai l'erreur suivante :
test=# \i /tmp/parse_url.sql
CREATE TYPE
psql:/tmp/parse_url.sql:3: ERREUR: n'a pas pu charger la bibliothèque «
/usr/lib/postgresql/8.3/lib/parse_url.so » :
/usr/lib/postgresql/8.3/lib/parse_url.so: undefined symbol:
TextDatumGetCString
psql:/tmp/parse_url.sql:4: ERREUR: n'a pas pu charger la bibliothèque «
/usr/lib/postgresql/8.3/lib/parse_url.so » :
/usr/lib/postgresql/8.3/lib/parse_url.so: undefined symbol:
TextDatumGetCString
J'ai peut-être mal compris qqchose ou bien ton code n'est compatible
qu'avec la version 8.4 ?
Au passage, je pense que tu devrais déclarer les fonctions parse_url
comme IMMUTABLE, puisqu'elles renvoient toujours les même résultats si
on leur passe les même arguments. Plus d'info :
http://docs.postgresqlfr.org/8.4/xfunc-volatility.html
En tout cas, bravo pour cette initiative !
--
damien clochard
http://dalibo.org | http://dalibo.com
From | Date | Subject | |
---|---|---|---|
Next Message | Cédric Villemain | 2009-10-22 09:14:27 | Re: Gestion des adresses URL avec parse_url |
Previous Message | damien clochard | 2009-10-22 08:09:43 | Re: probleme sur base "could not opn relation with oid" |