1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177 |
- <?php
- namespace Medoo\Tests;
- use Medoo\Medoo;
- /**
- * @coversDefaultClass \Medoo\Medoo
- */
- class WhereTest extends MedooTestCase
- {
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::typeMap()
- * @covers ::whereClause()
- * @dataProvider typesProvider
- */
- public function testBasicWhere($type)
- {
- $this->setType($type);
- $this->database->select("account", "user_name", [
- "email" => "foo@bar.com",
- "user_id" => 200,
- "user_id[>]" => 200,
- "user_id[>=]" => 200,
- "user_id[!]" => 200,
- "age[<>]" => [200, 500],
- "age[><]" => [200, 500],
- "income[>]" => Medoo::raw("COUNT(<average>)"),
- "remote_id" => Medoo::raw("UUID()"),
- "location" => null,
- "is_selected" => true
- ]);
- $this->assertQuery(
- <<<EOD
- SELECT "user_name"
- FROM "account"
- WHERE
- "email" = 'foo@bar.com' AND
- "user_id" = 200 AND
- "user_id" > 200 AND
- "user_id" >= 200 AND
- "user_id" != 200 AND
- ("age" BETWEEN 200 AND 500) AND
- ("age" NOT BETWEEN 200 AND 500) AND
- "income" > COUNT("average") AND
- "remote_id" = UUID() AND
- "location" IS NULL AND
- "is_selected" = 1
- EOD,
- $this->database->queryString
- );
- }
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::whereClause()
- * @dataProvider typesProvider
- */
- public function testBetweenDateTimeWhere($type)
- {
- $this->setType($type);
- $this->database->select("account", "user_name", [
- "birthday[<>]" => [date("Y-m-d", mktime(0, 0, 0, 1, 1, 2015)), date("Y-m-d", mktime(0, 0, 0, 1, 1, 2045))]
- ]);
- $this->assertQuery(
- <<<EOD
- SELECT "user_name"
- FROM "account"
- WHERE
- ("birthday" BETWEEN '2015-01-01' AND '2045-01-01')
- EOD,
- $this->database->queryString
- );
- }
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::whereClause()
- * @dataProvider typesProvider
- */
- public function testNotBetweenDateTimeWhere($type)
- {
- $this->setType($type);
- $this->database->select("account", "user_name", [
- "birthday[><]" => [date("Y-m-d", mktime(0, 0, 0, 1, 1, 2015)), date("Y-m-d", mktime(0, 0, 0, 1, 1, 2045))]
- ]);
- $this->assertQuery(
- <<<EOD
- SELECT "user_name"
- FROM "account"
- WHERE
- ("birthday" NOT BETWEEN '2015-01-01' AND '2045-01-01')
- EOD,
- $this->database->queryString
- );
- }
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::whereClause()
- * @dataProvider typesProvider
- */
- public function testBetweenStringWhere($type)
- {
- $this->setType($type);
- $this->database->select("account", "user_name", [
- "location[<>]" => ['New York', 'Santo']
- ]);
- $this->assertQuery(
- <<<EOD
- SELECT "user_name"
- FROM "account"
- WHERE
- ("location" BETWEEN 'New York' AND 'Santo')
- EOD,
- $this->database->queryString
- );
- }
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::whereClause()
- * @dataProvider typesProvider
- */
- public function testBetweenRawWhere($type)
- {
- $this->setType($type);
- $this->database->select("account", "user_name", [
- "birthday[<>]" => [
- Medoo::raw("to_date(:from, 'YYYY-MM-DD')", [":from" => '2015/05/15']),
- Medoo::raw("to_date(:to, 'YYYY-MM-DD')", [":to" => '2025/05/15'])
- ]
- ]);
- $this->assertQuery(
- <<<EOD
- SELECT "user_name"
- FROM "account"
- WHERE
- ("birthday" BETWEEN to_date('2015/05/15', 'YYYY-MM-DD') AND to_date('2025/05/15', 'YYYY-MM-DD'))
- EOD,
- $this->database->queryString
- );
- }
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::whereClause()
- * @dataProvider typesProvider
- */
- public function testGreaterDateTimeWhere($type)
- {
- $this->setType($type);
- $this->database->select("account", "user_name", [
- "birthday[>]" => date("Y-m-d", mktime(0, 0, 0, 1, 1, 2045))
- ]);
- $this->assertQuery(
- <<<EOD
- SELECT "user_name"
- FROM "account"
- WHERE "birthday" > '2045-01-01'
- EOD,
- $this->database->queryString
- );
- }
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::whereClause()
- * @dataProvider typesProvider
- */
- public function testArrayIntValuesWhere($type)
- {
- $this->setType($type);
- $this->database->select("account", "user_name", [
- "user_id" => [2, 123, 234, 54]
- ]);
- $this->assertQuery(
- <<<EOD
- SELECT "user_name"
- FROM "account"
- WHERE
- "user_id" IN (2, 123, 234, 54)
- EOD,
- $this->database->queryString
- );
- }
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::whereClause()
- * @dataProvider typesProvider
- */
- public function testArrayStringValuesWhere($type)
- {
- $this->setType($type);
- $this->database->select("account", "user_name", [
- "email" => ["foo@bar.com", "cat@dog.com", "admin@medoo.in"]
- ]);
- $this->assertQuery(
- <<<EOD
- SELECT "user_name"
- FROM "account"
- WHERE
- "email" IN ('foo@bar.com', 'cat@dog.com', 'admin@medoo.in')
- EOD,
- $this->database->queryString
- );
- }
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::whereClause()
- * @dataProvider typesProvider
- */
- public function testRawArrayValuesWhere($type)
- {
- $this->setType($type);
- $this->database->select("account", "user_name", [
- 'id' => [
- Medoo::raw('LOWER("FOO")'),
- Medoo::raw('LOWER("BAR")')
- ]
- ]);
- $this->assertQuery(
- <<<EOD
- SELECT "user_name"
- FROM "account"
- WHERE
- "id" IN (LOWER("FOO"), LOWER("BAR"))
- EOD,
- $this->database->queryString
- );
- }
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::whereClause()
- * @dataProvider typesProvider
- */
- public function testRawNotInArrayValuesWhere($type)
- {
- $this->setType($type);
- $this->database->select("account", "user_name", [
- 'id[!]' => [
- Medoo::raw('LOWER("FOO")'),
- Medoo::raw('LOWER("BAR")')
- ]
- ]);
- $this->assertQuery(
- <<<EOD
- SELECT "user_name"
- FROM "account"
- WHERE
- "id" NOT IN (LOWER("FOO"), LOWER("BAR"))
- EOD,
- $this->database->queryString
- );
- }
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::whereClause()
- * @dataProvider typesProvider
- */
- public function testNegativeWhere($type)
- {
- $this->setType($type);
- $this->database->select("account", "user_name", [
- "AND" => [
- "user_name[!]" => "foo",
- "user_id[!]" => 1024,
- "email[!]" => ["foo@bar.com", "admin@medoo.in"],
- "city[!]" => null,
- "promoted[!]" => true,
- "location[!]" => Medoo::raw('LOWER("New York")')
- ]
- ]);
- $this->assertQuery(
- <<<EOD
- SELECT "user_name"
- FROM "account"
- WHERE
- ("user_name" != 'foo' AND
- "user_id" != 1024 AND
- "email" NOT IN ('foo@bar.com', 'admin@medoo.in') AND
- "city" IS NOT NULL AND
- "promoted" != 1 AND
- "location" != LOWER("New York"))
- EOD,
- $this->database->queryString
- );
- }
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::whereClause()
- * @dataProvider typesProvider
- */
- public function testBasicAndRelativityWhere($type)
- {
- $this->setType($type);
- $this->database->select("account", "user_name", [
- "AND" => [
- "user_id[>]" => 200,
- "gender" => "female"
- ]
- ]);
- $this->assertQuery(
- <<<EOD
- SELECT "user_name"
- FROM "account"
- WHERE
- ("user_id" > 200 AND "gender" = 'female')
- EOD,
- $this->database->queryString
- );
- }
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::whereClause()
- * @dataProvider typesProvider
- */
- public function testBasicSingleRelativityWhere($type)
- {
- $this->setType($type);
- $this->database->select("account", "user_name", [
- "user_id[>]" => 200,
- "gender" => "female"
- ]);
- $this->assertQuery(
- <<<EOD
- SELECT "user_name"
- FROM "account"
- WHERE
- "user_id" > 200 AND "gender" = 'female'
- EOD,
- $this->database->queryString
- );
- }
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::whereClause()
- * @dataProvider typesProvider
- */
- public function testBasicOrRelativityWhere($type)
- {
- $this->setType($type);
- $this->database->select("account", "user_name", [
- "OR" => [
- "user_id[>]" => 200,
- "age[<>]" => [18, 25],
- "gender" => "female"
- ]
- ]);
- $this->assertQuery(
- <<<EOD
- SELECT "user_name"
- FROM "account"
- WHERE
- ("user_id" > 200 OR
- ("age" BETWEEN 18 AND 25) OR
- "gender" = 'female')
- EOD,
- $this->database->queryString
- );
- }
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::whereClause()
- * @dataProvider typesProvider
- */
- public function testCompoundRelativityWhere($type)
- {
- $this->setType($type);
- $this->database->select("account", "user_name", [
- "AND" => [
- "OR" => [
- "user_name" => "foo",
- "email" => "foo@bar.com"
- ],
- "password" => "12345"
- ]
- ]);
- $this->assertQuery(
- <<<EOD
- SELECT "user_name"
- FROM "account"
- WHERE
- (("user_name" = 'foo' OR "email" = 'foo@bar.com') AND "password" = '12345')
- EOD,
- $this->database->queryString
- );
- }
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::whereClause()
- * @dataProvider typesProvider
- */
- public function testCompoundDuplicatedKeysWhere($type)
- {
- $this->setType($type);
- $this->database->select("account", "user_name", [
- "AND #comment" => [
- "OR #first comment" => [
- "user_name" => "foo",
- "email" => "foo@bar.com"
- ],
- "OR #sencond comment" => [
- "user_name" => "bar",
- "email" => "bar@foo.com"
- ]
- ]
- ]);
- $this->assertQuery(
- <<<EOD
- SELECT "user_name"
- FROM "account"
- WHERE
- (("user_name" = 'foo' OR "email" = 'foo@bar.com') AND
- ("user_name" = 'bar' OR "email" = 'bar@foo.com'))
- EOD,
- $this->database->queryString
- );
- }
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::whereClause()
- * @dataProvider typesProvider
- */
- public function testColumnsRelationshipWhere($type)
- {
- $this->setType($type);
- $this->database->select("post", [
- "[>]account" => "user_id",
- ], [
- "post.content"
- ], [
- "post.restrict[<]account.age",
- "post.type[=]account.type"
- ]);
- $this->assertQuery(
- <<<EOD
- SELECT "post"."content"
- FROM "post"
- LEFT JOIN "account"
- USING ("user_id")
- WHERE
- "post"."restrict" < "account"."age" AND
- "post"."type" = "account"."type"
- EOD,
- $this->database->queryString
- );
- }
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::whereClause()
- * @dataProvider typesProvider
- */
- public function testBasicLikeWhere($type)
- {
- $this->setType($type);
- $this->database->select("account", "user_name", [
- "city[~]" => "lon",
- "name[~]" => "some-name"
- ]);
- $this->assertQuery(
- <<<EOD
- SELECT "user_name"
- FROM "account"
- WHERE
- ("city" LIKE '%lon%') AND
- ("name" LIKE '%some-name%')
- EOD,
- $this->database->queryString
- );
- }
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::whereClause()
- * @dataProvider typesProvider
- */
- public function testGroupedLikeWhere($type)
- {
- $this->setType($type);
- $this->database->select("account", "user_name", [
- "city[~]" => ["lon", "foo", "bar"]
- ]);
- $this->assertQuery(
- <<<EOD
- SELECT "user_name"
- FROM "account"
- WHERE
- ("city" LIKE '%lon%' OR
- "city" LIKE '%foo%' OR
- "city" LIKE '%bar%')
- EOD,
- $this->database->queryString
- );
- }
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::whereClause()
- * @dataProvider typesProvider
- */
- public function testNegativeLikeWhere($type)
- {
- $this->setType($type);
- $this->database->select("account", "user_name", [
- "city[!~]" => "lon"
- ]);
- $this->assertQuery(
- <<<EOD
- SELECT "user_name"
- FROM "account"
- WHERE
- ("city" NOT LIKE '%lon%')
- EOD,
- $this->database->queryString
- );
- }
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::whereClause()
- * @dataProvider typesProvider
- */
- public function testNonEscapeLikeWhere($type)
- {
- $this->setType($type);
- $this->database->select("account", "user_name", [
- "city[~]" => "some_where",
- "county[~]" => "[a-f]stan"
- ]);
- $this->assertQuery(
- <<<EOD
- SELECT "user_name"
- FROM "account"
- WHERE
- ("city" LIKE 'some_where') AND
- ("county" LIKE '[a-f]stan')
- EOD,
- $this->database->queryString
- );
- }
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::whereClause()
- * @dataProvider typesProvider
- */
- public function testEscapeLikeWhere($type)
- {
- $this->setType($type);
- $this->database->select("account", "user_name", [
- "city[~]" => "some\_where"
- ]);
- $this->assertQuery(
- <<<EOD
- SELECT "user_name"
- FROM "account"
- WHERE
- ("city" LIKE '%some\_where%')
- EOD,
- $this->database->queryString
- );
- }
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::whereClause()
- * @dataProvider typesProvider
- */
- public function testCompoundLikeWhere($type)
- {
- $this->setType($type);
- $this->database->select("account", "user_name", [
- "content[~]" => ["AND" => ["lon", "on"]],
- "city[~]" => ["OR" => ["lon", "on"]]
- ]);
- $this->assertQuery(
- <<<EOD
- SELECT "user_name"
- FROM "account"
- WHERE
- ("content" LIKE '%lon%' AND "content" LIKE '%on%') AND
- ("city" LIKE '%lon%' OR "city" LIKE '%on%')
- EOD,
- $this->database->queryString
- );
- }
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::whereClause()
- * @dataProvider typesProvider
- */
- public function testWildcardLikeWhere($type)
- {
- $this->setType($type);
- $this->database->select("account", "user_name", [
- "city[~]" => "%stan",
- "company[~]" => "Goo%",
- "location[~]" => "Londo_",
- "name[~]" => "[BCR]at",
- "nickname[~]" => "[!BCR]at"
- ]);
- $this->assertQuery(
- <<<EOD
- SELECT "user_name"
- FROM "account"
- WHERE
- ("city" LIKE '%stan') AND
- ("company" LIKE 'Goo%') AND
- ("location" LIKE 'Londo_') AND
- ("name" LIKE '[BCR]at') AND
- ("nickname" LIKE '[!BCR]at')
- EOD,
- $this->database->queryString
- );
- }
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::whereClause()
- * @dataProvider typesProvider
- */
- public function testMultipleLikeWhere($type)
- {
- $this->setType($type);
- $words = [
- "one",
- "two",
- "three",
- "four",
- "five",
- "six",
- "seven",
- "eight",
- "nine",
- "ten",
- "eleven",
- "twelve"
- ];
- $this->database->select("account", ["title"], ["title[~]" => $words]);
- $this->assertQuery(
- <<<EOD
- SELECT "title"
- FROM "account"
- WHERE
- ("title" LIKE '%one%' OR "title" LIKE '%two%' OR "title" LIKE '%three%' OR "title" LIKE '%four%' OR "title" LIKE '%five%' OR "title" LIKE '%six%' OR "title" LIKE '%seven%' OR "title" LIKE '%eight%' OR "title" LIKE '%nine%' OR "title" LIKE '%ten%' OR "title" LIKE '%eleven%' OR "title" LIKE '%twelve%')
- EOD,
- $this->database->queryString
- );
- }
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::whereClause()
- * @dataProvider typesProvider
- */
- public function testBasicOrderWhere($type)
- {
- $this->setType($type);
- $this->database->select("account", "user_name", [
- "ORDER" => "user_id"
- ]);
- $this->assertQuery(
- <<<EOD
- SELECT "user_name"
- FROM "account"
- ORDER BY "user_id"
- EOD,
- $this->database->queryString
- );
- }
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::whereClause()
- * @dataProvider typesProvider
- */
- public function testMultipleOrderWhere($type)
- {
- $this->setType($type);
- $this->database->select("account", "user_name", [
- "ORDER" => [
- // Order by column with sorting by customized order.
- "user_id" => [43, 12, 57, 98, 144, 1],
- // Order by column.
- "register_date",
- // Order by column with descending sorting.
- "profile_id" => "DESC",
- // Order by column with ascending sorting.
- "date" => "ASC"
- ]
- ]);
- $this->assertQuery(
- <<<EOD
- SELECT "user_name"
- FROM "account"
- ORDER BY FIELD("user_id", 43,12,57,98,144,1),"register_date","profile_id" DESC,"date" ASC
- EOD,
- $this->database->queryString
- );
- }
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::whereClause()
- * @dataProvider typesProvider
- */
- public function testOrderWithRawWhere($type)
- {
- $this->setType($type);
- $this->database->select("account", "user_name", [
- "ORDER" => Medoo::raw("<location>, <gender>")
- ]);
- $this->assertQuery(
- <<<EOD
- SELECT "user_name"
- FROM "account"
- ORDER BY "location", "gender"
- EOD,
- $this->database->queryString
- );
- }
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::whereClause()
- */
- public function testFullTextSearchWhere()
- {
- $this->setType("mysql");
- $this->database->select("account", "user_name", [
- "MATCH" => [
- "columns" => ["content", "title"],
- "keyword" => "foo",
- "mode" => "natural"
- ]
- ]);
- $this->assertQuery(
- <<<EOD
- SELECT "user_name"
- FROM "account"
- WHERE MATCH (`content`, `title`) AGAINST ('foo' IN NATURAL LANGUAGE MODE)
- EOD,
- $this->database->queryString
- );
- }
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::whereClause()
- * @dataProvider typesProvider
- */
- public function testRegularExpressionWhere($type)
- {
- $this->setType($type);
- $this->database->select("account", "user_name", [
- 'user_name[REGEXP]' => '[a-z0-9]*'
- ]);
- $this->assertQuery(
- <<<EOD
- SELECT "user_name"
- FROM "account"
- WHERE "user_name" REGEXP '[a-z0-9]*'
- EOD,
- $this->database->queryString
- );
- }
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::whereClause()
- * @dataProvider typesProvider
- */
- public function testRawWhere($type)
- {
- $this->setType($type);
- $this->database->select("account", "user_name", [
- 'datetime' => Medoo::raw('NOW()')
- ]);
- $this->assertQuery(
- <<<EOD
- SELECT "user_name"
- FROM "account"
- WHERE "datetime" = NOW()
- EOD,
- $this->database->queryString
- );
- }
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::whereClause()
- * @dataProvider typesProvider
- */
- public function testLimitWhere($type)
- {
- $this->setType($type);
- $this->database->select("account", "user_name", [
- 'LIMIT' => 100
- ]);
- $this->assertQuery([
- 'default' => <<<EOD
- SELECT "user_name"
- FROM "account"
- LIMIT 100
- EOD,
- 'mssql' => <<<EOD
- SELECT [user_name]
- FROM [account]
- ORDER BY (SELECT 0)
- OFFSET 0 ROWS FETCH NEXT 100 ROWS ONLY
- EOD,
- 'oracle' => <<<EOD
- SELECT "user_name"
- FROM "account"
- OFFSET 0 ROWS FETCH NEXT 100 ROWS ONLY
- EOD,
- ], $this->database->queryString);
- }
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::whereClause()
- * @dataProvider typesProvider
- */
- public function testLimitOffsetWhere($type)
- {
- $this->setType($type);
- $this->database->select("account", "user_name", [
- 'LIMIT' => [20, 100]
- ]);
- $this->assertQuery([
- 'default' => <<<EOD
- SELECT "user_name"
- FROM "account"
- LIMIT 100 OFFSET 20
- EOD,
- 'mssql' => <<<EOD
- SELECT [user_name]
- FROM [account]
- ORDER BY (SELECT 0)
- OFFSET 20 ROWS FETCH NEXT 100 ROWS ONLY
- EOD,
- 'oracle' => <<<EOD
- SELECT "user_name"
- FROM "account"
- OFFSET 20 ROWS FETCH NEXT 100 ROWS ONLY
- EOD,
- ], $this->database->queryString);
- }
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::whereClause()
- * @dataProvider typesProvider
- */
- public function testGroupWhere($type)
- {
- $this->setType($type);
- $this->database->select("account", "user_name", [
- 'GROUP' => 'type',
- ]);
- $this->assertQuery(
- <<<EOD
- SELECT "user_name"
- FROM "account"
- GROUP BY "type"
- EOD,
- $this->database->queryString
- );
- }
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::whereClause()
- * @dataProvider typesProvider
- */
- public function testGroupWithArrayWhere($type)
- {
- $this->setType($type);
- $this->database->select("account", "user_name", [
- 'GROUP' => [
- 'type',
- 'age',
- 'gender'
- ]
- ]);
- $this->assertQuery(
- <<<EOD
- SELECT "user_name"
- FROM "account"
- GROUP BY "type","age","gender"
- EOD,
- $this->database->queryString
- );
- }
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::whereClause()
- * @dataProvider typesProvider
- */
- public function testGroupWithRawWhere($type)
- {
- $this->setType($type);
- $this->database->select("account", "user_name", [
- 'GROUP' => Medoo::raw("<location>, <gender>")
- ]);
- $this->assertQuery(
- <<<EOD
- SELECT "user_name"
- FROM "account"
- GROUP BY "location", "gender"
- EOD,
- $this->database->queryString
- );
- }
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::whereClause()
- * @dataProvider typesProvider
- */
- public function testHavingWhere($type)
- {
- $this->setType($type);
- $this->database->select("account", "user_name", [
- 'HAVING' => [
- 'user_id[>]' => 500
- ]
- ]);
- $this->assertQuery(
- <<<EOD
- SELECT "user_name"
- FROM "account"
- HAVING "user_id" > 500
- EOD,
- $this->database->queryString
- );
- }
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::whereClause()
- * @dataProvider typesProvider
- */
- public function testHavingWithRawWhere($type)
- {
- $this->setType($type);
- $this->database->select("account", "user_name", [
- 'HAVING' => Medoo::raw('<location> = LOWER("NEW YORK")')
- ]);
- $this->assertQuery(
- <<<EOD
- SELECT "user_name"
- FROM "account"
- HAVING "location" = LOWER("NEW YORK")
- EOD,
- $this->database->queryString
- );
- }
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::whereClause()
- * @dataProvider typesProvider
- */
- public function testHavingWithAggregateRawWhere($type)
- {
- $this->setType($type);
- $this->database->select("account", [
- "total" => Medoo::raw('SUM(<salary>)')
- ], [
- 'HAVING' => Medoo::raw('SUM(<salary>) > 1000')
- ]);
- $this->assertQuery(
- <<<EOD
- SELECT SUM("salary") AS "total"
- FROM "account"
- HAVING SUM("salary") > 1000
- EOD,
- $this->database->queryString
- );
- }
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::whereClause()
- * @dataProvider typesProvider
- */
- public function testRawWhereClause($type)
- {
- $this->setType($type);
- $this->database->select(
- "account",
- "user_name",
- Medoo::raw("WHERE <id> => 10")
- );
- $this->assertQuery(
- <<<EOD
- SELECT "user_name"
- FROM "account"
- WHERE "id" => 10
- EOD,
- $this->database->queryString
- );
- }
- /**
- * @covers ::select()
- * @covers ::dataImplode()
- * @covers ::whereClause()
- * @dataProvider typesProvider
- */
- public function testRawWhereWithJoinClause($type)
- {
- $this->setType($type);
- $this->database->select(
- "post",
- [
- "[>]account" => "user_id",
- ],
- [
- "post.content"
- ],
- Medoo::raw("WHERE <id> => 10")
- );
- $this->assertQuery(
- <<<EOD
- SELECT "post"."content"
- FROM "post"
- LEFT JOIN "account" USING ("user_id")
- WHERE "id" => 10
- EOD,
- $this->database->queryString
- );
- }
- }
|