Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: preliminary adaptation of gaussdb #12061

Open
wants to merge 14 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 13 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion backend/api/lsp/completion.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ func (h *Handler) handleTextDocumentCompletion(ctx context.Context, _ *jsonrpc2.
switch engine {
case storepb.Engine_MYSQL, storepb.Engine_TIDB, storepb.Engine_MARIADB, storepb.Engine_OCEANBASE, storepb.Engine_CLICKHOUSE, storepb.Engine_STARROCKS, storepb.Engine_DORIS:
// Nothing.
case storepb.Engine_POSTGRES, storepb.Engine_REDSHIFT, storepb.Engine_RISINGWAVE:
case storepb.Engine_POSTGRES, storepb.Engine_REDSHIFT, storepb.Engine_RISINGWAVE, storepb.Engine_GAUSSDB:
// Nothing.
shanzhuer marked this conversation as resolved.
Show resolved Hide resolved
case storepb.Engine_MSSQL:
case storepb.Engine_ORACLE, storepb.Engine_DM, storepb.Engine_OCEANBASE_ORACLE, storepb.Engine_SNOWFLAKE:
Expand Down
4 changes: 4 additions & 0 deletions backend/api/v1/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -349,6 +349,8 @@ func convertToEngine(engine storepb.Engine) v1pb.Engine {
return v1pb.Engine_HIVE
case storepb.Engine_ELASTICSEARCH:
return v1pb.Engine_ELASTICSEARCH
case storepb.Engine_GAUSSDB:
return v1pb.Engine_GAUSSDB
}
return v1pb.Engine_ENGINE_UNSPECIFIED
}
Expand Down Expand Up @@ -397,6 +399,8 @@ func convertEngine(engine v1pb.Engine) storepb.Engine {
return storepb.Engine_HIVE
case v1pb.Engine_ELASTICSEARCH:
return storepb.Engine_ELASTICSEARCH
case v1pb.Engine_GAUSSDB:
return storepb.Engine_GAUSSDB
}
return storepb.Engine_ENGINE_UNSPECIFIED
}
Expand Down
2 changes: 2 additions & 0 deletions backend/api/v1/database_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -1175,6 +1175,8 @@ func (s *DatabaseService) getParserEngine(ctx context.Context, request *v1pb.Dif
engine = storepb.Engine_TIDB
case storepb.Engine_ORACLE, storepb.Engine_DM, storepb.Engine_OCEANBASE_ORACLE:
engine = storepb.Engine_ORACLE
case storepb.Engine_GAUSSDB:
engine = storepb.Engine_GAUSSDB
case storepb.Engine_MSSQL:
engine = storepb.Engine_MSSQL
default:
Expand Down
2 changes: 1 addition & 1 deletion backend/api/v1/instance_role_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -301,7 +301,7 @@ func validateRole(dbType storepb.Engine, upsert *db.DatabaseRoleUpsertMessage) e
return status.Errorf(codes.InvalidArgument, "Invalid role name, role name cannot be empty")
}
switch dbType {
case storepb.Engine_POSTGRES, storepb.Engine_RISINGWAVE:
case storepb.Engine_POSTGRES, storepb.Engine_RISINGWAVE, storepb.Engine_GAUSSDB:
if v := upsert.ConnectionLimit; v != nil && *v < int32(-1) {
return status.Errorf(codes.InvalidArgument, "Invalid connection limit, it should greater than or equal to -1")
}
Expand Down
6 changes: 5 additions & 1 deletion backend/api/v1/rollout_service_task.go
Original file line number Diff line number Diff line change
Expand Up @@ -773,6 +773,10 @@ func checkCharacterSetCollationOwner(dbType storepb.Engine, characterSet, collat
if owner == "" {
return errors.Errorf("database owner is required for Redshift")
}
case storepb.Engine_GAUSSDB:
if owner == "" {
return errors.Errorf("database owner is required for GaussDB")
}
case storepb.Engine_RISINGWAVE:
if characterSet != "" {
return errors.Errorf("RisingWave does not support character set, but got %s", characterSet)
Expand Down Expand Up @@ -803,7 +807,7 @@ func getCreateDatabaseStatement(dbType storepb.Engine, c *storepb.PlanConfig_Cre
return fmt.Sprintf("CREATE DATABASE `%s` CHARACTER SET %s COLLATE %s;", databaseName, c.CharacterSet, c.Collation), nil
case storepb.Engine_MSSQL:
return fmt.Sprintf(`CREATE DATABASE "%s";`, databaseName), nil
case storepb.Engine_POSTGRES:
case storepb.Engine_POSTGRES, storepb.Engine_GAUSSDB:
// On Cloud RDS, the data source role isn't the actual superuser with sudo privilege.
// We need to grant the database owner role to the data source admin so that Bytebase can have permission for the database using the data source admin.
if adminDatasourceUser != "" && c.Owner != adminDatasourceUser {
Expand Down
2 changes: 1 addition & 1 deletion backend/api/v1/sql_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -1509,7 +1509,7 @@ func (*SQLService) DifferPreview(_ context.Context, request *v1pb.DifferPreviewR
// StringifyMetadata returns the stringified schema of the given metadata.
func (*SQLService) StringifyMetadata(_ context.Context, request *v1pb.StringifyMetadataRequest) (*v1pb.StringifyMetadataResponse, error) {
switch request.Engine {
case v1pb.Engine_MYSQL, v1pb.Engine_OCEANBASE, v1pb.Engine_POSTGRES, v1pb.Engine_TIDB, v1pb.Engine_ORACLE:
case v1pb.Engine_MYSQL, v1pb.Engine_OCEANBASE, v1pb.Engine_POSTGRES, v1pb.Engine_TIDB, v1pb.Engine_ORACLE, v1pb.Engine_GAUSSDB:
default:
return nil, status.Errorf(codes.InvalidArgument, "unsupported engine: %v", request.Engine)
}
Expand Down
6 changes: 3 additions & 3 deletions backend/api/v1/sql_service_export_utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ func getSQLStatementPrefix(engine storepb.Engine, resourceList []base.SchemaReso
switch engine {
case storepb.Engine_MYSQL, storepb.Engine_MARIADB, storepb.Engine_TIDB, storepb.Engine_OCEANBASE, storepb.Engine_SPANNER:
escapeQuote = "`"
case storepb.Engine_CLICKHOUSE, storepb.Engine_MSSQL, storepb.Engine_ORACLE, storepb.Engine_OCEANBASE_ORACLE, storepb.Engine_DM, storepb.Engine_POSTGRES, storepb.Engine_REDSHIFT, storepb.Engine_SQLITE, storepb.Engine_SNOWFLAKE:
case storepb.Engine_CLICKHOUSE, storepb.Engine_MSSQL, storepb.Engine_ORACLE, storepb.Engine_OCEANBASE_ORACLE, storepb.Engine_DM, storepb.Engine_POSTGRES, storepb.Engine_REDSHIFT, storepb.Engine_SQLITE, storepb.Engine_SNOWFLAKE, storepb.Engine_GAUSSDB:
// ClickHouse takes both double-quotes or backticks.
escapeQuote = "\""
default:
Expand Down Expand Up @@ -188,7 +188,7 @@ func convertValueToBytesInSQL(engine storepb.Engine, value *v1pb.RowValue) []byt

func escapeSQLString(engine storepb.Engine, v []byte) []byte {
switch engine {
case storepb.Engine_POSTGRES, storepb.Engine_REDSHIFT:
case storepb.Engine_POSTGRES, storepb.Engine_REDSHIFT, storepb.Engine_GAUSSDB:
escapedStr := pq.QuoteLiteral(string(v))
return []byte(escapedStr)
default:
Expand Down Expand Up @@ -330,7 +330,7 @@ func extractResourceList(ctx context.Context, storeInstance *store.Store, engine
result = append(result, resource)
}
return result, nil
case storepb.Engine_POSTGRES, storepb.Engine_REDSHIFT:
case storepb.Engine_POSTGRES, storepb.Engine_REDSHIFT, storepb.Engine_GAUSSDB:
list, err := base.ExtractResourceList(engine, databaseName, "public", statement)
if err != nil {
return nil, status.Errorf(codes.Internal, "failed to extract resource list: %s", err.Error())
Expand Down
2 changes: 1 addition & 1 deletion backend/api/v1/sql_service_utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import (
// IsSQLReviewSupported checks the engine type if SQL review supports it.
func IsSQLReviewSupported(dbType storepb.Engine) bool {
switch dbType {
case storepb.Engine_POSTGRES, storepb.Engine_MYSQL, storepb.Engine_TIDB, storepb.Engine_MARIADB, storepb.Engine_ORACLE, storepb.Engine_OCEANBASE_ORACLE, storepb.Engine_OCEANBASE, storepb.Engine_SNOWFLAKE, storepb.Engine_DM, storepb.Engine_MSSQL:
case storepb.Engine_POSTGRES, storepb.Engine_MYSQL, storepb.Engine_TIDB, storepb.Engine_MARIADB, storepb.Engine_ORACLE, storepb.Engine_OCEANBASE_ORACLE, storepb.Engine_OCEANBASE, storepb.Engine_SNOWFLAKE, storepb.Engine_DM, storepb.Engine_MSSQL, storepb.Engine_GAUSSDB:
return true
default:
return false
Expand Down
2 changes: 1 addition & 1 deletion backend/component/dbfactory/dbfactory.go
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ func (d *DBFactory) GetDataSourceDriver(ctx context.Context, instance *store.Ins
case storepb.Engine_MYSQL, storepb.Engine_TIDB, storepb.Engine_MARIADB, storepb.Engine_OCEANBASE:
// TODO(d): use maria mysqlbinlog for MariaDB.
dbBinDir = d.mysqlBinDir
case storepb.Engine_POSTGRES, storepb.Engine_RISINGWAVE:
case storepb.Engine_POSTGRES, storepb.Engine_RISINGWAVE, storepb.Engine_GAUSSDB:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

GaussDB doesn't use pgBinDir actually

dbBinDir = d.pgBinDir
case storepb.Engine_MONGODB:
dbBinDir = d.mongoBinDir
Expand Down
2 changes: 1 addition & 1 deletion backend/plugin/advisor/catalog/walk_through.go
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@ func (d *DatabaseState) WalkThrough(stmt string) error {
case storepb.Engine_MYSQL, storepb.Engine_MARIADB, storepb.Engine_OCEANBASE:
err := d.mysqlWalkThrough(stmt)
return err
case storepb.Engine_POSTGRES:
case storepb.Engine_POSTGRES, storepb.Engine_GAUSSDB:
if err := d.pgWalkThrough(stmt); err != nil {
if d.ctx.CheckIntegrity {
return err
Expand Down
2 changes: 2 additions & 0 deletions backend/plugin/advisor/db/db.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,6 @@ const (
MSSQL Type = "MSSQL"
// DM is the database type for DM.
DM Type = "DM"
// GAUSSDB is the database type for GAUSSDB.
GAUSSDB Type = "GAUSSDB"
)
1 change: 1 addition & 0 deletions backend/plugin/advisor/generator/postgresql.template
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ var (

func init() {
advisor.Register(storepb.Engine_POSTGRES, advisor.%AdvisorType, &%AdvisorName{})
advisor.Register(storepb.Engine_GAUSSDB, advisor.%AdvisorType, &%AdvisorName{})
}

// %AdvisorName is the advisor checking for %AdvisorComment
Expand Down
2 changes: 1 addition & 1 deletion backend/plugin/advisor/sql_review.go
Original file line number Diff line number Diff line change
Expand Up @@ -496,7 +496,7 @@ func syntaxCheck(statement string, checkContext SQLReviewCheckContext) (any, []A
return tidbSyntaxCheck(statement)
case storepb.Engine_MYSQL, storepb.Engine_MARIADB, storepb.Engine_OCEANBASE:
return mysqlSyntaxCheck(statement)
case storepb.Engine_POSTGRES:
case storepb.Engine_POSTGRES, storepb.Engine_GAUSSDB:
return postgresSyntaxCheck(statement)
case storepb.Engine_ORACLE, storepb.Engine_OCEANBASE_ORACLE:
return oracleSyntaxCheck(statement)
Expand Down
18 changes: 18 additions & 0 deletions backend/plugin/db/gauss/dump.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package gauss

import (
"context"
"io"

"github.com/pkg/errors"
)

// Dump dumps the database to the writer. But not implemented yet.
func (*Driver) Dump(context.Context, io.Writer, bool) (string, error) {
return "", nil
}

// Restore the database from src, which is a full backup.
func (*Driver) Restore(context.Context, io.Reader) error {
return errors.Errorf("not implemented")
}
Loading
Loading