goldrat/vendor/catfan/medoo/tests/InsertTest.php
2025-10-13 09:04:00 +00:00

243 lines
5.6 KiB
PHP

<?php
namespace Medoo\Tests;
use Medoo\Medoo;
/**
* @coversDefaultClass \Medoo\Medoo
*/
class InsertTest extends MedooTestCase
{
/**
* @covers ::insert()
* @covers ::typeMap()
* @dataProvider typesProvider
*/
public function testInsert($type)
{
$this->setType($type);
$this->database->insert("account", [
"user_name" => "foo",
"email" => "foo@bar.com"
]);
$this->assertQuery(
<<<EOD
INSERT INTO "account" ("user_name", "email")
VALUES ('foo', 'foo@bar.com')
EOD,
$this->database->queryString
);
}
/**
* @covers ::insert()
* @covers ::typeMap()
* @dataProvider typesProvider
*/
public function testInsertWithArray($type)
{
$this->setType($type);
$this->database->insert("account", [
"user_name" => "foo",
"lang" => ["en", "fr"]
]);
$this->assertQuery([
'default' => <<<EOD
INSERT INTO "account" ("user_name", "lang")
VALUES ('foo', 'a:2:{i:0;s:2:"en";i:1;s:2:"fr";}')
EOD,
'mysql' => <<<EOD
INSERT INTO "account" ("user_name", "lang")
VALUES ('foo', 'a:2:{i:0;s:2:\"en\";i:1;s:2:\"fr\";}')
EOD
], $this->database->queryString);
}
/**
* @covers ::insert()
* @covers ::typeMap()
* @dataProvider typesProvider
*/
public function testInsertWithJSON($type)
{
$this->setType($type);
$this->database->insert("account", [
"user_name" => "foo",
"lang [JSON]" => ["en", "fr"]
]);
$this->assertQuery([
'default' => <<<EOD
INSERT INTO "account" ("user_name", "lang")
VALUES ('foo', '["en","fr"]')
EOD,
'mysql' => <<<EOD
INSERT INTO `account` (`user_name`, `lang`)
VALUES ('foo', '[\"en\",\"fr\"]')
EOD
], $this->database->queryString);
}
/**
* @covers ::insert()
* @dataProvider typesProvider
*/
public function testInsertWithRaw($type)
{
$this->setType($type);
$this->database->insert("account", [
"user_name" => Medoo::raw("UUID()")
]);
$this->assertQuery(
<<<EOD
INSERT INTO "account" ("user_name")
VALUES (UUID())
EOD,
$this->database->queryString
);
}
/**
* @covers ::insert()
* @covers ::typeMap()
* @dataProvider typesProvider
*/
public function testInsertWithNull($type)
{
$this->setType($type);
$this->database->insert("account", [
"location" => null
]);
$this->assertQuery(
<<<EOD
INSERT INTO "account" ("location")
VALUES (NULL)
EOD,
$this->database->queryString
);
}
/**
* @covers ::insert()
* @covers ::typeMap()
* @dataProvider typesProvider
*/
public function testInsertWithObject($type)
{
$this->setType($type);
$objectData = new Foo();
$this->database->insert("account", [
"object" => $objectData
]);
$this->assertQuery(
<<<EOD
INSERT INTO "account" ("object")
VALUES (:MeD0_mK)
EOD,
$this->database->queryString
);
}
/**
* @covers ::insert()
* @dataProvider typesProvider
*/
public function testMultiInsert($type)
{
$this->setType($type);
$this->database->insert("account", [
[
"user_name" => "foo",
"email" => "foo@bar.com"
],
[
"user_name" => "bar",
"email" => "bar@foo.com"
]
]);
$this->assertQuery(
<<<EOD
INSERT INTO "account" ("user_name", "email")
VALUES ('foo', 'foo@bar.com'), ('bar', 'bar@foo.com')
EOD,
$this->database->queryString
);
}
public function testOracleWithPrimaryKeyInsert()
{
$this->setType("oracle");
$this->database->insert("ACCOUNT", [
"NAME" => "foo",
"EMAIL" => "foo@bar.com"
], "ID");
$this->assertQuery(
<<<EOD
INSERT INTO "ACCOUNT" ("NAME", "EMAIL")
VALUES ('foo', 'foo@bar.com')
RETURNING "ID" INTO :RETURNID
EOD,
$this->database->queryString
);
}
public function testOracleWithLOBsInsert()
{
$this->setType("oracle");
$fp = fopen('README.md', 'r');
$this->database->insert("ACCOUNT", [
"NAME" => "foo",
"DATA" => $fp
]);
$this->assertQuery(
<<<EOD
INSERT INTO "ACCOUNT" ("NAME", "DATA")
VALUES ('foo', EMPTY_BLOB())
RETURNING "DATA" INTO :MeD1_mK
EOD,
$this->database->queryString
);
}
public function testOracleWithLOBsAndIdInsert()
{
$this->setType("oracle");
$fp = fopen('README.md', 'r');
$this->database->insert("ACCOUNT", [
"NAME" => "foo",
"DATA" => $fp
], "ID");
$this->assertQuery(
<<<EOD
INSERT INTO "ACCOUNT" ("NAME", "DATA")
VALUES ('foo', EMPTY_BLOB())
RETURNING "DATA", "ID" INTO :MeD1_mK, :RETURNID
EOD,
$this->database->queryString
);
}
}