コード例 #1
0
def parse_response(data):
    cols = data["columns"]
    rows = data["rows"]

    if len(cols) == 0:
        return {"columns": [], "rows": []}

    first_row = rows[0]
    columns = []
    types = {}

    for c in cols:
        columns.append({
            "name": c,
            "type": guess_type(first_row[c]),
            "friendly_name": c
        })

    for col in columns:
        types[col["name"]] = col["type"]

    for row in rows:
        for key, value in row.items():
            row[key] = convert_type(value, types[key])

    return {"columns": columns, "rows": rows}
コード例 #2
0
ファイル: drill.py プロジェクト: harshitgupta/redash_7t
def parse_response(data):
    cols = data['columns']
    rows = data['rows']

    if len(cols) == 0:
        return {'columns': [], 'rows': []}

    first_row = rows[0]
    columns = []
    types = {}

    for c in cols:
        columns.append({
            'name': c,
            'type': guess_type(first_row[c]),
            'friendly_name': c
        })

    for col in columns:
        types[col['name']] = col['type']

    for row in rows:
        for key, value in row.iteritems():
            row[key] = convert_type(value, types[key])

    return {'columns': columns, 'rows': rows}
コード例 #3
0
ファイル: test_utils.py プロジェクト: sunjp3753/redash-1
 def test_detects_booleans(self):
     self.assertEqual(guess_type('true'), TYPE_BOOLEAN)
     self.assertEqual(guess_type('True'), TYPE_BOOLEAN)
     self.assertEqual(guess_type('TRUE'), TYPE_BOOLEAN)
     self.assertEqual(guess_type('false'), TYPE_BOOLEAN)
     self.assertEqual(guess_type('False'), TYPE_BOOLEAN)
     self.assertEqual(guess_type('FALSE'), TYPE_BOOLEAN)
     self.assertEqual(guess_type(False), TYPE_BOOLEAN)
コード例 #4
0
 def test_detects_booleans(self):
     self.assertEqual(guess_type("true"), TYPE_BOOLEAN)
     self.assertEqual(guess_type("True"), TYPE_BOOLEAN)
     self.assertEqual(guess_type("TRUE"), TYPE_BOOLEAN)
     self.assertEqual(guess_type("false"), TYPE_BOOLEAN)
     self.assertEqual(guess_type("False"), TYPE_BOOLEAN)
     self.assertEqual(guess_type("FALSE"), TYPE_BOOLEAN)
     self.assertEqual(guess_type(False), TYPE_BOOLEAN)
コード例 #5
0
    def run_query(self, query, user):
        child_queries = extract_child_queries(query)

        connection = None
        cursor = None

        try:
            connection = sqlite3.connect(':memory:')
            query = create_tables_from_child_queries(user, connection, query,
                                                     child_queries)
            logger.debug('ResultsWithParams running query: {}'.format(query))

            cursor = connection.cursor()
            cursor.execute(query)

            if cursor.description is None:
                return None, 'Query completed but it returned no data.'

            columns = self.fetch_columns([(d[0], None)
                                          for d in cursor.description])

            rows = []
            column_names = [c['name'] for c in columns]

            for i, row in enumerate(cursor):
                if i == 0:
                    for j, col in enumerate(row):
                        guess = guess_type(col)

                        if columns[j]['type'] is None:
                            columns[j]['type'] = guess
                        elif columns[j]['type'] != guess:
                            columns[j]['type'] = TYPE_STRING

                rows.append(dict(zip(column_names, row)))

            return json_dumps({'columns': columns, 'rows': rows}), None
        except KeyboardInterrupt:
            if connection:
                connection.interrupt()
            return None, 'Query cancelled by user.'
        finally:
            if cursor:
                cursor.close()
            if connection:
                connection.close()
コード例 #6
0
ファイル: query_results.py プロジェクト: xiongyingeng/redash
    def run_query(self, query, user):
        connection = sqlite3.connect(':memory:')

        query_ids = extract_query_ids(query)
        cached_query_ids = extract_cached_query_ids(query)
        create_tables_from_query_ids(user, connection, query_ids,
                                     cached_query_ids)

        cursor = connection.cursor()

        try:
            cursor.execute(query)

            if cursor.description is not None:
                columns = self.fetch_columns([(i[0], None)
                                              for i in cursor.description])

                rows = []
                column_names = [c['name'] for c in columns]

                for i, row in enumerate(cursor):
                    for j, col in enumerate(row):
                        guess = guess_type(col)

                        if columns[j]['type'] is None:
                            columns[j]['type'] = guess
                        elif columns[j]['type'] != guess:
                            columns[j]['type'] = TYPE_STRING

                    rows.append(dict(zip(column_names, row)))

                data = {'columns': columns, 'rows': rows}
                error = None
                json_data = json_dumps(data)
            else:
                error = 'Query completed but it returned no data.'
                json_data = None
        except KeyboardInterrupt:
            connection.cancel()
            error = "Query cancelled by user."
            json_data = None
        finally:
            connection.close()
        return json_data, error
コード例 #7
0
ファイル: query_results.py プロジェクト: getredash/redash
    def run_query(self, query, user):
        connection = sqlite3.connect(':memory:')

        query_ids = extract_query_ids(query)
        cached_query_ids = extract_cached_query_ids(query)
        create_tables_from_query_ids(user, connection, query_ids, cached_query_ids)

        cursor = connection.cursor()

        try:
            cursor.execute(query)

            if cursor.description is not None:
                columns = self.fetch_columns(
                    [(i[0], None) for i in cursor.description])

                rows = []
                column_names = [c['name'] for c in columns]

                for i, row in enumerate(cursor):
                    for j, col in enumerate(row):
                        guess = guess_type(col)

                        if columns[j]['type'] is None:
                            columns[j]['type'] = guess
                        elif columns[j]['type'] != guess:
                            columns[j]['type'] = TYPE_STRING

                    rows.append(dict(zip(column_names, row)))

                data = {'columns': columns, 'rows': rows}
                error = None
                json_data = json_dumps(data)
            else:
                error = 'Query completed but it returned no data.'
                json_data = None
        except KeyboardInterrupt:
            connection.cancel()
            error = "Query cancelled by user."
            json_data = None
        finally:
            connection.close()
        return json_data, error
コード例 #8
0
ファイル: query_results.py プロジェクト: yyz940922/myRedash
    def run_query(self, query, user):
        connection = sqlite3.connect(":memory:")

        query_ids = extract_query_ids(query)
        cached_query_ids = extract_cached_query_ids(query)
        create_tables_from_query_ids(user, connection, query_ids,
                                     cached_query_ids)

        cursor = connection.cursor()

        try:
            cursor.execute(query)

            if cursor.description is not None:
                columns = self.fetch_columns([(i[0], None)
                                              for i in cursor.description])

                rows = []
                column_names = [c["name"] for c in columns]

                for i, row in enumerate(cursor):
                    for j, col in enumerate(row):
                        guess = guess_type(col)

                        if columns[j]["type"] is None:
                            columns[j]["type"] = guess
                        elif columns[j]["type"] != guess:
                            columns[j]["type"] = TYPE_STRING

                    rows.append(dict(zip(column_names, row)))

                data = {"columns": columns, "rows": rows}
                error = None
                json_data = json_dumps(data)
            else:
                error = "查询成功执行,但查询结果没有数据。"
                json_data = None
        except (KeyboardInterrupt, JobTimeoutException):
            connection.cancel()
            raise
        finally:
            connection.close()
        return json_data, error
コード例 #9
0
ファイル: drill.py プロジェクト: ariarijp/redash
def parse_response(data):
    cols = data['columns']
    rows = data['rows']

    if len(cols) == 0:
        return {'columns': [], 'rows': []}

    first_row = rows[0]
    columns = []
    types = {}

    for c in cols:
        columns.append({'name': c, 'type': guess_type(first_row[c]), 'friendly_name': c})

    for col in columns:
        types[col['name']] = col['type']

    for row in rows:
        for key, value in row.iteritems():
            row[key] = convert_type(value, types[key])

    return {'columns': columns, 'rows': rows}
コード例 #10
0
ファイル: test_utils.py プロジェクト: sunjp3753/redash-1
 def test_handles_unicode(self):
     self.assertEqual(guess_type(u'Текст'), TYPE_STRING)
コード例 #11
0
ファイル: test_utils.py プロジェクト: sunjp3753/redash-1
 def test_detects_date(self):
     self.assertEqual(guess_type('2018-10-31'), TYPE_DATETIME)
コード例 #12
0
ファイル: test_utils.py プロジェクト: sunjp3753/redash-1
 def test_detects_float(self):
     self.assertEqual(guess_type('3.14'), TYPE_FLOAT)
     self.assertEqual(guess_type(3.14), TYPE_FLOAT)
コード例 #13
0
ファイル: test_utils.py プロジェクト: sunjp3753/redash-1
 def test_detects_integer(self):
     self.assertEqual(guess_type('42'), TYPE_INTEGER)
     self.assertEqual(guess_type(42), TYPE_INTEGER)
コード例 #14
0
ファイル: test_utils.py プロジェクト: sunjp3753/redash-1
 def test_detects_strings(self):
     self.assertEqual(guess_type(None), TYPE_STRING)
     self.assertEqual(guess_type(''), TYPE_STRING)
     self.assertEqual(guess_type('redash'), TYPE_STRING)