Skip to content

Commit 24b4e00

Browse files
committed
2 parents 43f3802 + 8748a3d commit 24b4e00

2 files changed

Lines changed: 88 additions & 3 deletions

File tree

src/Utils/Query.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -594,7 +594,7 @@ public static function getClause($statement, $list, $clause, $type = 0, $skipFir
594594
$clauseIdx = $clauses[$clauseType];
595595

596596
$firstClauseIdx = $clauseIdx;
597-
$lastClauseIdx = $clauseIdx + 1;
597+
$lastClauseIdx = $clauseIdx;
598598

599599
// Determining the behavior of this function.
600600
if ($type === -1) {
@@ -603,7 +603,7 @@ public static function getClause($statement, $list, $clause, $type = 0, $skipFir
603603
} elseif ($type === 1) {
604604
$firstClauseIdx = $clauseIdx + 1;
605605
$lastClauseIdx = 10000; // Something big enough.
606-
} elseif (is_string($type)) {
606+
} elseif (is_string($type) && isset($clauses[$type])) {
607607
if ($clauses[$type] > $clauseIdx) {
608608
$firstClauseIdx = $clauseIdx + 1;
609609
$lastClauseIdx = $clauses[$type] - 1;

tests/Utils/QueryTest.php

Lines changed: 86 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -452,6 +452,7 @@ public function getTablesProvider()
452452

453453
public function testGetClause()
454454
{
455+
/* Assertion 1 */
455456
$parser = new Parser(
456457
'SELECT c.city_id, c.country_id ' .
457458
'FROM `city` ' .
@@ -460,13 +461,97 @@ public function testGetClause()
460461
'LIMIT 0, 1 ' .
461462
'INTO OUTFILE "/dev/null"'
462463
);
464+
$this->assertEquals(
465+
'0, 1 INTO OUTFILE "/dev/null"',
466+
Query::getClause(
467+
$parser->statements[0],
468+
$parser->list,
469+
'LIMIT',
470+
0
471+
)
472+
);
473+
// Assert it returns all clauses between FROM and LIMIT
463474
$this->assertEquals(
464475
'WHERE city_id < 1 ORDER BY city_id ASC',
476+
Query::getClause(
477+
$parser->statements[0],
478+
$parser->list,
479+
'FROM',
480+
'LIMIT'
481+
)
482+
);
483+
// Assert it returns all clauses between SELECT and LIMIT
484+
$this->assertEquals(
485+
'FROM `city` WHERE city_id < 1 ORDER BY city_id ASC',
465486
Query::getClause(
466487
$parser->statements[0],
467488
$parser->list,
468489
'LIMIT',
469-
'FROM'
490+
'SELECT'
491+
)
492+
);
493+
494+
/* Assertion 2 */
495+
$parser = new Parser(
496+
'DELETE FROM `renewal` ' .
497+
'WHERE number = "1DB" AND actionDate <= CURRENT_DATE() ' .
498+
'ORDER BY id ASC ' .
499+
'LIMIT 1'
500+
);
501+
$this->assertEquals(
502+
'number = "1DB" AND actionDate <= CURRENT_DATE()',
503+
Query::getClause(
504+
$parser->statements[0],
505+
$parser->list,
506+
'WHERE'
507+
)
508+
);
509+
$this->assertEquals(
510+
'1',
511+
Query::getClause(
512+
$parser->statements[0],
513+
$parser->list,
514+
'LIMIT'
515+
)
516+
);
517+
$this->assertEquals(
518+
'id ASC',
519+
Query::getClause(
520+
$parser->statements[0],
521+
$parser->list,
522+
'ORDER BY'
523+
)
524+
);
525+
526+
/* Assertion 3 */
527+
$parser = new Parser(
528+
'UPDATE `renewal` SET `some_column` = 1 ' .
529+
'WHERE number = "1DB" AND actionDate <= CURRENT_DATE() ' .
530+
'ORDER BY id ASC ' .
531+
'LIMIT 1'
532+
);
533+
$this->assertEquals(
534+
'number = "1DB" AND actionDate <= CURRENT_DATE()',
535+
Query::getClause(
536+
$parser->statements[0],
537+
$parser->list,
538+
'WHERE'
539+
)
540+
);
541+
$this->assertEquals(
542+
'1',
543+
Query::getClause(
544+
$parser->statements[0],
545+
$parser->list,
546+
'LIMIT'
547+
)
548+
);
549+
$this->assertEquals(
550+
'id ASC',
551+
Query::getClause(
552+
$parser->statements[0],
553+
$parser->list,
554+
'ORDER BY'
470555
)
471556
);
472557
}

0 commit comments

Comments
 (0)