Skip to content
This repository has been archived by the owner on Jul 9, 2022. It is now read-only.

Commit

Permalink
Add support for int/float values in guess_type (getredash#3913)
Browse files Browse the repository at this point in the history
  • Loading branch information
arikfr authored Jun 20, 2019
1 parent 9ee393e commit 27259b5
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 4 deletions.
15 changes: 13 additions & 2 deletions redash/query_runner/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -271,7 +271,18 @@ def import_query_runners(query_runner_imports):
__import__(runner_import)


def guess_type(string_value):
def guess_type(value):
if isinstance(value, bool):
return TYPE_BOOLEAN
elif isinstance(value, int):
return TYPE_INTEGER
elif isinstance(value, float):
return TYPE_FLOAT

return guess_type_from_string(value)


def guess_type_from_string(string_value):
if string_value == '' or string_value is None:
return TYPE_STRING

Expand All @@ -296,4 +307,4 @@ def guess_type(string_value):
except (ValueError, OverflowError):
pass

return TYPE_STRING
return TYPE_STRING
6 changes: 4 additions & 2 deletions tests/query_runner/test_utils.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
# -*- coding: utf-8 -*-
from unittest import TestCase

from redash.query_runner import TYPE_DATETIME, TYPE_FLOAT, TYPE_INTEGER, TYPE_BOOLEAN, TYPE_STRING
from redash.query_runner.drill import guess_type
from redash.query_runner import TYPE_DATETIME, TYPE_FLOAT, TYPE_INTEGER, TYPE_BOOLEAN, TYPE_STRING, guess_type


class TestGuessType(TestCase):
Expand All @@ -16,6 +15,7 @@ def test_detects_booleans(self):
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)

def test_detects_strings(self):
self.assertEqual(guess_type(None), TYPE_STRING)
Expand All @@ -24,9 +24,11 @@ def test_detects_strings(self):

def test_detects_integer(self):
self.assertEqual(guess_type('42'), TYPE_INTEGER)
self.assertEqual(guess_type(42), TYPE_INTEGER)

def test_detects_float(self):
self.assertEqual(guess_type('3.14'), TYPE_FLOAT)
self.assertEqual(guess_type(3.14), TYPE_FLOAT)

def test_detects_date(self):
self.assertEqual(guess_type('2018-10-31'), TYPE_DATETIME)

0 comments on commit 27259b5

Please sign in to comment.