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 ... | 
