mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-18 03:16:01 +00:00
* enum + set for mysql * enum + set for mysql | dropdown * enum for mysql | removed empty option
156 lines
3.6 KiB
JavaScript
156 lines
3.6 KiB
JavaScript
const { driverBase } = global.DBGATE_TOOLS;
|
|
const { mysqlSplitterOptions } = require('dbgate-query-splitter/lib/options');
|
|
const Dumper = require('./Dumper');
|
|
|
|
const spatialTypes = [
|
|
'POINT',
|
|
'LINESTRING',
|
|
'POLYGON',
|
|
'GEOMETRY',
|
|
'MULTIPOINT',
|
|
'MULTILINESTRING',
|
|
'MULTIPOLYGON',
|
|
'GEOMCOLLECTION',
|
|
'GEOMETRYCOLLECTION',
|
|
];
|
|
|
|
/** @type {import('dbgate-types').SqlDialect} */
|
|
const dialect = {
|
|
rangeSelect: true,
|
|
stringEscapeChar: '\\',
|
|
fallbackDataType: 'longtext',
|
|
enableConstraintsPerTable: false,
|
|
anonymousPrimaryKey: true,
|
|
explicitDropConstraint: true,
|
|
quoteIdentifier(s) {
|
|
return '`' + s + '`';
|
|
},
|
|
|
|
createColumn: true,
|
|
dropColumn: true,
|
|
changeColumn: true,
|
|
createIndex: true,
|
|
dropIndex: true,
|
|
createForeignKey: true,
|
|
dropForeignKey: true,
|
|
createPrimaryKey: true,
|
|
dropPrimaryKey: true,
|
|
dropIndexContainsTableSpec: true,
|
|
createUnique: true,
|
|
dropUnique: true,
|
|
createCheck: true,
|
|
dropCheck: true,
|
|
|
|
dropReferencesWhenDropTable: false,
|
|
requireStandaloneSelectForScopeIdentity: true,
|
|
|
|
columnProperties: {
|
|
columnComment: true,
|
|
isUnsigned: true,
|
|
isZerofill: true,
|
|
},
|
|
|
|
predefinedDataTypes: [
|
|
'char(20)',
|
|
'varchar(250)',
|
|
'binary(250)',
|
|
'varbinary(250)',
|
|
'tinyblob',
|
|
'tinytext',
|
|
'text(1000)',
|
|
'blob(1000)',
|
|
'mediumtext',
|
|
'mediumblob',
|
|
'longtext',
|
|
'longblob',
|
|
"enum('val1','val2','val3')",
|
|
"set('val1','val2','val3')",
|
|
'bit(32)',
|
|
'tinyint',
|
|
'bool',
|
|
'smallint',
|
|
'mediumint',
|
|
'int',
|
|
'bigint',
|
|
'float',
|
|
'double',
|
|
'decimal',
|
|
'date',
|
|
'datetime',
|
|
'timestamp',
|
|
'time',
|
|
'year',
|
|
],
|
|
|
|
createColumnViewExpression(columnName, dataType, source, alias) {
|
|
if (dataType && spatialTypes.includes(dataType.toUpperCase())) {
|
|
return {
|
|
exprType: 'call',
|
|
func: 'ST_AsText',
|
|
alias: alias || columnName,
|
|
args: [
|
|
{
|
|
exprType: 'column',
|
|
columnName,
|
|
source,
|
|
},
|
|
],
|
|
};
|
|
}
|
|
},
|
|
};
|
|
|
|
const mysqlDriverBase = {
|
|
...driverBase,
|
|
showConnectionField: (field, values) =>
|
|
['authType', 'user', 'password', 'defaultDatabase', 'singleDatabase', 'isReadOnly'].includes(field) ||
|
|
(values.authType == 'socket' && ['socketPath'].includes(field)) ||
|
|
(values.authType != 'socket' && ['server', 'port'].includes(field)),
|
|
dumperClass: Dumper,
|
|
dialect,
|
|
defaultPort: 3306,
|
|
getQuerySplitterOptions: usage =>
|
|
usage == 'editor'
|
|
? { ...mysqlSplitterOptions, ignoreComments: true, preventSingleLineSplit: true }
|
|
: mysqlSplitterOptions,
|
|
|
|
readOnlySessions: true,
|
|
supportsDatabaseDump: true,
|
|
authTypeLabel: 'Connection mode',
|
|
defaultAuthTypeName: 'hostPort',
|
|
defaultSocketPath: '/var/run/mysqld/mysqld.sock',
|
|
|
|
getNewObjectTemplates() {
|
|
return [
|
|
{ label: 'New view', sql: 'CREATE VIEW myview\nAS\nSELECT * FROM table1' },
|
|
{
|
|
label: 'New procedure',
|
|
sql: 'DELIMITER //\n\nCREATE PROCEDURE myproc (IN arg1 INT)\nBEGIN\n SELECT * FROM table1;\nEND\n\nDELIMITER ;',
|
|
},
|
|
{ label: 'New function', sql: 'CREATE FUNCTION myfunc (arg1 INT)\nRETURNS INT DETERMINISTIC\nRETURN 1' },
|
|
];
|
|
},
|
|
};
|
|
|
|
/** @type {import('dbgate-types').EngineDriver} */
|
|
const mysqlDriver = {
|
|
...mysqlDriverBase,
|
|
engine: 'mysql@dbgate-plugin-mysql',
|
|
title: 'MySQL',
|
|
__analyserInternals: {
|
|
quoteDefaultValues: true,
|
|
},
|
|
};
|
|
|
|
/** @type {import('dbgate-types').EngineDriver} */
|
|
const mariaDriver = {
|
|
...mysqlDriverBase,
|
|
engine: 'mariadb@dbgate-plugin-mysql',
|
|
title: 'MariaDB',
|
|
__analyserInternals: {
|
|
quoteDefaultValues: false,
|
|
},
|
|
};
|
|
|
|
module.exports = [mysqlDriver, mariaDriver];
|