mirror of
https://github.com/ManyakRus/starter.git
synced 2025-11-24 22:53:52 +02:00
сделал ReplaceTemporaryTableNamesToUnique()
This commit is contained in:
@@ -497,23 +497,64 @@ func ReplaceSchema(TextSQL string) string {
|
||||
// return Otvet
|
||||
//}
|
||||
|
||||
// ReplaceTableNamesToUnique1 - заменяет "public.TableName" на "public.TableName_UUID"
|
||||
func ReplaceTableNamesToUnique1(TextSQL, sUUID string) string {
|
||||
// ReplaceTemporaryTableNamesToUnique - заменяет "public.TableName" на "public.TableName_UUID"
|
||||
func ReplaceTemporaryTableNamesToUnique(TextSQL string) string {
|
||||
Otvet := TextSQL
|
||||
|
||||
sFind := "public."
|
||||
pos1 := strings.Index(Otvet, sFind)
|
||||
if pos1 == -1 {
|
||||
return Otvet
|
||||
sUUID := micro.StringIdentifierFromUUID()
|
||||
map1 := make(map[string]int)
|
||||
|
||||
//найдём список всех временных таблиц, и заполним в map1
|
||||
s0 := Otvet
|
||||
for {
|
||||
sFind := "CREATE TEMPORARY TABLE "
|
||||
sFind2 := "create temporary table "
|
||||
pos1 := micro.IndexSubstringMin2(s0, sFind, sFind2)
|
||||
if pos1 < 0 {
|
||||
break
|
||||
}
|
||||
s2 := s0[pos1+len(sFind):]
|
||||
pos2 := micro.IndexSubstringMin2(s2, " ", "\n")
|
||||
if pos2 <= 0 {
|
||||
break
|
||||
}
|
||||
name1 := s0[pos1+len(sFind) : pos1+len(sFind)+pos2]
|
||||
if name1 == "" {
|
||||
break
|
||||
}
|
||||
|
||||
s0 = s0[pos1+len(sFind)+pos2:]
|
||||
map1[name1] = len(name1)
|
||||
}
|
||||
|
||||
s2 := Otvet[pos1+len(sFind):]
|
||||
pos2 := micro.IndexSubstringMin2(s2, " ", "\n")
|
||||
if pos2 == -1 {
|
||||
return Otvet
|
||||
}
|
||||
//заменим все временные таблицы на уникальные
|
||||
MassNames := micro.SortMapStringInt_Desc(map1)
|
||||
for _, v := range MassNames {
|
||||
sFirst := " "
|
||||
Otvet = strings.ReplaceAll(Otvet, sFirst+v+" ", " "+v+"_"+sUUID+" ")
|
||||
Otvet = strings.ReplaceAll(Otvet, sFirst+v+"\n", " "+v+"_"+sUUID+"\n")
|
||||
Otvet = strings.ReplaceAll(Otvet, sFirst+v+"\t", " "+v+"_"+sUUID+"\t")
|
||||
Otvet = strings.ReplaceAll(Otvet, sFirst+v+";", " "+v+"_"+sUUID+";")
|
||||
Otvet = strings.ReplaceAll(Otvet, sFirst+v+"(", " "+v+"_"+sUUID+"(")
|
||||
Otvet = strings.ReplaceAll(Otvet, sFirst+v+")", " "+v+"_"+sUUID+")")
|
||||
|
||||
Otvet = Otvet[0:pos1+len(sFind)+pos2] + "_" + sUUID + Otvet[pos1+len(sFind)+pos2:]
|
||||
sFirst = "\t"
|
||||
Otvet = strings.ReplaceAll(Otvet, sFirst+v+" ", " "+v+"_"+sUUID+" ")
|
||||
Otvet = strings.ReplaceAll(Otvet, sFirst+v+"\n", " "+v+"_"+sUUID+"\n")
|
||||
Otvet = strings.ReplaceAll(Otvet, sFirst+v+"\t", " "+v+"_"+sUUID+"\t")
|
||||
Otvet = strings.ReplaceAll(Otvet, sFirst+v+";", " "+v+"_"+sUUID+";")
|
||||
Otvet = strings.ReplaceAll(Otvet, sFirst+v+"(", " "+v+"_"+sUUID+"(")
|
||||
Otvet = strings.ReplaceAll(Otvet, sFirst+v+")", " "+v+"_"+sUUID+")")
|
||||
|
||||
sFirst = "\n"
|
||||
Otvet = strings.ReplaceAll(Otvet, sFirst+v+" ", " "+v+"_"+sUUID+" ")
|
||||
Otvet = strings.ReplaceAll(Otvet, sFirst+v+"\n", " "+v+"_"+sUUID+"\n")
|
||||
Otvet = strings.ReplaceAll(Otvet, sFirst+v+"\t", " "+v+"_"+sUUID+"\t")
|
||||
Otvet = strings.ReplaceAll(Otvet, sFirst+v+";", " "+v+"_"+sUUID+";")
|
||||
Otvet = strings.ReplaceAll(Otvet, sFirst+v+"(", " "+v+"_"+sUUID+"(")
|
||||
Otvet = strings.ReplaceAll(Otvet, sFirst+v+")", " "+v+"_"+sUUID+")")
|
||||
|
||||
}
|
||||
|
||||
return Otvet
|
||||
}
|
||||
|
||||
@@ -290,10 +290,44 @@ func TestReplaceTableNamesToUnique1(t *testing.T) {
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
got := ReplaceTableNamesToUnique1(tt.input, tt.uuid)
|
||||
got := ReplaceTemporaryTableNamesToUnique(tt.input)
|
||||
if got != tt.expected {
|
||||
t.Errorf("ReplaceTableNamesToUnique1() = %v, expected %v", got, tt.expected)
|
||||
t.Errorf("ReplaceTemporaryTableNamesToUnique() = %v, expected %v", got, tt.expected)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestReplaceTemporaryTableNamesToUnique_EmptyInput(t *testing.T) {
|
||||
input := ""
|
||||
expected := ""
|
||||
result := ReplaceTemporaryTableNamesToUnique(input)
|
||||
if result != expected {
|
||||
t.Errorf("Expected: %s, but got: %s", expected, result)
|
||||
}
|
||||
}
|
||||
|
||||
func TestReplaceTemporaryTableNamesToUnique_NoTempTable(t *testing.T) {
|
||||
input := "SELECT * FROM TableName"
|
||||
expected := "SELECT * FROM TableName"
|
||||
result := ReplaceTemporaryTableNamesToUnique(input)
|
||||
if result != expected {
|
||||
t.Errorf("Expected: %s, but got: %s", expected, result)
|
||||
}
|
||||
}
|
||||
|
||||
func TestReplaceTemporaryTableNamesToUnique_OneTempTable(t *testing.T) {
|
||||
input := "CREATE TEMPORARY TABLE temp_Test (id int); SELECT * FROM temp_Test "
|
||||
result := ReplaceTemporaryTableNamesToUnique(input)
|
||||
if result == input {
|
||||
t.Errorf("TestReplaceTemporaryTableNamesToUnique_OneTempTable() error: no changes")
|
||||
}
|
||||
}
|
||||
|
||||
func TestReplaceTemporaryTableNamesToUnique_MultipleTempTables(t *testing.T) {
|
||||
input := "CREATE TEMPORARY TABLE temp1 (id int); CREATE TEMPORARY TABLE temp2 (name varchar); SELECT * FROM temp1;"
|
||||
result := ReplaceTemporaryTableNamesToUnique(input)
|
||||
if result == input {
|
||||
t.Errorf("TestReplaceTemporaryTableNamesToUnique_OneTempTable() error: no changes")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user