Compare commits

..

2 commits

Author SHA1 Message Date
rxu
b4b787198a
[ticket/17524] Try not to hit MSSQL index key length limitations
900 bytes for a clustered index. 1,700 bytes for a nonclustered index.
For SQL Server 2014 (12.x) and earlier, all versions supported 900 bytes
for all index types.

PHPBB-17524
2025-06-12 01:37:40 +07:00
rxu
c7e94d4632
[ticket/17524] Add test assertions
PHPBB-17524
2025-06-11 21:04:56 +07:00
2 changed files with 11 additions and 6 deletions

View file

@ -26,9 +26,9 @@ class phpbb_dbal_migration_schema extends \phpbb\db\migration\migration
'COLUMNS' => [
'module_id' => ['UINT:3', NULL, 'auto_increment'],
'user_id' => ['ULINT', 0],
'endpoint' => ['TEXT', ''],
'endpoint' => ['VCHAR:220', ''],
'expiration_time' => ['TIMESTAMP', 0],
'p256dh' => ['VCHAR', ''],
'p256dh' => ['VCHAR:200', ''],
'auth' => ['VCHAR:100', ''],
],
'PRIMARY_KEY' => 'module_id',

View file

@ -409,7 +409,12 @@ class phpbb_dbal_migrator_test extends phpbb_database_test_case
$this->assertTrue($this->db_tools->sql_table_exists('phpbb_foobar'));
$index_data_row = $this->db_tools->sql_get_table_index_data('phpbb_foobar');
$is_mysql = $this->db->get_sql_layer() === 'mysqli'; // Index length only applies to MySQL indexes
$this->assertEquals(4, count($index_data_row));
$this->assertTrue(isset($index_data_row['i_simple']));
$this->assertTrue(isset($index_data_row['i_uniq']));
$this->assertTrue(isset($index_data_row['i_auth']));
$is_mysql = $this->db->get_sql_layer() === 'mysqli'; // Key 'lengths' option only applies to MySQL indexes
$is_mssql = in_array($this->db->get_sql_layer(), ['mssqlnative', 'mssql_odbc']); // MSSQL primary index key has 'clustered' flag
foreach ($index_data_row as $index_name => $index_data)
{
@ -417,7 +422,7 @@ class phpbb_dbal_migrator_test extends phpbb_database_test_case
{
case 'i_simple':
$this->assertEquals(['user_id', 'endpoint'], $index_data['columns']);
$this->assertEmpty($index_data['flags']);
$this->assertEquals($is_mssql ? ['clustered'] : [], $index_data['flags']);
$this->assertFalse($index_data['is_primary']);
$this->assertFalse($index_data['is_unique']);
$this->assertTrue($index_data['is_simple']);
@ -427,7 +432,7 @@ class phpbb_dbal_migrator_test extends phpbb_database_test_case
break;
case 'i_uniq':
$this->assertEquals(['expiration_time', 'p256dh'], $index_data['columns']);
$this->assertEmpty($index_data['flags']);
$this->assertEquals($is_mssql ? ['clustered'] : [], $index_data['flags']);
$this->assertFalse($index_data['is_primary']);
$this->assertTrue($index_data['is_unique']);
$this->assertFalse($index_data['is_simple']);
@ -437,7 +442,7 @@ class phpbb_dbal_migrator_test extends phpbb_database_test_case
break;
case 'i_auth':
$this->assertEquals(['auth'], $index_data['columns']);
$this->assertEmpty($index_data['flags']);
$this->assertEquals($is_mssql ? ['clustered'] : [], $index_data['flags']);
$this->assertFalse($index_data['is_primary']);
$this->assertFalse($index_data['is_unique']);
$this->assertTrue($index_data['is_simple']);