@@ -48,15 +48,15 @@ export class PostgresIndex implements SearchIndex {
4848 }
4949
5050 let results ;
51+ let totalCount : number ;
5152 const queryMostRecent = ( ) => {
52- return db
53- . select (
54- 'maps' ,
55- db . conditions . and (
56- { visibility : MapVisibility . PUBLIC } ,
57- ...( filter ? [ compileFilter ( filter ) ] : [ ] )
58- ) ,
59- {
53+ const conditions = db . conditions . and (
54+ { visibility : MapVisibility . PUBLIC } ,
55+ ...( filter ? [ compileFilter ( filter ) ] : [ ] )
56+ ) ;
57+ return Promise . all ( [
58+ db
59+ . select ( 'maps' , conditions , {
6060 columns : [ 'id' ] ,
6161 lateral : sortLateral ,
6262 order : sortOrder ?? {
@@ -65,20 +65,21 @@ export class PostgresIndex implements SearchIndex {
6565 } ,
6666 limit,
6767 offset,
68- }
69- )
70- . run ( pool ) ;
68+ } )
69+ . run ( pool ) ,
70+ db . count ( 'maps' , conditions ) . run ( pool ) ,
71+ ] ) ;
7172 } ;
7273
7374 if ( query . trim ( ) === '' ) {
74- results = await queryMostRecent ( ) ;
75+ [ results , totalCount ] = await queryMostRecent ( ) ;
7576 } else {
7677 const [ { tsquery } ] = await db . sql <
7778 db . Parameter ,
7879 [ { tsquery : string } ]
7980 > `select websearch_to_tsquery('english', ${ db . param ( query ) } )::text as tsquery` . run ( pool ) ;
8081 if ( tsquery . trim ( ) === '' ) {
81- results = await queryMostRecent ( ) ;
82+ [ results , totalCount ] = await queryMostRecent ( ) ;
8283 } else {
8384 const tsqueryPartial = db . sql < maps . SQL , string > `(${ db . param ( tsquery ) } || ':*')::tsquery` ;
8485
@@ -91,15 +92,14 @@ export class PostgresIndex implements SearchIndex {
9192 const ftsMatch = db . sql < maps . SQL , boolean > `${ 'fts' } @@ ${ tsqueryPartial } ` ;
9293 const rank = db . sql < maps . SQL , number > `ts_rank_cd(${ 'fts' } , ${ tsqueryPartial } )` ;
9394
94- results = await db
95- . select (
96- 'maps' ,
97- db . conditions . and (
98- { visibility : MapVisibility . PUBLIC } ,
99- db . sql `(${ exactMatch } OR ${ ftsMatch } )` ,
100- ...( filter ? [ compileFilter ( filter ) ] : [ ] )
101- ) ,
102- {
95+ const conditions = db . conditions . and (
96+ { visibility : MapVisibility . PUBLIC } ,
97+ db . sql `(${ exactMatch } OR ${ ftsMatch } )` ,
98+ ...( filter ? [ compileFilter ( filter ) ] : [ ] )
99+ ) ;
100+ [ results , totalCount ] = await Promise . all ( [
101+ db
102+ . select ( 'maps' , conditions , {
103103 columns : [ 'id' ] ,
104104 lateral : sortLateral ,
105105 order : sortOrder ?? [
@@ -112,14 +112,16 @@ export class PostgresIndex implements SearchIndex {
112112 rank,
113113 exactMatch,
114114 } ,
115- }
116- )
117- . run ( pool ) ;
115+ } )
116+ . run ( pool ) ,
117+ db . count ( 'maps' , conditions ) . run ( pool ) ,
118+ ] ) ;
118119 }
119120 }
120121
121122 return {
122123 hits : results . map ( ( r ) => ( { id : r . id } ) ) ,
124+ totalCount,
123125 } ;
124126 }
125127
0 commit comments