Skip to content

Commit

Permalink
Support for escaping aliases
Browse files Browse the repository at this point in the history
  • Loading branch information
bajb committed Feb 18, 2015
1 parent f765234 commit 2238635
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 3 deletions.
22 changes: 19 additions & 3 deletions src/Assembler/MySQL/MySQLAssembler.php
Expand Up @@ -5,6 +5,7 @@
use Packaged\QueryBuilder\Expression\FieldExpression;
use Packaged\QueryBuilder\Expression\MatchExpression;
use Packaged\QueryBuilder\Expression\TableExpression;
use Packaged\QueryBuilder\SelectExpression\FieldSelectExpression;
use Packaged\QueryBuilder\SelectExpression\MatchSelectExpression;

class MySQLAssembler extends QueryAssembler
Expand All @@ -15,6 +16,10 @@ public function assembleSegment($segment)
{
return $this->assembleField($segment);
}
else if($segment instanceof FieldSelectExpression)
{
return $this->assembleFieldSelect($segment);
}
else if($segment instanceof TableExpression)
{
return $this->assembleTableExpression($segment);
Expand All @@ -32,17 +37,28 @@ public function assembleField(FieldExpression $field)
if($field->hasTable())
{
return $this->assembleTableExpression($field->getTable())
. '.`' . $field->getField() . '`';
. '.' . $this->_escape($field->getField());
}
else
{
return '`' . $field->getField() . '`';
return $this->_escape($field->getField());
}
}

public function assembleFieldSelect(FieldSelectExpression $field)
{
return $this->assembleSegment($field->getField())
. ($field->hasAlias() ? ' AS ' . $this->_escape($field->getAlias()) : '');
}

protected function _escape($entity)
{
return '`' . $entity . '`';
}

public function assembleTableExpression(TableExpression $expr)
{
return '`' . $expr->getTableName() . '`';
return $this->_escape($expr->getTableName());
}

public function assembleMatchExpression(MatchExpression $expr)
Expand Down
11 changes: 11 additions & 0 deletions tests/Assembler/MySQL/MySQLAssemblerTest.php
Expand Up @@ -4,6 +4,7 @@
use Packaged\QueryBuilder\Assembler\MySQL\MySQLAssembler;
use Packaged\QueryBuilder\Expression\FieldExpression;
use Packaged\QueryBuilder\Expression\TableExpression;
use Packaged\QueryBuilder\SelectExpression\FieldSelectExpression;

class MySQLAssemblerTest extends \PHPUnit_Framework_TestCase
{
Expand Down Expand Up @@ -32,4 +33,14 @@ public function testFieldName()
)
);
}

public function testSelectField()
{
$this->assertEquals(
'`myfield` AS `unique`',
MySQLAssembler::stringify(
FieldSelectExpression::createWithAlias('myfield', 'unique')
)
);
}
}

0 comments on commit 2238635

Please sign in to comment.