74 lines
1.2 KiB
JavaScript
Raw Normal View History

2021-06-17 16:17:15 +02:00
'use strict';
2021-06-24 18:28:36 +02:00
const errors = require('../errors');
2021-06-17 16:17:15 +02:00
class Dialect {
useReturning() {
return false;
}
2021-06-24 18:28:36 +02:00
processResult(r) {
return r;
}
// TODO: pass query info to display some more metadata
transformErrors(error) {
throw error;
}
2021-06-17 16:17:15 +02:00
}
2021-06-24 18:28:36 +02:00
class PostgresDialect extends Dialect {
2021-06-17 16:17:15 +02:00
useReturning() {
return true;
}
2021-06-24 18:28:36 +02:00
transformErrors(error) {
switch (error.code) {
case '23502': {
throw new errors.NotNullConstraint({ column: error.column });
}
default: {
throw error;
}
}
}
}
class MysqlDialect extends Dialect {
transformErrors(error) {
throw error;
}
}
class SqliteDialect extends Dialect {
transformErrors(error) {
switch (error.errno) {
case 19: {
throw new errors.NotNullConstraint();
}
default: {
throw error;
}
}
}
2021-06-17 16:17:15 +02:00
}
const getDialect = connection => {
const { client } = connection.client.config;
switch (client) {
case 'postgres':
2021-06-24 18:28:36 +02:00
return new PostgresDialect();
case 'mysql':
return new MysqlDialect();
case 'sqlite':
return new SqliteDialect();
2021-06-17 16:17:15 +02:00
default:
return new Dialect();
}
};
module.exports = {
getDialect,
};