1
0
mirror of https://github.com/ManyakRus/starter.git synced 2025-11-24 22:53:52 +02:00

сделал ReplaceTemporaryTableNamesToUnique()

This commit is contained in:
Nikitin Aleksandr
2024-04-26 11:10:23 +03:00
parent 1d033238b2
commit 95fee1846d
940 changed files with 65295 additions and 109754 deletions

View File

@@ -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
}

View File

@@ -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")
}
}