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

plasoft-firebird

v0.0.4

Published

Cliente Firebird assincrono puramente JavaScript para Node.js ajustado para suportar firebird 2.1.

Downloads

17

Readme

Plasoft Logo

Firebird Logo

NPM version NPM downloads

NPM NPM

Cliente Firebird JavaScript para Node.js.

Cliente Firebird assíncrono puramente JavaScript para Node.js ajustado para suportar firebird 2.1. baseado completamente no node-firebird

Firebird nas redes sociais

Instalação


npm install plasoft-firebird --save

Utilização


var  Firebird = require('plasoft-firebird');

Métodos

  • Firebird.escape(value) -> return {String} - prevent for SQL Injections

  • Firebird.attach(options, function(err, db)) attach a database

  • Firebird.create(options, function(err, db)) create a database

  • Firebird.attachOrCreate(options, function(err, db)) attach or create database

  • Firebird.pool(max, options, function(err, db)) -> return {Object} create a connection pooling

Connection types

Connection options


var  options = {};

  

options.host = '127.0.0.1';

options.port = 3050;

options.database = 'database.fdb';

options.user = 'SYSDBA';

options.password = 'masterkey';

Classic


Firebird.attach(options, function(err, db) {

  

if (err)

throw  err;

  

// db = DATABASE

db.query('SELECT * FROM TABLE', function(err, result) {

// IMPORTANT: close the connection

db.detach();

});

  

});

Pooling


// 5 = the number is count of opened sockets

var  pool = Firebird.pool(5, options);

  

// Get a free pool

pool.get(function(err, db) {

  

if (err)

throw  err;

  

// db = DATABASE

db.query('SELECT * FROM TABLE', function(err, result) {

// IMPORTANT: release the pool connection

db.detach();

});

});

  

// Destroy pool

pool.destroy();

Database object (db)

Methods

  • db.query(query, [params], function(err, result)) - classic query, returns Array of Object

  • db.execute(query, [params], function(err, result)) - classic query, returns Array of Array

  • db.sequentially(query, [params], function(row, index), function(err)) - sequentially query

  • db.detach(function(err)) detach a database

  • db.transaction(isolation, function(err, transaction)) create transaction

Transaction methods

  • transaction.query(query, [params], function(err, result)) - classic query, returns Array of Object

  • transaction.execute(query, [params], function(err, result)) - classic query, returns Array of Array

  • transaction.commit(function(err)) commit current transaction

  • transaction.rollback(function(err)) rollback current transaction

Examples

PARAMETRIZED QUERIES

Parameters


Firebird.attach(options, function(err, db) {

  

if (err)

throw  err;

  

// db = DATABASE

db.query('INSERT INTO USERS (ID, ALIAS, CREATED) VALUES(?, ?, ?) RETURNING ID', [1, 'Pe\'ter', new  Date()] function(err, result) {

console.log(result[0].id);

db.query('SELECT * FROM USERS WHERE Alias=?', ['Peter'], function(err, result) {

console.log(result);

db.detach();

});

});

});

BLOB (stream)


Firebird.attach(options, function(err, db) {

  

if (err)

throw  err;

  

// db = DATABASE

// INSERT STREAM as BLOB

db.query('INSERT INTO USERS (ID, ALIAS, FILE) VALUES(?, ?, ?)', [1, 'Peter', fs.createReadStream('/users/image.jpg')] function(err, result) {

// IMPORTANT: close the connection

db.detach();

});

});

BLOB (buffer)


Firebird.attach(options, function(err, db) {

  

if (err)

throw  err;

  

// db = DATABASE

// INSERT BUFFER as BLOB

db.query('INSERT INTO USERS (ID, ALIAS, FILE) VALUES(?, ?, ?)', [1, 'Peter', fs.readFileSync('/users/image.jpg')] function(err, result) {

// IMPORTANT: close the connection

db.detach();

});

});

READING BLOBS (ASYNCHRONOUS)


Firebird.attach(options, function(err, db) {

  

if (err)

throw  err;

  

// db = DATABASE

db.query('SELECT ID, ALIAS, USERPICTURE FROM USER', function(err, rows) {

  

if (err)

throw  err;

  

// first row

rows[0].userpicture(function(err, name, e) {

  

if (err)

throw  err;

  

// +v0.2.4

// e.pipe(writeStream/Response);

  

// e === EventEmitter

e.on('data', function(chunk) {

// reading data

});

  

e.on('end', function() {

// end reading

// IMPORTANT: close the connection

db.detach();

});

});

  

});

});

STREAMING A BIG DATA


Firebird.attach(options, function(err, db) {

  

if (err)

throw  err;

  

// db = DATABASE

db.sequentially('SELECT * FROM BIGTABLE', function(row, index) {

  

// EXAMPLE

stream.write(JSON.stringify(row));

  

}, function(err) {

// END

// IMPORTANT: close the connection

db.detach();

});

});

TRANSACTIONS

Transaction types:

  • Firebird.ISOLATION_READ_UNCOMMITTED

  • Firebird.ISOLATION_READ_COMMITED

  • Firebird.ISOLATION_REPEATABLE_READ

  • Firebird.ISOLATION_SERIALIZABLE

  • Firebird.ISOLATION_READ_COMMITED_READ_ONLY


Firebird.attach(options, function(err, db) {

  

if (err)

throw  err;

  

// db = DATABASE

db.transaction(Firebird.ISOLATION_READ_COMMITED, function(err, transaction) {

transaction.query('INSERT INTO users VALUE(?,?)', [1, 'Janko'], function(err, result) {

  

if (err) {

transaction.rollback();

return;

}

  

transaction.commit(function(err) {

if (err)

transaction.rollback();

else

db.detach();

});

});

});

});

EVENTS


Firebird.attach(options, function(err, db) {

  

if (err)

throw  err;

  

db.on('row', function(row, index, isObject) {

// index === Number

// isObject === is row object or array?

});

  

db.on('result', function(result) {

// result === Array

});

  

db.on('attach', function() {

  

});

  

db.on('detach', function(isPoolConnection) {

// isPoolConnection == Boolean

});

  

db.on('reconnect', function() {

  

});

  

db.on('error', function(err) {

  

});

  

db.on('transaction', function(isolation) {

// isolation === Number

});

  

db.on('commit', function() {

  

});

  

db.on('rollback', function() {

  

});

  

db.detach();

});

Escaping query values


var  sql1 = 'SELECT * FROM TBL_USER WHERE ID>' + Firebird.escape(1);

var  sql2 = 'SELECT * FROM TBL_USER WHERE NAME=' + Firebird.escape('Pe\'er');

var  sql3 = 'SELECT * FROM TBL_USER WHERE CREATED<=' + Firebird.escape(new  Date());

var  sql4 = 'SELECT * FROM TBL_USER WHERE NEWSLETTER=' + Firebird.escape(true);

  

// or db.escape()

  

console.log(sql1);

console.log(sql2);

console.log(sql3);

console.log(sql4);

Service Manager functions

  • backup

  • restore

  • fixproperties

  • serverinfo

  • database validation

  • commit transaction

  • rollback transaction

  • recover transaction

  • database stats

  • users infos

  • user actions (add modify remove)

  • get firebird file log

  • tracing


// each row : fctname : [params], typeofreturn

var  fbsvc = {

"backup" : { [ "options"], "stream" },

"nbackup" : { [ "options"], "stream" },

"restore" : { [ "options"], "stream" },

"nrestore" : { [ "options"], "stream" },

"setDialect": { [ "database","dialect"], "stream" },

"setSweepinterval": { [ "database","sweepinterval"], "stream" },

"setCachebuffer" : { [ "database","nbpagebuffers"], "stream" },

"BringOnline" : { [ "database"], "stream" },

"Shutdown" : { [ "database","shutdown","shutdowndelay","shutdownmode"], "stream" },

"setShadow" : { [ "database","activateshadow"], "stream" },

"setForcewrite" : { [ "database","forcewrite"], "stream" },

"setReservespace" : { [ "database","reservespace"], "stream" },

"setReadonlyMode" : { [ "database"], "stream" },

"setReadwriteMode" : { [ "database"], "stream" },

"validate" : { [ "options"], "stream" },

"commit" : { [ "database", "transactid"], "stream" },

"rollback" : { [ "database", "transactid"], "stream" },

"recover" : { [ "database", "transactid"], "stream" },

"getStats" : { [ "options"], "stream" },

"getLog" : { [ "options"], "stream" },

"getUsers" : { [ "username"], "object" },

"addUser" : { [ "username", "password", "options"], "stream" },

"editUser" : { [ "username", "options"], "stream" },

"removeUser" : { [ "username","rolename"], "stream" },

"getFbserverInfos" : { [ "options", "options"], "object" },

"startTrace" : { [ "options"], "stream" },

"suspendTrace" : { [ "options"], "stream" },

"resumeTrace" : { [ "options"], "stream" },

"stopTrace" : { [ "options"], "stream" },

"getTraceList" : { [ "options"], "stream" },

"hasActionRunning" : { [ "options"], "object"}

}

  

Backup Service example


  

Firebird.attach(options, function(err, svc) {

if (err)

return;

svc.backup(

{

database:'/DB/MYDB.FDB',

files: [

{

filename:'/DB/MYDB.FBK',

sizefile:'0'

}

]

},

function(err, data) {

console.log(data);

});

getLog and getFbserverInfos Service examples with use of stream and object return


fb.attach(_connection, function(err, svc) {

if (err)

return;

// all function that return a stream take two optional parameter

// optread => byline or buffer byline use isc_info_svc_line and buffer use isc_info_svc_to_eof

// buffersize => is the buffer for service manager it can't exceed 8ko (i'm not sure)

  

svc.getLog({optread:'buffer', buffersize:2048}, function (err, data) {

// data is a readablestream that contain the firebird.log file

console.log(err);

data.on('data', function (data) {

console.log(data.toString());

});

data.on('end', function() {

console.log('finish');

});

});

  

// an other exemple to use function that return object

svc.getFbserverInfos(

{

"dbinfo" : true,

"fbconfig" : true,

"svcversion" : true,

"fbversion" : true,

"fbimplementation" : true,

"fbcapatibilities" : true,

"pathsecuritydb" : true,

"fbenv" : true,

"fbenvlock" : true,

"fbenvmsg" : true

}, {}, function (err, data) {

console.log(err);

console.log(data);

});

});

  

Charset for database connection is always UTF-8

node-firebird doesn't let you chose the charset connection, it will always use UTF8.

Node is unicode, no matter if your database is using another charset to store string or blob, Firebird will transliterate automatically.

This is why you should use Firebird 2.5 server at least.

Firebird 3.0 Support

Firebird new wire protocol is not supported yet so

for Firebird 3.0 you need to add the following in firebird.conf


AuthServer = Legacy_Auth

WireCrypt = Disabled