class FrxSQLQueryBuilder in Forena Reports 6
Same name and namespace in other branches
- 6.2 FrxSQLQueryBuilder.inc \FrxSQLQueryBuilder
- 7.5 FrxSQLQueryBuilder.inc \FrxSQLQueryBuilder
- 7.2 FrxSQLQueryBuilder.inc \FrxSQLQueryBuilder
- 7.3 FrxSQLQueryBuilder.inc \FrxSQLQueryBuilder
- 7.4 FrxSQLQueryBuilder.inc \FrxSQLQueryBuilder
FrxSQLQuery SQL Builder This class defines a common query builder that is used to make SQL safe queries based on named column filteres. @author metzlerd
Hierarchy
- class \FrxSQLQueryBuilder
Expanded class hierarchy of FrxSQLQueryBuilder
File
- ./
FrxSQLQueryBuilder.inc, line 8
View source
class FrxSQLQueryBuilder {
private $clauses = array();
private $descriptions = array();
private $applied_filters = array();
private $where_clause = '';
private $comparison_operators = array(
'<' => 'is less than',
'>' => 'is greater than',
'=' => 'is equal to',
'<>' => 'is not equal to',
'LIKE' => 'is like',
);
private $data;
/**
* Add a filter object
* Enter description here ...
* @param unknown_type $field
* @param unknown_type $comparison
* @param unknown_type $sql
* @param unknown_type $title
*/
public function defineFilter($field, $comparison, $sql, $title = '') {
// Intialise the field if not set
if (!isset($this->clauses[$field])) {
$this->clauses[$field] = array();
}
// Add the where clause from the lookup
$this->clauses[$field][$comparison] = $sql;
// Add the title
$title = $title ? $title : $field . ' is ' . $comparison;
$this->descriptions[$field][$comparison] = $title;
return $this;
}
/**
* Set up common column filters
* This will set up all of the common filters on data ...
* @param unknown_type $columns
* @param unknown_type $comparisons
*/
public function defineColumnFilters($columns, $comparisons = array()) {
$columns = (array) $columns;
if ($columns) {
foreach ($columns as $column) {
if (!$comparisons) {
$comparisons = array_keys($this->comparison_operators);
}
if ($comparisons) {
foreach ($comparisons as $comparison) {
if (array_key_exists($comparison, $this->comparison_operators)) {
$clause = $column . ' ' . $comparison . ' :' . $column;
$this
->defineFilter($column, $comparison, $clause, $this->comparison_operators[$comparison]);
}
}
}
}
}
return $this;
}
/**
* Helper functon to build common numeric filters.
* Enter description here ...
* @param unknown_type $columns
*/
public function defineNumericFilters($columns) {
$this
->defineColumnFilters($columns, array(
'<',
'>',
'=',
'<>',
));
return $this;
}
/**
* Starts the query builder
* Enter description here ...
*/
public function query($block, $values = array()) {
$this->applied_filters = array();
$this->block = $block;
$this->data = $values;
return $this;
}
/**
* Executes the query that was started with query method
* Enter description here ...
*/
public function execute() {
$where = '';
if ($this->where_clause) {
$where = 'WHERE 1=1' . $this->where_clause;
}
return forena_invoke_data_provider($this->block, $this->data, $where);
}
/**
* Filters the query that is being executeed
* Enter description here ...
* @param string $field
* @param string $comparison
*/
public function filter($field, $comparison) {
if (@$this->clauses[$field][$comparison]) {
$this->where_clause .= ' AND ' . $this->clauses[$field][$comparison];
}
return $this;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
FrxSQLQueryBuilder:: |
private | property | ||
FrxSQLQueryBuilder:: |
private | property | ||
FrxSQLQueryBuilder:: |
private | property | ||
FrxSQLQueryBuilder:: |
private | property | ||
FrxSQLQueryBuilder:: |
private | property | ||
FrxSQLQueryBuilder:: |
private | property | ||
FrxSQLQueryBuilder:: |
public | function | Set up common column filters This will set up all of the common filters on data ... | |
FrxSQLQueryBuilder:: |
public | function | * Add a filter object * Enter description here ... * | |
FrxSQLQueryBuilder:: |
public | function | * Helper functon to build common numeric filters. * Enter description here ... * | |
FrxSQLQueryBuilder:: |
public | function | * Executes the query that was started with query method * Enter description here ... | |
FrxSQLQueryBuilder:: |
public | function | * Filters the query that is being executeed * Enter description here ... * | |
FrxSQLQueryBuilder:: |
public | function | * Starts the query builder * Enter description here ... |