Skip to content

Commit

Permalink
Merge branch 'master' into release/v0.31.4
Browse files Browse the repository at this point in the history
  • Loading branch information
Аleksej Petrov committed Apr 8, 2021
2 parents d0df1a4 + fc22593 commit 3d756d4
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 12 deletions.
18 changes: 6 additions & 12 deletions src/services/assets/sql/index.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,17 @@
import * as knex from 'knex';
import { compose, isNil } from 'ramda';
import { AssetsSearchRequest, SearchByTicker } from '../types';
import { columns } from './common';
import { searchAssets } from './searchAssets';
import { AssetsSearchRequest, SearchByTicker } from '../types';
import { searchAssetsByTicker } from './searchAssetsByTicker';

const pg = knex({ client: 'pg' });

const getAssetIndex = (asset_id: string) =>
pg('assets_cte')
.column('rn')
.where('asset_id', asset_id);
pg('assets_cte').column('rn').where('asset_id', asset_id);

export const mget = (ids: string[]): string =>
pg('assets')
.select(columns)
.whereIn('asset_id', ids)
.toString();
pg('assets').select(columns).whereIn('asset_id', ids).toString();

export const get = (id: string): string => mget([id]);

Expand All @@ -28,10 +24,8 @@ export const search = (req: AssetsSearchRequest): string => {
(q: knex.QueryBuilder) => q.toString(),
(q: knex.QueryBuilder) => q.clone().limit(req.limit),
(q: knex.QueryBuilder) =>
req.ticker === '*'
? q.whereNotNull('ticker')
: q.where('ticker', req.ticker)
)(pg('assets').select(columns));
req.after ? q.clone().where('rn', '>', getAssetIndex(req.after)) : q
)(searchAssetsByTicker(req.ticker));
} else {
return compose(
(q: knex.QueryBuilder) => q.toString(),
Expand Down
27 changes: 27 additions & 0 deletions src/services/assets/sql/searchAssetsByTicker.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import * as knex from 'knex';
import { compose } from 'ramda';
import { columns } from './common';

const pg = knex({ client: 'pg' });

const baseQuery = pg
.from('assets')
.select(columns)
.column({
rn: pg.raw(
'row_number() over (order by ticker asc, issue_height desc, asset_id asc)'
),
})
.orderBy('ticker', 'asc')
.orderBy('issue_height', 'desc')
.orderBy('asset_id', 'asc');

export const searchAssetsByTicker = (ticker: string): knex.QueryBuilder =>
compose(
(q: knex.QueryBuilder) =>
pg.with('assets_cte', q).from('assets_cte').select(columns).orderBy('rn', 'asc'),
(q: knex.QueryBuilder) =>
ticker === '*'
? q.clone().whereNotNull('ticker')
: q.clone().where('ticker', ticker)
)(baseQuery);

0 comments on commit 3d756d4

Please sign in to comment.