apache / apache/shardingsphere

Consider adding ConstraintMetaData to metadata to support constraint segment merge logic

Open
#16,086 7 comments 0 reactions 3 assignees Claimed by @TherChenYang View on GitHub
in: metadata type: enhancement
Dominant language
Java
Stars
20.8k
Forks
6.9k
Avg merge
11h 35m
Merged PRs (30d)
326

Description

## Feature Request

To support handling of foreign key constraints in issue #16050, ConstraintMetaData needs to be added to the metadata.

Add `Map constraints` to TableMetaData:

```java
/**
* Table meta data.
*/
@Getter
@EqualsAndHashCode
@ToString
public final class TableMetaData {

private final String name;

private final Map columns;

private final Map indexes;

private final Map constrains;

private final List primaryKeyColumns = new ArrayList<>();
}

/**
* Constraint meta data.
*/
@RequiredArgsConstructor
@Getter
@EqualsAndHashCode
@ToString
public final class ConstraintMetaData {

private final String name;

private final String referencedTableName;
}
```

Then add query logic for constraints in MySQLTableMetaDataLoader.

```sql
SELECT CONSTRAINT_NAME, TABLE_NAME, COLUMN_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME FROM information_schema.KEY_COLUMN_USAGE
WHERE TABLE_NAME IN ('bmsql_district_0') AND REFERENCED_TABLE_SCHEMA IS NOT NULL;
```

- [x] Support MySQL constraint meta data load
- [x] Support Postgresql constraint meta data load
- [ ] Support openGauss constraint meta data load
- [ ] Support Oracle constraint meta data load
- [ ] Support SQLServer constraint meta data load

### Is your feature request related to a problem?

issue #16050

### Describe the feature you would like.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.