Skip to content

Commit 40c309b

Browse files
Refinamento de suporte a parâmetros.
1 parent 0d4c5da commit 40c309b

File tree

4 files changed

+53
-14
lines changed

4 files changed

+53
-14
lines changed

fontes/infraestrutura/cliente-sqlite.ts

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,19 +33,20 @@ export class ClienteSQLite {
3333
console.log('Conectado ao banco de dados SQLite.');
3434
}
3535

36-
public async executarComando(comando: string): Promise<any> {
36+
public async executarComando(comando: string, parametros: any[] = []): Promise<any> {
3737
if (comando.startsWith('SELECT')) {
38-
return await this.executarComandoSelecao(comando);
38+
return await this.executarComandoSelecao(comando, parametros);
3939
}
4040

41-
return await this.instanciaBancoDeDados.run(comando, (erro: Error) => {
42-
if (erro) {
43-
console.log(erro.message);
44-
}
45-
});
41+
return await this.instanciaBancoDeDados.run(comando, parametros);
42+
// (erro: Error) => {
43+
// if (erro) {
44+
// console.log(erro.message);
45+
// }
46+
// });
4647
}
4748

48-
private async executarComandoSelecao(comando: string) {
49-
return await this.instanciaBancoDeDados.all(comando);
49+
private async executarComandoSelecao(comando: string, parametros: any[] = []): Promise<any> {
50+
return await this.instanciaBancoDeDados.all(comando, parametros);
5051
}
5152
}

fontes/lincones-sqlite.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,13 @@ export class LinconesSQLite {
1818
}
1919

2020
/**
21-
*
21+
* Traduz um comando de LinConEs para SQL e executa no banco de dados SQLite.
2222
* @param _ Normalmente a instância do interpretador Delégua.
23-
* @param comando
23+
* @param comando O comando em LinConEs a ser traduzido e executado.
24+
* @param parametros Parâmetros adicionais para o comando, se necessário.
2425
* @returns
2526
*/
26-
async executar(_: any, comando: string): Promise<RetornoComando> {
27+
async executar(_: any, comando: string, parametros: any[] = []): Promise<RetornoComando> {
2728
const resultadoLexador = this.lexador.mapear([comando]);
2829
const resultadoAvaliacaoSintatica = this.avaliadorSintatico.analisar(resultadoLexador);
2930
const resultadoTraducao = this.tradutor.traduzir(resultadoAvaliacaoSintatica.comandos);
@@ -32,7 +33,7 @@ export class LinconesSQLite {
3233
return new RetornoComando(null);
3334
}
3435

35-
const resultadoExecucao = await this.clienteSQLite.executarComando(resultadoTraducao);
36+
const resultadoExecucao = await this.clienteSQLite.executarComando(resultadoTraducao, parametros);
3637
const retorno = new RetornoComando(resultadoExecucao);
3738

3839
return retorno;

testes/lincones-sqlite.test.ts

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import { LinconesSQLite } from '../fontes/lincones-sqlite';
2+
3+
describe('LinconesSqlite', () => {
4+
let linconesSqlite: LinconesSQLite;
5+
6+
beforeEach(() => {
7+
linconesSqlite = new LinconesSQLite();
8+
});
9+
10+
it('Execução com parâmetros', async () => {
11+
const comandoCriarTabela = 'CRIAR TABELA SE NÃO EXISTIR clientes(ID INTEIRO NAO NULO CHAVE PRIMARIA AUTO INCREMENTO, NOME TEXTO(100) NAO NULO, IDADE INTEIRO NAO NULO, EMAIL TEXTO(255) NAO NULO, ATIVO LOGICO NAO NULO);';
12+
const comandoInserir = 'INSERIR EM clientes (NOME, IDADE, EMAIL, ATIVO) VALORES (?, ?, ?, ?);';
13+
const comandoAtualizar = 'ATUALIZAR clientes DEFINIR NOME = ?, IDADE = ?, EMAIL = ?, ATIVO = ? ONDE ID = ?;';
14+
const comandoExcluir = 'EXCLUIR DE clientes ONDE ID = ?;';
15+
const comandoSelecionar = 'SELECIONAR * DE clientes;';
16+
17+
await linconesSqlite.clienteSQLite.abrir();
18+
19+
const retornoCriarTabela = await linconesSqlite.executar(null, comandoCriarTabela);
20+
expect(retornoCriarTabela).toBeTruthy();
21+
22+
const retornoInserir = await linconesSqlite.executar(null, comandoInserir, ['Pernalonga', 18, 'pernalonga@warnerbros.com', true]);
23+
expect(retornoInserir).toBeTruthy();
24+
expect(retornoInserir.ultimoId).toBeGreaterThan(0);
25+
26+
const retornoAtualizar = await linconesSqlite.executar(null, comandoAtualizar, ['Pernalonga Atualizado', 19, 'pernalonga2@warnerbros.com', false, retornoInserir.ultimoId]);
27+
expect(retornoAtualizar).toBeTruthy();
28+
expect(retornoAtualizar.linhasAfetadas).toBeGreaterThan(0);
29+
30+
const retornoExcluir = await linconesSqlite.executar(null, comandoExcluir, [retornoInserir.ultimoId]);
31+
expect(retornoExcluir).toBeTruthy();
32+
expect(retornoExcluir.linhasAfetadas).toBeGreaterThan(0);
33+
34+
const retornoSelecionar = await linconesSqlite.executar(null, comandoSelecionar);
35+
expect(retornoSelecionar).toBeTruthy();
36+
});
37+
});

0 commit comments

Comments
 (0)