Skip site navigation (1) Skip section navigation (2)

Re: Gestion des adresses URL avec parse_url

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 (view raw or flat)
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

In response to

Responses

pgsql-fr-generale by date

Next:From: Cédric VillemainDate: 2009-10-22 09:14:27
Subject: Re: Gestion des adresses URL avec parse_url
Previous:From: damien clochardDate: 2009-10-22 08:09:43
Subject: Re: probleme sur base "could not opn relation with oid"

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group