diff --git a/db2struct/main.go b/db2struct/main.go index 658a8f9..69fea16 100644 --- a/db2struct/main.go +++ b/db2struct/main.go @@ -23,6 +23,7 @@ var packageName = goopt.String([]string{"--package"}, "", "name to set for packa var structName = goopt.String([]string{"--struct"}, "", "name to set for struct") var jsonAnnotation = goopt.Flag([]string{"--json"}, []string{"--no-json"}, "Add json annotations (default)", "Disable json annotations") +var sqlxAnnotation = goopt.Flag([]string{"--sqlx"}, []string{}, "Add sqlx annotations (tags)", "") var gormAnnotation = goopt.Flag([]string{"--gorm"}, []string{}, "Add gorm annotations (tags)", "") var gureguTypes = goopt.Flag([]string{"--guregu"}, []string{}, "Add guregu null types", "") @@ -96,7 +97,7 @@ func main() { *packageName = "newpackage" } // Generate struct string based on columnDataTypes - struc, err := db2struct.Generate(*columnDataTypes, *mariadbTable, *structName, *packageName, *jsonAnnotation, *gormAnnotation, *gureguTypes) + struc, err := db2struct.Generate(*columnDataTypes, *mariadbTable, *structName, *packageName, *jsonAnnotation, *gormAnnotation, *sqlxAnnotation, *gureguTypes) if err != nil { fmt.Println("Error in creating struct from json: " + err.Error()) diff --git a/utils.go b/utils.go index 88f341e..a6c4056 100644 --- a/utils.go +++ b/utils.go @@ -81,9 +81,9 @@ var Debug = false // Generate Given a Column map with datatypes and a name structName, // attempts to generate a struct definition -func Generate(columnTypes map[string]map[string]string, tableName string, structName string, pkgName string, jsonAnnotation bool, gormAnnotation bool, gureguTypes bool) ([]byte, error) { +func Generate(columnTypes map[string]map[string]string, tableName string, structName string, pkgName string, jsonAnnotation bool, gormAnnotation bool, sqlxAnnotation bool, gureguTypes bool) ([]byte, error) { var dbTypes string - dbTypes = generateMysqlTypes(columnTypes, 0, jsonAnnotation, gormAnnotation, gureguTypes) + dbTypes = generateMysqlTypes(columnTypes, 0, jsonAnnotation, gormAnnotation, sqlxAnnotation, gureguTypes) src := fmt.Sprintf("package %s\ntype %s %s}", pkgName, structName, diff --git a/utils_mysql.go b/utils_mysql.go index 1d275fb..994471a 100644 --- a/utils_mysql.go +++ b/utils_mysql.go @@ -61,7 +61,7 @@ func GetColumnsFromMysqlTable(mariadbUser string, mariadbPassword string, mariad } // Generate go struct entries for a map[string]interface{} structure -func generateMysqlTypes(obj map[string]map[string]string, depth int, jsonAnnotation bool, gormAnnotation bool, gureguTypes bool) string { +func generateMysqlTypes(obj map[string]map[string]string, depth int, jsonAnnotation bool, gormAnnotation bool, sqlxAnnotation bool, gureguTypes bool) string { structure := "struct {" keys := make([]string, 0, len(obj)) @@ -91,6 +91,10 @@ func generateMysqlTypes(obj map[string]map[string]string, depth int, jsonAnnotat if jsonAnnotation == true { annotations = append(annotations, fmt.Sprintf("json:\"%s\"", key)) } + + if sqlxAnnotation == true { + annotations = append(annotations, fmt.Sprintf("db:\"%s\"", key)) + } if len(annotations) > 0 { structure += fmt.Sprintf("\n%s %s `%s`", fieldName,