如何使Hyper ledger Composer查询不区分大小写?

时间:2018-06-06 09:50:18

标签: hyperledger-fabric hyperledger hyperledger-composer

我在hyperledger composer queries.qry文件中有一个查询。

query checkOwnerUniqueness{
  description: "Select owner with given identifier"
  statement:
    SELECT org.acme.participant.Owner
       WHERE (idNum ==  _$idNum)
}

现在我的查询有效,如果id号是abc123并且用户搜索abc123但是如果用户将值传递为ABC123则失败。但是,我想查询与所有者回复是否以小写或大写形式输入字符。

我已经尝试过一般的SQL API,即LOWER()和UPPER(),但似乎它们并不适用于Hyperleger作曲家查询语言。因此,有些人可以帮助我了解如何在Hyperledger Composer查询文件中执行此操作。

1 个答案:

答案 0 :(得分:0)

我首先建议使用相同的大小写首先插入ID(即以编程方式)。 Composer只是将查询传递给CouchDB的查询语言FYI,并尊重输入数据的区分大小写。

您是否知道可以使用regex来验证ID字段(请参阅建模语言文档here? - 对我来说似乎是一个非常重要的领域(而不是姓氏字段)。< / p>

您可以在函数中使用其他buildQuery函数(例如,仍有一个参数) - 或者如果您坚持将QUERY保持在queries.qry中,则提供两个(下部和上部):

query checkOwnerUniqueness{
  description: "Select owner with given identifier"
  statement:
    SELECT org.acme.participant.Owner
       WHERE (idNum ==  _$upper ID idNum == _$lower )
}


var str = "joe123";
var lower = str.toLowerCase();
var upper = str.toUpperCase();
return query('checkOwnerUniqueness', {idNum: str} ) // ID passed in lower case
// OR
// return query('checkOwnerUniqueness', {idNum: lower, idNum: upper})  // upper or lower two parms
    .then(function (results) {
            for (var n = 0; n < results.length; n++) { // blah
            // process all objects returned in the query
            }
    });

无论如何都给你替代方案 - 我想我会确保ID字段总是在同一个案例中输入,只是说。