8000 feat: support export sql query template in logger by JimmyDaddy · Pull Request #314 · cyjake/leoric · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

feat: support export sql query template in logger #314

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
May 16, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions src/drivers/mysql/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -94,20 +94,21 @@ class MysqlDriver extends AbstractDriver {
});
});
const sql = logger.format(query, values, opts);
const logOpts = { ...opts, query };
const start = performance.now();
let result;

try {
result = await promise;
} catch (err) {
logger.logQueryError(err, sql, calculateDuration(start), opts);
logger.logQueryError(err, sql, calculateDuration(start), logOpts);
throw err;
} finally {
if (!opts.connection) connection.release();
}

const [ results, fields ] = result;
logger.tryLogQuery(sql, calculateDuration(start), opts, results);
logger.tryLogQuery(sql, calculateDuration(start), logOpts, results);
if (fields) return { rows: results, fields };
return results;
}
Expand Down
5 changes: 3 additions & 2 deletions src/drivers/postgres/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -51,20 +51,21 @@ class PostgresDriver extends AbstractDriver {
const command = sql.slice(0, sql.indexOf(' ')).toLowerCase();

async function tryQuery(...args) {
const logOpts = { ...spell, query: sql };
const formatted = logger.format(sql, values, spell);
const start = performance.now();
let result;

try {
result = await connection.query(...args);
} catch (err) {
logger.logQueryError(err, formatted, calculateDuration(start), spell);
logger.logQueryError(err, formatted, calculateDuration(start), logOpts);
throw err;
} finally {
if (!spell.connection) connection.release();
}

logger.tryLogQuery(formatted, calculateDuration(start), spell, result);
logger.tryLogQuery(formatted, calculateDuration(start), logOpts, result);
return result;
}

Expand Down
5 changes: 3 additions & 2 deletions src/drivers/sqlite/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -53,20 +53,21 @@ class SqliteDriver extends AbstractDriver {
}

const { logger } = this;
const logOpts = { ...opts, query };
const sql = logger.format(query, values, opts);
const start = performance.now();
let result;

try {
result = await connection.query(query, values, opts);
} catch (err) {
logger.logQueryError(err, sql, calculateDuration(start), opts);
logger.logQueryError(err, sql, calculateDuration(start), logOpts);
throw err;
} finally {
if (!opts.connection) connection.release();
}

logger.tryLogQuery(sql, calculateDuration(start), opts, result);
logger.tryLogQuery(sql, calculateDuration(start), logOpts, result);
return result;
}

Expand Down
18 changes: 11 additions & 7 deletions test/unit/drivers/mysql/index.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,29 +26,33 @@ describe('=> MySQL driver', () => {
result.push([ sql, duration, opts, res ]);
},
});
await driver2.query('SELECT 1');
await driver2.query('SELECT ?, ? FROM users WHERE email = ? AND status = ?', ['id', 'nickname', 'yhorm@giant.com', 1]);
const [ sql, duration, opts, res ] = result[0];
assert.equal(sql, 'SELECT 1');
assert.equal(sql, "SELECT 'id', 'nickname' FROM users WHERE email = 'yhorm@giant.com' AND status = 1");
assert.ok(duration >= 0);
assert.ok(res);
assert.ok(opts);
assert.equal(opts.query, 'SELECT ?, ? FROM users WHERE email = ? AND status = ?');
});

it('driver.logger.logQueryError', async () => {
const result = [];
const driver2 = new MysqlDriver({
...options,
logger: {
logQueryError(sql, err) {
result.push([ sql, err ]);
logQueryError(err, sql, duration, opts) {
result.push([ err, sql, duration, opts ]);
},
},
});
await assert.rejects(async () => await driver2.query('SELECT x'));
const [ err, sql ] = result[0];
assert.equal(sql, 'SELECT x');
await assert.rejects(async () => await driver2.query('SELECT x, ? FROM users WHERE email = ? AND status = ?', ['nickname', 'yhorm@giant.com', 1]));
const [ err, sql, duration, opts ] = result[0];
assert.equal(sql, "SELECT x, 'nickname' FROM users WHERE email = 'yhorm@giant.com' AND status = 1");
assert.ok(duration >= 0);
assert.ok(err);
assert.ok(/ER_BAD_FIELD_ERROR/.test(err.message));
assert.ok(opts);
assert.equal(opts.query, 'SELECT x, ? FROM users WHERE email = ? AND status = ?');
});

it('driver.querySchemaInfo()', async () => {
Expand Down
20 changes: 12 additions & 8 deletions test/unit/drivers/postgres/index.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,29 +26,33 @@ describe('=> PostgreSQL driver', () => {
result.push([ sql, duration, opts, res ]);
},
});
await driver2.query('SELECT 1');
await driver2.query('SELECT ?, ? FROM users WHERE email = ? AND status = ?', ['id', 'nickname', 'yhorm@giant.com', 1]);
const [ sql, duration, opts, res ] = result[0];
assert.equal(sql, 'SELECT 1');
assert.ok(duration > 0);
assert.equal(sql, "SELECT 'id', 'nickname' FROM users WHERE email = 'yhorm@giant.com' AND status = 1");
assert.ok(duration >= 0);
assert.ok(res);
assert.ok(opts);
assert.equal(opts.query, 'SELECT ?, ? FROM users WHERE email = ? AND status = ?');
});

it('driver.logger.logQueryError', async () => {
const result = [];
const driver2 = new PostgresDriver({
...options,
logger: {
logQueryError(sql, err) {
result.push([ sql, err ]);
logQueryError(err, sql, duration, opts) {
result.push([ err, sql, duration, opts ]);
},
},
});
await assert.rejects(async () => await driver2.query('SELECT x'));
const [ err, sql ] = result[0];
assert.equal(sql, 'SELECT x');
await assert.rejects(async () => await driver2.query('SELECT x, ? FROM users WHERE email = ? AND status = ?', ['nickname', 'yhorm@giant.com', 1]));
const [ err, sql, duration, opts ] = result[0];
assert.equal(sql, "SELECT x, 'nickname' FROM users WHERE email = 'yhorm@giant.com' AND status = 1");
assert.ok(duration >= 0);
assert.ok(err);
assert.ok(/column "x" does not exist/.test(err.message));
assert.ok(opts);
assert.equal(opts.query, 'SELECT x, ? FROM users WHERE email = ? AND status = ?');
});

it('driver.querySchemaInfo()', async () => {
Expand Down
18 changes: 11 additions & 7 deletions test/unit/drivers/sqlite/index.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,29 +28,33 @@ describe('=> SQLite driver', () => {
result.push([ sql, duration, opts, res ]);
},
});
await driver2.query('SELECT 1');
await driver2.query('SELECT ?, ? FROM users WHERE email = ? AND status = ?', ['id', 'nickname', 'yhorm@giant.com', 1]);
const [ sql, duration, opts, res ] = result[0];
assert.equal(sql, 'SELECT 1');
assert.equal(sql, "SELECT 'id', 'nickname' FROM users WHERE email = 'yhorm@giant.com' AND status = 1");
assert.ok(duration >= 0);
assert.ok(res);
assert.ok(opts);
assert.equal(opts.query, 'SELECT ?, ? FROM users WHERE email = ? AND status = ?');
});

it('driver.logger.logQueryError', async () => {
const result = [];
const driver2 = new SqliteDriver({
...options,
logger: {
logQueryError(sql, err) {
result.push([ sql, err ]);
logQueryError(err, sql, duration, opts) {
result.push([ err, sql, duration, opts ]);
},
},
});
await assert.rejects(async () => await driver2.query('SELECT x'));
const [ err, sql ] = result[0];
assert.equal(sql, 'SELECT x');
await assert.rejects(async () => await driver2.query('SELECT x, ? FROM users WHERE email = ? AND status = ?', ['nickname', 'yhorm@giant.com', 1]));
const [ err, sql, duration, opts ] = result[0];
assert.equal(sql, "SELECT x, 'nickname' FROM users WHERE email = 'yhorm@giant.com' AND status = 1");
assert.ok(duration >= 0);
assert.ok(err);
assert.ok(/no such column/.test(err.message));
assert.ok(opts);
assert.equal(opts.query, 'SELECT x, ? FROM users WHERE email = ? AND status = ?');
});

it('driver.querySchemaInfo()', async () => {
Expand Down
6 changes: 6 additions & 0 deletions types/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -881,6 +881,12 @@ export default class Realm {

connect(): Promise<Bone>;

/**
* disconnect manually
* @param callback
*/
disconnect(callback?: Function): Promise<boolean | void>;

define(
name: string,
attributes: Record<string, DataTypes<DataType> | AttributeMeta>,
Expand Down
0