mirror of
https://github.com/knex/knex.git
synced 2025-12-27 15:08:47 +00:00
Add whereLike functions (#5044)
This commit is contained in:
parent
3616791ac2
commit
106a881e20
@ -27,12 +27,16 @@ module.exports = [
|
||||
'fullOuterJoin',
|
||||
'crossJoin',
|
||||
'where',
|
||||
'whereLike',
|
||||
'whereILike',
|
||||
'andWhere',
|
||||
'orWhere',
|
||||
'whereNot',
|
||||
'orWhereNot',
|
||||
'whereLike',
|
||||
'andWhereLike',
|
||||
'orWhereLike',
|
||||
'whereILike',
|
||||
'andWhereILike',
|
||||
'orWhereILike',
|
||||
'whereRaw',
|
||||
'whereWrapped',
|
||||
'havingWrapped',
|
||||
|
||||
@ -691,11 +691,21 @@ class Builder extends EventEmitter {
|
||||
return this._whereLike('whereLike', column, value);
|
||||
}
|
||||
|
||||
// Adds a `or where like` clause to the query.
|
||||
orWhereLike(column, value) {
|
||||
return this._bool('or')._whereLike('whereLike', column, value);
|
||||
}
|
||||
|
||||
// Adds a `where ilike` clause to the query.
|
||||
whereILike(column, value) {
|
||||
return this._whereLike('whereILike', column, value);
|
||||
}
|
||||
|
||||
// Adds a `or where ilike` clause to the query.
|
||||
orWhereILike(column, value) {
|
||||
return this._bool('or')._whereLike('whereILike', column, value);
|
||||
}
|
||||
|
||||
// Adds a `group by` clause to the query.
|
||||
groupBy(item) {
|
||||
if (item && item.isRawInstance) {
|
||||
@ -1725,6 +1735,8 @@ Builder.prototype.andWhereNotBetween = Builder.prototype.whereNotBetween;
|
||||
Builder.prototype.andWhereJsonObject = Builder.prototype.whereJsonObject;
|
||||
Builder.prototype.andWhereNotJsonObject = Builder.prototype.whereJsonObject;
|
||||
Builder.prototype.andWhereJsonPath = Builder.prototype.whereJsonPath;
|
||||
Builder.prototype.andWhereLike = Builder.prototype.whereLike;
|
||||
Builder.prototype.andWhereILike = Builder.prototype.whereILike;
|
||||
Builder.prototype.andHaving = Builder.prototype.having;
|
||||
Builder.prototype.andHavingIn = Builder.prototype.havingIn;
|
||||
Builder.prototype.andHavingNotIn = Builder.prototype.havingNotIn;
|
||||
|
||||
@ -584,6 +584,52 @@ describe('Where', function () {
|
||||
expect(result[0].email).to.equal('test1@example.com');
|
||||
});
|
||||
|
||||
it('finds data using orWhereLike', async () => {
|
||||
const result = await knex('accounts')
|
||||
.select('*')
|
||||
.whereLike('email', 'test1%')
|
||||
.orWhereLike('email', 'test2%');
|
||||
expect(result[0].email).to.equal('test1@example.com');
|
||||
expect(result[1].email).to.equal('test2@example.com');
|
||||
});
|
||||
|
||||
it('finds data using andWhereLike', async () => {
|
||||
const result = await knex('accounts')
|
||||
.select('*')
|
||||
.whereLike('first_name', 'Te%')
|
||||
.andWhereLike('email', '%example.com');
|
||||
expect(result.length).to.equal(6);
|
||||
expect(result[0].email).to.equal('test1@example.com');
|
||||
expect(result[1].email).to.equal('test2@example.com');
|
||||
expect(result[2].email).to.equal('test3@example.com');
|
||||
expect(result[3].email).to.equal('test4@example.com');
|
||||
expect(result[4].email).to.equal('test5@example.com');
|
||||
expect(result[5].email).to.equal('test6@example.com');
|
||||
});
|
||||
|
||||
it('finds data using orWhereILike', async () => {
|
||||
const result = await knex('accounts')
|
||||
.select('*')
|
||||
.whereILike('email', 'TEST1%')
|
||||
.orWhereILike('email', 'TeSt2%');
|
||||
expect(result[0].email).to.equal('test1@example.com');
|
||||
expect(result[1].email).to.equal('test2@example.com');
|
||||
});
|
||||
|
||||
it('finds data using andWhereILike', async () => {
|
||||
const result = await knex('accounts')
|
||||
.select('*')
|
||||
.whereILike('first_name', 'te%')
|
||||
.andWhereILike('email', '%examPle.COm');
|
||||
expect(result.length).to.equal(6);
|
||||
expect(result[0].email).to.equal('test1@example.com');
|
||||
expect(result[1].email).to.equal('test2@example.com');
|
||||
expect(result[2].email).to.equal('test3@example.com');
|
||||
expect(result[3].email).to.equal('test4@example.com');
|
||||
expect(result[4].email).to.equal('test5@example.com');
|
||||
expect(result[5].email).to.equal('test6@example.com');
|
||||
});
|
||||
|
||||
it("doesn't find data using whereLike when different case sensitivity", async () => {
|
||||
const result = await knex('accounts').whereLike('email', 'Test1%');
|
||||
expect(result).to.deep.equal([]);
|
||||
|
||||
@ -882,6 +882,56 @@ describe('QueryBuilder', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('uses andWhereLike, orWhereLike #2265', () => {
|
||||
testsql(
|
||||
qb()
|
||||
.select('*')
|
||||
.from('users')
|
||||
.whereLike('name', 'luk1%')
|
||||
.andWhereLike('name', 'luk2%')
|
||||
.orWhereLike('name', 'luk3%'),
|
||||
{
|
||||
mysql: {
|
||||
sql: 'select * from `users` where `name` like ? COLLATE utf8_bin and `name` like ? COLLATE utf8_bin or `name` like ? COLLATE utf8_bin',
|
||||
bindings: ['luk1%', 'luk2%', 'luk3%'],
|
||||
},
|
||||
pg: {
|
||||
sql: 'select * from "users" where "name" like ? and "name" like ? or "name" like ?',
|
||||
bindings: ['luk1%', 'luk2%', 'luk3%'],
|
||||
},
|
||||
mssql: {
|
||||
sql: 'select * from [users] where [name] collate SQL_Latin1_General_CP1_CS_AS like ? and [name] collate SQL_Latin1_General_CP1_CS_AS like ? or [name] collate SQL_Latin1_General_CP1_CS_AS like ?',
|
||||
bindings: ['luk1%', 'luk2%', 'luk3%'],
|
||||
},
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
it('uses andWhereILike, orWhereILike #2265', () => {
|
||||
testsql(
|
||||
qb()
|
||||
.select('*')
|
||||
.from('users')
|
||||
.whereILike('name', 'luk1%')
|
||||
.andWhereILike('name', 'luk2%')
|
||||
.orWhereILike('name', 'luk3%'),
|
||||
{
|
||||
mysql: {
|
||||
sql: 'select * from `users` where `name` like ? and `name` like ? or `name` like ?',
|
||||
bindings: ['luk1%', 'luk2%', 'luk3%'],
|
||||
},
|
||||
pg: {
|
||||
sql: 'select * from "users" where "name" ilike ? and "name" ilike ? or "name" ilike ?',
|
||||
bindings: ['luk1%', 'luk2%', 'luk3%'],
|
||||
},
|
||||
mssql: {
|
||||
sql: 'select * from [users] where [name] collate SQL_Latin1_General_CP1_CI_AS like ? and [name] collate SQL_Latin1_General_CP1_CI_AS like ? or [name] collate SQL_Latin1_General_CP1_CI_AS like ?',
|
||||
bindings: ['luk1%', 'luk2%', 'luk3%'],
|
||||
},
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
it('whereColumn', () => {
|
||||
testsql(
|
||||
qb()
|
||||
|
||||
4
types/index.d.ts
vendored
4
types/index.d.ts
vendored
@ -527,7 +527,11 @@ export declare namespace Knex {
|
||||
whereNotIn: WhereIn<TRecord, TResult>;
|
||||
orWhereNotIn: WhereIn<TRecord, TResult>;
|
||||
whereLike: Where<TRecord, TResult>;
|
||||
andWhereLike: Where<TRecord, TResult>;
|
||||
orWhereLike: Where<TRecord, TResult>;
|
||||
whereILike: Where<TRecord, TResult>;
|
||||
andWhereILike: Where<TRecord, TResult>;
|
||||
orWhereILike: Where<TRecord, TResult>;
|
||||
whereNull: WhereNull<TRecord, TResult>;
|
||||
orWhereNull: WhereNull<TRecord, TResult>;
|
||||
whereNotNull: WhereNull<TRecord, TResult>;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user