@bytebase/dbhub
Version:
Token-efficient database MCP server for PostgreSQL, MySQL, MariaDB, SQL Server, Oracle, SQLite
36 lines (34 loc) • 1 kB
JavaScript
// src/utils/identifier-quoter.ts
function quoteIdentifier(identifier, dbType) {
if (/[\0\x08\x09\x1a\n\r]/.test(identifier)) {
throw new Error(`Invalid identifier: contains control characters: ${identifier}`);
}
if (!identifier) {
throw new Error("Identifier cannot be empty");
}
switch (dbType) {
case "postgres":
case "sqlite":
case "oracle":
return `"${identifier.replace(/"/g, '""')}"`;
case "mysql":
case "mariadb":
return `\`${identifier.replace(/`/g, "``")}\``;
case "sqlserver":
return `[${identifier.replace(/]/g, "]]")}]`;
default:
return `"${identifier.replace(/"/g, '""')}"`;
}
}
function quoteQualifiedIdentifier(tableName, schemaName, dbType) {
const quotedTable = quoteIdentifier(tableName, dbType);
if (schemaName) {
const quotedSchema = quoteIdentifier(schemaName, dbType);
return `${quotedSchema}.${quotedTable}`;
}
return quotedTable;
}
export {
quoteIdentifier,
quoteQualifiedIdentifier
};