postgresql已知问题修复

postgresql支持表数据页面直接修改数据
This commit is contained in:
diant
2023-06-21 10:03:10 +08:00
parent 705c2499db
commit 80c9299532
6 changed files with 76 additions and 23 deletions

View File

@@ -1,6 +1,8 @@
package com.zyplayer.doc.db.service.database; package com.zyplayer.doc.db.service.database;
import com.zyplayer.doc.db.controller.param.DataViewParam;
import com.zyplayer.doc.db.framework.db.enums.DatabaseProductEnum; import com.zyplayer.doc.db.framework.db.enums.DatabaseProductEnum;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
/** /**
@@ -16,4 +18,38 @@ public class PostgresqlServiceImpl extends DbBaseService {
public DatabaseProductEnum getDatabaseProduct() { public DatabaseProductEnum getDatabaseProduct() {
return DatabaseProductEnum.POSTGRESQL; return DatabaseProductEnum.POSTGRESQL;
} }
/**
* Postgresql中没有use语句,指定数据库名的情况下直接返回空即可
* @author diantu
* @since 2023-06-20
*/
@Override
public String getUseDbSql(String dbName) {
return null;
}
/**
* 获取分页查询的SQL
*
* @return 分页查询的SQL
* @author diantu
* @since 2023年6月20日
*/
@Override
public String getQueryPageSql(DataViewParam dataViewParam) {
String queryColumns = StringUtils.defaultIfBlank(dataViewParam.getRetainColumn(), "*");
StringBuilder sqlSb = new StringBuilder();
//postgresql记录的ctid会随着update变化与oracle中的伪列有本质区别oracle达梦里的rowid可以理解成持久化数据
//TODO 在高并发下依赖ctid修改数据可能会有业务逻辑问题
sqlSb.append(String.format("select cast(ctid as varchar) as ZYPLAYDBCTID,%s from %s.%s", queryColumns, dataViewParam.getDbName(), dataViewParam.getTableName()));
if (StringUtils.isNotBlank(dataViewParam.getCondition())) {
sqlSb.append(String.format(" where %s", dataViewParam.getCondition()));
}
if (StringUtils.isNotBlank(dataViewParam.getOrderColumn()) && StringUtils.isNotBlank(dataViewParam.getOrderType())) {
sqlSb.append(String.format(" order by %s %s", dataViewParam.getOrderColumn(), dataViewParam.getOrderType()));
}
sqlSb.append(String.format(" limit %s offset %s", dataViewParam.getPageSize(), dataViewParam.getOffset()));
return sqlSb.toString();
}
} }

View File

@@ -1 +1 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon-db.png"><title>数据库文档管理</title><link href="css/chunk-vendors.be60d3b3.css" rel="preload" as="style"><link href="css/index.535cd330.css" rel="preload" as="style"><link href="js/chunk-vendors.7871ff07.js" rel="preload" as="script"><link href="js/index.bdeb7df4.js" rel="preload" as="script"><link href="css/chunk-vendors.be60d3b3.css" rel="stylesheet"><link href="css/index.535cd330.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but zyplayer-db-ui doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="js/chunk-vendors.7871ff07.js"></script><script src="js/index.bdeb7df4.js"></script></body></html> <!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon-db.png"><title>数据库文档管理</title><link href="css/chunk-vendors.be60d3b3.css" rel="preload" as="style"><link href="css/index.dd934fd5.css" rel="preload" as="style"><link href="js/chunk-vendors.7871ff07.js" rel="preload" as="script"><link href="js/index.75921495.js" rel="preload" as="script"><link href="css/chunk-vendors.be60d3b3.css" rel="stylesheet"><link href="css/index.dd934fd5.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but zyplayer-db-ui doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="js/chunk-vendors.7871ff07.js"></script><script src="js/index.75921495.js"></script></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -467,7 +467,10 @@ export default {
width = (width < 50) ? 50 : width; width = (width < 50) ? 50 : width;
width = (width > 200) ? 200 : width; width = (width > 200) ? 200 : width;
let column = this.columnMap[key] || {}; let column = this.columnMap[key] || {};
if(key==='ZYPLAYDBROWID'){ if(key.toLowerCase()==='zyplaydbrowid'){
continue;
}
if(key.toLowerCase()==='zyplaydbctid'){
continue; continue;
} }
executeResultCols.push({prop: key, width: width + 50, desc: (column.description || key)}); executeResultCols.push({prop: key, width: width + 50, desc: (column.description || key)});
@@ -508,26 +511,40 @@ export default {
//单元格编辑状态下被关闭时 //单元格编辑状态下被关闭时
editClosed(row){ editClosed(row){
//判断是否发生改变 //判断是否发生改变
if(this.$refs.plxTable[0].isUpdateByRow(row.row)&&row.row.ZYPLAYDBROWID){ if(this.$refs.plxTable[0].isUpdateByRow(row.row)){
this.$refs.plxTable[0].reloadRow(row.row, null, null) let zyplaydbrowid= row.row.ZYPLAYDBROWID;
let col = row.column.title; let zyplaydbctid = row.row.zyplaydbctid;
let sql = "update \""+this.pageParam.dbName+"\".\""+this.pageParam.tableName+"\" set \""+col+"\" = \'"+row.row[col] +"\' where ROWID = \'"+row.row.ZYPLAYDBROWID+"\'"; //存在说明为支持伪列的数据库
datasourceApi.queryExecuteSql({ if(zyplaydbrowid||zyplaydbctid){
sourceId: this.pageParam.sourceId, this.$refs.plxTable[0].reloadRow(row.row, null, null)
dbName: this.pageParam.dbName, let col = row.column.title;
executeId: this.nowExecutorId, let sql = "";
sql: sql, if(zyplaydbrowid){
}).then(response => { sql = "update \""+this.pageParam.dbName+"\".\""+this.pageParam.tableName+"\" set \""+col+"\" = \'"+row.row[col] +"\' where rowid = \'"+zyplaydbrowid+"\'";
if(response.errCode!==200){ }else if(zyplaydbctid){
this.$message.error(response.errMsg); sql = "update \""+this.pageParam.dbName+"\".\""+this.pageParam.tableName+"\" set \""+col+"\" = \'"+row.row[col] +"\' where ctid = \'"+zyplaydbctid+"\'";
return;
} }
if(response.data[0].errCode!==0){ datasourceApi.queryExecuteSql({
this.$message.error(response.data[0].errMsg); sourceId: this.pageParam.sourceId,
return; dbName: this.pageParam.dbName,
} executeId: this.nowExecutorId,
this.$message.success("修改成功"); sql: sql,
}) }).then(response => {
if(response.errCode!==200){
this.$message.error(response.errMsg);
return;
}
if(response.data[0].errCode!==0){
this.$message.error(response.data[0].errMsg);
return;
}
this.$message.success("修改成功");
this.doExecutorSqlCommon();
})
return;
}
//不支持伪列数据库
//@TODO MySQL、SQL Server等数据库不存在伪列概念或不适合用于条件语句。因此对于这些数据库中没有主键表的数据只能进行精确匹配的修改和删除操作
} }
}, },
doCopyCheckLineUpdate() { doCopyCheckLineUpdate() {