mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-05-01 05:03:57 +00:00
load field values fix #1009
This commit is contained in:
@@ -253,9 +253,9 @@ module.exports = {
|
||||
},
|
||||
|
||||
loadFieldValues_meta: true,
|
||||
async loadFieldValues({ conid, database, schemaName, pureName, field, search }, req) {
|
||||
async loadFieldValues({ conid, database, schemaName, pureName, field, search, dataType }, req) {
|
||||
testConnectionPermission(conid, req);
|
||||
return this.loadDataCore('loadFieldValues', { conid, database, schemaName, pureName, field, search });
|
||||
return this.loadDataCore('loadFieldValues', { conid, database, schemaName, pureName, field, search, dataType });
|
||||
},
|
||||
|
||||
callMethod_meta: true,
|
||||
|
||||
@@ -291,10 +291,14 @@ async function handleLoadKeyTableRange({ msgid, key, cursor, count }) {
|
||||
});
|
||||
}
|
||||
|
||||
async function handleLoadFieldValues({ msgid, schemaName, pureName, field, search }) {
|
||||
return handleDriverDataCore(msgid, driver => driver.loadFieldValues(dbhan, { schemaName, pureName }, field, search), {
|
||||
logName: 'loadFieldValues',
|
||||
});
|
||||
async function handleLoadFieldValues({ msgid, schemaName, pureName, field, search, dataType }) {
|
||||
return handleDriverDataCore(
|
||||
msgid,
|
||||
driver => driver.loadFieldValues(dbhan, { schemaName, pureName }, field, search, dataType),
|
||||
{
|
||||
logName: 'loadFieldValues',
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
function ensureExecuteCustomScript(driver) {
|
||||
|
||||
@@ -2,7 +2,7 @@ import _compact from 'lodash/compact';
|
||||
import _isString from 'lodash/isString';
|
||||
import { SqlDumper } from './SqlDumper';
|
||||
import { splitQuery } from 'dbgate-query-splitter';
|
||||
import { dumpSqlSelect } from 'dbgate-sqltree';
|
||||
import { dumpSqlSelect, Select } from 'dbgate-sqltree';
|
||||
import { EngineDriver, QueryResult, RunScriptOptions } from 'dbgate-types';
|
||||
import { detectSqlFilterBehaviour } from './detectSqlFilterBehaviour';
|
||||
import { getLogger } from './getLogger';
|
||||
@@ -128,31 +128,44 @@ export const driverBase = {
|
||||
}
|
||||
return [];
|
||||
},
|
||||
async loadFieldValues(pool, name, columnName, search) {
|
||||
async loadFieldValues(pool, name, columnName, search, dataType) {
|
||||
const dmp = this.createDumper();
|
||||
const select = {
|
||||
|
||||
let expr;
|
||||
if (this.dialect.createColumnViewExpression) {
|
||||
expr = this.dialect.createColumnViewExpression(columnName, dataType, { name }, 'value');
|
||||
}
|
||||
if (!expr) {
|
||||
expr = {
|
||||
exprType: 'column',
|
||||
columnName,
|
||||
alias: 'value',
|
||||
};
|
||||
}
|
||||
|
||||
const select: Select = {
|
||||
commandType: 'select',
|
||||
distinct: true,
|
||||
topRecords: 100,
|
||||
|
||||
from: {
|
||||
name,
|
||||
},
|
||||
columns: [
|
||||
{
|
||||
exprType: 'column',
|
||||
columnName,
|
||||
alias: 'value',
|
||||
},
|
||||
],
|
||||
columns: [expr],
|
||||
orderBy: [
|
||||
{
|
||||
exprType: 'column',
|
||||
columnName,
|
||||
direction: 'ASC',
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
if (this.dialect.topRecords) {
|
||||
select.topRecords = 100;
|
||||
} else {
|
||||
select.range = { offset: 0, limit: 100 };
|
||||
}
|
||||
|
||||
if (search) {
|
||||
const tokens = _compact(search.split(' ').map(x => x.trim()));
|
||||
if (tokens.length > 0) {
|
||||
@@ -177,6 +190,8 @@ export const driverBase = {
|
||||
// @ts-ignore
|
||||
dumpSqlSelect(dmp, select);
|
||||
|
||||
console.log('******************** QUERY:', dmp.s);
|
||||
|
||||
const resp = await this.query(pool, dmp.s);
|
||||
return resp.rows;
|
||||
},
|
||||
|
||||
8
packages/types/engines.d.ts
vendored
8
packages/types/engines.d.ts
vendored
@@ -208,7 +208,13 @@ export interface EngineDriver extends FilterBehaviourProvider {
|
||||
exportKeys(dbhan: DatabaseHandle, options: {}): Promise;
|
||||
loadKeyInfo(dbhan: DatabaseHandle, key): Promise;
|
||||
loadKeyTableRange(dbhan: DatabaseHandle, key, cursor, count): Promise;
|
||||
loadFieldValues(dbhan: DatabaseHandle, name: NamedObjectInfo, field: string, search: string): Promise;
|
||||
loadFieldValues(
|
||||
dbhan: DatabaseHandle,
|
||||
name: NamedObjectInfo,
|
||||
field: string,
|
||||
search: string,
|
||||
dataType: string
|
||||
): Promise;
|
||||
analyseFull(dbhan: DatabaseHandle, serverVersion): Promise<DatabaseInfo>;
|
||||
analyseIncremental(dbhan: DatabaseHandle, structure: DatabaseInfo, serverVersion): Promise<DatabaseInfo>;
|
||||
dialect: SqlDialect;
|
||||
|
||||
@@ -39,6 +39,7 @@
|
||||
export let schemaName = null;
|
||||
export let columnName = null;
|
||||
export let uniqueName = null;
|
||||
export let dataType = null;
|
||||
|
||||
export let placeholder = 'Filter';
|
||||
|
||||
@@ -228,6 +229,7 @@
|
||||
pureName: foreignKey.refTableName,
|
||||
schemaName: foreignKey.refSchemaName,
|
||||
multiselect: true,
|
||||
dataType,
|
||||
onConfirm: keys => setFilter(keys.join(',')),
|
||||
});
|
||||
}
|
||||
@@ -243,6 +245,7 @@
|
||||
pureName,
|
||||
field: columnName || uniqueName,
|
||||
formatterFunction,
|
||||
dataType,
|
||||
onConfirm: keys => setFilter(keys.map(x => getFilterValueExpression(x)).join(',')),
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1994,6 +1994,7 @@
|
||||
onFocusGrid={() => {
|
||||
selectTopmostCell(col.uniqueName);
|
||||
}}
|
||||
dataType={col.dataType}
|
||||
/>
|
||||
</td>
|
||||
{/each}
|
||||
|
||||
@@ -63,6 +63,7 @@
|
||||
{pureName}
|
||||
columnName={column ? (column.uniquePath.length == 1 ? column.uniquePath[0] : null) : uniqueName}
|
||||
foreignKey={column?.foreignKey}
|
||||
dataType={column?.dataType}
|
||||
/>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
export let schemaName;
|
||||
export let driver;
|
||||
export let multiselect = false;
|
||||
export let dataType;
|
||||
|
||||
let rows = null;
|
||||
let tableInfo;
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
export let multiselect = false;
|
||||
export let jslid;
|
||||
export let formatterFunction;
|
||||
export let dataType;
|
||||
|
||||
// console.log('ValueLookupModal', conid, database, pureName, schemaName, columnName, driver);
|
||||
|
||||
@@ -53,6 +54,7 @@
|
||||
schemaName,
|
||||
pureName,
|
||||
field,
|
||||
dataType,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user