@@ -1300,6 +1300,69 @@ public function testPurgeCollectionCache(): void
13001300 $this->assertArrayHasKey('age', $document);
13011301 }
13021302
1303+ public function testSchemaAttribute(): void
1304+ {
1305+ if (!$this->getDatabase()->getAdapter()->getSupportForSchemaAttributes()) {
1306+ $this->expectNotToPerformAssertions();
1307+ return;
1308+ }
1309+
1310+ $collection = 'schema_attributes';
1311+ $db = static::getDatabase();
1312+
1313+ $this->assertEmpty($db->getSchemaAttributes('no_such_collection'));
1314+
1315+ $db->createCollection($collection);
1316+
1317+ $db->createAttribute($collection, 'username', Database::VAR_STRING, 128, true);
1318+ $db->createAttribute($collection, 'story', Database::VAR_STRING, 20000, true);
1319+ $db->createAttribute($collection, 'string_list', Database::VAR_STRING, 128, true, null, true, true);
1320+ $db->createAttribute($collection, 'dob', Database::VAR_DATETIME, 0, false, '2000-06-12T14:12:55.000+00:00', true, false, null, [], ['datetime']);
1321+
1322+ $attributes = [];
1323+ foreach ($db->getSchemaAttributes($collection) as $attribute) {
1324+ /**
1325+ * @var Document $attribute
1326+ */
1327+ $attributes[$attribute->getAttribute('columnName')] = $attribute;
1328+ }
1329+
1330+ $attribute = $attributes['username'];
1331+ $this->assertEquals('username', $attribute['columnName']);
1332+ $this->assertEquals('varchar', $attribute['dataType']);
1333+ $this->assertEquals('varchar(128)', $attribute['columnType']);
1334+ $this->assertEquals('128', $attribute['characterMaximumLength']);
1335+ $this->assertEquals('YES', $attribute['isNullable']);
1336+
1337+ $attribute = $attributes['story'];
1338+ $this->assertEquals('story', $attribute['columnName']);
1339+ $this->assertEquals('text', $attribute['dataType']);
1340+ $this->assertEquals('text', $attribute['columnType']);
1341+ $this->assertEquals('65535', $attribute['characterMaximumLength']);
1342+
1343+ $attribute = $attributes['string_list'];
1344+ $this->assertEquals('string_list', $attribute['columnName']);
1345+ $this->assertTrue(in_array($attribute['dataType'], ['json', 'longtext'])); // mysql vs maria
1346+ $this->assertTrue(in_array($attribute['columnType'], ['json', 'longtext']));
1347+ $this->assertTrue(in_array($attribute['characterMaximumLength'], [null, '4294967295']));
1348+ $this->assertEquals('YES', $attribute['isNullable']);
1349+
1350+ $attribute = $attributes['dob'];
1351+ $this->assertEquals('dob', $attribute['columnName']);
1352+ $this->assertEquals('datetime', $attribute['dataType']);
1353+ $this->assertEquals('datetime(3)', $attribute['columnType']);
1354+ $this->assertEquals(null, $attribute['characterMaximumLength']);
1355+ $this->assertEquals('3', $attribute['datetimePrecision']);
1356+
1357+ if ($db->getSharedTables()) {
1358+ $attribute = $attributes['_tenant'];
1359+ $this->assertEquals('_tenant', $attribute['columnName']);
1360+ $this->assertEquals('int', $attribute['dataType']);
1361+ $this->assertEquals('10', $attribute['numericPrecision']);
1362+ $this->assertTrue(in_array($attribute['columnType'], ['int unsigned', 'int(11) unsigned']));
1363+ }
1364+ }
1365+
13031366 public function testCreateDeleteAttribute(): void
13041367 {
13051368 static::getDatabase()->createCollection('attributes');
0 commit comments