|
@@ -48,7 +48,7 @@ class SQLApi():
|
|
|
if query and query['qs'] == [{'q': '_root_:*'}]:
|
|
if query and query['qs'] == [{'q': '_root_:*'}]:
|
|
|
return {'response': {'numFound': 0}}
|
|
return {'response': {'numFound': 0}}
|
|
|
|
|
|
|
|
- filters = '\n'.join(self._get_fq(dashboard, query, facet))
|
|
|
|
|
|
|
+ filters = self._get_fq(dashboard, query, facet)
|
|
|
|
|
|
|
|
if facet:
|
|
if facet:
|
|
|
fields = [facet['field']] + [f['field'] for f in facet['properties']['facets']]
|
|
fields = [facet['field']] + [f['field'] for f in facet['properties']['facets']]
|
|
@@ -63,7 +63,7 @@ class SQLApi():
|
|
|
'database': database,
|
|
'database': database,
|
|
|
'table': table,
|
|
'table': table,
|
|
|
'fields': ', '.join(fields),
|
|
'fields': ', '.join(fields),
|
|
|
- 'filters': ' AND '.join(['%s IS NOT NULL' % f for f in fields]),
|
|
|
|
|
|
|
+ 'filters': ' AND '.join(['%s IS NOT NULL' % f for f in fields] + filters),
|
|
|
'limit': LIMIT
|
|
'limit': LIMIT
|
|
|
}
|
|
}
|
|
|
else:
|
|
else:
|
|
@@ -74,7 +74,7 @@ class SQLApi():
|
|
|
'fields': fields
|
|
'fields': fields
|
|
|
}
|
|
}
|
|
|
if filters:
|
|
if filters:
|
|
|
- hql += ' WHERE ' + filters
|
|
|
|
|
|
|
+ hql += ' WHERE ' + ' AND '.join(filters)
|
|
|
hql += ' LIMIT %s' % LIMIT
|
|
hql += ' LIMIT %s' % LIMIT
|
|
|
|
|
|
|
|
# sample = get_api(request, {'type': 'hive'}).get_sample_data({'type': 'hive'}, database=file_format['databaseName'], table=file_format['tableName'])
|
|
# sample = get_api(request, {'type': 'hive'}).get_sample_data({'type': 'hive'}, database=file_format['databaseName'], table=file_format['tableName'])
|
|
@@ -138,19 +138,22 @@ class SQLApi():
|
|
|
|
|
|
|
|
def _get_fq(self, collection, query, facet=None):
|
|
def _get_fq(self, collection, query, facet=None):
|
|
|
clauses = []
|
|
clauses = []
|
|
|
|
|
+
|
|
|
|
|
+ # Facets should not filter themselves
|
|
|
|
|
+ fqs = [fq for fq in query['fqs'] if not facet or facet['id'] != fq['id']]
|
|
|
|
|
|
|
|
# Merge facets queries on same fields
|
|
# Merge facets queries on same fields
|
|
|
- grouped_fqs = groupby(query['fqs'], lambda x: (x['type'], x['field']))
|
|
|
|
|
|
|
+ grouped_fqs = groupby(fqs, lambda x: (x['type'], x['field']))
|
|
|
merged_fqs = []
|
|
merged_fqs = []
|
|
|
for key, group in grouped_fqs:
|
|
for key, group in grouped_fqs:
|
|
|
field_fq = next(group)
|
|
field_fq = next(group)
|
|
|
for fq in group:
|
|
for fq in group:
|
|
|
- if facet and facet['id'] != fq['id']: # Facets should not filter themselves
|
|
|
|
|
- for f in fq['filter']:
|
|
|
|
|
|
|
+ for f in fq['filter']:
|
|
|
field_fq['filter'].append(f)
|
|
field_fq['filter'].append(f)
|
|
|
merged_fqs.append(field_fq)
|
|
merged_fqs.append(field_fq)
|
|
|
|
|
|
|
|
for fq in merged_fqs:
|
|
for fq in merged_fqs:
|
|
|
|
|
+ print fq
|
|
|
if fq['type'] == 'field':
|
|
if fq['type'] == 'field':
|
|
|
f = []
|
|
f = []
|
|
|
for _filter in fq['filter']:
|
|
for _filter in fq['filter']:
|
|
@@ -213,7 +216,7 @@ class SQLApi():
|
|
|
counts.append({
|
|
counts.append({
|
|
|
"cat": facet['field'],
|
|
"cat": facet['field'],
|
|
|
"count": row[1],
|
|
"count": row[1],
|
|
|
- "exclude": True,
|
|
|
|
|
|
|
+ "exclude": False,
|
|
|
"selected": row[0] in fq_fields,
|
|
"selected": row[0] in fq_fields,
|
|
|
"value": row[0]
|
|
"value": row[0]
|
|
|
})
|
|
})
|