Newer
Older
<?php
namespace calderawp\CalderaFormsQuery;
use NilPortugues\Sql\QueryBuilder\Manipulation\AbstractBaseQuery;
/**
* Class QueryBuilder
*
*
* Used to create SQL queries, NOT run SQL queries
*/
abstract class QueryBuilder implements CreatesSqlQueries
{
const ASC = 'ASC';
const DESC = 'DESC';
/**
* @var MySqlBuilder
*/
private $builder;
/**
* @var bool
*/
protected $isLike = false;
/**
* @var string
*/
private $tableName;
/**
* SelectQueryBuilder constructor.
* @param MySqlBuilder $builder Query builder
* @param string $tableName Name of table
*/
public function __construct(MySqlBuilder $builder, $tableName)
{
$this->builder = $builder;
$this->tableName = $tableName;
}
/** @inheritdoc */
public function resetBuilder(MySqlBuilder $builder = null)
{
$builder = new MySqlBuilder();
}
$this->builder = $builder;
return $this;
}
/**
* @return AbstractBaseQuery
*/
abstract protected function getCurrentQuery();
/** @inheritdoc */
public function getTableName()
{
return $this->tableName;
}
/** @inheritdoc */
public function getBuilder()
{
return $this->builder;
}
/**
* Add a where $column equals $value clause to query
*
* @param AbstractBaseQuery $queryBuilder
* @param string $column
* @param string $value
* @return $this
*/
protected function addWhereEquals(AbstractBaseQuery $queryBuilder, $column, $value)
{
$queryBuilder
->where()
->equals($column, $value);
return $this;
}
/**
* Replace all substitutions with actual values
*
* @param string $sql SQL query with substitutions
* @return string
*/
protected function substituteValues($sql)
{
$values = $this->getBuilder()->getValues();
foreach ($values as $identifier => $value) {
if (is_array($value) || is_object($value)) {
continue;
}elseif (is_numeric( $value)){
$value[$identifier] = (int) $value;
} else {
$values[$identifier] = $this->surroundValue($value);
}
}
return str_replace(array_keys($values), array_values($values), $sql);
}
/**
* @return string
*/
protected function getFirstDeliminator()
{
return $this->isLike ? "'%" : "'";
}
/**
* @return string
*/
protected function getSecondDeliminator()
{
/**
* Surround one value with quotes or %
*
* @param string $value Value to surround
* @return string
*/
protected function surroundValue($value)
{
$value = "{$this->getFirstDeliminator()}$value{$this->getSecondDeliminator()}";
}
/**
* Generate query for where column is value
*
* @param string $column
* @param string $value
* @return $this
*/
return $this->addWhereEquals($this->getCurrentQuery(), $column, $value);
}
/** @inheritdoc */
public function getPreparedSql()
{
return $this->substituteValues($this->getBuilder()->write($this->getCurrentQuery()));
}
* @param array $entryIds Entries to search in
* @param string $column Column name. Default is 'id'.