1
0
mirror of https://github.com/ManyakRus/crud_generator.git synced 2025-02-03 09:57:21 +02:00

сделал FillIDMinimum_ManyPK()

This commit is contained in:
Nikitin Aleksandr 2024-05-29 14:18:58 +03:00
parent 35e94c42a6
commit 709c6d8a1d
4 changed files with 156 additions and 24 deletions

View File

@ -395,11 +395,29 @@ func ReplacePrimaryKeyM_ID(Text string, Table1 *types.Table) string {
func AddSkipNow(Text string, Table1 *types.Table) string {
Otvet := Text
if Table1.IDMinimum == "" || Table1.IDMinimum == "0" {
TextFind := "(t *testing.T) {"
Otvet = strings.ReplaceAll(Otvet, TextFind, TextFind+"\n\tt.SkipNow() //now rows in DB\n")
Columns := FindPrimaryKeyColumns(Table1)
if Columns == nil {
return Otvet
}
//проверка ИД=""
is_no_zero := true
for _, Column1 := range Columns {
if Column1.IDMinimum == "" || Column1.IDMinimum == "0" {
is_no_zero = false
break
}
}
//если нет пустых то возврат
if is_no_zero == true {
return Otvet
}
//добавляем t.SkipNow()
TextFind := "(t *testing.T) {"
Otvet = strings.ReplaceAll(Otvet, TextFind, TextFind+"\n\tt.SkipNow() //now rows in DB\n")
return Otvet
}
@ -1945,7 +1963,7 @@ func Replace_Postgres_ID_Test(Text string, Table1 *types.Table) string {
return Otvet
}
IDMinimum := Table1.IDMinimum
IDMinimum := PrimaryKeyColumn.IDMinimum
if IDMinimum == "" {
IDMinimum = FindTextDefaultValue(PrimaryKeyColumn.TypeGo)
}
@ -1953,7 +1971,7 @@ func Replace_Postgres_ID_Test(Text string, Table1 *types.Table) string {
switch PrimaryKeyColumn.TypeGo {
case "uuid.UUID":
{
if Table1.IDMinimum == "" {
if PrimaryKeyColumn.IDMinimum == "" {
Otvet = strings.ReplaceAll(Otvet, TextFind, `var Postgres_ID_Test = `+IDMinimum+``)
} else {
Otvet = strings.ReplaceAll(Otvet, TextFind, `var Postgres_ID_Test, _ = uuid.Parse("`+IDMinimum+`")`)
@ -1984,7 +2002,7 @@ func Replace_Model_ID_Test(Text string, Table1 *types.Table) string {
return Otvet
}
IDMinimum := Table1.IDMinimum
IDMinimum := PrimaryKeyColumn.IDMinimum
if IDMinimum == "" {
IDMinimum = FindTextDefaultValue(PrimaryKeyColumn.TypeGo)
}
@ -1993,7 +2011,7 @@ func Replace_Model_ID_Test(Text string, Table1 *types.Table) string {
switch PrimaryKeyColumn.TypeGo {
case "uuid.UUID":
{
if Table1.IDMinimum == "" {
if PrimaryKeyColumn.IDMinimum == "" {
Otvet = strings.ReplaceAll(Otvet, TextFind, `var `+ModelName+`_ID_Test = `+IDMinimum+``)
} else {
Otvet = strings.ReplaceAll(Otvet, TextFind, `var `+ModelName+`_ID_Test, _ = uuid.Parse("`+IDMinimum+`")`)

View File

@ -45,7 +45,8 @@ func FillMapTable() (map[string]*types.Table, error) {
return MapTable, err
}
err = FillIDMinimum(MapTable)
err = FillIDMinimum_ManyPK(MapTable)
//err = FillIDMinimum(MapTable)
if err != nil {
log.Error("FillIDMinimum() error: ", err)
return MapTable, err
@ -398,7 +399,6 @@ func FillIDMinimum(MapTable map[string]*types.Table) error {
}
var IDMinimum sql.NullString
//TableRows := TableRowsStruct{}
tx = tx.Scan(&IDMinimum)
err = tx.Error
if err != nil {
@ -406,16 +406,128 @@ func FillIDMinimum(MapTable map[string]*types.Table) error {
}
//
Table1.IDMinimum = IDMinimum.String
//if TypeGo == "string" || TypeGo == "uuid.UUID" {
// Table1.IDMinimum = IDMinimum.String
//} else if mini_func.IsNumberType(TypeGo) == true {
// Table1.IDMinimum = IDMinimum.String
//} else if TypeGo == "time.Time" {
// Table1.IDMinimum = IDMinimum.String
//} else {
// Table1.IDMinimum = IDMinimum.String
//}
ColumnPK := create_files.FindPrimaryKeyColumn(Table1)
ColumnPK.IDMinimum = IDMinimum.String
}
return err
}
// FillIDMinimum_ManyPK - находим минимальный ID, для тестов с этим ID, для многих Primary Key
func FillIDMinimum_ManyPK(MapTable map[string]*types.Table) error {
var err error
//соединение
db := postgres_gorm.GetConnection()
ctxMain := contextmain.GetContext()
Schema := strings.Trim(postgres_gorm.Settings.DB_SCHEMA, " ")
for TableName, Table1 := range MapTable {
ColumnsPK := create_files.FindPrimaryKeyColumns(Table1)
Is_UUID_Type := false
for _, Column1 := range ColumnsPK {
Is_UUID_Type1 := create_files.Is_UUID_Type(Column1.TypeGo)
Is_UUID_Type = Is_UUID_Type || Is_UUID_Type1
}
//текст запроса
TextSQL := ""
if Is_UUID_Type == false {
TextSQL = `SELECT
`
Comma := ""
for _, Column1 := range ColumnsPK {
TextSQL += Comma + `Min("` + Column1.Name + `") as "` + Column1.Name + `"`
Comma = ","
}
TextSQL = TextSQL + `
FROM
"` + Schema + `"."` + TableName + `"
WHERE 1=1`
for _, Column1 := range ColumnsPK {
DefaultValueSQL := create_files.FindTextDefaultValueSQL(Column1.TypeGo)
TextSQL += `and ` + Column1.Name + ` <> ` + DefaultValueSQL
}
} else {
TextSQL = `SELECT
`
Comma := ""
for _, Column1 := range ColumnsPK {
TextSQL += Comma + `"` + Column1.Name + `" as "` + Column1.Name + `"`
Comma = ","
}
TextSQL = TextSQL + `
FROM
"` + Schema + `"."` + TableName + `"
WHERE 1=1`
for _, Column1 := range ColumnsPK {
TextSQL += `and ` + Column1.Name + ` is not null `
}
TextSQL = TextSQL + `
ORDER BY
`
Comma = ""
for _, Column1 := range ColumnsPK {
TextSQL += Comma + `"` + Column1.Name + `"`
Comma = ","
}
//TextSQL = `SELECT "` + NameID + `" as id_minimum
// FROM "` + Schema + `"."` + TableName + `"
// WHERE "` + NameID + `" is not null
// ORDER BY ` + NameID + `
// LIMIT 1`
}
ctx, ctxCancelFunc := context.WithTimeout(ctxMain, time.Second*60)
defer ctxCancelFunc()
db.WithContext(ctx)
//запрос с разным количеством колонок
tx := db.Raw(TextSQL)
err = tx.Error
if err != nil {
log.Panic("Raw() Wrong SQL query: ", TextSQL, " error: ", err)
}
rows, err := tx.Rows()
if err != nil {
log.Panic("Rows() Wrong SQL query: ", TextSQL, " error: ", err)
}
has_next := rows.Next()
if has_next == false {
log.Panic("Next() Wrong SQL query: ", TextSQL, " error: ", err)
}
ColumnsGorm, err := rows.Columns()
MapIDMinimum := make(map[string]string)
values := make([]interface{}, len(ColumnsGorm))
for i := range values {
values[i] = new(interface{})
}
if err := rows.Scan(values...); err != nil {
return err
}
for i, colName := range ColumnsGorm {
value1 := ""
value1 = fmt.Sprint(*values[i].(*interface{}))
if value1 == "<nil>" {
value1 = ""
}
MapIDMinimum[colName] = value1
}
//
for _, Column1 := range ColumnsPK {
value := MapIDMinimum[Column1.Name]
Column1.IDMinimum = value
}
}
return err

View File

@ -1,13 +1,14 @@
package postgres
import (
ConfigMain "github.com/ManyakRus/starter/config_main"
"github.com/ManyakRus/crud_generator/internal/config"
"github.com/ManyakRus/starter/postgres_gorm"
"testing"
)
func TestFillMassTable(t *testing.T) {
ConfigMain.LoadEnv()
//ConfigMain.LoadEnv()
config.LoadSettingsTxt()
postgres_gorm.Connect()
defer postgres_gorm.CloseConnection()

View File

@ -12,6 +12,7 @@ type Column struct {
NameGo string `gorm:-`
TypeGo string `gorm:-`
IsPrimaryKey bool `json:"is_primary_key" gorm:"column:is_primary_key;default:false"`
IDMinimum string
}
type Table struct {
@ -19,9 +20,9 @@ type Table struct {
//Element *etree.Element
MapColumns map[string]*Column
//Columns []Column
OrderNumber int
NameGo string
IDMinimum string
OrderNumber int
NameGo string
//IDMinimum string
Comment string `json:"table_comment" gorm:"column:table_comment;default:''"`
RowsCount int64
PrimaryKeyColumnsCount int