Add subquery unit tests for DBQueryParser

This commit is contained in:
Kijin Sung 2020-07-06 14:43:57 +09:00
parent bb94e91fe0
commit c6cb8f72b5
4 changed files with 105 additions and 2 deletions

View file

@ -0,0 +1,20 @@
<query id="selectSubqueryTest1" action="select">
<tables>
<table name="documents" />
<table query="true" alias="m">
<tables>
<table name="member" />
</tables>
<columns>
<column name="member_srl" />
<column name="nick_name" />
</columns>
</table>
</tables>
<columns>
<column name="documents.*" />
</columns>
<conditions>
<condition operation="equal" column="documents.member_srl" default="m.member_srl" />
</conditions>
</query>

View file

@ -0,0 +1,19 @@
<query id="selectSubqueryTest2" action="select">
<tables>
<table name="member" />
</tables>
<columns>
<column name="member.*" />
<query alias="document_count">
<tables>
<table name="documents" />
</tables>
<columns>
<column name="COUNT(*)" alias="count" />
</columns>
<conditions>
<condition operation="equal" column="member.member_srl" default="documents.member_srl" />
</conditions>
</query>
</columns>
</query>

View file

@ -0,0 +1,22 @@
<query id="selectSubqueryTest3" action="select">
<tables>
<table name="member" />
</tables>
<columns>
<column name="*" />
</columns>
<conditions>
<condition operation="notequal" column="is_admin" var="is_admin" default="N" />
<query operation="equal" column="regdate" alias="document_max_regdate" pipe="or">
<tables>
<table name="documents" />
</tables>
<columns>
<column name="MAX(regdate)" alias="max_regdate" />
</columns>
<conditions>
<condition operation="equal" column="member.member_srl" default="documents.member_srl" />
</conditions>
</query>
</conditions>
</query>

View file

@ -105,9 +105,51 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
$this->assertFalse($query->columns[1]->is_wildcard);
}
public function testSubquery()
public function testSubquery1()
{
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/selectSubqueryTest1.xml');
$this->assertTrue($query instanceof Rhymix\Framework\Parsers\DBQuery\Query);
$this->assertEquals(2, count($query->tables));
$this->assertTrue($query->tables['documents'] instanceof Rhymix\Framework\Parsers\DBQuery\Table);
$this->assertTrue($query->tables['m'] instanceof Rhymix\Framework\Parsers\DBQuery\Query);
$this->assertEquals(1, count($query->tables['m']->tables));
$this->assertEquals('member', $query->tables['m']->tables['member']->name);
$this->assertEquals(2, count($query->tables['m']->columns));
$this->assertEquals(1, count($query->columns));
$this->assertEquals('documents.member_srl', $query->conditions[0]->column);
$this->assertEquals('m.member_srl', $query->conditions[0]->default);
}
public function testSubquery2()
{
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/selectSubqueryTest2.xml');
$this->assertTrue($query instanceof Rhymix\Framework\Parsers\DBQuery\Query);
$this->assertEquals(1, count($query->tables));
$this->assertTrue($query->tables['member'] instanceof Rhymix\Framework\Parsers\DBQuery\Table);
$this->assertEquals(2, count($query->columns));
$this->assertTrue($query->columns[0] instanceof Rhymix\Framework\Parsers\DBQuery\ColumnRead);
$this->assertTrue($query->columns[1] instanceof Rhymix\Framework\Parsers\DBQuery\Query);
$this->assertTrue($query->columns[1]->tables['documents'] instanceof Rhymix\Framework\Parsers\DBQuery\Table);
$this->assertTrue($query->columns[1]->columns[0] instanceof Rhymix\Framework\Parsers\DBQuery\ColumnRead);
$this->assertTrue($query->columns[1]->columns[0]->is_expression);
$this->assertFalse($query->columns[1]->columns[0]->is_wildcard);
}
public function testSubquery3()
{
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/selectSubqueryTest3.xml');
$this->assertTrue($query instanceof Rhymix\Framework\Parsers\DBQuery\Query);
$this->assertEquals(1, count($query->tables));
$this->assertTrue($query->tables['member'] instanceof Rhymix\Framework\Parsers\DBQuery\Table);
$this->assertEquals(1, count($query->columns));
$this->assertTrue($query->columns[0] instanceof Rhymix\Framework\Parsers\DBQuery\ColumnRead);
$this->assertEquals(2, count($query->conditions));
$this->assertTrue($query->conditions[1] instanceof Rhymix\Framework\Parsers\DBQuery\Query);
$this->assertTrue($query->conditions[1]->tables['documents'] instanceof Rhymix\Framework\Parsers\DBQuery\Table);
$this->assertTrue($query->conditions[1]->columns[0] instanceof Rhymix\Framework\Parsers\DBQuery\ColumnRead);
$this->assertTrue($query->conditions[1]->columns[0]->is_expression);
$this->assertEquals('member.member_srl', $query->conditions[1]->conditions[0]->column);
$this->assertEquals('OR', $query->conditions[1]->pipe);
}
public function testInsertQuery()