Skip to content

Commit

Permalink
Display sql view inside the listvew
Browse files Browse the repository at this point in the history
  • Loading branch information
simov committed Sep 24, 2014
1 parent 57217b0 commit bfbd336
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 20 deletions.
8 changes: 5 additions & 3 deletions lib/data/list.js
Expand Up @@ -19,14 +19,16 @@ exports.get = function (args, done) {

args.db.client.query(args.query, function (err, rows) {
if (err) return done(err);
var idx = args.config.table.view ? 0 : 1;

var records = [];
for (var i=0; i < rows.length; i++) {
var pk = {
var pk = idx ? {
id: rows[i]['__pk'],
text: rows[i][columns[0].name]
};
} : null;
var values = [];
for (var j=1; j < columns.length; j++) {
for (var j=idx; j < columns.length; j++) {
var value = rows[i][columns[j].name];
value = format.list.value(columns[j], value);
if (columns[j].manyToMany && value) value = {mtm: value.split(',')}
Expand Down
23 changes: 16 additions & 7 deletions lib/qb/lst.js
Expand Up @@ -6,7 +6,7 @@ var x = null,
function join (table, column, index) {
if (column.oneToMany) {
var ref = column.oneToMany,
alias = {alias: ref.table+index};
alias = ref.table+index;

var joins = column.fk
? [z.join(table, column.fk, ref, ref.pk, alias)]
Expand All @@ -15,15 +15,15 @@ function join (table, column, index) {
else if (column.manyToMany) {
var ref = column.manyToMany.ref,
link = column.manyToMany.link,
alias = {alias: ref.table+index};
alias = ref.table+index;

var joins = [
z.join(table, table.pk, link, link.parentPk),
z.join(link, link.childPk, ref, ref.pk, alias)
];
}

var concat = z.concat(ref.columns,alias.alias,undefined,' '),
var concat = z.concat(ref.columns,alias,undefined,' '),
group = z.group(concat);

return {
Expand Down Expand Up @@ -52,12 +52,14 @@ function select (args) {
names.push(x.name(columns[i].name,table.name,z.schema(table)));
}
}
names.unshift(x.as(z.concat(table.pk,table.name,z.schema(table),','),x.name('__pk')));
if (!table.view)
names.unshift(x.as(z.concat(table.pk,table.name,z.schema(table),','),x.name('__pk')));

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

// always group by pk inside the listview!
var group = (function groupby () {
if (table.view) return;
var pk = (table.pk instanceof Array) ? table.pk : [table.pk];
return x.groupby(x.names(pk,table.name));
}());
Expand All @@ -76,8 +78,13 @@ function select (args) {
}
}
else if (!Object.keys(view.listview.order).length) {
var pk = table.pk instanceof Array ? table.pk[0] : table.pk;
order = x.name(pk,table.name,z.schema(table)) + ' asc';
if (table.view) {
order = names[0] + ' asc';
}
else {
var pk = table.pk instanceof Array ? table.pk[0] : table.pk;
order = x.name(pk,table.name,z.schema(table)) + ' asc';
}
}
else {
order = (function (table, list) {
Expand Down Expand Up @@ -184,7 +191,9 @@ function pagination (args) {
var concat = z.concat(table.pk,table.name,z.schema(table),',');

var str = [
x.select(x.as(x.func('count',['distinct',concat],' '),x.name('count'))),
x.select(
table.view ? '*'
: x.as(x.func('count',['distinct',concat],' '),x.name('count'))),
x.from(s.table),
s.join,
s.where,
Expand Down
14 changes: 7 additions & 7 deletions lib/qb/partials.js
Expand Up @@ -40,24 +40,24 @@ function join (table, fk, ref, pk, alias) {
var tbl = table.name||table.table,
tsch = this.schema(table),
rsch = this.schema(ref),
ali = (alias&&alias.alias)||undefined,
ref = ref.table;

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

var result = [];
var condition = [];
for (var i=0; i < fks.length; i++) {
var pk = pks[i], fk = fks[i];

result.push(x.eq(
x.name(fk,tbl,tsch),
ali ? x.name(pk,ali) : x.name(pk,ref,rsch)));
condition.push(
x.eq(x.name(fk,tbl,tsch),
alias ? x.name(pk,alias) : x.name(pk,ref,rsch)
));
}

return x.join(
ali ? x.alias(x.name(ref,rsch),x.name(ali)) : x.name(ref,rsch),
result,
alias ? x.alias(x.name(ref,rsch),x.name(alias)) : x.name(ref,rsch),
condition,
'left'
);
}
Expand Down
3 changes: 2 additions & 1 deletion routes/listview.js
Expand Up @@ -87,7 +87,8 @@ function render (req, res, args, ddata, pager, order, next) {
res.locals.view = {
name: args.config.table.verbose,
slug: args.slug,
error: res.locals.error
error: res.locals.error,
table: !args.config.table.view
};
res.locals.breadcrumbs = {
links: [
Expand Down
9 changes: 7 additions & 2 deletions views/listview.html
@@ -1,9 +1,14 @@

{{#view}}
<h2>
{{string.select}} {{view.name}} {{string.to-change}}.
{{#table}}{{string.select}} {{name}} {{string.to-change}}.{{/table}}
{{^table}}{{name}}{{/table}}
<a href="#" class="glyphicon glyphicon-filter" title="{{string.filter}}"></a>
<a href="{{root}}/{{view.slug}}/add" class="btn btn-default">{{string.add}} {{view.name}}</a>
{{#table}}
<a href="{{root}}/{{slug}}/add" class="btn btn-default">{{string.add}} {{name}}</a>
{{/table}}
</h2>
{{/view}}

{{#show.success}}
<div class="alert alert-success alert-dismissable">
Expand Down

0 comments on commit bfbd336

Please sign in to comment.