diff --git a/bijoe/engine.py b/bijoe/engine.py index 9783b8f..30e54eb 100644 --- a/bijoe/engine.py +++ b/bijoe/engine.py @@ -67,7 +67,7 @@ class EngineDimension(object): with self.engine.get_cursor() as cursor: sql = self.members_query if not sql: - table_expression = self.engine_cube.fact_table + table_expression = '"%s"' % self.engine_cube.fact_table if self.join: table_expression = self.engine_cube.build_table_expression( self.join, self.engine_cube.fact_table) @@ -116,7 +116,7 @@ class SchemaJSONDimension(schemas.Dimension): (self.name, self.name, self.name)) self.members_query = sql.format(json_field=json_field) self.filter_expression = ('("{fact_table}".id IS NULL ' - 'OR ("{fact_table}"."%s"->>\'%s\') IN (%%s))' + 'OR ("{fact_table}.%s"->>\'%s\') IN (%%s))' % (json_field, name)) self.filter_needs_join = False @@ -223,7 +223,7 @@ class EngineCube(object): def count(self): with self.engine.get_cursor() as cursor: - cursor.execute('SELECT count(%s) FROM %s' % (self.key, self.fact_table)) + cursor.execute('SELECT count(%s) FROM "%s"' % (self.key, self.fact_table)) return cursor.fetchone()[0] def get_join(self, name): @@ -276,7 +276,7 @@ class EngineCube(object): if measure.expression not in projections: projections.append(measure.expression + ' AS ' + measure.name) sql = 'SELECT ' + ', '.join(projections) - table_expression = ' %s' % self.cube.fact_table + table_expression = ' "%s"' % self.cube.fact_table if joins: table_expression = self.build_table_expression( joins, self.fact_table, other_conditions=join_conditions) @@ -330,7 +330,10 @@ class EngineCube(object): join_tree.setdefault(master_table, {}).setdefault(join.kind, {})[join.name] = join def build_table_expression_helper(join_tree, table_name, alias=None, top=True, other_conditions=None): - sql = table_name + if table_name.strip().startswith('('): + sql = table_name + else: + sql = '"%s"' % table_name if alias: sql += ' AS "%s"' % alias add_paren = False