mirror of
https://github.com/nextcloud/server.git
synced 2026-06-08 16:26:59 -04:00
Ensure string column limit of 4.000 characters
https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/datatype-limits.html#GUID-963C79C9-9303-49FE-8F2D-C8AAF04D3095 Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
parent
c407bb9786
commit
129bae62d4
2 changed files with 44 additions and 0 deletions
|
|
@ -594,6 +594,10 @@ class MigrationService {
|
|||
if ((!$sourceTable instanceof Table || !$sourceTable->hasColumn($thing->getName())) && $thing->getNotnull() && $thing->getType()->getName() === Types::BOOLEAN) {
|
||||
throw new \InvalidArgumentException('Column "' . $table->getName() . '"."' . $thing->getName() . '" is type Bool and also NotNull, so it can not store "false".');
|
||||
}
|
||||
|
||||
if ($thing->getLength() > 4000 && $thing->getType()->getName() === Types::STRING) {
|
||||
throw new \InvalidArgumentException('Column "' . $table->getName() . '"."' . $thing->getName() . '" is type String, but exceeding the 4.000 length limit.');
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($table->getIndexes() as $thing) {
|
||||
|
|
|
|||
|
|
@ -716,4 +716,44 @@ class MigrationsTest extends \Test\TestCase {
|
|||
|
||||
self::invokePrivate($this->migrationService, 'ensureOracleConstraints', [$sourceSchema, $schema, 3]);
|
||||
}
|
||||
|
||||
|
||||
public function testEnsureOracleConstraintsStringLength4000() {
|
||||
$this->expectException(\InvalidArgumentException::class);
|
||||
|
||||
$column = $this->createMock(Column::class);
|
||||
$column->expects($this->any())
|
||||
->method('getName')
|
||||
->willReturn('aaaa');
|
||||
$column->expects($this->any())
|
||||
->method('getType')
|
||||
->willReturn(Type::getType('string'));
|
||||
$column->expects($this->any())
|
||||
->method('getLength')
|
||||
->willReturn(4001);
|
||||
|
||||
$table = $this->createMock(Table::class);
|
||||
$table->expects($this->any())
|
||||
->method('getName')
|
||||
->willReturn(\str_repeat('a', 30));
|
||||
|
||||
$table->expects($this->once())
|
||||
->method('getColumns')
|
||||
->willReturn([$column]);
|
||||
|
||||
$schema = $this->createMock(Schema::class);
|
||||
$schema->expects($this->once())
|
||||
->method('getTables')
|
||||
->willReturn([$table]);
|
||||
|
||||
$sourceSchema = $this->createMock(Schema::class);
|
||||
$sourceSchema->expects($this->any())
|
||||
->method('getTable')
|
||||
->willThrowException(new SchemaException());
|
||||
$sourceSchema->expects($this->any())
|
||||
->method('hasSequence')
|
||||
->willReturn(false);
|
||||
|
||||
self::invokePrivate($this->migrationService, 'ensureOracleConstraints', [$sourceSchema, $schema, 3]);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue