npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

limber-firebird-client

v3.0.17

Published

Cliente JavaScript/Typescrypt para Node.js de acesso a banco de dados Firebird charset ISO8859_1 e UTF8

Downloads

290

Readme

Firebird Logo

Cliente JavaScript/Typescrypt para Node.js de acesso a banco de dados Firebird charset ISO8859_1 e e UTF8.

Instalação

npm install limber-firebird-client -s

Utilização

const express = require("express");
const firebird = require("limber-firebird-client");

const app = express();
app.use(firebird.databaseParser());

Parâmetros .env

  • FIREBIRD_DISPLAY_LOGS - Se o valor for true exibe todos os logs da conexão.
  • FIREBIRD_CONN_FORCE_CLEAR - Se true define para limpar as conexões não usadas do pool a cada intervalo definido pela opção FIREBIRD_CONN_TIMEOUT_CLEAR ou se false após o tempo máximo definido pela opção FIREBIRD_CONN_TIMEOUT_CLEAR após a última requisição.
  • FIREBIRD_CONN_TIMEOUT_CLEAR - Define o tempo máximo em milissegundos para limpar as conexões do pool.
  • FIREBIRD_ENCODING - Define o encoding para strings utf8 ou latin1.
  • FIREBIRD_MAX_CONN - Define o número máximo de conexões simultaneas via pool.
  • FIREBIRD_HOST - Informa o host de acesso ao serviço do banco de dados.
  • FIREBIRD_PORT - Informa a porta de acesso ao serviço do banco de dados.
  • FIREBIRD_BASE - Informa o caminho do arquivo do banco de dados.
  • FIREBIRD_USER - Usuário de acesso do banco de dados.
  • FIREBIRD_PASSWD - Senha de acesso do banco de dados.
  • FIREBIRD_LOWERCASE_KEYS - Retorna o nome das colunas em minúsculo.
  • FIREBIRD_ROLE - Informa a role do banco de dados.
  • FIREBIRD_PAGE_SIZE - Informa o tamanho da paginação do banco de dados.
  • FIREBIRD_IMG_MAX_CONN - Define para a base de imagens o número máximo de conexões simultaneas via pool.
  • FIREBIRD_IMG_HOST - Informa para a base de imagens o host de acesso ao serviço do banco de dados.
  • FIREBIRD_IMG_PORT - Informa para a base de imagens a porta de acesso ao serviço do banco de dados.
  • FIREBIRD_IMG_BASE - Informa para a base de imagens o caminho do arquivo do banco de dados.
  • FIREBIRD_IMG_USER - Usuário de acesso da base de imagens do banco de dados.
  • FIREBIRD_IMG_PASSWD - Senha de acesso da base de imagens do banco de dados.
  • FIREBIRD_IMG_LOWERCASE_KEYS - Retorna o nome das colunas em minúsculo para a base de imagens.
  • FIREBIRD_IMG_ROLE - Informa a role do banco de dados de imagens.
  • FIREBIRD_IMG_PAGE_SIZE - Informa o tamanho da paginação do banco de dados de imagens.

Exemplo:

FIREBIRD_DISPLAY_LOGS=true
FIREBIRD_CONN_FORCE_CLEAR=false
FIREBIRD_CONN_TIMEOUT_CLEAR=1800000
FIREBIRD_ENCODING=utf8

FIREBIRD_MAX_CONN=5
FIREBIRD_HOST=127.0.0.1
FIREBIRD_PORT=3050
FIREBIRD_BASE=C:\Limber\DATA\CDE_WIN.FDB
FIREBIRD_USER=SYSDBA
FIREBIRD_PASSWD=masterkey
FIREBIRD_LOWERCASE_KEYS=false

FIREBIRD_IMG_MAX_CONN=5
FIREBIRD_IMG_HOST=127.0.0.1
FIREBIRD_IMG_PORT=3050
FIREBIRD_IMG_BASE=C:\Limber\DATA\CDE_WIN_IMAGENS.FDB
FIREBIRD_IMG_USER=SYSDBA
FIREBIRD_IMG_PASSWD=masterkey
FIREBIRD_IMG_LOWERCASE_KEYS=false

Parâmetros padrões da biblioteca

  • DEFAULT_FIREBIRD_USER - Usuário padrão de acesso ao banco de dados.
  • DEFAULT_FIREBIRD_PASSWORD - Senha padrão de acesso ao banco de dados.
  • DEFAULT_FIREBIRD_HOST - Host padrão de acesso ao banco de dados.
  • DEFAULT_FIREBIRD_PORT - Porta padrão de acesso ao banco de dados.
  • DEFAULT_FIREBIRD_LOWERCASE_KEYS - Definição padrão de retorno de colunas em minúsculo.
  • DEFAULT_FIREBIRD_PAGE_SIZE - Valor padrão do tamanho da paginação.
  • DEFAULT_FIREBIRD_ROLE - Valor padrão da role de conexão.
  • DEFAULT_FIREBIRD_MAX_POOL_CONNECTION - Numero padrão do máximo de conexões permitidas no pool.
  • DEFAULT_FIREBIRD_TIMEOUT_DESTROY_POOLS - Tempo padrão que define o tempo máximo em milissegundos para limpar as conexões do pool.
  • DEFAULT_FIREBIRD_CONN_FORCE_CLEAR - Valor padrão da forma de limpar as conexões do pool.
  • DEFAULT_FIREBIRD_DISPLAY_LOGS - Valor padrão se exibe os logs da biblioteca.

Métodos retornados pelo req.firebird

  • req.firebird.attachDataBase(options) Realiza a conexão direta com o banco de dados e retorna um objeto do tipo DirectDatabase para realização de consultas ou alterações
  • req.firebird.openDataBaseRead() Retorna um objeto do tipo Database apenas para realização de consultas no banco de dados
  • req.firebird.openDataBaseWrite(usuario) Retorna um objeto do tipo Transaction para realizar alterações no banco de dados
  • req.firebird.openDataBaseImageRead() Retorna um objeto do tipo Database apenas para realização de consultas no banco de dados de imagens
  • req.firebird.openDataBaseImageWrite() Retorna um objeto do tipo Transaction para realizar alterações no banco de dados de imagens

Métodos de conexão direta

  • firebird.attachDataBase(options) Realiza a conexão direta com o banco de dados e retorna um objeto do tipo DirectDatabase para realização de consultas ou alterações
  • firebird.attachPool() Retorna uma conexão disponível no pool do tipo DirectDatabase para realização de consultas ou alterações
  • firebird.attachPoolImage() Retorna uma conexão disponível no pool de imagens do tipo DirectDatabase para realização de consultas ou alterações

Options attachtDataBase

let options = {};
options.host = '127.0.0.1';
options.port = 3050;
options.database = 'C:\\Limber\\DATA\\CDE_WIN.FDB';
options.user = 'SYSDBA';
options.password = 'masterkey';
options.lowercase_keys = false;
options.role = null;
options.pageSize = 4096;
options.encoding = 'utf8';

Database

  • db.query(query, [params]) - Consulta clássica, retorna um Array of Object
  • db.queryOne(query, [params]) - Retorna o primeiro objeto da consulta ou null
  • db.execute(query, [params]) - Consulta clássica, retorna um Array of Array
  • db.executeOne(query, [params]) - Retorna o primeiro Array da consulta ou null
  • db.sequentially(query, [params], function(row, index), function(err), isArray) - Realiza uma consulta de forma sequencial

DirectDatabase

  • db.query(query, [params]) - Consulta clássica, retorna um Array of Object
  • db.queryOne(query, [params]) - Retorna o primeiro objeto da consulta ou null
  • db.execute(query, [params]) - Consulta clássica, retorna um Array of Array
  • db.executeOne(query, [params]) - Retorna o primeiro Array da consulta ou null
  • db.sequentially(query, [params], function(row, index), function(err), isArray) - Realiza uma consulta de forma sequencial
  • db.detach() - Finaliza a conexao direta com o banco de dados
  • db.transaction() - Inicia uma transação com o banco de dados

Transaction

  • transaction.query(query, [params]) - Consulta clássica, retorna um Array of Object
  • transaction.queryOne(query, [params]) - Retorna o primeiro objeto da consulta ou null
  • transaction.execute(query, [params]) - Consulta clássica, retorna um Array of Array
  • transaction.executeOne(query, [params]) - Retorna o primeiro Array da consulta ou null
  • transaction.sequentially(query, [params], function(row, index), function(err)) - Realiza uma consulta de forma sequencial

DirectTransaction

  • transaction.query(query, [params]) - Consulta clássica, retorna um Array of Object
  • transaction.queryOne(query, [params]) - Retorna o primeiro objeto da consulta ou null
  • transaction.execute(query, [params]) - Consulta clássica, retorna um Array of Array
  • transaction.executeOne(query, [params]) - Retorna o primeiro Array da consulta ou null
  • transaction.sequentially(query, [params], function(row, index), function(err), isArray) - Realiza uma consulta de forma sequencial
  • transaction.commit() - Confirma as alterações realizadas na transação
  • transaction.rollback() - Reverte as alterações realizadas na transação

Exemplos:

Conexão direta(ASYNCHRONOUS)

router.post('/estabelecimento', (req, res, next) => {
    req.firebird.attachDataBase({
        host: '127.0.0.1',
        port: 3050,
        user: 'SYSDBA',
        password: 'masterkey',
        database: 'C:\\Limber\\DATA\\CDE_WIN.FDB',
        lowercase_keys: false,
        encoding: 'latin1'
    }, (db) => {
        db.transaction((err, transaction) => {
            if (err) {
                db.detach();
                next(err);
            } else {
                transaction.execute('INSERT INTO CAD_ESTABELECIMENTOS (EMPRESA, CODIGO, NOME) VALUES (?,?,?)', [req.body.empresa, req.body.codigo, req.body.nome],
                    (err, result) => {
                        if (err) {
                            transaction.rollback();
                            db.detach();
                            next(err);
                        } else {
                            transaction.query('SELECT E.EMPRESA, E.CODIGO, E.NOME FROM CAD_ESTABELECIMENTOS E WHERE E.CODIGO = ?', [req.query.codigo],
                                (err, result) => {
                                    if (err) {
                                        transaction.rollback();
                                        db.detach();
                                        next(err);
                                    } else {
                                        transaction.commit(err => {
                                            if (err) {
                                                transaction.rollback();
                                                db.detach();
                                                next(err);
                                            } else {
                                                db.detach();
                                                res.status(200).json(result);
                                            }
                                        });
                                    }
                                });
                        }
                    });
            }
        });
    });
});

Conexão direta(SYNCHRONOUS)

router.post('/estabelecimento', async (req, res, next) => {
    try {
        let db = await req.firebird.attachDataBase({
            host: '127.0.0.1',
            port: 3050,
            user: 'SYSDBA',
            password: 'masterkey',
            database: 'C:\\Limber\\DATA\\CDE_WIN.FDB',
            lowercase_keys: false,
            encoding: 'latin1'
        });

        let transaction = await db.transaction();
        try {
            await transaction.execute('INSERT INTO CAD_ESTABELECIMENTOS (EMPRESA, CODIGO, NOME) VALUES (?,?,?)', [req.body.empresa, req.body.codigo, req.body.nome]);

            let result = await transaction.query('SELECT E.EMPRESA, E.CODIGO, E.NOME FROM CAD_ESTABELECIMENTOS E WHERE E.CODIGO = ?', [req.query.codigo]);

            await transaction.commit();

            res.status(200).json(result);
        } catch (e) {
            await transaction.rollback();
            next(err);
        }
        await db.detach();
    } catch (err) {
        next(err);
    }
});

Leitura (ASYNCHRONOUS)

router.get('/estabelecimento', (req, res, next) => {
    req.firebird.openDataBaseRead((db) => {
        db.query('SELECT E.EMPRESA, E.CODIGO, E.NOME FROM CAD_ESTABELECIMENTOS E WHERE E.CODIGO = ?',
            [req.query.codigo], (err, result) => {
                if (err) {
                    next(err);
                } else {
                    res.status(200).json(result);
                }
            });
    });
});

Leitura (SYNCHRONOUS)

router.get('/estabelecimento', async (req, res, next) => {
    try {
        let db = await req.firebird.openDataBaseRead();
        let result = await db.query('SELECT E.EMPRESA, E.CODIGO, E.NOME FROM CAD_ESTABELECIMENTOS E WHERE E.CODIGO = ?', [req.query.codigo]);
        res.status(200).json(result);
    } catch (err) {
        next(err);
    }
});

Gravação (ASYNCHRONOUS)

router.post('/prevenda', (req, res, next) => {

    req.firebird.openDataBaseWrite((transaction) => {

        let EMPRESA = req.body.EMPRESA,
            CODIGO = req.body.CODIGO,
            ESTABELEC = req.body.ESTABELEC,
            TABPRECO = req.body.TABPRECO,
            DATA = req.body.DATA ,
            HORA = req.body.HORA,
            TOTAL = req.body.TOTAL;

            transaction.query("INSERT INTO PAF_PREVENDA (EMPRESA, CODIGO, ESTABELEC, TABPRECO, DATA, HORA, TOTAL, ID_TRANSACAO) " +
                "VALUES (?, ?, ?, ?, ?, ?, ?, GEN_ID(GEN_TRANSACOES0, 1)) RETURNING ID_TRANSACAO", 
                [EMPRESA, CODIGO, ESTABELEC, TABPRECO, DATA, HORA, TOTAL, TOTAL], (err, result) => {
                if (err) {
                    next(err);
                } else {
                    res.status(200).json(result);
                }
            });

    });

});

Gravação (SYNCHRONOUS)

router.post('/prevenda', async (req, res, next) => {
    try {
        let EMPRESA = req.body.EMPRESA,
            CODIGO = req.body.CODIGO,
            ESTABELEC = req.body.ESTABELEC,
            TABPRECO = req.body.TABPRECO,
            DATA = req.body.DATA ,
            HORA = req.body.HORA,
            TOTAL = req.body.TOTAL;
        
        let transaction = await req.firebird.openDataBaseWrite();
        let result = await transaction.query("INSERT INTO PAF_PREVENDA (EMPRESA, CODIGO, ESTABELEC, TABPRECO, DATA, HORA, TOTAL, ID_TRANSACAO) " +
            "VALUES (?, ?, ?, ?, ?, ?, ?, GEN_ID(GEN_TRANSACOES0, 1)) RETURNING ID_TRANSACAO",
            [EMPRESA, CODIGO, ESTABELEC, TABPRECO, DATA, HORA, TOTAL, TOTAL]);
        res.status(200).json(result);
    } catch (err) {
        next(err);
    }
});

STREAMING A BIG DATA (ASYNCHRONOUS)

router.get('/big', (req, res, next) => {
    req.firebird.openDataBaseRead((db) => {
        db.sequentially('SELECT * FROM BIGTABLE', function (row, index) {
            stream.write(JSON.stringify(row));
        }, (err) => {
           if (err){
               next(err);
           }else {
               res.status(200).send(stream);
           }
        });
    });
});

STREAMING A BIG DATA (SYNCHRONOUS)

router.get('/big', async (req, res, next) => {
    try {
        let db = await req.firebird.openDataBaseRead();
        await db.sequentially('SELECT * FROM BIGTABLE', (row, index) => stream.write(JSON.stringify(row)));
        res.status(200).json(stream);
    } catch (err) {
        next(err);
    }
});

BLOB (stream)

router.post('/user', (req, res, next) => {

    req.firebird.openDataBaseWrite((transaction) => {
        
        transaction.query('INSERT INTO USERS (ID, ALIAS, FILE) VALUES(?, ?, ?)', 
            [1, 'Peter', fs.createReadStream('/users/image.jpg')], (err, result) => {
            if (err) {
                next(err);
            } else {
                res.status(200).json(result);
            }
        });

    });

});

BLOB (buffer)

router.post('/user', (req, res, next) => {

    req.firebird.openDataBaseWrite((transaction) => {
        
        transaction.query('INSERT INTO USERS (ID, ALIAS, FILE) VALUES(?, ?, ?)', 
            [1, 'Peter', fs.readFileSync('/users/image.jpg')], (err, result) => {
            if (err) {
                next(err);
            } else {
                res.status(200).json(result);
            }
        });

    });

});

READING BLOBS (ASYNCHRONOUS)

router.get('/logo', (req, res, next) => {
    req.firebird.openDataBaseRead((db) => {
        db.query('SELECT E.LOGO FROM CAD_ESTABELECIMENTOS E WHERE E.EMPRESA = ? AND E.CODIGO = ?',
            [req.query.empresa, req.query.codigo], (err, result) => {
                if (err) {
                    next(err);
                } else if (result && result.length > 0 && result[0].LOGO) {
                     res.set({'Content-Type': 'image/png'});
                     res.status(200).send(result[0].LOGO);
                } else {
                    res.status(204).send('');
                }
            });
    });
});

Desenvolvedor

  • Limber Software e Consultoria LTDA