mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-19 02:36:00 +00:00
92 lines
2.5 KiB
TypeScript
92 lines
2.5 KiB
TypeScript
import _ from 'lodash';
|
|
import { filterName, isTableColumnUnique } from 'dbgate-tools';
|
|
import { GridDisplay, ChangeCacheFunc, DisplayColumn, DisplayedColumnInfo, ChangeConfigFunc } from './GridDisplay';
|
|
import type {
|
|
TableInfo,
|
|
EngineDriver,
|
|
ViewInfo,
|
|
ColumnInfo,
|
|
NamedObjectInfo,
|
|
DatabaseInfo,
|
|
ForeignKeyInfo,
|
|
} from 'dbgate-types';
|
|
import { GridConfig, GridCache, createGridCache } from './GridConfig';
|
|
import { Expression, Select, treeToSql, dumpSqlSelect, ColumnRefExpression, Condition } from 'dbgate-sqltree';
|
|
|
|
export interface CustomGridColumn {
|
|
columnName: string;
|
|
columnLabel: string;
|
|
isPrimaryKey?: boolean;
|
|
}
|
|
|
|
export class CustomGridDisplay extends GridDisplay {
|
|
customColumns: CustomGridColumn[];
|
|
|
|
constructor(
|
|
public tableName: NamedObjectInfo,
|
|
columns: CustomGridColumn[],
|
|
driver: EngineDriver,
|
|
config: GridConfig,
|
|
setConfig: ChangeConfigFunc,
|
|
cache: GridCache,
|
|
setCache: ChangeCacheFunc,
|
|
dbinfo: DatabaseInfo,
|
|
serverVersion,
|
|
isReadOnly = false,
|
|
public additionalcondition: Condition = null
|
|
) {
|
|
super(config, setConfig, cache, setCache, driver, dbinfo, serverVersion);
|
|
|
|
this.customColumns = columns;
|
|
|
|
this.columns = columns.map(col => ({
|
|
columnName: col.columnName,
|
|
headerText: col.columnLabel,
|
|
uniqueName: col.columnName,
|
|
uniquePath: [col.columnName],
|
|
isPrimaryKey: col.isPrimaryKey,
|
|
isForeignKeyUnique: false,
|
|
schemaName: tableName.schemaName,
|
|
pureName: tableName.pureName,
|
|
}));
|
|
|
|
this.changeSetKeyFields = columns.filter(x => x.isPrimaryKey).map(x => x.columnName);
|
|
this.baseTable = {
|
|
...tableName,
|
|
columns: this.columns.map(x => ({ ...tableName, columnName: x.columnName, dataType: 'string' })),
|
|
foreignKeys: [],
|
|
};
|
|
|
|
this.filterable = true;
|
|
this.sortable = true;
|
|
this.groupable = false;
|
|
this.editable = !isReadOnly;
|
|
this.supportsReload = true;
|
|
}
|
|
|
|
createSelect(options = {}) {
|
|
const select = this.createSelectBase(
|
|
this.tableName,
|
|
[],
|
|
// @ts-ignore
|
|
// this.columns.map(col => ({
|
|
// columnName: col.columnName,
|
|
// })),
|
|
options,
|
|
this.customColumns.find(x => x.isPrimaryKey)?.columnName
|
|
);
|
|
select.selectAll = true;
|
|
if (this.additionalcondition) {
|
|
if (select.where) {
|
|
select.where = {
|
|
conditionType: 'and',
|
|
conditions: [select.where, this.additionalcondition],
|
|
};
|
|
} else {
|
|
select.where = this.additionalcondition;
|
|
}
|
|
}
|
|
return select;
|
|
}
|
|
}
|