From 0a61b16cafff07d20d5239a529ee2a2b6400ecb6 Mon Sep 17 00:00:00 2001 From: Loz Calver Date: Fri, 3 Oct 2014 21:32:57 +0100 Subject: [PATCH] NEW: Allow 'null' limit in database queries --- _config/connectors.yml | 4 ++-- code/PostgreSQLQueryBuilder.php | 42 +++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 code/PostgreSQLQueryBuilder.php diff --git a/_config/connectors.yml b/_config/connectors.yml index c723761..7792b20 100644 --- a/_config/connectors.yml +++ b/_config/connectors.yml @@ -7,10 +7,10 @@ Injector: properties: connector: %$PDOConnector schemaManager: %$PostgreSQLSchemaManager - queryBuilder: %$DBQueryBuilder + queryBuilder: %$PostgreSQLQueryBuilder PostgreSQLDatabase: class: 'PostgreSQLDatabase' properties: connector: %$PostgreSQLConnector schemaManager: %$PostgreSQLSchemaManager - queryBuilder: %$DBQueryBuilder \ No newline at end of file + queryBuilder: %$PostgreSQLQueryBuilder \ No newline at end of file diff --git a/code/PostgreSQLQueryBuilder.php b/code/PostgreSQLQueryBuilder.php new file mode 100644 index 0000000..1ea071b --- /dev/null +++ b/code/PostgreSQLQueryBuilder.php @@ -0,0 +1,42 @@ +getSeparator(); + + // Ensure limit is given + $limit = $query->getLimit(); + if(empty($limit)) return ''; + + // For literal values return this as the limit SQL + if( ! is_array($limit)) { + return "{$nl}LIMIT $limit"; + } + + // Assert that the array version provides the 'limit' key + if( ! array_key_exists('limit', $limit) || ($limit['limit'] !== null && ! is_numeric($limit['limit']))) { + throw new InvalidArgumentException( + 'DBQueryBuilder::buildLimitSQL(): Wrong format for $limit: '. var_export($limit, true) + ); + } + + if($limit['limit'] === null) { + $limit['limit'] = 'ALL'; + } + + $clause = "{$nl}LIMIT {$limit['limit']}"; + if(isset($limit['start']) && is_numeric($limit['start']) && $limit['start'] !== 0) { + $clause .= " OFFSET {$limit['start']}"; + } + return $clause; + } + +}