@designliquido/lincones-sqlite
Version:
Implementação de LinConEs para SQLite.
153 lines • 6.24 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.TradutorSqLite = void 0;
const comum_1 = require("../comum");
const tipos_de_simbolos_1 = __importDefault(require("../comum/fontes/tipos-de-simbolos"));
class TradutorSqLite extends comum_1.TradutorSqlAnsi {
constructor() {
super(...arguments);
this.dicionarioComandos = {
Alterar: this.traduzirComandoAlterar.bind(this),
Atualizar: this.traduzirComandoAtualizar.bind(this),
Criar: this.traduzirComandoCriar.bind(this),
Excluir: this.traduzirComandoExcluir.bind(this),
Inserir: this.traduzirComandoInserir.bind(this),
Selecionar: this.traduzirComandoSelecionar.bind(this)
};
}
traduzirOperador(operador) {
switch (operador) {
case tipos_de_simbolos_1.default.IGUAL:
return '=';
case tipos_de_simbolos_1.default.VERDADEIRO:
return true;
case tipos_de_simbolos_1.default.FALSO:
return false;
}
}
traduzirComandoAtualizar(comandoAtualizar) {
let resultado = 'UPDATE ';
resultado += `${comandoAtualizar.tabela}\nSET `;
for (const valorAtualizacao of comandoAtualizar.colunasEValores) {
if (valorAtualizacao.direita.tipo === tipos_de_simbolos_1.default.TEXTO) {
resultado += `${valorAtualizacao.esquerda.lexema} = '${valorAtualizacao.direita.lexema}', `;
continue;
}
if ([tipos_de_simbolos_1.default.VERDADEIRO, tipos_de_simbolos_1.default.FALSO].includes(valorAtualizacao.direita.tipo)) {
resultado += `${valorAtualizacao.esquerda.lexema} = ${this.traduzirOperador(valorAtualizacao.direita.tipo)}, `;
continue;
}
resultado += `${valorAtualizacao.esquerda.lexema} = ${valorAtualizacao.direita.lexema}, `;
}
resultado = resultado.slice(0, -2);
if (comandoAtualizar.condicoes.length > 0) {
resultado += `\nWHERE `;
for (const condicao of comandoAtualizar.condicoes) {
resultado += `${condicao.esquerda.lexema} ${this.traduzirOperador(condicao.operador)} ${condicao.direita} AND `;
}
resultado = resultado.slice(0, -5);
}
return resultado;
}
traduzirColuna(coluna) {
let traduzir = '';
if (tipos_de_simbolos_1.default.INTEIRO === coluna.tipo) {
traduzir += `INTEGER `;
}
else if (tipos_de_simbolos_1.default.TEXTO === coluna.tipo) {
const simbolo = coluna.tamanho;
traduzir += `VARCHAR(${simbolo.literal}) `;
}
else if (tipos_de_simbolos_1.default.LOGICO === coluna.tipo)
traduzir += 'BOOLEAN ';
if (coluna.chavePrimaria)
traduzir += 'PRIMARY KEY ';
if (coluna.nulo)
traduzir += 'NULL';
else
traduzir += 'NOT NULL';
return traduzir;
}
traduzirComandoCriar(comandoCriar) {
let resultado = `CREATE TABLE ${comandoCriar.nomeEntidade} (`;
for (const coluna of comandoCriar.colunas) {
resultado += `${coluna.nomeColuna} ${this.traduzirColuna(coluna)}, `;
}
resultado = resultado.slice(0, -2);
resultado += ')';
return resultado;
}
traduzirComandoExcluir(comandoExcluir) {
let resultado = 'DELETE FROM ';
resultado += `${comandoExcluir.tabela} `;
resultado = resultado.slice(0, -1);
if (comandoExcluir.condicoes.length > 0) {
resultado += `\nWHERE `;
for (const condicao of comandoExcluir.condicoes) {
resultado += `${condicao.esquerda.lexema} ${this.traduzirOperador(condicao.operador)} ${condicao.direita} AND `;
}
resultado = resultado.slice(0, -5);
}
return resultado;
}
traduzirComandoInserir(comandoInserir) {
let resultado = 'INSERT INTO ';
resultado += `${comandoInserir.tabela} (`;
for (const coluna of comandoInserir.colunas) {
resultado += `${coluna}, `;
}
resultado = resultado.slice(0, -2);
resultado += `)\nVALUES (`;
for (const valor of comandoInserir.valores) {
if (typeof valor.literal === 'string') {
resultado += `"${valor.literal}", `;
continue;
}
else if ([tipos_de_simbolos_1.default.VERDADEIRO, tipos_de_simbolos_1.default.FALSO].includes(valor.tipo)) {
resultado += `${this.traduzirOperador(valor.tipo)}, `;
continue;
}
else {
resultado += `${valor.literal}, `;
}
}
resultado = resultado.slice(0, -2);
resultado += `)`;
return resultado;
}
traduzirComandoSelecionar(comandoSelecionar) {
let resultado = 'SELECT ';
// Colunas
if (comandoSelecionar.tudo) {
resultado += '*';
}
else {
for (const coluna of comandoSelecionar.colunas) {
resultado += coluna + ', ';
}
resultado = resultado.slice(0, -2);
}
resultado += `\nFROM ${comandoSelecionar.tabela}`;
// Condições
if (comandoSelecionar.condicoes.length > 0) {
resultado += '\n WHERE ';
for (const condicao of comandoSelecionar.condicoes) {
resultado += `${condicao.esquerda.lexema} ${this.traduzirOperador(condicao.operador)} ${condicao.direita} AND `;
}
resultado = resultado.slice(0, -5);
}
return resultado;
}
traduzir(comandos) {
let resultado = '';
for (const comando of comandos.filter((c) => c)) {
resultado += `${this.dicionarioComandos[comando.constructor.name](comando)} \n`;
}
return resultado;
}
}
exports.TradutorSqLite = TradutorSqLite;
//# sourceMappingURL=index.js.map