From 89ba2620b76df5ef4e249c2c522eb8573307d115 Mon Sep 17 00:00:00 2001 From: Tristan Cavelier <tristan.cavelier@tiolive.com> Date: Thu, 25 Jul 2013 15:21:07 +0200 Subject: [PATCH] erp5storage converts now js complex queries to erp5 queries --- src/jio.storage/erp5storage.js | 44 ++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/src/jio.storage/erp5storage.js b/src/jio.storage/erp5storage.js index 6768f55..8a55a70 100644 --- a/src/jio.storage/erp5storage.js +++ b/src/jio.storage/erp5storage.js @@ -249,6 +249,47 @@ jIO.addStorageType("erp5", function (spec, my) { return jql; }; + /** + * Use option object and converts a query to a compatible ERP5 Query. + * + * @param {Object} option The command options + */ + priv.convertToErp5Query = function (option) { + option.query = complex_queries.QueryFactory.create(option.query || ""); + if (option.wildcard_character === undefined || + (option.wildcard_character !== null && + typeof option.wildcard_character !== 'string')) { + option.wildcard_character = '%'; + } else { + option.wildcard_character = option.wildcard_character || ''; + } + option.query.onParseSimpleQuery = function (object) { + if (option.wildcard_character.length === 1 && + object.parsed.operator === '=') { + object.parsed.operator = 'like'; + if (option.wildcard_character === '%') { + object.parsed.value = + object.parsed.value.replace(/_/g, '\\_'); + } else if (option.wildcard_character === '_') { + object.parsed.value = + object.parsed.value.replace(/%/g, '\\%').replace(/_/g, '%'); + } else { + object.parsed.value = + object.parsed.value.replace( + /([%_])/g, + '\\$1' + ).replace( + new RegExp(complex_queries.stringEscapeRegexpCharacters( + option.wildcard_character + ), 'g'), + '%' + ); + } + } + }; + option.query = option.query.parse(); + }; + // ERP5 REQUESTS // /** * Sends a request to ERP5 @@ -305,8 +346,7 @@ jIO.addStorageType("erp5", function (spec, my) { if (complex_queries !== undefined && method === 'allDocs' && option.query) { - option.query = - complex_queries.QueryFactory.create(option.query || "").serialized(); + priv.convertToErp5Query(option); } erp5.genericRequest( command.cloneDoc(), -- 2.30.9