mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-08-25 02:00:09 +08:00
Merge branch 'dev' into feature/20260602_connection_driver_i18n
# Conflicts: # shared/i18n/de-DE.json # shared/i18n/en-US.json # shared/i18n/ja-JP.json # shared/i18n/ru-RU.json # shared/i18n/zh-CN.json # shared/i18n/zh-TW.json
This commit is contained in:
@@ -195,6 +195,9 @@ func (a *App) CreateDatabase(config connection.ConnectionConfig, dbName string)
|
||||
if dbName == "" {
|
||||
return connection.QueryResult{Success: false, Message: a.appText("db.backend.error.database_name_required", nil)}
|
||||
}
|
||||
if err := ensureReadOnlyConnectionAllowsAction(config, "创建数据库"); err != nil {
|
||||
return connection.QueryResult{Success: false, Message: err.Error()}
|
||||
}
|
||||
|
||||
runConfig := config
|
||||
runConfig.Database = ""
|
||||
@@ -365,6 +368,9 @@ func resolveSchemaDDLTargetDatabaseWithText(config connection.ConnectionConfig,
|
||||
}
|
||||
|
||||
func (a *App) CreateSchema(config connection.ConnectionConfig, dbName string, schemaName string) connection.QueryResult {
|
||||
if err := ensureReadOnlyConnectionAllowsAction(config, "创建模式"); err != nil {
|
||||
return connection.QueryResult{Success: false, Message: err.Error()}
|
||||
}
|
||||
dbType := resolveDDLDBType(config)
|
||||
targetDbName, err := resolveSchemaDDLTargetDatabaseWithText(config, dbName, a.appText)
|
||||
if err != nil {
|
||||
@@ -390,6 +396,9 @@ func (a *App) CreateSchema(config connection.ConnectionConfig, dbName string, sc
|
||||
}
|
||||
|
||||
func (a *App) RenameSchema(config connection.ConnectionConfig, dbName string, oldSchemaName string, newSchemaName string) connection.QueryResult {
|
||||
if err := ensureReadOnlyConnectionAllowsAction(config, "重命名模式"); err != nil {
|
||||
return connection.QueryResult{Success: false, Message: err.Error()}
|
||||
}
|
||||
dbType := resolveDDLDBType(config)
|
||||
targetDbName, err := resolveSchemaDDLTargetDatabaseWithText(config, dbName, a.appText)
|
||||
if err != nil {
|
||||
@@ -413,6 +422,9 @@ func (a *App) RenameSchema(config connection.ConnectionConfig, dbName string, ol
|
||||
}
|
||||
|
||||
func (a *App) DropSchema(config connection.ConnectionConfig, dbName string, schemaName string) connection.QueryResult {
|
||||
if err := ensureReadOnlyConnectionAllowsAction(config, "删除模式"); err != nil {
|
||||
return connection.QueryResult{Success: false, Message: err.Error()}
|
||||
}
|
||||
dbType := resolveDDLDBType(config)
|
||||
targetDbName, err := resolveSchemaDDLTargetDatabaseWithText(config, dbName, a.appText)
|
||||
if err != nil {
|
||||
@@ -668,6 +680,9 @@ func (a *App) RenameDatabase(config connection.ConnectionConfig, oldName string,
|
||||
if oldName == "" || newName == "" {
|
||||
return connection.QueryResult{Success: false, Message: a.appText("db.backend.error.database_name_required", nil)}
|
||||
}
|
||||
if err := ensureReadOnlyConnectionAllowsAction(config, "重命名数据库"); err != nil {
|
||||
return connection.QueryResult{Success: false, Message: err.Error()}
|
||||
}
|
||||
if strings.EqualFold(oldName, newName) {
|
||||
return connection.QueryResult{Success: false, Message: a.appText("db.backend.error.database_same_name", nil)}
|
||||
}
|
||||
@@ -711,6 +726,9 @@ func (a *App) DropDatabase(config connection.ConnectionConfig, dbName string) co
|
||||
if dbName == "" {
|
||||
return connection.QueryResult{Success: false, Message: a.appText("db.backend.error.database_name_required", nil)}
|
||||
}
|
||||
if err := ensureReadOnlyConnectionAllowsAction(config, "删除数据库"); err != nil {
|
||||
return connection.QueryResult{Success: false, Message: err.Error()}
|
||||
}
|
||||
|
||||
dbType := resolveDDLDBType(config)
|
||||
var (
|
||||
@@ -745,6 +763,9 @@ func (a *App) RenameTable(config connection.ConnectionConfig, dbName string, old
|
||||
if oldTableName == "" || newTableName == "" {
|
||||
return connection.QueryResult{Success: false, Message: a.appText("db.backend.error.table_name_required", nil)}
|
||||
}
|
||||
if err := ensureReadOnlyConnectionAllowsAction(config, "重命名表"); err != nil {
|
||||
return connection.QueryResult{Success: false, Message: err.Error()}
|
||||
}
|
||||
if strings.EqualFold(oldTableName, newTableName) {
|
||||
return connection.QueryResult{Success: false, Message: a.appText("db.backend.error.table_same_name", nil)}
|
||||
}
|
||||
@@ -797,6 +818,9 @@ func (a *App) DropTable(config connection.ConnectionConfig, dbName string, table
|
||||
if tableName == "" {
|
||||
return connection.QueryResult{Success: false, Message: a.appText("db.backend.error.table_name_required", nil)}
|
||||
}
|
||||
if err := ensureReadOnlyConnectionAllowsAction(config, "删除表"); err != nil {
|
||||
return connection.QueryResult{Success: false, Message: err.Error()}
|
||||
}
|
||||
|
||||
dbType := resolveDDLDBType(config)
|
||||
switch dbType {
|
||||
@@ -860,13 +884,17 @@ func (a *App) DBQueryWithCancel(config connection.ConnectionConfig, dbName strin
|
||||
queryID = generateQueryID()
|
||||
}
|
||||
|
||||
query = sanitizeSQLForPgLike(resolveDDLDBType(config), query)
|
||||
if err := ensureReadOnlyConnectionAllowsQuery(config, query); err != nil {
|
||||
return connection.QueryResult{Success: false, Message: err.Error(), QueryID: queryID}
|
||||
}
|
||||
|
||||
dbInst, err := a.getDatabase(runConfig)
|
||||
if err != nil {
|
||||
logger.Error(err, "DBQuery 获取连接失败:%s", formatConnSummary(runConfig))
|
||||
return connection.QueryResult{Success: false, Message: err.Error(), QueryID: queryID}
|
||||
}
|
||||
|
||||
query = sanitizeSQLForPgLike(resolveDDLDBType(config), query)
|
||||
ctx, cancel := newQueryExecutionContext(runConfig)
|
||||
defer cancel()
|
||||
|
||||
@@ -992,13 +1020,17 @@ func (a *App) DBQueryMulti(config connection.ConnectionConfig, dbName string, qu
|
||||
queryID = generateQueryID()
|
||||
}
|
||||
|
||||
query = sanitizeSQLForPgLike(resolveDDLDBType(config), query)
|
||||
if err := ensureReadOnlyConnectionAllowsQuery(config, query); err != nil {
|
||||
return connection.QueryResult{Success: false, Message: err.Error(), QueryID: queryID}
|
||||
}
|
||||
|
||||
dbInst, err := a.getDatabase(runConfig)
|
||||
if err != nil {
|
||||
logger.Error(err, "DBQueryMulti 获取连接失败:%s", formatConnSummary(runConfig))
|
||||
return connection.QueryResult{Success: false, Message: err.Error(), QueryID: queryID}
|
||||
}
|
||||
|
||||
query = sanitizeSQLForPgLike(resolveDDLDBType(config), query)
|
||||
ctx, cancel := newQueryExecutionContext(runConfig)
|
||||
defer cancel()
|
||||
|
||||
@@ -1396,6 +1428,11 @@ func looksLikeSQLServerProcedureInvocation(query string) bool {
|
||||
func (a *App) DBQueryIsolated(config connection.ConnectionConfig, dbName string, query string) connection.QueryResult {
|
||||
runConfig := normalizeRunConfig(config, dbName)
|
||||
|
||||
query = sanitizeSQLForPgLike(resolveDDLDBType(config), query)
|
||||
if err := ensureReadOnlyConnectionAllowsQuery(config, query); err != nil {
|
||||
return connection.QueryResult{Success: false, Message: err.Error()}
|
||||
}
|
||||
|
||||
dbInst, err := a.openDatabaseIsolated(runConfig)
|
||||
if err != nil {
|
||||
logger.Error(err, "DBQueryIsolated 获取连接失败:%s", formatConnSummary(runConfig))
|
||||
@@ -1407,7 +1444,6 @@ func (a *App) DBQueryIsolated(config connection.ConnectionConfig, dbName string,
|
||||
}
|
||||
}()
|
||||
|
||||
query = sanitizeSQLForPgLike(resolveDDLDBType(config), query)
|
||||
ctx, cancel := newQueryExecutionContext(runConfig)
|
||||
defer cancel()
|
||||
|
||||
@@ -2275,6 +2311,9 @@ func (a *App) DropView(config connection.ConnectionConfig, dbName string, viewNa
|
||||
if viewName == "" {
|
||||
return connection.QueryResult{Success: false, Message: a.appText("db.backend.error.view_name_required", nil)}
|
||||
}
|
||||
if err := ensureReadOnlyConnectionAllowsAction(config, "删除视图"); err != nil {
|
||||
return connection.QueryResult{Success: false, Message: err.Error()}
|
||||
}
|
||||
|
||||
dbType := resolveDDLDBType(config)
|
||||
switch dbType {
|
||||
@@ -2307,6 +2346,9 @@ func (a *App) DropFunction(config connection.ConnectionConfig, dbName string, ro
|
||||
if routineName == "" {
|
||||
return connection.QueryResult{Success: false, Message: a.appText("db.backend.error.routine_name_required", nil)}
|
||||
}
|
||||
if err := ensureReadOnlyConnectionAllowsAction(config, "删除函数或存储过程"); err != nil {
|
||||
return connection.QueryResult{Success: false, Message: err.Error()}
|
||||
}
|
||||
if routineType != "FUNCTION" && routineType != "PROCEDURE" {
|
||||
routineType = "FUNCTION"
|
||||
}
|
||||
@@ -2349,6 +2391,9 @@ func (a *App) RenameView(config connection.ConnectionConfig, dbName string, oldN
|
||||
if oldName == "" || newName == "" {
|
||||
return connection.QueryResult{Success: false, Message: a.appText("db.backend.error.view_name_required", nil)}
|
||||
}
|
||||
if err := ensureReadOnlyConnectionAllowsAction(config, "重命名视图"); err != nil {
|
||||
return connection.QueryResult{Success: false, Message: err.Error()}
|
||||
}
|
||||
if strings.EqualFold(oldName, newName) {
|
||||
return connection.QueryResult{Success: false, Message: a.appText("db.backend.error.view_same_name", nil)}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user