Phalcon\Test\Unit\Mvc\Model\QueryTest::testUpdateParsing PHP Method

testUpdateParsing() public method

public testUpdateParsing ( )
    public function testUpdateParsing()
    {
        $this->specify("UPDATE PHQL queries don't work as expected", function () {
            $expected = array('tables' => array('robots'), 'models' => array(Robots::class), 'fields' => array(array('type' => 'qualified', 'domain' => 'robots', 'name' => 'name', 'balias' => 'name')), 'values' => array(array('type' => 260, 'value' => array('type' => 'literal', 'value' => 'some name'))));
            $query = new Query('UPDATE ' . Robots::class . ' SET name = \'some name\'');
            $query->setDI($this->di);
            expect($query->parse())->equals($expected);
            $expected = array('tables' => array('robots'), 'models' => array(Robots::class), 'fields' => array(array('type' => 'qualified', 'domain' => 'robots', 'name' => 'name', 'balias' => 'name')), 'values' => array(array('type' => 260, 'value' => array('type' => 'literal', 'value' => 'some name'))));
            $query = new Query('UPDATE ' . Robots::class . ' SET ' . Robots::class . '.name = \'some name\'');
            $query->setDI($this->di);
            expect($query->parse())->equals($expected);
            $expected = array('tables' => array('le_products'), 'models' => array(SomeProducts::class), 'fields' => array(array('type' => 'qualified', 'domain' => 'le_products', 'name' => 'name', 'balias' => 'name')), 'values' => array(array('type' => 260, 'value' => array('type' => 'literal', 'value' => 'some name'))));
            $query = new Query('UPDATE ' . SomeProducts::class . ' SET ' . SomeProducts::class . '.name = "some name"');
            $query->setDI($this->di);
            expect($query->parse())->equals($expected);
            $expected = array('tables' => array(array('le_products', null, 'p')), 'models' => array(SomeProducts::class), 'fields' => array(array('type' => 'qualified', 'domain' => 'p', 'name' => 'name', 'balias' => 'name')), 'values' => array(array('type' => 260, 'value' => array('type' => 'literal', 'value' => 'some name'))));
            $query = new Query('UPDATE ' . SomeProducts::class . ' p SET p.name = "some name"');
            $query->setDI($this->di);
            expect($query->parse())->equals($expected);
            $expected = array('tables' => array('robots'), 'models' => array(Robots::class), 'fields' => array(array('type' => 'qualified', 'domain' => 'robots', 'name' => 'name', 'balias' => 'name'), array('type' => 'qualified', 'domain' => 'robots', 'name' => 'year', 'balias' => 'year')), 'values' => array(array('type' => 260, 'value' => array('type' => 'literal', 'value' => 'some name')), array('type' => 258, 'value' => array('type' => 'literal', 'value' => '1990'))));
            $query = new Query('UPDATE ' . Robots::class . ' SET ' . Robots::class . '.name = \'some name\', ' . Robots::class . '.year = 1990');
            $query->setDI($this->di);
            expect($query->parse())->equals($expected);
            $expected = array('tables' => array(array('le_products', null, 'p')), 'models' => array(SomeProducts::class), 'fields' => array(array('type' => 'qualified', 'domain' => 'p', 'name' => 'name', 'balias' => 'name'), array('type' => 'qualified', 'domain' => 'p', 'name' => 'year', 'balias' => 'year')), 'values' => array(array('type' => 260, 'value' => array('type' => 'literal', 'value' => 'some name')), array('type' => 258, 'value' => array('type' => 'literal', 'value' => '1990'))));
            $query = new Query('UPDATE ' . SomeProducts::class . ' p SET p.name = "some name", p.year = 1990');
            $query->setDI($this->di);
            expect($query->parse())->equals($expected);
            $expected = array('tables' => array('robots'), 'models' => array(Robots::class), 'fields' => array(array('type' => 'qualified', 'domain' => 'robots', 'name' => 'name', 'balias' => 'name'), array('type' => 'qualified', 'domain' => 'robots', 'name' => 'year', 'balias' => 'year')), 'values' => array(array('type' => 260, 'value' => array('type' => 'literal', 'value' => 'some name')), array('type' => 43, 'value' => array('type' => 'binary-op', 'op' => '+', 'left' => array('type' => 'functionCall', 'name' => 'YEAR', 'arguments' => array(array('type' => 'functionCall', 'name' => 'current_date'))), 'right' => array('type' => 'qualified', 'domain' => 'robots', 'name' => 'year', 'balias' => 'year')))));
            $query = new Query('UPDATE ' . Robots::class . ' SET ' . Robots::class . '.name = \'some name\', ' . Robots::class . '.year = YEAR(current_date()) + ' . Robots::class . '.year');
            $query->setDI($this->di);
            expect($query->parse())->equals($expected);
            $expected = array('tables' => array(array('robots', null, 'r')), 'models' => array(Robots::class), 'fields' => array(array('type' => 'qualified', 'domain' => 'r', 'name' => 'name', 'balias' => 'name'), array('type' => 'qualified', 'domain' => 'r', 'name' => 'year', 'balias' => 'year')), 'values' => array(array('type' => 260, 'value' => array('type' => 'literal', 'value' => 'some name')), array('type' => 43, 'value' => array('type' => 'binary-op', 'op' => '+', 'left' => array('type' => 'functionCall', 'name' => 'YEAR', 'arguments' => array(array('type' => 'functionCall', 'name' => 'current_date'))), 'right' => array('type' => 'qualified', 'domain' => 'r', 'name' => 'year', 'balias' => 'year')))));
            $query = new Query('UPDATE ' . Robots::class . ' AS r SET r.name = \'some name\', r.year = YEAR(current_date()) + r.year');
            $query->setDI($this->di);
            expect($query->parse())->equals($expected);
            $expected = array('tables' => array(array('robots', null, 'r')), 'models' => array(Robots::class), 'fields' => array(array('type' => 'qualified', 'domain' => 'r', 'name' => 'name', 'balias' => 'name')), 'values' => array(array('type' => 260, 'value' => array('type' => 'literal', 'value' => 'some name'))), 'where' => array('type' => 'binary-op', 'op' => '>', 'left' => array('type' => 'qualified', 'domain' => 'r', 'name' => 'id', 'balias' => 'id'), 'right' => array('type' => 'literal', 'value' => '100')));
            $query = new Query('UPDATE ' . Robots::class . ' AS r SET r.name = \'some name\' WHERE r.id > 100');
            $query->setDI($this->di);
            expect($query->parse())->equals($expected);
            $expected = array('tables' => array(array('robots', null, 'r')), 'models' => array(Robots::class), 'fields' => array(array('type' => 'qualified', 'domain' => 'r', 'name' => 'name', 'balias' => 'name'), array('type' => 'qualified', 'domain' => 'r', 'name' => 'year', 'balias' => 'year')), 'values' => array(array('type' => 260, 'value' => array('type' => 'literal', 'value' => 'some name')), array('type' => 42, 'value' => array('type' => 'binary-op', 'op' => '*', 'left' => array('type' => 'qualified', 'domain' => 'r', 'name' => 'year', 'balias' => 'year'), 'right' => array('type' => 'literal', 'value' => '2')))), 'where' => array('type' => 'binary-op', 'op' => '<=', 'left' => array('type' => 'binary-op', 'op' => '>', 'left' => array('type' => 'qualified', 'domain' => 'r', 'name' => 'id', 'balias' => 'id'), 'right' => array('type' => 'binary-op', 'op' => 'AND', 'left' => array('type' => 'literal', 'value' => '100'), 'right' => array('type' => 'qualified', 'domain' => 'r', 'name' => 'id', 'balias' => 'id'))), 'right' => array('type' => 'literal', 'value' => '200')));
            $query = new Query('UPDATE ' . Robots::class . ' as r set r.name = \'some name\', r.year = r.year*2 where r.id > 100 and r.id <= 200');
            $query->setDI($this->di);
            expect($query->parse())->equals($expected);
            $expected = array('tables' => array(array('robots', null, 'r')), 'models' => array(strtolower(Robots::class)), 'fields' => array(array('type' => 'qualified', 'domain' => 'r', 'name' => 'name', 'balias' => 'name')), 'values' => array(array('type' => 260, 'value' => array('type' => 'literal', 'value' => 'some name'))), 'limit' => array('number' => array('type' => 'literal', 'value' => '10')));
            $query = new Query('update ' . strtolower(Robots::class) . ' as r set r.name = \'some name\' LIMIT 10');
            $query->setDI($this->di);
            expect($query->parse())->equals($expected);
            $expected = array('tables' => array(array('robots', null, 'r')), 'models' => array(Robots::class), 'fields' => array(array('type' => 'qualified', 'domain' => 'r', 'name' => 'name', 'balias' => 'name')), 'values' => array(array('type' => 260, 'value' => array('type' => 'literal', 'value' => 'some name'))), 'limit' => array('number' => array('type' => 'literal', 'value' => '10')));
            $query = new Query('UPDATE ' . Robots::class . ' r SET r.name = \'some name\' LIMIT 10');
            $query->setDI($this->di);
            expect($query->parse())->equals($expected);
            $expected = array('tables' => array(array('robots', null, 'r')), 'models' => array(Robots::class), 'fields' => array(array('type' => 'qualified', 'domain' => 'r', 'name' => 'name', 'balias' => 'name')), 'values' => array(array('type' => 260, 'value' => array('type' => 'literal', 'value' => 'some name'))), 'where' => array('type' => 'binary-op', 'op' => '>', 'left' => array('type' => 'qualified', 'domain' => 'r', 'name' => 'id', 'balias' => 'id'), 'right' => array('type' => 'literal', 'value' => '100')), 'limit' => array('number' => array('type' => 'literal', 'value' => '10')));
            $query = new Query('UPDATE ' . Robots::class . ' AS r SET r.name = \'some name\' WHERE r.id > 100 LIMIT 10');
            $query->setDI($this->di);
            expect($query->parse())->equals($expected);
            // Issue 1011
            $expected = array('tables' => array(array('robots', null, 'r')), 'models' => array(Robots::class), 'fields' => array(array('type' => 'qualified', 'domain' => 'r', 'name' => 'name', 'balias' => 'name')), 'values' => array(array('type' => 260, 'value' => array('type' => 'literal', 'value' => 'some name'))), 'limit' => array('number' => array('type' => 'placeholder', 'value' => ':1')));
            $query = new Query('UPDATE ' . Robots::class . ' r SET r.name = \'some name\' LIMIT ?1');
            $query->setDI($this->di);
            expect($query->parse())->equals($expected);
        });
    }