From 4bc5bb58bbd91071e6771f1232a0db784b2e28ca Mon Sep 17 00:00:00 2001 From: Brian Lewis Date: Mon, 13 Nov 2017 08:37:43 -0800 Subject: [PATCH 1/3] Exit early for STRING datatypes --- teradata/datatypes.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/teradata/datatypes.py b/teradata/datatypes.py index 702178a..2f19b4f 100644 --- a/teradata/datatypes.py +++ b/teradata/datatypes.py @@ -47,15 +47,15 @@ periodRegEx1 = re.compile("\('(.*)',\s*'(.*)'\)") periodRegEx2 = re.compile("ResultStruct:PERIOD\(.*\)\[(.*),\s*(.*)\]") -NUMBER_TYPES = ("BYTEINT", "BIGINT", "DECIMAL", "DOUBLE", "DOUBLE PRECISION", +NUMBER_TYPES = {"BYTEINT", "BIGINT", "DECIMAL", "DOUBLE", "DOUBLE PRECISION", "INTEGER", "NUMBER", "SMALLINT", "FLOAT", "INT", "NUMERIC", - "REAL") + "REAL"} -INT_TYPES = ("BYTEINT", "BIGINT", "INTEGER", "SMALLINT", "INT") +INT_TYPES = {"BYTEINT", "BIGINT", "INTEGER", "SMALLINT", "INT"} -FLOAT_TYPES = ("FLOAT", "DOUBLE", "DOUBLE PRECISION", "REAL") +FLOAT_TYPES = {"FLOAT", "DOUBLE", "DOUBLE PRECISION", "REAL"} -BINARY_TYPES = ("BLOB", "BYTE", "VARBYTE") +BINARY_TYPES = {"BLOB", "BYTE", "VARBYTE"} def _getMs(m, num): @@ -230,7 +230,9 @@ def convertValue(self, dbType, dataType, typeCode, value): logger.trace( "Converting \"%s\" to (%s, %s).", value, dataType, typeCode) if value is not None: - if typeCode == NUMBER: + if typecode == STRING: + return value + elif typeCode == NUMBER: try: return NUMBER(value) except: From 66a99194fa581725778502cb81061e95ff080267 Mon Sep 17 00:00:00 2001 From: Brian Lewis Date: Wed, 15 Nov 2017 12:28:49 -0800 Subject: [PATCH 2/3] Fix variable name --- teradata/datatypes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/teradata/datatypes.py b/teradata/datatypes.py index 2f19b4f..1749da6 100644 --- a/teradata/datatypes.py +++ b/teradata/datatypes.py @@ -230,7 +230,7 @@ def convertValue(self, dbType, dataType, typeCode, value): logger.trace( "Converting \"%s\" to (%s, %s).", value, dataType, typeCode) if value is not None: - if typecode == STRING: + if typeCode == STRING: return value elif typeCode == NUMBER: try: From d5ab7f1cbaa51d274216112f628afdd97d69f6ff Mon Sep 17 00:00:00 2001 From: Brian Lewis Date: Thu, 16 Nov 2017 13:36:29 -0800 Subject: [PATCH 3/3] Add Interval, JSON, Period typeCodes --- teradata/api.py | 15 +++++++++++++++ teradata/datatypes.py | 12 +++++++++--- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/teradata/api.py b/teradata/api.py index 37ba01f..62d4be1 100644 --- a/teradata/api.py +++ b/teradata/api.py @@ -168,6 +168,21 @@ def __init__(self, code, msg): DateFromTicks = datetime.date.fromtimestamp +class Interval(str): + """String representation of the Interval dataType.""" + pass + + +class JSON(str): + """String representation of the JSON dataType.""" + pass + + +class Period(str): + """String representation of the Period dataType.""" + pass + + def TimeFromTicks(x): return datetime.datetime.fromtimestamp(x).time() diff --git a/teradata/datatypes.py b/teradata/datatypes.py index 1749da6..098f10d 100644 --- a/teradata/datatypes.py +++ b/teradata/datatypes.py @@ -272,12 +272,12 @@ def convertValue(self, dbType, dataType, typeCode, value): elif typeCode == BINARY: if util.isString(value): return bytearray.fromhex(value) - elif dataType.startswith("INTERVAL"): + elif typeCode == Interval: return convertInterval(dataType, value) - elif dataType.startswith("JSON") and util.isString(value): + elif typeCode == JSON and util.isString(value): return json.loads(value, parse_int=decimal.Decimal, parse_float=decimal.Decimal) - elif dataType.startswith("PERIOD"): + elif typeCode == Period: return convertPeriod(dataType, value) return value @@ -296,6 +296,12 @@ def convertType(self, dbType, dataType): typeCode = Timestamp elif dataType.startswith("TIME"): typeCode = Time + elif dataType.startswith("INTERVAL"): + typeCode = Interval + elif dataType.startswith("JSON"): + typeCode = JSON + elif dataType.startswith("PERIOD"): + typeCode = Period return typeCode