mirror of
https://github.com/ManyakRus/starter.git
synced 2025-11-25 23:02:22 +02:00
сделал ReplaceSchema()
This commit is contained in:
@@ -61,6 +61,25 @@ const TextConnBusy = "conn busy"
|
|||||||
// timeOutSeconds - время ожидания для Ping()
|
// timeOutSeconds - время ожидания для Ping()
|
||||||
const timeOutSeconds = 60
|
const timeOutSeconds = 60
|
||||||
|
|
||||||
|
// IConnectionTransaction - интерфейс для работы с базой данных
|
||||||
|
// объединяет в себе функции pgx.Conn, pgxpool.Pool и pgx.Tx
|
||||||
|
// чтобы передавать в функцию любой их них
|
||||||
|
type IConnectionTransaction interface {
|
||||||
|
// Transaction management
|
||||||
|
Begin(ctx context.Context) (pgx.Tx, error)
|
||||||
|
|
||||||
|
// Query execution
|
||||||
|
Exec(ctx context.Context, sql string, arguments ...any) (pgconn.CommandTag, error)
|
||||||
|
Query(ctx context.Context, sql string, args ...any) (pgx.Rows, error)
|
||||||
|
QueryRow(ctx context.Context, sql string, args ...any) pgx.Row
|
||||||
|
|
||||||
|
// Batch operations
|
||||||
|
SendBatch(ctx context.Context, b *pgx.Batch) pgx.BatchResults
|
||||||
|
|
||||||
|
// Bulk copy operations
|
||||||
|
CopyFrom(ctx context.Context, tableName pgx.Identifier, columnNames []string, rowSrc pgx.CopyFromSource) (int64, error)
|
||||||
|
}
|
||||||
|
|
||||||
// Connect_err - подключается к базе данных
|
// Connect_err - подключается к базе данных
|
||||||
func Connect() {
|
func Connect() {
|
||||||
|
|
||||||
@@ -542,21 +561,26 @@ func Ping_err(ctxMain context.Context) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// IConnectionTransaction - интерфейс для работы с базой данных
|
// ReplaceSchema - заменяет "public." на Settings.DB_SCHEMA
|
||||||
// объединяет в себе функции pgx.Conn, pgxpool.Pool и pgx.Tx
|
func ReplaceSchema(TextSQL string) string {
|
||||||
// чтобы передавать в функцию любой их них
|
Otvet := TextSQL
|
||||||
type IConnectionTransaction interface {
|
|
||||||
// Transaction management
|
|
||||||
Begin(ctx context.Context) (pgx.Tx, error)
|
|
||||||
|
|
||||||
// Query execution
|
if Settings.DB_SCHEMA == "" {
|
||||||
Exec(ctx context.Context, sql string, arguments ...any) (pgconn.CommandTag, error)
|
return Otvet
|
||||||
Query(ctx context.Context, sql string, args ...any) (pgx.Rows, error)
|
}
|
||||||
QueryRow(ctx context.Context, sql string, args ...any) pgx.Row
|
|
||||||
|
Otvet = strings.ReplaceAll(Otvet, "\tpublic.", "\t"+Settings.DB_SCHEMA+".")
|
||||||
// Batch operations
|
Otvet = strings.ReplaceAll(Otvet, "\npublic.", "\n"+Settings.DB_SCHEMA+".")
|
||||||
SendBatch(ctx context.Context, b *pgx.Batch) pgx.BatchResults
|
Otvet = strings.ReplaceAll(Otvet, " public.", " "+Settings.DB_SCHEMA+".")
|
||||||
|
|
||||||
// Bulk copy operations
|
return Otvet
|
||||||
CopyFrom(ctx context.Context, tableName pgx.Identifier, columnNames []string, rowSrc pgx.CopyFromSource) (int64, error)
|
}
|
||||||
|
|
||||||
|
// ReplaceSchemaName - заменяет имя схемы в тексте SQL
|
||||||
|
func ReplaceSchemaName(TextSQL, SchemaNameFrom string) string {
|
||||||
|
Otvet := TextSQL
|
||||||
|
|
||||||
|
Otvet = strings.ReplaceAll(Otvet, SchemaNameFrom+".", Settings.DB_SCHEMA+".")
|
||||||
|
|
||||||
|
return Otvet
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -187,3 +187,51 @@ SELECT * FROM temp_TestRawMultipleSQL2
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestReplaceSchema(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
input string
|
||||||
|
schema string
|
||||||
|
expected string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "No schema",
|
||||||
|
input: "SELECT * FROM public.users",
|
||||||
|
schema: "",
|
||||||
|
expected: "SELECT * FROM public.users",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Schema with tabs and newlines",
|
||||||
|
input: "\tSELECT * FROM public.users\n",
|
||||||
|
schema: "myschema",
|
||||||
|
expected: "\tSELECT * FROM myschema.users\n",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Schema with spaces",
|
||||||
|
input: "SELECT * FROM public.users ",
|
||||||
|
schema: "myschema",
|
||||||
|
expected: "SELECT * FROM myschema.users ",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
Settings.DB_SCHEMA = tt.schema
|
||||||
|
got := ReplaceSchema(tt.input)
|
||||||
|
if got != tt.expected {
|
||||||
|
t.Errorf("ReplaceSchema() = %v, expected %v", got, tt.expected)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestReplaceSchemaName(t *testing.T) {
|
||||||
|
TextSQL := "SELECT * FROM public.users"
|
||||||
|
Settings.DB_SCHEMA = "myschema"
|
||||||
|
ExpectedSQL := "SELECT * FROM myschema.users"
|
||||||
|
ActualSQL := ReplaceSchemaName(TextSQL, "public")
|
||||||
|
if ActualSQL != ExpectedSQL {
|
||||||
|
t.Errorf("Expected %v, but got %v", ExpectedSQL, ActualSQL)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user