From 4e21fb42850a898ccaf3c86076222a2e6ff16f18 Mon Sep 17 00:00:00 2001 From: Maxime Beauchemin Date: Tue, 22 Dec 2015 08:12:47 -0800 Subject: [PATCH] Adding support for quoted field names --- TODO.md | 2 -- panoramix/models.py | 22 +++++++++++----------- panoramix/static/panoramix.js | 7 +++---- panoramix/static/widgets/viz_world_map.js | 2 +- 4 files changed, 15 insertions(+), 18 deletions(-) diff --git a/TODO.md b/TODO.md index a808804501..3690658f22 100644 --- a/TODO.md +++ b/TODO.md @@ -1,8 +1,6 @@ # TODO List of TODO items for Panoramix -* fix directed - ## Improvments * dashboard controller + filters * Color hash in JS diff --git a/panoramix/models.py b/panoramix/models.py index 6341806979..b28189913d 100644 --- a/panoramix/models.py +++ b/panoramix/models.py @@ -12,7 +12,7 @@ from sqlalchemy import ( Column, Integer, String, ForeignKey, Text, Boolean, DateTime, Table, create_engine, MetaData, desc, select, and_, func) from sqlalchemy.orm import relationship -from sqlalchemy.sql import table, literal_column, text +from sqlalchemy.sql import table, literal_column, text, column from sqlalchemy.sql.elements import ColumnClause from sqlalchemy_utils import EncryptedType @@ -420,9 +420,7 @@ class SqlaTable(Model, Queryable, AuditMixinNullable): groupby_exprs = [] if groupby: - select_exprs = [literal_column(s) for s in groupby] select_exprs = [] - groupby_exprs = [] inner_select_exprs = [] inner_groupby_exprs = [] for s in groupby: @@ -432,8 +430,8 @@ class SqlaTable(Model, Queryable, AuditMixinNullable): outer = ColumnClause(expr, is_literal=True).label(s) inner = ColumnClause(expr, is_literal=True).label('__' + s) else: - outer = literal_column(s).label(s) - inner = literal_column(s).label('__' + s) + outer = column(s).label(s) + inner = column(s).label('__' + s) groupby_exprs.append(outer) select_exprs.append(outer) @@ -473,7 +471,7 @@ class SqlaTable(Model, Queryable, AuditMixinNullable): cond = ColumnClause( col_obj.expression, is_literal=True).in_(values) else: - cond = literal_column(col).in_(values) + cond = column(col).in_(values) if op == 'not in': cond = ~cond where_clause_and.append(cond) @@ -497,7 +495,7 @@ class SqlaTable(Model, Queryable, AuditMixinNullable): on_clause = [] for i, gb in enumerate(groupby): on_clause.append( - groupby_exprs[i] == literal_column("__" + gb)) + groupby_exprs[i] == column("__" + gb)) from_clause = from_clause.join(subq.alias(), and_(*on_clause)) @@ -558,33 +556,35 @@ class SqlaTable(Model, Queryable, AuditMixinNullable): if not any_date_col and 'date' in datatype.lower(): any_date_col = col.name + quoted = unicode( + column(dbcol.column_name).compile(dialect=db.engine.dialect)) if dbcol.sum: metrics.append(M( metric_name='sum__' + dbcol.column_name, verbose_name='sum__' + dbcol.column_name, metric_type='sum', - expression="SUM({})".format(dbcol.column_name) + expression="SUM({})".format(quoted) )) if dbcol.max: metrics.append(M( metric_name='max__' + dbcol.column_name, verbose_name='max__' + dbcol.column_name, metric_type='max', - expression="MAX({})".format(dbcol.column_name) + expression="MAX({})".format(quoted) )) if dbcol.min: metrics.append(M( metric_name='min__' + dbcol.column_name, verbose_name='min__' + dbcol.column_name, metric_type='min', - expression="MIN({})".format(dbcol.column_name) + expression="MIN({})".format(quoted) )) if dbcol.count_distinct: metrics.append(M( metric_name='count_distinct__' + dbcol.column_name, verbose_name='count_distinct__' + dbcol.column_name, metric_type='count_distinct', - expression="COUNT(DISTINCT {})".format(dbcol.column_name) + expression="COUNT(DISTINCT {})".format(quoted) )) dbcol.type = datatype db.session.merge(self) diff --git a/panoramix/static/panoramix.js b/panoramix/static/panoramix.js index 71b121d858..4c905d95b3 100644 --- a/panoramix/static/panoramix.js +++ b/panoramix/static/panoramix.js @@ -1,6 +1,6 @@ var px = (function() { - var visualizations = []; + var visualizations = {}; var dashboard = undefined; var Slice = function(data, dashboard){ @@ -92,7 +92,7 @@ var px = (function() { delete dashboard.clearFilter(slice_id); }, }; - var viz = visualizations[name](slice); + var viz = visualizations[data.form_data.viz_type](slice); slice['viz'] = viz; return slice; } @@ -119,7 +119,6 @@ var px = (function() { }, getSlice: function(slice_id) { for(var i=0; i