Files
dbgate/plugins/dbgate-plugin-redis/src/frontend/driver.js
2025-12-19 15:10:30 +01:00

111 lines
2.9 KiB
JavaScript

const { driverBase } = global.DBGATE_PACKAGES['dbgate-tools'];
const { redisSplitterOptions } = require('dbgate-query-splitter/lib/options');
const Dumper = require('./Dumper');
/** @type {import('dbgate-types').SqlDialect} */
const dialect = {
limitSelect: true,
rangeSelect: true,
offsetFetchRangeSyntax: true,
stringEscapeChar: "'",
fallbackDataType: 'nvarchar(max)',
quoteIdentifier(s) {
return `[${s}]`;
},
};
/** @type {import('dbgate-types').EngineDriver} */
const driver = {
...driverBase,
dumperClass: Dumper,
dialect,
engine: 'redis@dbgate-plugin-redis',
title: 'Redis',
defaultPort: 6379,
editorMode: 'text',
authTypeFirst: true,
databaseEngineTypes: ['keyvalue'],
supportedCreateDatabase: false,
getQuerySplitterOptions: () => redisSplitterOptions,
databaseUrlPlaceholder: 'e.g. redis://:authpassword@127.0.0.1:6380/4',
authTypeLabel: 'Connection mode',
defaultAuthTypeName: 'node',
supportedKeyTypes: [
{
name: 'string',
label: 'String',
dbKeyFields: [{ name: 'value' }],
addMethod: 'set',
},
{
name: 'list',
label: 'List',
dbKeyFields: [{ name: 'value' }],
addMethod: 'rpush',
showItemList: true,
},
{
name: 'set',
label: 'Set',
dbKeyFields: [{ name: 'value', readOnly: true }],
keyColumn: 'value',
addMethod: 'sadd',
showItemList: true,
},
{
name: 'zset',
label: 'Sorted Set',
dbKeyFields: [{ name: 'member', readOnly: true }, { name: 'score' }],
keyColumn: 'member',
addMethod: 'zadd',
showItemList: true,
},
{
name: 'hash',
label: 'Hash',
dbKeyFields: [{ name: 'key', readOnly: true }, { name: 'value' }, { name: 'TTL' }],
keyColumn: 'key',
addMethod: 'hset',
showItemList: true,
},
{
name: 'stream',
label: 'Stream',
dbKeyFields: [{ name: 'id', readOnly: true }, { name: 'value', readOnly: true }],
keyColumn: 'id',
addMethod: 'xaddjson',
showItemList: true,
},
{
name: 'json',
label: 'JSON',
dbKeyFields: [{ name: 'value' }],
addMethod: 'json.set',
}
],
showConnectionField: (field, values) => {
if (field == 'useDatabaseUrl') return values.authType != 'cluster';
if (field == 'authType') return !values.useDatabaseUrl;
if (values.useDatabaseUrl) {
return ['databaseUrl', 'isReadOnly', 'treeKeySeparator'].includes(field);
}
if (values.authType == 'cluster') {
return ['user', 'password', 'isReadOnly', 'treeKeySeparator', 'clusterNodes', 'autoDetectNatMap'].includes(field);
}
return ['server', 'port', 'user', 'password', 'isReadOnly', 'treeKeySeparator'].includes(field);
},
getAdvancedConnectionFields() {
return [
{
type: 'checkbox',
name: 'skipSetName',
label: 'Skip SETNAME instruction',
},
];
},
};
module.exports = driver;