Skip to content

Commit

Permalink
Implement case insensitive function-based unique index.
Browse files Browse the repository at this point in the history
  • Loading branch information
yajra committed Nov 21, 2020
1 parent f54923b commit 0213d65
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 4 deletions.
10 changes: 9 additions & 1 deletion src/Oci8/Schema/Grammars/OracleGrammar.php
Original file line number Diff line number Diff line change
Expand Up @@ -266,7 +266,15 @@ public function compileForeign(Blueprint $blueprint, Fluent $command)
*/
public function compileUnique(Blueprint $blueprint, Fluent $command)
{
return 'alter table ' . $this->wrapTable($blueprint) . " add constraint {$command->index} unique ( " . $this->columnize($command->columns) . ' )';
$columns = array_map(function($column) {
$column = $this->wrap($column);

return "lower({$column})";
}, $command->columns);

$columns = implode(', ', $columns);

return sprintf('create unique index %s on %s (%s)', $command->index, $this->wrapTable($blueprint), $columns);
}

/**
Expand Down
6 changes: 3 additions & 3 deletions tests/Oci8SchemaGrammarTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -438,7 +438,7 @@ public function testAddingUniqueKey()
$statements = $blueprint->toSql($this->getConnection(), $this->getGrammar());

$this->assertEquals(1, count($statements));
$this->assertEquals('alter table users add constraint bar unique ( foo )', $statements[0]);
$this->assertEquals('create unique index bar on users (lower(foo))', $statements[0]);
}

public function testAddingDefinedUniqueKeyWithPrefix()
Expand All @@ -453,7 +453,7 @@ public function testAddingDefinedUniqueKeyWithPrefix()
$statements = $blueprint->toSql($this->getConnection(), $grammar);

$this->assertEquals(1, count($statements));
$this->assertEquals('alter table prefix_users add constraint bar unique ( foo )', $statements[0]);
$this->assertEquals('create unique index bar on prefix_users (lower(foo))', $statements[0]);
}

public function testAddingGeneratedUniqueKeyWithPrefix()
Expand All @@ -468,7 +468,7 @@ public function testAddingGeneratedUniqueKeyWithPrefix()
$statements = $blueprint->toSql($this->getConnection(), $grammar);

$this->assertEquals(1, count($statements));
$this->assertEquals('alter table prefix_users add constraint prefix_users_foo_uk unique ( foo )',
$this->assertEquals('create unique index prefix_users_foo_uk on prefix_users (lower(foo))',
$statements[0]);
}

Expand Down

0 comments on commit 0213d65

Please sign in to comment.