UNPKG

sphinxql

Version:

SphinxQL query builder for Node.JS. Supports Sphinx search(2.x and 3.x) and Manticore search

66 lines (56 loc) 2.45 kB
import QueryBuilder from '../../src/QueryBuilder'; import SphinxClient from '../../src/SphinxClient'; require('iconv-lite').encodingExists('foo'); // fix bug with mysql2 and Jest describe('Tests for UPDATE statement', () => { const params = { host: '127.0.0.1', port: 9307, }; // UPDATE index SET col1 = newval1 [, ...] WHERE where_condition [OPTION opt_name = opt_value [, ...]] test('updates with a where condition', () => { const conn = new SphinxClient(params); const compiledQuery = new QueryBuilder(conn) .update('rt') .set({description: 'new description text for the post', title: 'UPDATE 2019!', rank: 12}) .where('id', '=', 2) .generate(); const expectedQuery = `UPDATE rt SET description='new description text for the post', title='UPDATE 2019!', rank=12 WHERE id = 2`; expect(compiledQuery).toBe(expectedQuery); conn.close(); }); test('updates with a match condition', () => { const conn = new SphinxClient(params); const compiledQuery = new QueryBuilder(conn) .update('rt') .set({title: 'UPDATE no dinosaurs in 2019!'}) .match(['title', 'content'], 'dinosaur') .generate(); const expectedQuery = `UPDATE rt SET title='UPDATE no dinosaurs in 2019!' WHERE MATCH('(@(title,content) dinosaur)')`; expect(compiledQuery).toBe(expectedQuery); conn.close(); }); test('updates with multiple conditions', () => { const conn = new SphinxClient(params); const compiledQuery = new QueryBuilder(conn) .update('rt') .set({title: "UPDATE there\'re not dinosaurs in 2030!"}) .match(['title', 'content'], 'dinosaur') .where('published_at', '<', 2030) .generate(); const expectedQuery = `UPDATE rt SET title='UPDATE there\\'re not dinosaurs in 2030!' WHERE MATCH('(@(title,content) dinosaur)') AND published_at < 2030`; expect(compiledQuery).toBe(expectedQuery); conn.close(); }); it('updates with OPTION expression for customizing the search', () => { const conn = new SphinxClient(params); let compiledQuery = new QueryBuilder(conn) .select('id') .from('rt_sales') .match('product_name', '"iPhone XS"', false) .option('ranker', 'sph04') .generate(); let expectedQuery = `SELECT id FROM rt_sales WHERE MATCH('(@product_name "iPhone XS")') OPTION ranker='sph04'`; expect(compiledQuery).toBe(expectedQuery); conn.close(); }); });