firebird-query
Advanced tools
Comparing version
@@ -14,3 +14,2 @@ "use strict"; | ||
}; | ||
var _a; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
@@ -190,3 +189,3 @@ exports.FirebirdQuery = void 0; | ||
host: process.env.DB_HOST, | ||
port: Number.parseInt((_a = process.env.DB_PORT) !== null && _a !== void 0 ? _a : "") || 3050, | ||
port: Number.parseInt(process.env.DB_PORT || "") || 3050, | ||
database: process.env.DB_DATABASE, | ||
@@ -200,54 +199,35 @@ user: process.env.DB_USER || "SYSDBA", | ||
} | ||
getDB() { | ||
get db() { | ||
return new Promise((res, rej) => { | ||
if (this.db === undefined) { | ||
this.conn.get((err, db) => { | ||
if (err) { | ||
rej(err); | ||
} | ||
this.db = db; | ||
return res(db); | ||
}); | ||
} | ||
else { | ||
return res(this.db); | ||
} | ||
this.conn.get((err, db) => { | ||
if (err) { | ||
return rej({ message: 'Error Establishing a Database Connection', err }); | ||
} | ||
return res(db); | ||
}); | ||
}); | ||
} | ||
; | ||
manageQuery(query) { | ||
return new Promise((res, rej) => { | ||
if (this.db === undefined) { | ||
this.conn.get((err, db) => { | ||
this.db | ||
.then((db) => { | ||
db.query(query, [], (err, data) => { | ||
if (err) { | ||
return rej({ message: 'Error Establishing a Database Connection', err }); | ||
return rej({ message: 'Query error', err }); | ||
} | ||
this.db = db; | ||
db.query(query, [], (err, data) => { | ||
if (err) { | ||
return rej(err); | ||
} | ||
return res(data); | ||
}); | ||
}); | ||
} | ||
else { | ||
this.db.query(query, [], (err, data) => { | ||
if (err) { | ||
return rej({ message: 'Error Executing Query', err }); | ||
} | ||
return res(data); | ||
}); | ||
} | ||
}) | ||
.catch(err => rej(err)); | ||
}); | ||
} | ||
getTransaction(db) { | ||
return __awaiter(this, void 0, void 0, function* () { | ||
return new Promise((res, rej) => { | ||
db.transaction(node_firebird_1.default.ISOLATION_READ_COMMITTED, (err, transaction) => { | ||
get transaction() { | ||
return new Promise((res, rej) => { | ||
this.db.then((db) => { | ||
db.transaction(node_firebird_1.default.ISOLATION_READ_COMMITTED, (err, tx) => { | ||
if (err) { | ||
return rej(err); | ||
return rej({ message: 'Error initializing transaction', err }); | ||
} | ||
else { | ||
return res(transaction); | ||
} | ||
return res(tx); | ||
}); | ||
@@ -288,101 +268,25 @@ }); | ||
} | ||
initTransaction() { | ||
return __awaiter(this, void 0, void 0, function* () { | ||
const db = yield this.getDB(); | ||
const transaction = yield this.getTransaction(db); | ||
const onError = () => { | ||
return new Promise((res, rej) => { | ||
transaction.rollbackRetaining((err) => { | ||
if (err) { | ||
return rej(err); | ||
} | ||
return res(); | ||
}); | ||
}); | ||
}; | ||
return { | ||
queryRaw: handleRawQuery((query) => { | ||
return new Promise((res, rej) => { | ||
transaction.query(query, [], (err, data) => { | ||
if (err) { | ||
return rej(err); | ||
} | ||
return res(data); | ||
initTransaction(cb) { | ||
this.conn.get((err, db) => { | ||
if (err) { | ||
throw new Error('Error Establishing a Database Connection'); | ||
} | ||
db.transaction(node_firebird_1.default.ISOLATION_READ_COMMITTED, (err, tx) => { | ||
if (err) { | ||
throw new Error('Error initializing transaction'); | ||
} | ||
const res = { | ||
queryRaw: handleRawQuery((query) => { | ||
return new Promise((res, rej) => { | ||
tx.query(query, [], (err, data) => { | ||
if (err) { | ||
return rej(err); | ||
} | ||
return res(data); | ||
}); | ||
}); | ||
}); | ||
}), | ||
insertOne: handleInsertOne((query) => { | ||
return new Promise((res, rej) => { | ||
transaction.query(query, [], (err, data) => { | ||
if (err) { | ||
return rej(err); | ||
} | ||
return res(data); | ||
}); | ||
}); | ||
}), | ||
insertMany: handleInsertMany((query, length) => { | ||
return new Promise((res, rej) => { | ||
transaction.query(query, [], (err, data) => { | ||
if (err) { | ||
return rej(err); | ||
} | ||
return res(`${length} rows inserted`); | ||
}); | ||
}); | ||
}), | ||
updateOne: handleUpdateOne((query) => { | ||
return new Promise((res, rej) => { | ||
transaction.query(query, [], (err, data) => { | ||
if (err) { | ||
return rej(err); | ||
} | ||
return res(data); | ||
}); | ||
}); | ||
}), | ||
updateOrInsert: handleUpdateOrInsert((query) => { | ||
return new Promise((res, rej) => { | ||
transaction.query(query, [], (err, data) => { | ||
if (err) { | ||
return rej(err); | ||
} | ||
return res(data); | ||
}); | ||
}); | ||
}), | ||
deleteOne: handleDeleteOne((query) => { | ||
return new Promise((res, rej) => { | ||
transaction.query(query, [], (err, data) => { | ||
if (err) { | ||
return rej(err); | ||
} | ||
return res(data); | ||
}); | ||
}); | ||
}), | ||
commit: () => __awaiter(this, void 0, void 0, function* () { | ||
return new Promise((res, rej) => { | ||
transaction.commit((err) => __awaiter(this, void 0, void 0, function* () { | ||
if (err) { | ||
yield onError(); | ||
return rej(err); | ||
} | ||
return res(); | ||
})); | ||
}); | ||
}), | ||
rollback: () => __awaiter(this, void 0, void 0, function* () { return onError(); }), | ||
close: () => __awaiter(this, void 0, void 0, function* () { | ||
return new Promise((res, rej) => { | ||
db.detach((err) => { | ||
if (err) { | ||
return rej(err); | ||
} | ||
this.conn.destroy(); | ||
return res(); | ||
}); | ||
}); | ||
}), | ||
}; | ||
}), | ||
}; | ||
cb(txHandler(tx)); | ||
}); | ||
}); | ||
@@ -393,3 +297,2 @@ } | ||
function handleRawQuery(cb) { | ||
console.log('op'); | ||
return (strings, ...params) => { | ||
@@ -471,1 +374,56 @@ const sanitizedQuery = sqlBuilder(strings, params); | ||
} | ||
function txHandler(tx) { | ||
function onError() { | ||
return new Promise((res, rej) => { | ||
tx.rollback((err) => { | ||
if (err) { | ||
return rej(err); | ||
} | ||
return res(); | ||
}); | ||
}); | ||
} | ||
; | ||
function executeTransactionQuery(query, processResult) { | ||
return new Promise((res, rej) => { | ||
tx.query(query, [], (err, data) => { | ||
if (err) { | ||
return rej(err); | ||
} | ||
return res(processResult(data)); | ||
}); | ||
}); | ||
} | ||
return { | ||
queryRaw: handleRawQuery((query) => { | ||
return executeTransactionQuery(query, data => data); | ||
}), | ||
insertOne: handleInsertOne((query) => { | ||
return executeTransactionQuery(query, data => data); | ||
}), | ||
insertMany: handleInsertMany((query, length) => { | ||
return executeTransactionQuery(query, () => `${length} rows inserted`); | ||
}), | ||
updateOne: handleUpdateOne((query) => { | ||
return executeTransactionQuery(query, data => data); | ||
}), | ||
updateOrInsert: handleUpdateOrInsert((query) => { | ||
return executeTransactionQuery(query, data => data); | ||
}), | ||
deleteOne: handleDeleteOne((query) => { | ||
return executeTransactionQuery(query, data => data); | ||
}), | ||
commit: () => __awaiter(this, void 0, void 0, function* () { | ||
return new Promise((res, rej) => { | ||
tx.commit((err) => __awaiter(this, void 0, void 0, function* () { | ||
if (err) { | ||
yield onError(); | ||
return rej(err); | ||
} | ||
return res(); | ||
})); | ||
}); | ||
}), | ||
rollback: () => onError() | ||
}; | ||
} |
@@ -82,8 +82,7 @@ import Firebird from "node-firebird"; | ||
export declare class FirebirdQuery { | ||
private db?; | ||
private conn; | ||
constructor(options?: Firebird.Options, max?: number); | ||
private getDB; | ||
private get db(); | ||
private manageQuery; | ||
private getTransaction; | ||
private get transaction(); | ||
get queryRaw(): <T>(strings: TemplateStringsArray, ...params: QueryParam[]) => { | ||
@@ -118,38 +117,38 @@ getQuery: () => string; | ||
}; | ||
initTransaction(): Promise<{ | ||
queryRaw: <T>(strings: TemplateStringsArray, ...params: QueryParam[]) => { | ||
getQuery: () => string; | ||
execute: () => Promise<T[]>; | ||
paginated: (take: number, page?: number) => Promise<T[]>; | ||
}; | ||
insertOne: <T_1 extends { | ||
[key: string]: any; | ||
}>(params: InsertOneParams<T_1>) => { | ||
getQuery: () => string; | ||
execute: () => Promise<T_1>; | ||
}; | ||
insertMany: <T_2 extends { | ||
[key: string]: any; | ||
}>(params: InsertParams<T_2>) => { | ||
getQuery: () => string; | ||
execute: () => Promise<string>; | ||
}; | ||
updateOne: <T_3>(params: UpdateOneParams<T_3>) => { | ||
getQuery: () => string; | ||
execute: () => Promise<T_3>; | ||
}; | ||
updateOrInsert: <T_4>(params: UpdateOrInsertParams<T_4>) => { | ||
getQuery: () => string; | ||
execute: () => Promise<T_4>; | ||
}; | ||
deleteOne: <T_5>(params: DeleteOneParams<T_5>) => { | ||
getQuery: () => string; | ||
execute: () => Promise<T_5>; | ||
}; | ||
commit: () => Promise<void>; | ||
rollback: () => Promise<void>; | ||
close: () => Promise<void>; | ||
}>; | ||
initTransaction(cb: (tx: ReturnType<typeof txHandler>) => void): void; | ||
} | ||
declare function txHandler(tx: Firebird.Transaction): { | ||
queryRaw: <T>(strings: TemplateStringsArray, ...params: QueryParam[]) => { | ||
getQuery: () => string; | ||
execute: () => Promise<T[]>; | ||
paginated: (take: number, page?: number) => Promise<T[]>; | ||
}; | ||
insertOne: <T_1 extends { | ||
[key: string]: any; | ||
}>(params: InsertOneParams<T_1>) => { | ||
getQuery: () => string; | ||
execute: () => Promise<T_1>; | ||
}; | ||
insertMany: <T_2 extends { | ||
[key: string]: any; | ||
}>(params: InsertParams<T_2>) => { | ||
getQuery: () => string; | ||
execute: () => Promise<string>; | ||
}; | ||
updateOne: <T_3>(params: UpdateOneParams<T_3>) => { | ||
getQuery: () => string; | ||
execute: () => Promise<T_3>; | ||
}; | ||
updateOrInsert: <T_4>(params: UpdateOrInsertParams<T_4>) => { | ||
getQuery: () => string; | ||
execute: () => Promise<T_4>; | ||
}; | ||
deleteOne: <T_5>(params: DeleteOneParams<T_5>) => { | ||
getQuery: () => string; | ||
execute: () => Promise<T_5>; | ||
}; | ||
commit: () => Promise<void>; | ||
rollback: () => Promise<void>; | ||
}; | ||
export {}; | ||
//# sourceMappingURL=index.d.ts.map |
@@ -82,8 +82,7 @@ import Firebird from "node-firebird"; | ||
export declare class FirebirdQuery { | ||
private db?; | ||
private conn; | ||
constructor(options?: Firebird.Options, max?: number); | ||
private getDB; | ||
private get db(); | ||
private manageQuery; | ||
private getTransaction; | ||
private get transaction(); | ||
get queryRaw(): <T>(strings: TemplateStringsArray, ...params: QueryParam[]) => { | ||
@@ -118,38 +117,38 @@ getQuery: () => string; | ||
}; | ||
initTransaction(): Promise<{ | ||
queryRaw: <T>(strings: TemplateStringsArray, ...params: QueryParam[]) => { | ||
getQuery: () => string; | ||
execute: () => Promise<T[]>; | ||
paginated: (take: number, page?: number) => Promise<T[]>; | ||
}; | ||
insertOne: <T_1 extends { | ||
[key: string]: any; | ||
}>(params: InsertOneParams<T_1>) => { | ||
getQuery: () => string; | ||
execute: () => Promise<T_1>; | ||
}; | ||
insertMany: <T_2 extends { | ||
[key: string]: any; | ||
}>(params: InsertParams<T_2>) => { | ||
getQuery: () => string; | ||
execute: () => Promise<string>; | ||
}; | ||
updateOne: <T_3>(params: UpdateOneParams<T_3>) => { | ||
getQuery: () => string; | ||
execute: () => Promise<T_3>; | ||
}; | ||
updateOrInsert: <T_4>(params: UpdateOrInsertParams<T_4>) => { | ||
getQuery: () => string; | ||
execute: () => Promise<T_4>; | ||
}; | ||
deleteOne: <T_5>(params: DeleteOneParams<T_5>) => { | ||
getQuery: () => string; | ||
execute: () => Promise<T_5>; | ||
}; | ||
commit: () => Promise<void>; | ||
rollback: () => Promise<void>; | ||
close: () => Promise<void>; | ||
}>; | ||
initTransaction(cb: (tx: ReturnType<typeof txHandler>) => void): void; | ||
} | ||
declare function txHandler(tx: Firebird.Transaction): { | ||
queryRaw: <T>(strings: TemplateStringsArray, ...params: QueryParam[]) => { | ||
getQuery: () => string; | ||
execute: () => Promise<T[]>; | ||
paginated: (take: number, page?: number) => Promise<T[]>; | ||
}; | ||
insertOne: <T_1 extends { | ||
[key: string]: any; | ||
}>(params: InsertOneParams<T_1>) => { | ||
getQuery: () => string; | ||
execute: () => Promise<T_1>; | ||
}; | ||
insertMany: <T_2 extends { | ||
[key: string]: any; | ||
}>(params: InsertParams<T_2>) => { | ||
getQuery: () => string; | ||
execute: () => Promise<string>; | ||
}; | ||
updateOne: <T_3>(params: UpdateOneParams<T_3>) => { | ||
getQuery: () => string; | ||
execute: () => Promise<T_3>; | ||
}; | ||
updateOrInsert: <T_4>(params: UpdateOrInsertParams<T_4>) => { | ||
getQuery: () => string; | ||
execute: () => Promise<T_4>; | ||
}; | ||
deleteOne: <T_5>(params: DeleteOneParams<T_5>) => { | ||
getQuery: () => string; | ||
execute: () => Promise<T_5>; | ||
}; | ||
commit: () => Promise<void>; | ||
rollback: () => Promise<void>; | ||
}; | ||
export {}; | ||
//# sourceMappingURL=index.d.ts.map |
@@ -5,3 +5,3 @@ { | ||
"license": "MIT", | ||
"version": "0.4.2", | ||
"version": "0.4.3", | ||
"description": "node-firebird plugin for easy and safe query building.", | ||
@@ -8,0 +8,0 @@ "author": { |
@@ -13,5 +13,3 @@ # firebird-query | ||
```bash | ||
npm install firebird-query | ||
``` | ||
@@ -29,4 +27,3 @@ | ||
```typescript | ||
```javascript | ||
import { FirebirdQuery } from 'firebird-query'; | ||
@@ -43,3 +40,3 @@ | ||
export const db = new FirebirdQuery(options, maxConn); | ||
export const db = new FirebirdQuery(options, maxConn); | ||
``` | ||
@@ -61,4 +58,4 @@ | ||
Then | ||
```typescript | ||
export const db = new FirebirdQuery(); // use it wherever you want | ||
```javascript | ||
export const db = new FirebirdQuery(); // use it wherever you want | ||
``` | ||
@@ -82,3 +79,3 @@ | ||
```typescript | ||
```javascript | ||
@@ -121,16 +118,10 @@ import { db } from './db.service.js'; | ||
```typescript | ||
const result = t.queryRaw`SELECT COD, NAME FROM USERS WHERE ${{ | ||
COD: 1, | ||
NAME: "John", | ||
```javascript | ||
const result = await t.queryRaw`SELECT COD, NAME FROM USERS WHERE ${{ | ||
COD: 1, | ||
NAME: "John", | ||
}}`.getQuery(); | ||
console.log(result); | ||
// SELECT COD, NAME FROM USERS WHERE COD = '1' AND NAME = 'John' | ||
``` | ||
@@ -144,6 +135,4 @@ | ||
```typescript | ||
```javascript | ||
const name = "Tom"; | ||
const result = await t.queryRaw` | ||
@@ -154,4 +143,4 @@ SELECT COD, NAME FROM USERS WHERE ${{ | ||
}}`.getQuery(); | ||
console.log(result); | ||
// SELECT COD, NAME FROM USERS WHERE 1=1 AND NAME = 'Tom' | ||
@@ -166,6 +155,4 @@ ``` | ||
```typescript | ||
```javascript | ||
const name = "Tom"; | ||
const result = await t.queryRaw` | ||
@@ -177,3 +164,2 @@ SELECT COD, NAME FROM USERS WHERE ${{ | ||
console.log(result); | ||
// SELECT COD, NAME FROM USERS WHERE LOWER(NAME) = 'tom' | ||
@@ -238,3 +224,3 @@ ``` | ||
```typescript | ||
```javascript | ||
const name = "Tom"; | ||
@@ -264,3 +250,3 @@ const result = await t.queryRaw` | ||
```typescript | ||
```javascript | ||
const result = await db.insertOne({ | ||
@@ -384,22 +370,24 @@ tableName: 'USERS', | ||
An async method that returns a ISOLATION_READ_COMMITTED transaction instance to work with. It has the same methods to query and mutate the database in addition to | ||
A callback managed function that returns a `ISOLATION_READ_COMMITTED` transaction instance to work with. It has the same methods to query and mutate the database in addition to | ||
1. commit | ||
2. close | ||
2. rollback | ||
3. rollback | ||
```typescript | ||
// recommended usage | ||
db.initTransaction().then(async (t) => { | ||
// t(ransaction) is scoped into this async function. | ||
//Every query or mutation correspond to this specific transaction. | ||
}) | ||
```javascript | ||
// recommended approach | ||
db.initTransaction(async (t) => { | ||
// t(ransaction) is scoped into this async function. | ||
try { | ||
const data = await t.queryRaw` | ||
SELECT 1 AS TEST FROM RDB$DATABASE; | ||
`.execute(); | ||
console.log(data); // --> [{ TEST: 1 }] | ||
} catch (error) { | ||
console.log(error); | ||
} | ||
}) | ||
``` |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
52620
-5.92%1133
-6.75%380
-3.06%