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:
parent
35e94c42a6
commit
709c6d8a1d
@ -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+`")`)
|
||||
|
@ -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
|
||||
|
@ -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()
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user