import string
class SqlString:
_str = ''
def __init__(self, param):
if type(param).__name__ == 'str':
self._str = param
else:
return false
def getSql(self):
return self._str
class SqlComb:
"""A SQL parser"""
_select = []
_from = []
def __init__(self, tableName):
self._from.append(tableName)
def select(self, fields):
if type(fields).__name__ == 'str':
fields = SqlString(fields)
if type(fields).__name__ == 'instance':
self._select.append(fields)
if type(fields).__name__ == 'list':
for v in fields:
self.select(v)
def getSql(self):
r = 'SELECT ' + implode(self._select)
return r
def implode(values):
print values[0], values[1:] # возвращает < 'instance' of SqlString>, [<instance ... >, <instance >]
r = v = values[0]
if type(v).__name__ == 'instance':
r = v.getSql()
if len(values) == 1:
return r
return r + ', ' + implode(values[1:])
a = SqlComb('aaa')
a.select(['b', 'c, d, e'])
print a.getSql() # тут всё нормально, выводит то, что ожидаю
b = SqlComb('bbb')
b.select(a)
print b.getSql()
<instance>
<instance>,
<instance>,
а затем снова то же самое.
Использую Eric 4, Python 2.6.