mirror of
https://git.mirrors.martin98.com/https://github.com/SigNoz/signoz
synced 2025-07-29 05:52:03 +08:00

* fix: support multitenancy in org * fix: register and login working now * fix: changes to migration * fix: migrations run both on sqlite and postgres * fix: remove user flags from fe and be * fix: remove ingestion keys from update * fix: multitenancy support for apdex settings * fix: render ts for users correctly * fix: fix migration to run for new tenants * fix: clean up migrations * fix: address comments * Update pkg/sqlmigration/013_update_organization.go Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com> * fix: fix build * fix: force invites with org id * Update pkg/query-service/auth/auth.go Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com> * fix: address comments * fix: address comments * fix: provier with their own dialect * fix: update dialects * fix: remove unwanted change * Update pkg/query-service/app/http_handler.go Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com> * fix: different files for types --------- Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
117 lines
2.8 KiB
Go
117 lines
2.8 KiB
Go
package postgressqlstore
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/uptrace/bun"
|
|
)
|
|
|
|
type PGDialect struct {
|
|
}
|
|
|
|
func (dialect *PGDialect) MigrateIntToTimestamp(ctx context.Context, bun bun.IDB, table string, column string) error {
|
|
columnType, err := dialect.GetColumnType(ctx, bun, table, column)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// bigint for postgres and INTEGER for sqlite
|
|
if columnType != "bigint" {
|
|
return nil
|
|
}
|
|
|
|
// if the columns is integer then do this
|
|
if _, err := bun.ExecContext(ctx, `ALTER TABLE `+table+` RENAME COLUMN `+column+` TO `+column+`_old`); err != nil {
|
|
return err
|
|
}
|
|
|
|
// add new timestamp column
|
|
if _, err := bun.NewAddColumn().Table(table).ColumnExpr(column + " TIMESTAMP").Exec(ctx); err != nil {
|
|
return err
|
|
}
|
|
|
|
if _, err := bun.NewUpdate().
|
|
Table(table).
|
|
Set(column + " = to_timestamp(cast(" + column + "_old as INTEGER))").
|
|
Where("1=1").
|
|
Exec(ctx); err != nil {
|
|
return err
|
|
}
|
|
|
|
// drop old column
|
|
if _, err := bun.NewDropColumn().Table(table).Column(column + "_old").Exec(ctx); err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (dialect *PGDialect) MigrateIntToBoolean(ctx context.Context, bun bun.IDB, table string, column string) error {
|
|
columnType, err := dialect.GetColumnType(ctx, bun, table, column)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if columnType != "bigint" {
|
|
return nil
|
|
}
|
|
|
|
if _, err := bun.ExecContext(ctx, `ALTER TABLE `+table+` RENAME COLUMN `+column+` TO `+column+`_old`); err != nil {
|
|
return err
|
|
}
|
|
|
|
// add new boolean column
|
|
if _, err := bun.NewAddColumn().Table(table).ColumnExpr(column + " BOOLEAN").Exec(ctx); err != nil {
|
|
return err
|
|
}
|
|
|
|
// copy data from old column to new column, converting from int to boolean
|
|
if _, err := bun.NewUpdate().
|
|
Table(table).
|
|
Set(column + " = CASE WHEN " + column + "_old = 1 THEN true ELSE false END").
|
|
Where("1=1").
|
|
Exec(ctx); err != nil {
|
|
return err
|
|
}
|
|
|
|
// drop old column
|
|
if _, err := bun.NewDropColumn().Table(table).Column(column + "_old").Exec(ctx); err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (dialect *PGDialect) GetColumnType(ctx context.Context, bun bun.IDB, table string, column string) (string, error) {
|
|
var columnType string
|
|
var err error
|
|
err = bun.NewSelect().
|
|
ColumnExpr("data_type").
|
|
TableExpr("information_schema.columns").
|
|
Where("table_name = ?", table).
|
|
Where("column_name = ?", column).
|
|
Scan(ctx, &columnType)
|
|
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return columnType, nil
|
|
}
|
|
|
|
func (dialect *PGDialect) ColumnExists(ctx context.Context, bun bun.IDB, table string, column string) (bool, error) {
|
|
var count int
|
|
err := bun.NewSelect().
|
|
ColumnExpr("COUNT(*)").
|
|
TableExpr("information_schema.columns").
|
|
Where("table_name = ?", table).
|
|
Where("column_name = ?", column).
|
|
Scan(ctx, &count)
|
|
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
|
|
return count > 0, nil
|
|
}
|