-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPgColumn.py
More file actions
93 lines (74 loc) · 2.67 KB
/
Copy pathPgColumn.py
File metadata and controls
93 lines (74 loc) · 2.67 KB
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
import re
from ..diff.PgDiffUtils import PgDiffUtils
class PgColumn(object):
PATTERN_NULL = re.compile(r"^(.+)[\s]+NULL$", re.I)
PATTERN_NOT_NULL = re.compile(r"^(.+)[\s]+NOT[\s]+NULL$", re.I)
PATTERN_DEFAULT = re.compile(r"^(.+)[\s]+DEFAULT[\s]+(.+)$", re.I)
def __init__(self, name):
self.name = name
self.defaultValue = None
self.nullValue = True
self.statistics = None
self.storage = None
self.comment = None
def parseDefinition(self, definition):
string = definition
matcher = self.PATTERN_NOT_NULL.match(string)
if matcher:
string = matcher.group(1).strip()
self.nullValue = False
else:
matcher = self.PATTERN_NULL.match(string)
if matcher:
string = matcher.group(1).strip()
self.nullValue = True
matcher = self.PATTERN_DEFAULT.match(string)
if matcher:
string = matcher.group(1).strip()
self.defaultValue = matcher.group(2).strip()
self.type = string
def getFullDefinition(self, addDefaults):
sbSQL = []
sbSQL.append(PgDiffUtils.getQuotedName(self.name))
sbSQL.append(' ')
sbSQL.append(self.type)
if self.defaultValue:
sbSQL.append(" DEFAULT ")
sbSQL.append(self.defaultValue)
elif not self.nullValue and addDefaults:
defaultColValue = PgColumnUtils.getDefaultValue(self.type);
if (defaultColValue is not None):
sbSQL.append(" DEFAULT ")
sbSQL.append(defaultColValue)
if not self.nullValue:
sbSQL.append(" NOT NULL")
return ''.join(sbSQL)
class PgColumnUtils(object):
ZeroDefaultValueTypes = ["smallint",
"integer",
"bigint",
"real",
"double precision",
"int2",
"int4",
"int8",
"double",
"money"]
@staticmethod
def getDefaultValue(adjType):
if (adjType in PgColumnUtils.ZeroDefaultValueTypes
or adjType.startswith("decimal")
or adjType.startswith("numeric")
or adjType.startswith("float")):
defaultValue = "0";
elif (adjType.startswith("character varying")
or adjType.startswith("varchar")
or adjType.startswith("character")
or adjType.startswith("char")
or "text" == adjType):
defaultValue = "''"
elif ("boolean" == adjType):
defaultValue = "false"
else:
defaultValue = None
return defaultValue