longcelot-sheet-db
Version:
Google Sheets-backed staging database adapter for Node.js with schema-first design
48 lines • 1.97 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MySQLDialect = exports.PostgresDialect = void 0;
function errorCode(err) {
if (typeof err !== 'object' || err === null || !('code' in err))
return undefined;
return String(err.code);
}
exports.PostgresDialect = {
name: 'postgres',
quoteIdent: (name) => `"${name.replace(/"/g, '""')}"`,
placeholder: (index) => `$${index}`,
booleanLiteral: (value) => value,
limitOffsetClause: (limit, offset) => {
const parts = [];
if (limit !== undefined)
parts.push(`LIMIT ${limit}`);
if (offset !== undefined)
parts.push(`OFFSET ${offset}`);
return parts.join(' ');
},
// https://www.postgresql.org/docs/current/errcodes-appendix.html
isUniqueViolation: (err) => errorCode(err) === '23505',
isFKViolation: (err) => errorCode(err) === '23503',
};
exports.MySQLDialect = {
name: 'mysql',
quoteIdent: (name) => `\`${name.replace(/`/g, '``')}\``,
placeholder: () => '?',
booleanLiteral: (value) => (value ? 1 : 0),
limitOffsetClause: (limit, offset) => {
if (limit === undefined && offset === undefined)
return '';
// MySQL's LIMIT/OFFSET requires a LIMIT to use OFFSET; use MySQL's own documented
// "effectively unlimited" sentinel when only an offset was requested.
const effectiveLimit = limit ?? 18446744073709551615;
const parts = [`LIMIT ${effectiveLimit}`];
if (offset !== undefined)
parts.push(`OFFSET ${offset}`);
return parts.join(' ');
},
isUniqueViolation: (err) => errorCode(err) === 'ER_DUP_ENTRY',
isFKViolation: (err) => errorCode(err) === 'ER_NO_REFERENCED_ROW' ||
errorCode(err) === 'ER_NO_REFERENCED_ROW_2' ||
errorCode(err) === 'ER_ROW_IS_REFERENCED' ||
errorCode(err) === 'ER_ROW_IS_REFERENCED_2',
};
//# sourceMappingURL=dialect.js.map