Please submit an issue for any bug encounter or any questions you have.
This is an external dialect for knex. This library uses the ODBC (as recommended here https://ibmi-oss-docs.readthedocs.io/en/latest/odbc/README.html) driver and is only tested on IBMi.
For more information on IBMi OSS here are the docs
- Query building
- Query execution (see Limitations)
- Transactions
- No streaming support
npm install --save odbc knex @bdkinc/knex-ibmi
Requires Node v16 or higher.
npm install odbc
see odbc
npm install knex
see knex
This library can be used as commonjs, esm or TypeScript.
const knex = require("knex");
const { DB2Dialect } = require("@bdkinc/knex-ibmi");
const db = knex({
client: DB2Dialect,
connection: {
host: "localhost", // hostname or ip address of server
database: "*LOCAL", // usually named in your odbc.ini connection
port: 50000, // default port
user: "<user>", // IBMi username
password: "<password>", // IBMi password
driver: "IBM i Access ODBC Driver", // defined in odbcinst.ini
connectionStringParams: { // DSN connection string parameters https://www.ibm.com/docs/en/i/7.5?topic=details-connection-string-keywords
ALLOWPROCCALLS: 1,
CMT: 0,
DBQ: 'MYLIB' // library or schema that holds the tables
},
},
pool: {
min: 2,
max: 10,
},
});
const query = db.select("*").from("table").where({ foo: "bar" });
query
.then((result) => console.log(result))
.catch((err) => console.error(err))
.finally(() => process.exit());
import knex from "knex";
import { DB2Dialect } from "@bdkinc/knex-ibmi";
/**
* @type {import("@bdkinc/knex-ibmi").DB2Config}
*/
const config = {
client: DB2Dialect,
connection: {
host: "localhost", // hostname or ip address of server
database: "*LOCAL", // usually named in your odbc.ini connection
port: 50000, // default port
user: "<user>", // IBMi username
password: "<password>", // IBMi password
driver: "IBM i Access ODBC Driver", // defined in odbcinst.ini
connectionStringParams: { // DSN connection string parameters https://www.ibm.com/docs/en/i/7.5?topic=details-connection-string-keywords
ALLOWPROCCALLS: 1,
CMT: 0,
DBQ: 'MYLIB' // library or schema that holds the tables
},
},
pool: {
min: 2,
max: 10,
},
}
const db = knex(config);
try {
const data = await db.select("*").from("table").where({ foo: "bar" });
console.log(data);
} catch (err) {
throw new Error(err);
} finally {
process.exit();
}
import { knex } from "knex";
import { DB2Dialect, DB2Config } from "@bdkinc/knex-ibmi";
const config: DB2Config = {
client: DB2Dialect,
connection: {
host: "localhost", // hostname or ip address of server
database: "*LOCAL", // usually named in your odbc.ini connection
port: 50000, // default port
user: "<user>", // IBMi username
password: "<password>", // IBMi password
driver: "IBM i Access ODBC Driver", // defined in odbcinst.ini
connectionStringParams: { // DSN connection string parameters https://www.ibm.com/docs/en/i/7.5?topic=details-connection-string-keywords
ALLOWPROCCALLS: 1,
CMT: 0,
DBQ: 'MYLIB' // library or schema that holds the tables
},
},
pool: {
min: 2,
max: 10,
},
};
const db = knex(config);
try {
const data = await db.select("*").from("table").where({ foo: "bar" });
console.log(data);
} catch (err) {
throw new Error(err);
} finally {
process.exit();
}
If you don't know the name of your installed driver, then look in odbcinst.ini
. You can find the full path of the file by running odbcinst -j
.
There you should see an entry like the one below:
[IBM i Access ODBC Driver] <== driver name in square brackets
Description=IBM i Access for Linux ODBC Driver
Driver=/opt/ibm/iaccess/lib/libcwbodbc.so
Setup=/opt/ibm/iaccess/lib/libcwbodbcs.so
Driver64=/opt/ibm/iaccess/lib64/libcwbodbc.so
Setup64=/opt/ibm/iaccess/lib64/libcwbodbcs.so
Threading=0
DontDLClose=1
UsageCount=1
[IBM i Access ODBC Driver 64-bit]
Description=IBM i Access for Linux 64-bit ODBC Driver
Driver=/opt/ibm/iaccess/lib64/libcwbodbc.so
Setup=/opt/ibm/iaccess/lib64/libcwbodbcs.so
Threading=0
DontDLClose=1
UsageCount=1
If that still doesn't work, then unixodbc is probably looking for the config files in the wrong directory.
A common case is that the configs are in /etc
but your system expects them to be somewhere else.
In such a case, override the path unixodbc looks in via the ODBCSYSINI
and ODBCINI
environment variables.
E.g., ODBCINI=/etc ODBCSYSINI=/etc
.