.) to
be used safely in queries without the risk of using reserved words.
public quoteIdentifier ( string $identifier ) : string | ||
$identifier | string | The identifier to quote. |
return | string |
/** * Tests identifier quoting * * @return void */ public function testQuoteIdentifier() { $driver = $this->getMock('Cake\\Database\\Driver\\Sqlite', ['enabled']); $driver->expects($this->once())->method('enabled')->will($this->returnValue(true)); $connection = new Connection(['driver' => $driver]); $result = $connection->quoteIdentifier('name'); $expected = '"name"'; $this->assertEquals($expected, $result); $result = $connection->quoteIdentifier('Model.*'); $expected = '"Model".*'; $this->assertEquals($expected, $result); $result = $connection->quoteIdentifier('MTD()'); $expected = 'MTD()'; $this->assertEquals($expected, $result); $result = $connection->quoteIdentifier('(sm)'); $expected = '(sm)'; $this->assertEquals($expected, $result); $result = $connection->quoteIdentifier('name AS x'); $expected = '"name" AS "x"'; $this->assertEquals($expected, $result); $result = $connection->quoteIdentifier('Model.name AS x'); $expected = '"Model"."name" AS "x"'; $this->assertEquals($expected, $result); $result = $connection->quoteIdentifier('Function(Something.foo)'); $expected = 'Function("Something"."foo")'; $this->assertEquals($expected, $result); $result = $connection->quoteIdentifier('Function(SubFunction(Something.foo))'); $expected = 'Function(SubFunction("Something"."foo"))'; $this->assertEquals($expected, $result); $result = $connection->quoteIdentifier('Function(Something.foo) AS x'); $expected = 'Function("Something"."foo") AS "x"'; $this->assertEquals($expected, $result); $result = $connection->quoteIdentifier('name-with-minus'); $expected = '"name-with-minus"'; $this->assertEquals($expected, $result); $result = $connection->quoteIdentifier('my-name'); $expected = '"my-name"'; $this->assertEquals($expected, $result); $result = $connection->quoteIdentifier('Foo-Model.*'); $expected = '"Foo-Model".*'; $this->assertEquals($expected, $result); $result = $connection->quoteIdentifier('Team.P%'); $expected = '"Team"."P%"'; $this->assertEquals($expected, $result); $result = $connection->quoteIdentifier('Team.G/G'); $expected = '"Team"."G/G"'; $result = $connection->quoteIdentifier('Model.name as y'); $expected = '"Model"."name" AS "y"'; $this->assertEquals($expected, $result); }
/** * Returns list of ALTER TABLE statements to add foreign key constraints. * * @param Connection $connection The connection to generate SQL for. * @return array List of SQL statements to create the foreign keys. */ public function foreignKeysSql(Connection $connection) { $constraints = []; foreach ($this->_foreignKeysSql as $statement) { // TODO: Move this to the driver. SQLite is not supported. $constraints[] = sprintf('ALTER TABLE %s ADD %s', $connection->quoteIdentifier($this->name()), $statement); } return $constraints; }