Skip to content

Commit bfbd336

Browse files
committed
Display sql view inside the listvew
1 parent 57217b0 commit bfbd336

File tree

5 files changed

+37
-20
lines changed

5 files changed

+37
-20
lines changed

lib/data/list.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,16 @@ exports.get = function (args, done) {
1919

2020
args.db.client.query(args.query, function (err, rows) {
2121
if (err) return done(err);
22+
var idx = args.config.table.view ? 0 : 1;
23+
2224
var records = [];
2325
for (var i=0; i < rows.length; i++) {
24-
var pk = {
26+
var pk = idx ? {
2527
id: rows[i]['__pk'],
2628
text: rows[i][columns[0].name]
27-
};
29+
} : null;
2830
var values = [];
29-
for (var j=1; j < columns.length; j++) {
31+
for (var j=idx; j < columns.length; j++) {
3032
var value = rows[i][columns[j].name];
3133
value = format.list.value(columns[j], value);
3234
if (columns[j].manyToMany && value) value = {mtm: value.split(',')}

lib/qb/lst.js

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ var x = null,
66
function join (table, column, index) {
77
if (column.oneToMany) {
88
var ref = column.oneToMany,
9-
alias = {alias: ref.table+index};
9+
alias = ref.table+index;
1010

1111
var joins = column.fk
1212
? [z.join(table, column.fk, ref, ref.pk, alias)]
@@ -15,15 +15,15 @@ function join (table, column, index) {
1515
else if (column.manyToMany) {
1616
var ref = column.manyToMany.ref,
1717
link = column.manyToMany.link,
18-
alias = {alias: ref.table+index};
18+
alias = ref.table+index;
1919

2020
var joins = [
2121
z.join(table, table.pk, link, link.parentPk),
2222
z.join(link, link.childPk, ref, ref.pk, alias)
2323
];
2424
}
2525

26-
var concat = z.concat(ref.columns,alias.alias,undefined,' '),
26+
var concat = z.concat(ref.columns,alias,undefined,' '),
2727
group = z.group(concat);
2828

2929
return {
@@ -52,12 +52,14 @@ function select (args) {
5252
names.push(x.name(columns[i].name,table.name,z.schema(table)));
5353
}
5454
}
55-
names.unshift(x.as(z.concat(table.pk,table.name,z.schema(table),','),x.name('__pk')));
55+
if (!table.view)
56+
names.unshift(x.as(z.concat(table.pk,table.name,z.schema(table),','),x.name('__pk')));
5657

5758
var where = statement(table, columns, args.filter, joins);
5859

5960
// always group by pk inside the listview!
6061
var group = (function groupby () {
62+
if (table.view) return;
6163
var pk = (table.pk instanceof Array) ? table.pk : [table.pk];
6264
return x.groupby(x.names(pk,table.name));
6365
}());
@@ -76,8 +78,13 @@ function select (args) {
7678
}
7779
}
7880
else if (!Object.keys(view.listview.order).length) {
79-
var pk = table.pk instanceof Array ? table.pk[0] : table.pk;
80-
order = x.name(pk,table.name,z.schema(table)) + ' asc';
81+
if (table.view) {
82+
order = names[0] + ' asc';
83+
}
84+
else {
85+
var pk = table.pk instanceof Array ? table.pk[0] : table.pk;
86+
order = x.name(pk,table.name,z.schema(table)) + ' asc';
87+
}
8188
}
8289
else {
8390
order = (function (table, list) {
@@ -184,7 +191,9 @@ function pagination (args) {
184191
var concat = z.concat(table.pk,table.name,z.schema(table),',');
185192

186193
var str = [
187-
x.select(x.as(x.func('count',['distinct',concat],' '),x.name('count'))),
194+
x.select(
195+
table.view ? '*'
196+
: x.as(x.func('count',['distinct',concat],' '),x.name('count'))),
188197
x.from(s.table),
189198
s.join,
190199
s.where,

lib/qb/partials.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,24 +40,24 @@ function join (table, fk, ref, pk, alias) {
4040
var tbl = table.name||table.table,
4141
tsch = this.schema(table),
4242
rsch = this.schema(ref),
43-
ali = (alias&&alias.alias)||undefined,
4443
ref = ref.table;
4544

4645
var fks = (fk instanceof Array) ? fk : [fk];
4746
var pks = (pk instanceof Array) ? pk : [pk];
4847

49-
var result = [];
48+
var condition = [];
5049
for (var i=0; i < fks.length; i++) {
5150
var pk = pks[i], fk = fks[i];
5251

53-
result.push(x.eq(
54-
x.name(fk,tbl,tsch),
55-
ali ? x.name(pk,ali) : x.name(pk,ref,rsch)));
52+
condition.push(
53+
x.eq(x.name(fk,tbl,tsch),
54+
alias ? x.name(pk,alias) : x.name(pk,ref,rsch)
55+
));
5656
}
5757

5858
return x.join(
59-
ali ? x.alias(x.name(ref,rsch),x.name(ali)) : x.name(ref,rsch),
60-
result,
59+
alias ? x.alias(x.name(ref,rsch),x.name(alias)) : x.name(ref,rsch),
60+
condition,
6161
'left'
6262
);
6363
}

routes/listview.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,8 @@ function render (req, res, args, ddata, pager, order, next) {
8787
res.locals.view = {
8888
name: args.config.table.verbose,
8989
slug: args.slug,
90-
error: res.locals.error
90+
error: res.locals.error,
91+
table: !args.config.table.view
9192
};
9293
res.locals.breadcrumbs = {
9394
links: [

views/listview.html

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11

2+
{{#view}}
23
<h2>
3-
{{string.select}} {{view.name}} {{string.to-change}}.
4+
{{#table}}{{string.select}} {{name}} {{string.to-change}}.{{/table}}
5+
{{^table}}{{name}}{{/table}}
46
<a href="#" class="glyphicon glyphicon-filter" title="{{string.filter}}"></a>
5-
<a href="{{root}}/{{view.slug}}/add" class="btn btn-default">{{string.add}} {{view.name}}</a>
7+
{{#table}}
8+
<a href="{{root}}/{{slug}}/add" class="btn btn-default">{{string.add}} {{name}}</a>
9+
{{/table}}
610
</h2>
11+
{{/view}}
712

813
{{#show.success}}
914
<div class="alert alert-success alert-dismissable">

0 commit comments

Comments
 (0)