You've already forked crud_generator
mirror of
https://github.com/ManyakRus/crud_generator.git
synced 2025-07-16 02:54:19 +02:00
сделал FillIDMinimum_ManyPK()
This commit is contained in:
@ -395,10 +395,28 @@ func ReplacePrimaryKeyM_ID(Text string, Table1 *types.Table) string {
|
|||||||
func AddSkipNow(Text string, Table1 *types.Table) string {
|
func AddSkipNow(Text string, Table1 *types.Table) string {
|
||||||
Otvet := Text
|
Otvet := Text
|
||||||
|
|
||||||
if Table1.IDMinimum == "" || Table1.IDMinimum == "0" {
|
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) {"
|
TextFind := "(t *testing.T) {"
|
||||||
Otvet = strings.ReplaceAll(Otvet, TextFind, TextFind+"\n\tt.SkipNow() //now rows in DB\n")
|
Otvet = strings.ReplaceAll(Otvet, TextFind, TextFind+"\n\tt.SkipNow() //now rows in DB\n")
|
||||||
}
|
|
||||||
|
|
||||||
return Otvet
|
return Otvet
|
||||||
}
|
}
|
||||||
@ -1945,7 +1963,7 @@ func Replace_Postgres_ID_Test(Text string, Table1 *types.Table) string {
|
|||||||
return Otvet
|
return Otvet
|
||||||
}
|
}
|
||||||
|
|
||||||
IDMinimum := Table1.IDMinimum
|
IDMinimum := PrimaryKeyColumn.IDMinimum
|
||||||
if IDMinimum == "" {
|
if IDMinimum == "" {
|
||||||
IDMinimum = FindTextDefaultValue(PrimaryKeyColumn.TypeGo)
|
IDMinimum = FindTextDefaultValue(PrimaryKeyColumn.TypeGo)
|
||||||
}
|
}
|
||||||
@ -1953,7 +1971,7 @@ func Replace_Postgres_ID_Test(Text string, Table1 *types.Table) string {
|
|||||||
switch PrimaryKeyColumn.TypeGo {
|
switch PrimaryKeyColumn.TypeGo {
|
||||||
case "uuid.UUID":
|
case "uuid.UUID":
|
||||||
{
|
{
|
||||||
if Table1.IDMinimum == "" {
|
if PrimaryKeyColumn.IDMinimum == "" {
|
||||||
Otvet = strings.ReplaceAll(Otvet, TextFind, `var Postgres_ID_Test = `+IDMinimum+``)
|
Otvet = strings.ReplaceAll(Otvet, TextFind, `var Postgres_ID_Test = `+IDMinimum+``)
|
||||||
} else {
|
} else {
|
||||||
Otvet = strings.ReplaceAll(Otvet, TextFind, `var Postgres_ID_Test, _ = uuid.Parse("`+IDMinimum+`")`)
|
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
|
return Otvet
|
||||||
}
|
}
|
||||||
|
|
||||||
IDMinimum := Table1.IDMinimum
|
IDMinimum := PrimaryKeyColumn.IDMinimum
|
||||||
if IDMinimum == "" {
|
if IDMinimum == "" {
|
||||||
IDMinimum = FindTextDefaultValue(PrimaryKeyColumn.TypeGo)
|
IDMinimum = FindTextDefaultValue(PrimaryKeyColumn.TypeGo)
|
||||||
}
|
}
|
||||||
@ -1993,7 +2011,7 @@ func Replace_Model_ID_Test(Text string, Table1 *types.Table) string {
|
|||||||
switch PrimaryKeyColumn.TypeGo {
|
switch PrimaryKeyColumn.TypeGo {
|
||||||
case "uuid.UUID":
|
case "uuid.UUID":
|
||||||
{
|
{
|
||||||
if Table1.IDMinimum == "" {
|
if PrimaryKeyColumn.IDMinimum == "" {
|
||||||
Otvet = strings.ReplaceAll(Otvet, TextFind, `var `+ModelName+`_ID_Test = `+IDMinimum+``)
|
Otvet = strings.ReplaceAll(Otvet, TextFind, `var `+ModelName+`_ID_Test = `+IDMinimum+``)
|
||||||
} else {
|
} else {
|
||||||
Otvet = strings.ReplaceAll(Otvet, TextFind, `var `+ModelName+`_ID_Test, _ = uuid.Parse("`+IDMinimum+`")`)
|
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
|
return MapTable, err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = FillIDMinimum(MapTable)
|
err = FillIDMinimum_ManyPK(MapTable)
|
||||||
|
//err = FillIDMinimum(MapTable)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("FillIDMinimum() error: ", err)
|
log.Error("FillIDMinimum() error: ", err)
|
||||||
return MapTable, err
|
return MapTable, err
|
||||||
@ -398,7 +399,6 @@ func FillIDMinimum(MapTable map[string]*types.Table) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var IDMinimum sql.NullString
|
var IDMinimum sql.NullString
|
||||||
//TableRows := TableRowsStruct{}
|
|
||||||
tx = tx.Scan(&IDMinimum)
|
tx = tx.Scan(&IDMinimum)
|
||||||
err = tx.Error
|
err = tx.Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -406,16 +406,128 @@ func FillIDMinimum(MapTable map[string]*types.Table) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
Table1.IDMinimum = IDMinimum.String
|
ColumnPK := create_files.FindPrimaryKeyColumn(Table1)
|
||||||
//if TypeGo == "string" || TypeGo == "uuid.UUID" {
|
ColumnPK.IDMinimum = IDMinimum.String
|
||||||
// Table1.IDMinimum = IDMinimum.String
|
}
|
||||||
//} else if mini_func.IsNumberType(TypeGo) == true {
|
|
||||||
// Table1.IDMinimum = IDMinimum.String
|
return err
|
||||||
//} else if TypeGo == "time.Time" {
|
}
|
||||||
// Table1.IDMinimum = IDMinimum.String
|
|
||||||
//} else {
|
// FillIDMinimum_ManyPK - находим минимальный ID, для тестов с этим ID, для многих Primary Key
|
||||||
// Table1.IDMinimum = IDMinimum.String
|
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
|
return err
|
||||||
|
@ -1,13 +1,14 @@
|
|||||||
package postgres
|
package postgres
|
||||||
|
|
||||||
import (
|
import (
|
||||||
ConfigMain "github.com/ManyakRus/starter/config_main"
|
"github.com/ManyakRus/crud_generator/internal/config"
|
||||||
"github.com/ManyakRus/starter/postgres_gorm"
|
"github.com/ManyakRus/starter/postgres_gorm"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestFillMassTable(t *testing.T) {
|
func TestFillMassTable(t *testing.T) {
|
||||||
ConfigMain.LoadEnv()
|
//ConfigMain.LoadEnv()
|
||||||
|
config.LoadSettingsTxt()
|
||||||
postgres_gorm.Connect()
|
postgres_gorm.Connect()
|
||||||
defer postgres_gorm.CloseConnection()
|
defer postgres_gorm.CloseConnection()
|
||||||
|
|
||||||
|
@ -12,6 +12,7 @@ type Column struct {
|
|||||||
NameGo string `gorm:-`
|
NameGo string `gorm:-`
|
||||||
TypeGo string `gorm:-`
|
TypeGo string `gorm:-`
|
||||||
IsPrimaryKey bool `json:"is_primary_key" gorm:"column:is_primary_key;default:false"`
|
IsPrimaryKey bool `json:"is_primary_key" gorm:"column:is_primary_key;default:false"`
|
||||||
|
IDMinimum string
|
||||||
}
|
}
|
||||||
|
|
||||||
type Table struct {
|
type Table struct {
|
||||||
@ -21,7 +22,7 @@ type Table struct {
|
|||||||
//Columns []Column
|
//Columns []Column
|
||||||
OrderNumber int
|
OrderNumber int
|
||||||
NameGo string
|
NameGo string
|
||||||
IDMinimum string
|
//IDMinimum string
|
||||||
Comment string `json:"table_comment" gorm:"column:table_comment;default:''"`
|
Comment string `json:"table_comment" gorm:"column:table_comment;default:''"`
|
||||||
RowsCount int64
|
RowsCount int64
|
||||||
PrimaryKeyColumnsCount int
|
PrimaryKeyColumnsCount int
|
||||||
|
Reference in New Issue
Block a user