$s = new $class(...$func("SELECT ? as one, ? as two, ? as three, ? as four", ["int", ["int", "int"], "int"]));
$s = new $this->statementClass(...$this->makeStatement("SELECT ? as one, ? as two, ? as three, ? as four", ["int", ["int", "int"], "int"]));
$val = $s->runArray([1, [2, 3], 4])->getRow();
$val = $s->runArray([1, [2, 3], 4])->getRow();
$this->assertSame($exp, $val);
$this->assertSame($exp, $val);
}
}
/** @dataProvider provideStatements */
public function testBindWithoutType() {
public function testBindWithoutType() {
$class = $this->statementClass;
$this->assertException("paramTypeMissing", "Db");
$this->assertException("paramTypeMissing", "Db");
$s = new $class(...$func("SELECT ? as value", []));
$s = new $this->statementClass(...$this->makeStatement("SELECT ? as value", []));
$s->runArray([1]);
$s->runArray([1]);
}
}
/** @dataProvider provideStatements */
public function testViolateConstraint() {
public function testViolateConstraint() {
$class = $this->statementClass;
(new $this->statementClass(...$this->makeStatement("CREATE TABLE if not exists arsse_meta(key varchar(255) primary key not null, value text)")))->run();
(new $class(...$func("CREATE TABLE if not exists arsse_meta(key varchar(255) primary key not null, value text)")))->run();
$s = new $this->statementClass(...$this->makeStatement("INSERT INTO arsse_meta(key) values(?)", ["str"]));
$s = new $class(...$func("INSERT INTO arsse_meta(key) values(?)", ["str"]));
(new $this->statementClass(...$this->makeStatement("CREATE TABLE if not exists arsse_feeds(id integer primary key not null, url text not null)")))->run();
(new $class(...$func("CREATE TABLE if not exists arsse_feeds(id integer primary key not null, url text not null)")))->run();
$s = new $this->statementClass(...$this->makeStatement("INSERT INTO arsse_feeds(id,url) values(?,?)", ["str", "str"]));
$s = new $class(...$func("INSERT INTO arsse_feeds(id,url) values(?,?)", ["str", "str"]));
@ -250,35 +236,32 @@ class TestStatement extends \JKingWeb\Arsse\Test\AbstractTest {
'Arbitrary date string as strict string' => ["Today", "strict string", "'Today'"],
'Arbitrary date string as strict string' => ["Today", "strict string", "'Today'"],
'Arbitrary date string as strict datetime' => ["Today", "strict datetime", "'".date_create("Today", new \DateTimezone("UTC"))->format("Y-m-d H:i:s")."'"],
'Arbitrary date string as strict datetime' => ["Today", "strict datetime", "'".date_create("Today", new \DateTimezone("UTC"))->format("Y-m-d H:i:s")."'"],
'Arbitrary date string as strict boolean' => ["Today", "strict boolean", "1"],
'Arbitrary date string as strict boolean' => ["Today", "strict boolean", "1"],
'DateTime as integer' => [$dateMutable, "integer", $dateUTC->getTimestamp()],
'DateTime as integer' => [$dateMutable, "integer", (string) $dateUTC->getTimestamp()],
'DateTime as float' => [$dateMutable, "float", $dateUTC->getTimestamp().".0"],
'DateTime as float' => [$dateMutable, "float", $dateUTC->getTimestamp().".0"],
'DateTime as string' => [$dateMutable, "string", "'".$dateUTC->format("Y-m-d H:i:s")."'"],
'DateTime as string' => [$dateMutable, "string", "'".$dateUTC->format("Y-m-d H:i:s")."'"],
'DateTime as datetime' => [$dateMutable, "datetime", "'".$dateUTC->format("Y-m-d H:i:s")."'"],
'DateTime as datetime' => [$dateMutable, "datetime", "'".$dateUTC->format("Y-m-d H:i:s")."'"],
'DateTime as boolean' => [$dateMutable, "boolean", "1"],
'DateTime as boolean' => [$dateMutable, "boolean", "1"],
'DateTime as strict integer' => [$dateMutable, "strict integer", $dateUTC->getTimestamp()],
'DateTime as strict integer' => [$dateMutable, "strict integer", (string) $dateUTC->getTimestamp()],
'DateTime as strict float' => [$dateMutable, "strict float", $dateUTC->getTimestamp().".0"],
'DateTime as strict float' => [$dateMutable, "strict float", $dateUTC->getTimestamp().".0"],
'DateTime as strict string' => [$dateMutable, "strict string", "'".$dateUTC->format("Y-m-d H:i:s")."'"],
'DateTime as strict string' => [$dateMutable, "strict string", "'".$dateUTC->format("Y-m-d H:i:s")."'"],
'DateTime as strict datetime' => [$dateMutable, "strict datetime", "'".$dateUTC->format("Y-m-d H:i:s")."'"],
'DateTime as strict datetime' => [$dateMutable, "strict datetime", "'".$dateUTC->format("Y-m-d H:i:s")."'"],
'DateTime as strict boolean' => [$dateMutable, "strict boolean", "1"],
'DateTime as strict boolean' => [$dateMutable, "strict boolean", "1"],
'DateTimeImmutable as integer' => [$dateImmutable, "integer", $dateUTC->getTimestamp()],
'DateTimeImmutable as integer' => [$dateImmutable, "integer", (string) $dateUTC->getTimestamp()],
'DateTimeImmutable as float' => [$dateImmutable, "float", $dateUTC->getTimestamp().".0"],
'DateTimeImmutable as float' => [$dateImmutable, "float", $dateUTC->getTimestamp().".0"],
'DateTimeImmutable as string' => [$dateImmutable, "string", "'".$dateUTC->format("Y-m-d H:i:s")."'"],
'DateTimeImmutable as string' => [$dateImmutable, "string", "'".$dateUTC->format("Y-m-d H:i:s")."'"],
'DateTimeImmutable as datetime' => [$dateImmutable, "datetime", "'".$dateUTC->format("Y-m-d H:i:s")."'"],
'DateTimeImmutable as datetime' => [$dateImmutable, "datetime", "'".$dateUTC->format("Y-m-d H:i:s")."'"],
'DateTimeImmutable as boolean' => [$dateImmutable, "boolean", "1"],
'DateTimeImmutable as boolean' => [$dateImmutable, "boolean", "1"],
'DateTimeImmutable as strict integer' => [$dateImmutable, "strict integer", $dateUTC->getTimestamp()],
'DateTimeImmutable as strict integer' => [$dateImmutable, "strict integer", (string) $dateUTC->getTimestamp()],
'DateTimeImmutable as strict float' => [$dateImmutable, "strict float", $dateUTC->getTimestamp().".0"],
'DateTimeImmutable as strict float' => [$dateImmutable, "strict float", $dateUTC->getTimestamp().".0"],
'DateTimeImmutable as strict string' => [$dateImmutable, "strict string", "'".$dateUTC->format("Y-m-d H:i:s")."'"],
'DateTimeImmutable as strict string' => [$dateImmutable, "strict string", "'".$dateUTC->format("Y-m-d H:i:s")."'"],
'DateTimeImmutable as strict datetime' => [$dateImmutable, "strict datetime", "'".$dateUTC->format("Y-m-d H:i:s")."'"],
'DateTimeImmutable as strict datetime' => [$dateImmutable, "strict datetime", "'".$dateUTC->format("Y-m-d H:i:s")."'"],
'DateTimeImmutable as strict boolean' => [$dateImmutable, "strict boolean", "1"],
'DateTimeImmutable as strict boolean' => [$dateImmutable, "strict boolean", "1"],
];
];
$decorators = $this->provideSyntaxDecorators();
foreach ($this->provideStatements() as $drvName => list($drv, $stringCoersion, $class, $func)) {