File: integer.py

package info (click to toggle)
tryton-server 3.4.0-3
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 4,448 kB
  • sloc: python: 28,657; xml: 3,996; sql: 328; sh: 150; makefile: 82
file content (43 lines) | stat: -rw-r--r-- 1,208 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#This file is part of Tryton.  The COPYRIGHT file at the top level of
#this repository contains the full copyright notices and license terms.
from sql import Query, Expression

from ... import backend
from .field import Field, SQLType


class Integer(Field):
    '''
    Define an integer field (``int``).
    '''
    _type = 'integer'

    def sql_type(self):
        db_type = backend.name()
        if db_type == 'postgresql':
            return SQLType('INT4', 'INT4')
        elif db_type == 'mysql':
            return SQLType('SIGNED INTEGER', 'BIGINT')
        else:
            return SQLType('INTEGER', 'INTEGER')

    def sql_format(self, value):
        db_type = backend.name()
        if (db_type == 'sqlite'
                and value is not None
                and not isinstance(value, (Query, Expression))):
            value = int(value)
        return super(Integer, self).sql_format(value)


class BigInteger(Integer):
    '''
    Define an integer field (``long``).
    '''
    _type = 'biginteger'

    def sql_type(self):
        db_type = backend.name()
        if db_type == 'postgresql':
            return SQLType('INT8', 'INT8')
        return super(BigInteger, self).sql_type()