Skip to content

Commit c93861d

Browse files
fixes for selecting with fields$ and more tests
1 parent 0dcc1e0 commit c93861d

5 files changed

Lines changed: 58 additions & 7 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ seneca-postgres-store is a [PostgreSQL][postgresqlorg] database plugin for the [
1212
Usage:
1313

1414
var seneca = require('seneca');
15-
var store = require('seneca-postgresql-store');
15+
var store = require('seneca-postgres-store');
1616

1717
var config = {}
1818
var storeopts = {

lib/postgresql-store.js

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -239,10 +239,7 @@ module.exports = function (opts) {
239239
return done(null, query)
240240
}
241241
else {
242-
if (q.distinct$ || q.fields$) {
243-
return done(null, query_builder.filterStatement(qent, q))
244-
}
245-
else if (q.ids) {
242+
if (q.ids) {
246243
return done(null, query_builder.selectstmOr(qent, q))
247244
}
248245
else {

lib/query_builder.js

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,11 +295,22 @@ function filterStatement (qent, q) {
295295
}
296296

297297
function selectstm (qent, q, done) {
298+
var specialOps = ['fields$']
299+
var specialOpsVal = {}
300+
298301
var stm = {}
299302

303+
for (var i in specialOps){
304+
if (q[specialOps[i]]){
305+
specialOpsVal[specialOps[i]] = q[specialOps[i]]
306+
delete q[specialOps[i]]
307+
}
308+
}
309+
300310
var table = relationalstore.tablename(qent)
301311
var entp = relationalstore.makeentp(qent)
302312

313+
303314
var w = whereargs(entp, q)
304315

305316
var response = buildQueryFromExpression(entp, w)
@@ -315,7 +326,13 @@ function selectstm (qent, q, done) {
315326

316327
var metastr = ' ' + mq.params.join(' ')
317328

318-
stm.text = 'SELECT * FROM ' + relationalstore.escapeStr(table) + (wherestr ? ' WHERE ' + wherestr : '') + relationalstore.escapeStr(metastr)
329+
var what = '*'
330+
if (specialOpsVal['fields$'] && _.isArray(specialOpsVal['fields$']) && specialOpsVal['fields$'].length > 0){
331+
what = ' ' + specialOpsVal['fields$'].join(', ')
332+
what += ', id '
333+
}
334+
335+
stm.text = 'SELECT ' + what + ' FROM ' + relationalstore.escapeStr(table) + (wherestr ? ' WHERE ' + wherestr : '') + relationalstore.escapeStr(metastr)
319336
stm.values = values
320337

321338
done(null, stm)

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "seneca-postgres-store",
3-
"version": "1.1.1",
3+
"version": "1.1.2",
44
"description": "Seneca data store plugin for PostgreSQL",
55
"main": "lib/postgresql-store.js",
66
"author": "Marian Radulescu",

test/postgres.test.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,4 +317,41 @@ describe('postgres store API V2.0.0', function () {
317317
done()
318318
})
319319
})
320+
321+
it('use and$ & or$ and limit$', function (done) {
322+
var product = si.make('product')
323+
324+
product.list$({
325+
or$: [{price: {gte$: 200}}, {and$: [{name: 'cherry'}, {price: 300}]}],
326+
sort$: {price: 1},
327+
limit$: 1,
328+
fields$: ['name']
329+
}, function (err, lst) {
330+
assert(!err)
331+
332+
assert.equal(1, lst.length)
333+
assert.equal('pear', lst[0].name)
334+
assert(!lst[0].price)
335+
done()
336+
})
337+
})
338+
339+
it('use and$ & or$ and limit$, fields$ and skip$', function (done) {
340+
var product = si.make('product')
341+
342+
product.list$({
343+
price: {gte$: 200},
344+
sort$: {price: 1},
345+
limit$: 1,
346+
fields$: ['name'],
347+
skip$: 1
348+
}, function (err, lst) {
349+
assert(!err)
350+
351+
assert.equal(1, lst.length)
352+
assert.equal('cherry', lst[0].name)
353+
assert(!lst[0].price)
354+
done()
355+
})
356+
})
320357
})

0 commit comments

Comments
 (0)