Re: Gestion des adresses URL avec parse_url

From: Samuel ROZE <samuel(dot)roze(at)gmail(dot)com>
To: Dimitri Fontaine <dfontaine(at)hi-media(dot)com>
Cc: pgsql-fr-generale(at)postgresql(dot)org
Subject: Re: Gestion des adresses URL avec parse_url
Date: 2009-10-24 11:37:29
Message-ID: 1256384249.3379.20.camel@samuel-laptop
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-fr-generale

Ça avance, ça avance ! :-)

postgres=# SELECT * FROM parse_url('http://www.postgresql.org');
NOTICE: url_in: str=http://www.postgresql.org
NOTICE: url_in: result=(C� host=www.postgresql.org path=(null)
NOTICE: url_size: url=(C� host=www.postgresql.org

scheme | user | pass | host | port | path | query |
fragment
--------+------+------+--------------------+------+------+-------+----------
http | | | www.postgresql.org | | | |
(1 row)

postgres=# DROP TABLE t1;
DROP TABLE
postgres=# CREATE TABLE t1 (my_url url);
CREATE TABLE
postgres=# INSERT INTO t1 VALUES ('http://www.postgresql.org'::url);
NOTICE: url_in: str=http://www.postgresql.org
NOTICE: url_in: result_� host=www.postgresql.org path=(null)
NOTICE: url_size: url_� host=www.postgresql.org
INSERT 0 1

Là, ça se gatte:

-----------------------------------------------------------------------------
postgres=# SELECT * FROM t1;
NOTICE: url_size: url_�
host=�
NOTICE: url_out: size=5078 url_�
host=� path=(null)
WARNING: detected write past chunk end in ExecutorState 0x2c05950







































-----------------------------------------------------------------------------
Avec les sauts à la ligne qui vont avec...

Comment peut-on expliquer ces résultats ?

Ci-joint mon fichier source.

Cordialement,
Samuel.

Le samedi 24 octobre 2009 à 12:19 +0200, Samuel ROZE a écrit :
> Bonjour,
>
> Le vendredi 23 octobre 2009 à 10:33 +0200, Dimitri Fontaine a écrit :
> > Samuel ROZE <samuel(dot)roze(at)gmail(dot)com> writes:
> > > Un problème de mémoire... Ce que je ne comprend pas c'est pourquoi ça
> > > marche dans les autres cas et pas là.. Bizarre ! J'ai chercher
> > > différentes variables qui auraient pu être non-initialisées mais je ne
> > > voit pas...
> >
> > Le type URL est un type de données à taille variable et doit donc suivre
> > les conventions des « varlena », en particulier pas de pointeur externe
> > dans la structure principale. Je t'encourage à regarder le module prefix
> > et le type de données prefix_range pour un exemple simple :)
>
> Je me suis renseigner (via Google ;-) ) sur le type "varlena".
>
> struct varlena
> {
> char vl_len_[4]; /* Do not touch this field directly! */
> char vl_dat[1];
> };
>
> Il permet donc de stocker des données "char" dans "vl_dat", en utilisant
> mempcy(VARDATA(..), source, ...) après avoir faire un SET_VARSIZE.
>
> J'ai de même regarder le code source de "prefix" et j'ai vu que le
> "prefix_range_in" retourne un varlena en réalité, grace à la fonction
> "make_varlena"... De plus, le type prefix_range est défini comme ceci:
>
> typedef struct {
> char first;
> char last;
> char prefix[1]; /* this is a varlena structure, data follows */
> } prefix_range;
>
> Le "char prefix[1]" resemble à "char vl_data[1]", ça n'est peut-être pas
> utile en fait ?
>
> Sinon, il se trouve qu'en fait il y a ici uniquement une seule valeur
> "char *" à remplir: "prefix". Seulement, moi j'en ai 7 ! :/
> En effet, dans la fonction "build_pr", il y a:
>
> int s = strlen(prefix) + 1;
> prefix_range *pr = palloc(sizeof(prefix_range) + s);
> memcpy(pr->prefix, prefix, s);
> pr->first = first;
> pr->last = last;
>
> Comment je fait moi avec plein de champs ? Dans "s", je rajoute le
> strlen de toutes les données ? Ouais mais là il faut toutes les passer
> dans un argument ? Waou.. Plutôt faire deux types alors ? Un type
> "urltype_internal" et "urltype_varlena" ?
>
> Merci beaucoup.
> Samuel.
>
>

Attachment Content-Type Size
url.c text/x-csrc 9.9 KB

In response to

Browse pgsql-fr-generale by date

  From Date Subject
Next Message Dimitri Fontaine 2009-10-26 09:58:43 Re: Gestion des adresses URL avec parse_url
Previous Message Samuel ROZE 2009-10-24 10:19:42 Re: Gestion des adresses URL avec parse_url