Re: Gestion des adresses URL avec parse_url

From: Samuel ROZE <samuel(dot)roze(at)gmail(dot)com>
To: damien clochard <damien(at)dalibo(dot)info>
Cc: pgsql-fr-generale(at)postgresql(dot)org
Subject: Re: Gestion des adresses URL avec parse_url
Date: 2009-10-22 14:14:17
Message-ID: 18e9608a0910220714l5115a943i50c2d0a1bffc2915@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-fr-generale

Bonjour,

Le problème sous 8.3 c'est que TextDatumGetCString n'est en éffet pas
défini dans "utils/builtins.h" !
Peut-être il y a-t-il d'autre méthodes pour y accèder ?

Mettre:
#define CStringGetTextP(c) DatumGetTextP(DirectFunctionCall1(textin,
CStringGetDatum(c)))

Le suffit pas il me semble car "textin" n'est probablement pas déclaré
dans n'importe quelle librairie de /include/...

Samuel.

Le 22 octobre 2009 10:38, damien clochard <damien(at)dalibo(dot)info> a écrit :
> 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

Browse pgsql-fr-generale by date

  From Date Subject
Next Message Samuel ROZE 2009-10-22 14:23:38 Re: Gestion des adresses URL avec parse_url
Previous Message Cédric Villemain 2009-10-22 13:01:12 Re: Gestion des adresses URL avec parse_url