UNPKG

@designliquido/lincones-sqlite

Version:
153 lines 6.24 kB
"use strict"; 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