From patchwork Tue Mar 20 04:49:57 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: morganamilo X-Patchwork-Id: 479 Return-Path: Delivered-To: patchwork@archlinux.org Received: from apollo.archlinux.org (localhost [127.0.0.1]) by apollo.archlinux.org (Postfix) with ESMTP id 17566291A027 for ; Tue, 20 Mar 2018 04:50:08 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on apollo.archlinux.org X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=DKIM_SIGNED=0.1, DKIM_VALID=-0.1,DKIM_VALID_AU=-0.1,FREEMAIL_FROM=0.5,RCVD_IN_DNSWL_MED=-2.3 autolearn=ham autolearn_force=no version=3.4.1 X-Spam-BL-Results: [127.0.9.2] [127.0.0.10] [127.0.0.11] Received: from orion.archlinux.org (orion.archlinux.org [IPv6:2a01:4f8:160:6087::1]) by apollo.archlinux.org (Postfix) with ESMTPS for ; Tue, 20 Mar 2018 04:50:08 +0000 (UTC) Received: from orion.archlinux.org (localhost [127.0.0.1]) by orion.archlinux.org (Postfix) with ESMTP id 269619838F532; Tue, 20 Mar 2018 04:50:03 +0000 (UTC) Received: from luna.archlinux.org (luna.archlinux.org [IPv6:2a01:4f8:160:3033::2]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by orion.archlinux.org (Postfix) with ESMTPS; Tue, 20 Mar 2018 04:50:03 +0000 (UTC) Received: from luna.archlinux.org (luna.archlinux.org [127.0.0.1]) by luna.archlinux.org (Postfix) with ESMTP id 0A1CD2C198; Tue, 20 Mar 2018 04:50:03 +0000 (UTC) Authentication-Results: luna.archlinux.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=NLBQN1nd Received: from luna.archlinux.org (luna.archlinux.org [127.0.0.1]) by luna.archlinux.org (Postfix) with ESMTP id 3A5182CE25 for ; Tue, 20 Mar 2018 04:50:01 +0000 (UTC) Received: from orion.archlinux.org (orion.archlinux.org [IPv6:2a01:4f8:160:6087::1]) by luna.archlinux.org (Postfix) with ESMTPS for ; Tue, 20 Mar 2018 04:50:01 +0000 (UTC) Received: from orion.archlinux.org (localhost [127.0.0.1]) by orion.archlinux.org (Postfix) with ESMTP id C63089838F530 for ; Tue, 20 Mar 2018 04:50:00 +0000 (UTC) Received: from mail-wr0-x236.google.com (mail-wr0-x236.google.com [IPv6:2a00:1450:400c:c0c::236]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by orion.archlinux.org (Postfix) with ESMTPS for ; Tue, 20 Mar 2018 04:50:00 +0000 (UTC) Received: by mail-wr0-x236.google.com with SMTP id u46so272527wrc.11 for ; Mon, 19 Mar 2018 21:50:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=XvzLslec4+H3/4I8e2W20j25A60Qgk4D5j6tzRWeBks=; b=NLBQN1ndL+ad16MrZaiIEFknw9sZQC360CLW6oQHgXFsScBx2fXzDsXByG0uyQsz3K WvGcUzhL6x/RX1RzTcs6smI4DpW1zJbV44DStaZSgiCL/4dsmQPNpDnjigQo2gfCPLG0 TECMD4ZWYxiTrsrV3GNwyrM5Kt0FvLjWyHRHCVpQCXsuXBmTvQsPyCH77dtaO/88SJNO JTj4aVF3r3VWl0x+7sg9R3Fq3DnqZJU9ZMql05rfIInr9reOQFmVp2euLFK2A8vvv8mn KHdi1FN+TK1e3OSez22Ibl5y83UH/IqowLUrZrH8drgdPC1wlGPnPbgn8OdBP5kXwKrI PlFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=XvzLslec4+H3/4I8e2W20j25A60Qgk4D5j6tzRWeBks=; b=PCxGevKzZc4WnxXWiZe6BL1rbSIcYgJ+jO01HZk/e+nLx0jSJLYvClTwBrOK7MbdSb /0fzjdSGPL4Lk7clsDrgpCOyD5sBashOIdWdp+aBzw4pcMupJuq5zntcoH+FDWVqoSqe 39/isxBD22vlDnlawLwp9KZ6o9uDa1Lh7LVyW6HcgVXvnMNZ6H/4B1MIDtjaFNKEgrRJ a74ctMihNjJV9C+s/G/atM4sp1GJcBJtdkq0TwaGbC+EtXW71Yi6GUOcletw6KFrGvvE KE4sdEkftvG7daQDbhlO3mQGspDJSvyTb2b3tW1HfUqOqA+JuSFaF4k5eJC4bZT5eqta S0qQ== X-Gm-Message-State: AElRT7G76Y+VjrBKjLI75QiB+tmdbMbEgLythW/Ua3JNF045fs9/Nw9k 4rbu8iP37k4zNfEZF4QlVozcIZ9i X-Google-Smtp-Source: AG47ELt6CLs2+dzSdi+XEO7pkzcMjfjDPUNOJTwU2ErgjcuaQ2x2g17MOGRdC/AJS/RULjtxo/VUmg== X-Received: by 10.223.157.135 with SMTP id p7mr11380612wre.253.1521521400155; Mon, 19 Mar 2018 21:50:00 -0700 (PDT) Received: from Vinyl.localdomain (88-109-53-250.dynamic.dsl.as9105.com. [88.109.53.250]) by smtp.gmail.com with ESMTPSA id 104sm684118wrl.26.2018.03.19.21.49.59 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 19 Mar 2018 21:49:59 -0700 (PDT) From: morganamilo To: aur-dev@archlinux.org Subject: [PATCH] feat(rpc): return "providers" packages when querying by `name` or `name-desc` Date: Tue, 20 Mar 2018 04:49:57 +0000 Message-Id: <20180320044957.26489-1-morganamilo@gmail.com> X-Mailer: git-send-email 2.16.2 X-BeenThere: aur-dev@archlinux.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: "Arch User Repository \(AUR\) Development" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: actionless Errors-To: aur-dev-bounces@archlinux.org Sender: "aur-dev" From: actionless --- doc/rpc.txt | 4 ++-- web/lib/aurjson.class.php | 16 +++++++++++++++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/doc/rpc.txt b/doc/rpc.txt index f353ff0..83cdae3 100644 --- a/doc/rpc.txt +++ b/doc/rpc.txt @@ -8,8 +8,8 @@ Package searches can be performed by issuing HTTP GET requests of the form +/rpc/?v=5&type=search&by=_field_&arg=_keywords_+ where _keywords_ is the search argument and _field_ is one of the following values: -* `name` (search by package name only) -* `name-desc` (search by package name and description) +* `name` (search by package name or packages which provide that name) +* `name-desc` (the same as `name` and search by description) * `maintainer` (search by package maintainer) The _by_ parameter can be skipped and defaults to `name-desc`. diff --git a/web/lib/aurjson.class.php b/web/lib/aurjson.class.php index 9eeaafd..6e580a9 100644 --- a/web/lib/aurjson.class.php +++ b/web/lib/aurjson.class.php @@ -392,12 +392,26 @@ class AurJSON { if (strlen($keyword_string) < 2) { return $this->json_error('Query arg too small.'); } + + //packages which provide the package we are looking for: + $providers = pkg_providers(addcslashes($keyword_string, '%_')); + $provided_names = array(); + foreach ($providers as $provider) { + if ($provider[0] != 0) { // if package is not from repo + $name = $this->dbh->quote($provider[1]); + array_push($provided_names, $name); + } + } + $provided_query = "(" . join(", ", $provided_names) . ")"; + $keyword_string = $this->dbh->quote("%" . addcslashes($keyword_string, '%_') . "%"); if ($search_by === 'name') { - $where_condition = "(Packages.Name LIKE $keyword_string)"; + $where_condition = "(Packages.Name LIKE $keyword_string OR "; + $where_condition .= "Packages.Name IN $provided_query )"; } else if ($search_by === 'name-desc') { $where_condition = "(Packages.Name LIKE $keyword_string OR "; + $where_condition .= "Packages.Name IN $provided_query OR "; $where_condition .= "Description LIKE $keyword_string)"; } } else if ($search_by === 'maintainer') {