in doc-architect/doc-architect-core/src/main/java/com/docarchitect/core/scanner/impl/schema/SqlMigrationScanner.java [293:333]
private List<DataEntity.Field> extractColumns(String tableBody) {
List<DataEntity.Field> fields = new ArrayList<>();
// Split by commas (simple approach, may not handle all edge cases)
String[] lines = tableBody.split("\n");
for (String line : lines) {
line = line.trim();
// Skip constraint definitions
if (line.toUpperCase().startsWith(KEYWORD_PRIMARY_KEY) ||
line.toUpperCase().startsWith(KEYWORD_FOREIGN_KEY) ||
line.toUpperCase().startsWith(KEYWORD_CONSTRAINT) ||
line.toUpperCase().startsWith(KEYWORD_UNIQUE) ||
line.toUpperCase().startsWith(KEYWORD_CHECK) ||
line.toUpperCase().startsWith(KEYWORD_INDEX) ||
line.isEmpty()) {
continue;
}
// Extract column name and type
String[] parts = line.split("\\s+", 3);
if (parts.length >= 2) {
String columnName = parts[0].replaceAll("[`'\"]", "").replaceAll(",$", "");
String columnType = parts[1].replaceAll(",$", "");
// Determine if nullable
boolean nullable = !line.toUpperCase().contains(KEYWORD_NOT_NULL);
DataEntity.Field field = new DataEntity.Field(
columnName,
columnType,
nullable,
null
);
fields.add(field);
}
}
return fields;
}