[aur-dev] [PATCH 2/3] JSON-RPC: slightly refactor to reduce duplication.
Christopher Brannon
chris at the-brannons.com
Fri Nov 5 18:28:29 CET 2010
The SELECT statements in aurjson.class.php share much in common.
This patch moves the common bit to a constant.
---
web/lib/aurjson.class.php | 35 +++++++++++++++++++----------------
1 files changed, 19 insertions(+), 16 deletions(-)
diff --git a/web/lib/aurjson.class.php b/web/lib/aurjson.class.php
index 369f6ae..c5bb728 100644
--- a/web/lib/aurjson.class.php
+++ b/web/lib/aurjson.class.php
@@ -10,6 +10,21 @@ if (!extension_loaded('json')) {
include_once("aur.inc");
+/* Comma-delimited string of fields used in our queries: */
+define('JSONRPC_FIELDS', implode(',', array('Packages.ID','Name','Version',
+ 'CategoryID', 'Description', 'LocationID', 'URL','URLPath','License',
+ 'NumVotes', 'OutOfDate', 'Users.Username as Maintainer')));
+
+// Base SELECT statement used in several queries.
+// Note: LEFT JOIN gives us both maintained and orphaned packages.
+define('JSONRPC_BASE_QUERY', 'SELECT ' . JSONRPC_FIELDS .
+ ' FROM Packages LEFT JOIN Users ON Packages.MaintainerUID = Users.ID ');
+
+// Base query for msearch. This uses a natural join, since we aren't
+// interested in orphans.
+define('JSONRPC_MSEARCH_QUERY', str_replace('LEFT JOIN', 'NATURAL JOIN',
+ JSONRPC_BASE_QUERY));
+
/**
* This class defines a remote interface for fetching data
* from the AUR using JSON formatted elements.
@@ -19,9 +34,6 @@ include_once("aur.inc");
class AurJSON {
private $dbh = false;
private $exposed_methods = array('search','info','msearch');
- private $fields = array('Packages.ID','Name','Version','CategoryID',
- 'Description', 'LocationID', 'URL','URLPath','License','NumVotes',
- 'OutOfDate');
/**
* Handles post data, and routes the request.
@@ -95,10 +107,7 @@ class AurJSON {
$keyword_string = mysql_real_escape_string($keyword_string, $this->dbh);
- $query = "SELECT " . implode(',', $this->fields) .
- ", Users.Username AS Maintainer" .
- " FROM Packages LEFT JOIN Users ON MaintainerUID = Users.ID" .
- " WHERE DummyPkg=0 AND " .
+ $query = JSONRPC_BASE_QUERY . " WHERE DummyPkg=0 AND " .
" ( Name LIKE '%{$keyword_string}%' OR " .
" Description LIKE '%{$keyword_string}%' )";
$result = db_query($query, $this->dbh);
@@ -123,10 +132,7 @@ class AurJSON {
* @return mixed Returns an array of value data containing the package data
**/
private function info($pqdata) {
- $base_query = "SELECT " . implode(',', $this->fields) .
- ", Users.Username AS Maintainer" .
- " FROM Packages LEFT JOIN Users on Packages.MaintainerUID = Users.ID" .
- " WHERE DummyPkg=0 AND ";
+ $base_query = JSONRPC_BASE_QUERY . " WHERE DummyPkg=0 AND ";
if ( is_numeric($pqdata) ) {
// just using sprintf to coerce the pqd to an int
@@ -170,12 +176,9 @@ class AurJSON {
**/
private function msearch($maintainer) {
$maintainer = mysql_real_escape_string($maintainer, $this->dbh);
- $fields = implode(',', $this->fields);
- $query = "SELECT Users.Username as Maintainer, {$fields} " .
- " FROM Packages, Users " .
- " WHERE Packages.MaintainerUID = Users.ID AND " .
- " Users.Username = '{$maintainer}'";
+ $query = JSONRPC_MSEARCH_QUERY .
+ " WHERE Users.Username = '{$maintainer}'";
$result = db_query($query, $this->dbh);
if ( $result && (mysql_num_rows($result) > 0) ) {
--
1.7.3.2
More information about the aur-dev
mailing list