Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# Template Sqlite et createFunction

Envoyé par : teddyber

Date : 17/02/2009 11:53

Bonjour à tous,

je suis face à un problème : je cherche filtrer les lignes d'un tree en fonction du texte présent dans une textbox. A priori un template dont ont fait varier le query fonctionne bien (SELECT * FROM matable WHERE macolonne LIKE '%textbox.value%')

OK.

Sauf que je voudrais maintenant que la recherche ne prenne pas en compte les caractères accentués : je met "a la" dans le textbox et mon SELECT renvoie "Poulet à la moutarde" par exemple.

Plusieurs pistes:

  • stocker dans la base une colonne non accentué => grossissement de la base, la table qui m'intéresse contient pour l'instant 25000 lignes
  • utiliser la fonction SQL REPLACE pour remplacer les caractères accentués dans macolonne dans la colonne au moment de la requête => testé, fonctionnel mais vraiment gourmand et coté utilisateur on a l'impression que ça rame grave
  • tous les caractères accentuables sont remplacés par des _ dans textbox.value (joker SQL pour un caractère) => un poil trop large (avec "a la" dans la textbox, ça renvoie "Agneau de lait" ?!)
  • j'utilise l'opérateur SQL REGEXP. Ça a l'air cool, je remplace les caractères accentuables par leurs valeurs possibles ('a' devient [aâà] par exemple). Ça fonctionne bien dans l'extension SQLite Manager, en terme de perfs, j'aimerais bien tester. sauf que...

Le problème c'est que REGEXP n'est pas natif dans Sqlite, il faut lui fournir une user function qui implémente l'opérateur. Ça se fait avec la méthode createFunction une fois qu'on a ouvert la connexion à la base. C'est ce que fait Sqlite Manager. Le problème c'est que lorsqu'on utilise les template SQLite, on ne maitrise pas la connexion à la base SQL, donc on ne peut ajouter cette user function donc on est coincé.

à moins que on puisse en fait ajouter une userFunction mais je sais pas comment et si quelqu'un sait, ça m'interesse ;)

sinon, c'est un genre de Feature request que je lance à la mer en espérant que LJ passe dans le coin... et puis j'irai sur bugzilla mettre à jour ce bug

# Re: Template Sqlite et createFunction

Envoyé par : laurentj

Date : 22/02/2009 14:49

la table qui m'intéresse contient pour l'instant 25000 lignes

nombre ridicule. Avoir un autre champs, ça peut être une solution.

utiliser la fonction SQL REPLACE pour remplacer les caractères accentués dans macolonne dans la colonne au moment de la requête

effectivement trop gourmand. très bof.

tous les caractères accentuables sont remplacés par des _ dans textbox.value

bon moyen d'avoir des resultats qui ne correspondent pas.

Le problème c'est que lorsqu'on utilise les template SQLite, on ne maitrise pas la connexion à la base SQL,

La connection est récupérable : c'est la propriété datasource du builder, sur laquelle tu fait un queryinterface mozIStorageConnection

 var cnx = tontree.builder.datasource
        .QueryInterface(Components.interfaces.mozIStorageConnection);

# Re: Template Sqlite et createFunction

Envoyé par : teddyber

Date : 25/02/2009 09:48

yes! ça marche. merci pour l'info.

bon par contre en termes de performances, c'est pas l'idéal, je fait de repasser par du Javascript à chaque requête est assez gourmand...

merci encore!

Il n'est plus possible de poster des messages dans ce forum.


Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.

Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™ sont des marques de la fondation Mozilla.