mirror of
https://github.com/Karaka-Management/phpOMS.git
synced 2026-01-11 09:48:40 +00:00
fixes #217
This commit is contained in:
parent
adc31a21b2
commit
3dd0c0516d
|
|
@ -17,6 +17,7 @@ namespace phpOMS\DataStorage\Database\Query\Grammar;
|
|||
use phpOMS\DataStorage\Database\GrammarAbstract;
|
||||
use phpOMS\DataStorage\Database\Query\Builder;
|
||||
use phpOMS\DataStorage\Database\Query\Column;
|
||||
use phpOMS\DataStorage\Database\Query\Parameter;
|
||||
use phpOMS\DataStorage\Database\Query\QueryType;
|
||||
use phpOMS\DataStorage\Database\Query\Where;
|
||||
|
||||
|
|
@ -325,10 +326,6 @@ class Grammar extends GrammarAbstract
|
|||
protected function compileValue(Builder $query, $value, string $prefix = '') : string
|
||||
{
|
||||
if (\is_string($value)) {
|
||||
if (\strpos($value, ':') === 0) {
|
||||
return $value;
|
||||
}
|
||||
|
||||
return $query->quote($value);
|
||||
} elseif (\is_int($value)) {
|
||||
return (string) $value;
|
||||
|
|
@ -358,6 +355,8 @@ class Grammar extends GrammarAbstract
|
|||
return $encoded ? $encoded : 'NULL';
|
||||
} elseif ($value instanceof \Serializable) {
|
||||
return $value->serialize();
|
||||
} elseif ($value instanceof Parameter) {
|
||||
return $value->_toString();
|
||||
} else {
|
||||
throw new \InvalidArgumentException(\gettype($value));
|
||||
}
|
||||
|
|
|
|||
58
DataStorage/Database/Query/Parameter.php
Normal file
58
DataStorage/Database/Query/Parameter.php
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
<?php
|
||||
/**
|
||||
* Orange Management
|
||||
*
|
||||
* PHP Version 7.4
|
||||
*
|
||||
* @package phpOMS\DataStorage\Database\Query
|
||||
* @copyright Dennis Eichhorn
|
||||
* @license OMS License 1.0
|
||||
* @version 1.0.0
|
||||
* @link https://orange-management.org
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace phpOMS\DataStorage\Database\Query;
|
||||
|
||||
/**
|
||||
* Database query builder.
|
||||
*
|
||||
* @package phpOMS\DataStorage\Database\Query
|
||||
* @license OMS License 1.0
|
||||
* @link https://orange-management.org
|
||||
* @since 1.0.0
|
||||
*/
|
||||
class Parameter
|
||||
{
|
||||
/**
|
||||
* Parameter name
|
||||
*
|
||||
* @var string
|
||||
* @since 1.0.0
|
||||
*/
|
||||
private string $name = '';
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param string $name Name of the parameter
|
||||
*
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public function __construct(string $name)
|
||||
{
|
||||
$this->name = $name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Render the parameter as string
|
||||
*
|
||||
* @return string
|
||||
*
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public function __toString()
|
||||
{
|
||||
return ':' . $this->name;
|
||||
}
|
||||
}
|
||||
|
|
@ -16,6 +16,7 @@ namespace phpOMS\tests\DataStorage\Database\Query;
|
|||
|
||||
use phpOMS\DataStorage\Database\Connection\MysqlConnection;
|
||||
use phpOMS\DataStorage\Database\Query\Builder;
|
||||
use phpOMS\DataStorage\Database\Query\Parameter;
|
||||
|
||||
/**
|
||||
* @testdox phpOMS\tests\DataStorage\Database\Query\BuilderTest: Query builder for sql queries
|
||||
|
|
@ -82,7 +83,7 @@ class BuilderTest extends \PHPUnit\Framework\TestCase
|
|||
self::assertEquals($sql,
|
||||
$query->select('a.test', 'b.test')
|
||||
->from('a', 'b')
|
||||
->where('a.test', '=', ':abcValue')
|
||||
->where('a.test', '=', new Parameter('abcValue'))
|
||||
->orderBy(['a.test', 'b.test', ], ['ASC', 'DESC', ])
|
||||
->toSql()
|
||||
);
|
||||
|
|
@ -159,7 +160,7 @@ class BuilderTest extends \PHPUnit\Framework\TestCase
|
|||
|
||||
$query = new Builder($this->con);
|
||||
$sql = 'SELECT `a`.`test` FROM `a` WHERE `a`.`test` = :test GROUP BY `a`, `b`;';
|
||||
self::assertEquals($sql, $query->select('a.test')->from('a')->where('a.test', '=', ':test')->groupBy('a', 'b')->toSql());
|
||||
self::assertEquals($sql, $query->select('a.test')->from('a')->where('a.test', '=', new Parameter('test'))->groupBy('a', 'b')->toSql());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -222,7 +223,7 @@ class BuilderTest extends \PHPUnit\Framework\TestCase
|
|||
|
||||
$query = new Builder($this->con);
|
||||
$sql = 'SELECT `a`.`test` FROM `a` WHERE `a`.`test` = :testWhere OR `a`.`test2` IN (\'a\', :bValue, \'c\');';
|
||||
self::assertEquals($sql, $query->select('a.test')->from('a')->where('a.test', '=', ':testWhere')->whereIn('a.test2', ['a', ':bValue', 'c'], 'or')->toSql());
|
||||
self::assertEquals($sql, $query->select('a.test')->from('a')->where('a.test', '=', new Parameter('testWhere'))->whereIn('a.test2', ['a', new Parameter('bValue'), 'c'], 'or')->toSql());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -313,7 +314,7 @@ class BuilderTest extends \PHPUnit\Framework\TestCase
|
|||
|
||||
$query = new Builder($this->con);
|
||||
$sql = 'INSERT INTO `a` (`test`, `test2`) VALUES (:test, :test2);';
|
||||
self::assertEquals($sql, $query->insert('test', 'test2')->into('a')->values(':test', ':test2')->toSql());
|
||||
self::assertEquals($sql, $query->insert('test', 'test2')->into('a')->values(new Parameter('test'), new Parameter('test2'))->toSql());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -328,7 +329,7 @@ class BuilderTest extends \PHPUnit\Framework\TestCase
|
|||
|
||||
$query = new Builder($this->con);
|
||||
$sql = 'DELETE FROM `a` WHERE `a`.`test` = :testVal;';
|
||||
self::assertEquals($sql, $query->delete()->from('a')->where('a.test', '=', ':testVal')->toSql());
|
||||
self::assertEquals($sql, $query->delete()->from('a')->where('a.test', '=', new Parameter('testVal'))->toSql());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -347,7 +348,7 @@ class BuilderTest extends \PHPUnit\Framework\TestCase
|
|||
|
||||
$query = new Builder($this->con);
|
||||
$sql = 'UPDATE `a` SET `a`.`test` = 1, `a`.`test2` = :test2 WHERE `a`.`test` = :test3;';
|
||||
self::assertEquals($sql, $query->update('a')->set(['a.test' => 1])->set(['a.test2' => ':test2'])->where('a.test', '=', ':test3')->toSql());
|
||||
self::assertEquals($sql, $query->update('a')->set(['a.test' => 1])->set(['a.test2' => new Parameter('test2')])->where('a.test', '=', new Parameter('test3'))->toSql());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user