Added diff to the tool
Some checks are pending
CI / Test (1.25) (push) Waiting to run
CI / Lint (push) Waiting to run
CI / Build (push) Waiting to run
CI / Test (1.23) (push) Waiting to run
CI / Test (1.24) (push) Waiting to run

This commit is contained in:
Hein
2025-12-18 13:38:32 +02:00
parent bed4f5d3bd
commit fcbceaf434
10 changed files with 1454 additions and 31 deletions

View File

@@ -212,7 +212,7 @@ func (r *Reader) getReceiverType(expr ast.Expr) string {
}
// parseTableNameMethod parses a TableName() method and extracts the table and schema name
func (r *Reader) parseTableNameMethod(funcDecl *ast.FuncDecl) (string, string) {
func (r *Reader) parseTableNameMethod(funcDecl *ast.FuncDecl) (tableName string, schemaName string) {
if funcDecl.Body == nil {
return "", ""
}
@@ -341,12 +341,12 @@ func (r *Reader) isGORMModel(field *ast.Field) bool {
func (r *Reader) isRelationship(tag string) bool {
gormTag := r.extractGormTag(tag)
return strings.Contains(gormTag, "foreignKey:") ||
strings.Contains(gormTag, "references:") ||
strings.Contains(gormTag, "many2many:")
strings.Contains(gormTag, "references:") ||
strings.Contains(gormTag, "many2many:")
}
// extractTableFromGormTag extracts table and schema from gorm tag
func (r *Reader) extractTableFromGormTag(tag string) (string, string) {
func (r *Reader) extractTableFromGormTag(tag string) (tablename string, schemaName string) {
// This is typically set via TableName() method, not in tags
// We'll return empty strings and rely on deriveTableName
return "", ""
@@ -439,12 +439,12 @@ func (r *Reader) extractGormTag(tag string) string {
// parseTypeWithLength parses a type string and extracts length if present
// e.g., "varchar(255)" returns ("varchar", 255)
func (r *Reader) parseTypeWithLength(typeStr string) (string, int) {
func (r *Reader) parseTypeWithLength(typeStr string) (baseType string, length int) {
// Check for type with length: varchar(255), char(10), etc.
// Also handle precision/scale: numeric(10,2)
if strings.Contains(typeStr, "(") {
idx := strings.Index(typeStr, "(")
baseType := strings.TrimSpace(typeStr[:idx])
baseType = strings.TrimSpace(typeStr[:idx])
// Extract numbers from parentheses
parens := typeStr[idx+1:]
@@ -454,12 +454,13 @@ func (r *Reader) parseTypeWithLength(typeStr string) (string, int) {
// For now, just handle single number (length)
if !strings.Contains(parens, ",") {
length := 0
fmt.Sscanf(parens, "%d", &length)
return baseType, length
if _, err := fmt.Sscanf(parens, "%d", &length); err == nil {
return
}
}
}
return typeStr, 0
baseType = typeStr
return
}
// parseGormTag parses a gorm tag string into a map