Après presque un mois d'attente, j'ai pu enfin avoir une superreview sur mon patch. Hélas, il n'est pas passé :-) En effet, il est possible de modifier la requête en y injectant des valeurs non vérifiée, ce qui peut entrainer des problèmes de sécurité. Il m'a donc été demandé d'améliorer ça, en permettant de pouvoir déclarer des requêtes paramétrées. Cela n'empêche pas le développeur de trafiquer la requête à la main, mais au moins il a un moyen pour faire des modifications de façon simple et sûre, évitant les problèmes d'injection SQL.

J'ai fait la modif, et voici donc maintenant ce qu'on peut faire :

   <grid>
       <columns>  <column flex="1"/> <column flex="3"/>  <column flex="2"/> <column flex="1"/>  </columns>
       <rows datasources="tests.sqlite" querytype="storage" id="rows" ref="?">
       <template>
           <query>
               select product_id, label, price, cat_id from products where price > :price
               <param id="price-param" name=":price" type="int32"/>
           </query>
           <action>
               <row uri="?">  <label value="?product_id"/>  <label value="?label"/>  <label value="?price"/>   <label value="?cat_id"/>   </row>
           </action>
       </template>
       </rows>
   </grid>

La nouveauté c'est la balise param, dont le contenu doit être la valeur du paramêtre. Ici il s'agit d'un paramètre nommé, c'est pourquoi il a un attribut name. On peut indiquer le type de la donnée avec l'attribut type. Et bien sûr, on peut avoir autant de paramètres que l'on veut.

Et ensuite, avec un petit bout de script, on indique la valeur du paramètre et on régénère le contenu du template :

   document.getElementById("price-param").textContent = "270";
   document.getElementById("rows").builder.rebuild();

Il s'affichera tous les produits dont le prix est supérieur à 270. Si on ne veut pas que le contenu du template s'affiche dès le départ, il suffit de ne pas mettre l'attribut ref tout de suite, mais seulement après que l'on ait fini de mettre les valeurs dans les paramètres.

Je n'ai pas encore mis à jour le patch sur le bug, j'ai encore 2-3 choses à vérifier, mais ça se fera au plus tard demain. En espérant que la superreview soit enfin positive :-)