|
@@ -6,12 +6,12 @@ from EditorialModel.fieldgroups import EmFieldGroup
|
6
|
6
|
from EditorialModel.classes import EmClass
|
7
|
7
|
|
8
|
8
|
from Database import sqlutils
|
9
|
|
-from Database.sqlwrapper import SqlWrapper
|
10
|
|
-from Database.sqlalter import DropColumn
|
|
9
|
+from Database.sqlalter import DropColumn, AddColumn
|
11
|
10
|
|
12
|
11
|
import sqlalchemy as sql
|
13
|
12
|
|
14
|
13
|
import logging
|
|
14
|
+import re
|
15
|
15
|
|
16
|
16
|
logger = logging.getLogger('Lodel2.EditorialModel')
|
17
|
17
|
|
|
@@ -97,7 +97,59 @@ class EmField(EmComponent):
|
97
|
97
|
def add_field_column_to_class_table(self):
|
98
|
98
|
field_type = "%s%s" % (get_field_type(self.fieldtype).sql_column(), " DEFAULT 0" if self.fieldtype == 'integer' else '')
|
99
|
99
|
field_class_table = self.get_class_table()
|
100
|
|
- return SqlWrapper().addColumn(tname=field_class_table, colname=self.name, coltype=field_type)
|
|
100
|
+
|
|
101
|
+ sql_engine = sqlutils.getEngine()
|
|
102
|
+ conn = sql_engine.connect()
|
|
103
|
+ meta_data = sqlutils.meta(sql_engine)
|
|
104
|
+ table = sql.Table(field_class_table, meta_data)
|
|
105
|
+ new_column = self.create_column(name=self.name, type_=field_type)
|
|
106
|
+ ddl = AddColumn(table, new_column)
|
|
107
|
+ sql_query = ddl.compile(dialect=sql_engine.dialect)
|
|
108
|
+ sql_query = str(sql_query)
|
|
109
|
+ logger.debug("Executing SQL : '%s'" % sql_query)
|
|
110
|
+ ret = bool(conn.execute(sql_query))
|
|
111
|
+ return ret
|
|
112
|
+
|
|
113
|
+ def create_column(self, **kwargs):
|
|
114
|
+ if not 'name' in kwargs or ('type' not in kwargs and 'type_' not in kwargs):
|
|
115
|
+ pass
|
|
116
|
+
|
|
117
|
+ if 'type_' not in kwargs and 'type' in kwargs:
|
|
118
|
+ kwargs['type_'] = self.sql_to_sqla_type(kwargs['type'])
|
|
119
|
+ del kwargs['type']
|
|
120
|
+
|
|
121
|
+ if 'extra' in kwargs:
|
|
122
|
+ for extra_name in kwargs['extra']:
|
|
123
|
+ kwargs[extra_name] = kwargs['extra']['name']
|
|
124
|
+ del kwargs['extra']
|
|
125
|
+
|
|
126
|
+ if 'foreignkey' in kwargs:
|
|
127
|
+ foreign_key = sql.ForeignKey(kwargs['foreignkey'])
|
|
128
|
+ del kwargs['foreignkey']
|
|
129
|
+ else:
|
|
130
|
+ foreign_key = None
|
|
131
|
+
|
|
132
|
+ if 'primarykey' in kwargs:
|
|
133
|
+ kwargs['primary_key'] = kwargs['primarykey']
|
|
134
|
+ del kwargs['primarykey']
|
|
135
|
+
|
|
136
|
+ result = sql.Column(**kwargs)
|
|
137
|
+
|
|
138
|
+ if foreign_key is not None:
|
|
139
|
+ result.append_foreign_key(foreign_key)
|
|
140
|
+
|
|
141
|
+ return result
|
|
142
|
+
|
|
143
|
+ def sql_to_sqla_type(self, strtype):
|
|
144
|
+ if 'VARCHAR' in strtype:
|
|
145
|
+ check_length = re.search(re.compile('VARCHAR\(([\d]+)\)', re.IGNORECASE), strtype)
|
|
146
|
+ column_length = int(check_length.groups()[0]) if check_length else None
|
|
147
|
+ return sql.VARCHAR(lengh=column_length)
|
|
148
|
+ else:
|
|
149
|
+ try:
|
|
150
|
+ return getattr(sql, strtype)
|
|
151
|
+ except AttributeError:
|
|
152
|
+ raise NameError("Unknown type '%s'" % strtype)
|
101
|
153
|
|
102
|
154
|
## get_class_table (Function)
|
103
|
155
|
#
|