示例#1
0
 def value(self, raw_value):
     if self.sqltype == SQL_TYPE_TEXT:
         if self.sqlsubtype == 1:  # OCTETS
             return raw_value
         else:
             return self.bytes_to_str(raw_value)
     elif self.sqltype == SQL_TYPE_VARYING:
         if self.sqlsubtype == 1:  # OCTETS
             return raw_value
         else:
             return self.bytes_to_str(raw_value)
     elif self.sqltype in (SQL_TYPE_SHORT, SQL_TYPE_LONG, SQL_TYPE_INT64):
         n = bytes_to_bint(raw_value)
         if self.sqlscale:
             return decimal.Decimal(str(n) + 'e' + str(self.sqlscale))
         else:
             return n
     elif self.sqltype == SQL_TYPE_DATE:
         yyyy, mm, dd = self._parse_date(raw_value)
         return datetime.date(yyyy, mm, dd)
     elif self.sqltype == SQL_TYPE_TIME:
         h, m, s, ms = self._parse_time(raw_value)
         return datetime.time(h, m, s, ms)
     elif self.sqltype == SQL_TYPE_TIMESTAMP:
         yyyy, mm, dd = self._parse_date(raw_value[:4])
         h, m, s, ms = self._parse_time(raw_value[4:])
         return datetime.datetime(yyyy, mm, dd, h, m, s, ms)
     elif self.sqltype == SQL_TYPE_FLOAT:
         return struct.unpack('!f', raw_value)[0]
     elif self.sqltype == SQL_TYPE_DOUBLE:
         return struct.unpack('!d', raw_value)[0]
     else:
         return raw_value
示例#2
0
 def value(self, raw_value):
     if self.sqltype == SQL_TYPE_TEXT:
         if self.sqlsubtype == 1:      # OCTETS
             return raw_value
         else:
             return self.bytes_to_str(raw_value)
     elif self.sqltype == SQL_TYPE_VARYING:
         if self.sqlsubtype == 1:      # OCTETS
             return raw_value
         else:
             return self.bytes_to_str(raw_value)
     elif self.sqltype in (SQL_TYPE_SHORT, SQL_TYPE_LONG, SQL_TYPE_INT64):
         n = bytes_to_bint(raw_value)
         if self.sqlscale:
             return decimal.Decimal(str(n) + 'e' + str(self.sqlscale))
         else:
             return n
     elif self.sqltype == SQL_TYPE_DATE:
         yyyy, mm, dd = self._parse_date(raw_value)
         return datetime.date(yyyy, mm, dd)
     elif self.sqltype == SQL_TYPE_TIME:
         h, m, s, ms = self._parse_time(raw_value)
         return datetime.time(h, m, s, ms)
     elif self.sqltype == SQL_TYPE_TIMESTAMP:
         yyyy, mm, dd = self._parse_date(raw_value[:4])
         h, m, s, ms = self._parse_time(raw_value[4:])
         return datetime.datetime(yyyy, mm, dd, h, m, s, ms)
     elif self.sqltype == SQL_TYPE_FLOAT:
         return struct.unpack('!f', raw_value)[0]
     elif self.sqltype == SQL_TYPE_DOUBLE:
         return struct.unpack('!d', raw_value)[0]
     else:
         return raw_value
示例#3
0
 def value(self, raw_value):
     if self.sqltype == SQL_TYPE_TEXT:
         if self.sqlsubtype in (4, 69):  # UTF8 and GB18030
             reallength = self.sqllen // 4
             return self.bytes_to_str(raw_value)[:reallength]
         elif self.sqlsubtype == 3:  # UNICODE_FSS
             reallength = self.sqllen // 3
             return self.bytes_to_str(raw_value)[:reallength]
         else:
             return self.bytes_to_str(raw_value)
     elif self.sqltype == SQL_TYPE_VARYING:
         return self.bytes_to_str(raw_value)
     elif self.sqltype in (SQL_TYPE_SHORT, SQL_TYPE_LONG, SQL_TYPE_INT64):
         n = bytes_to_bint(raw_value)
         if self.sqlscale:
             return decimal.Decimal(str(n) + "e" + str(self.sqlscale))
         else:
             return n
     elif self.sqltype == SQL_TYPE_DATE:
         yyyy, mm, dd = self._parse_date(raw_value)
         return datetime.date(yyyy, mm, dd)
     elif self.sqltype == SQL_TYPE_TIME:
         h, m, s, ms = self._parse_time(raw_value)
         return datetime.time(h, m, s, ms)
     elif self.sqltype == SQL_TYPE_TIMESTAMP:
         yyyy, mm, dd = self._parse_date(raw_value[:4])
         h, m, s, ms = self._parse_time(raw_value[4:])
         return datetime.datetime(yyyy, mm, dd, h, m, s, ms)
     elif self.sqltype == SQL_TYPE_FLOAT:
         return struct.unpack("!f", raw_value)[0]
     elif self.sqltype == SQL_TYPE_DOUBLE:
         return struct.unpack("!d", raw_value)[0]
     else:
         return raw_value
示例#4
0
 def _parse_time(self, raw_value):
     "Convert raw data to datetime.time"
     n = bytes_to_bint(raw_value)
     s = n // 10000
     m = s // 60
     h = m // 60
     m = m % 60
     s = s % 60
     return (h, m, s, (n % 10000) * 100)
示例#5
0
 def _parse_time(self, raw_value):
     "Convert raw data to datetime.time"
     n = bytes_to_bint(raw_value)
     s = n // 10000
     m = s // 60
     h = m // 60
     m = m % 60
     s = s % 60
     return (h, m, s, (n % 10000) * 100)
示例#6
0
    def _parse_date(self, raw_value):
        "Convert raw data to datetime.date"
        nday = bytes_to_bint(raw_value) + 678882
        century = (4 * nday -1) // 146097
        nday = 4 * nday - 1 - 146097 * century
        day = nday // 4

        nday = (4 * day + 3) // 1461
        day = 4 * day + 3 - 1461 * nday
        day = (day + 4) // 4

        month = (5 * day -3) // 153
        day = 5 * day - 3 - 153 * month
        day = (day + 5) // 5
        year = 100 * century + nday
        if month < 10:
            month += 3
        else:
            month -= 9
            year += 1
        return year, month, day
示例#7
0
    def _parse_date(self, raw_value):
        "Convert raw data to datetime.date"
        nday = bytes_to_bint(raw_value) + 678882
        century = (4 * nday - 1) // 146097
        nday = 4 * nday - 1 - 146097 * century
        day = nday // 4

        nday = (4 * day + 3) // 1461
        day = 4 * day + 3 - 1461 * nday
        day = (day + 4) // 4

        month = (5 * day - 3) // 153
        day = 5 * day - 3 - 153 * month
        day = (day + 5) // 5
        year = 100 * century + nday
        if month < 10:
            month += 3
        else:
            month -= 9
            year += 1
        return year, month, day