Skip to content

Commit

Permalink
Merge pull request getredash#650 from alonho/mql
Browse files Browse the repository at this point in the history
Feature: MQL query runner
  • Loading branch information
arikfr committed Nov 15, 2015
2 parents 6618e49 + 339c010 commit fc2c0bb
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 0 deletions.
57 changes: 57 additions & 0 deletions query_runner/mql.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import json

from . import BaseQueryRunner, register
from .mongodb import TYPES_MAP, TYPE_STRING

try:
import pymongo
from ognom import query_to_plan
from website.server.utils import simplify
enabled = True
except ImportError:
enabled = False

def deduce_columns(rows):
column_to_type = {}
for row in rows:
for column, value in row.iteritems():
column_to_type[column] = TYPES_MAP.get(value.__class__, TYPE_STRING)
return [{'name': column, 'friendly_name': column, 'type': type}
for column, type in column_to_type.iteritems()]

class MQL(BaseQueryRunner):

def __init__(self, configuration_json):
super(MQL, self).__init__(configuration_json)
self.syntax = 'sql'

@classmethod
def enabled(cls):
return enabled

@classmethod
def annotate_query(cls):
return False

@classmethod
def configuration_schema(cls):
return {
'type': 'object',
'properties': {
'uri': {
'type': 'string',
'title': 'Connection String'
}
},
'required': ['uri']
}

def run_query(self, query):
conn = pymongo.MongoClient(self.configuration['uri'])
# execute() returns a generator (that wraps a cursor)
gen = query_to_plan(query).execute(conn)
# simplify converts special MongoDB data types (ObjectId, Date, etc') to strings
result = simplify(list(gen))
return json.dumps({'columns': deduce_columns(result), 'rows': result}), None

register(MQL)
1 change: 1 addition & 0 deletions settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@ def all_settings():
'redash.query_runner.google_spreadsheets',
'redash.query_runner.graphite',
'redash.query_runner.mongodb',
'redash.query_runner.mql',
'redash.query_runner.mysql',
'redash.query_runner.pg',
'redash.query_runner.url',
Expand Down

0 comments on commit fc2c0bb

Please sign in to comment.