[Zope-DB] Bug: ZopeRDB does not handle empty column names

Thomas_Janke@prisma-edv.de Thomas_Janke@prisma-edv.de
Fri, 23 Nov 2001 17:16:19 +0100



Hi,
I think, I found a bug. Hopefully somebody will forward this report to the
responsible person.

I executed the following statement successfully with Sybase-isql

SELECT topic_name, count(topic_name)
FROM topics, problems
WHERE topics.topic_id = problems.topic_id
GROUP BY topics.topic_name

This prints a table like this:

 topic_name
 -------------------------------------------------- -----------
 Sybase                                                       1
 Windows2000                                                  2
 ZOPE                                                         7
 test                                                         2
 tre                                                          2

The second column has no name, because it's a calculated column. When executing
the same code within an ZSQL-Method, I get the error

Error: ... : Empty column name,


I also found the snipped of code, which causes the error:
Its in zope/lib/python/Shared/DC/ZRDB/Results.py
in Class Results
in def __init__
-----------------------------------------------------------------------------------------
        for item in items:
            name=item['name']
            name=strip(name)
            if not name:
                raise ValueError, 'Empty column name, %s' % name   /* <=== This
is the problem */
            if schema.has_key(name):
                raise ValueError, 'Duplicate column name, %s' % name
            schema[name]=i
            n=lower(name)
            if n != name: aliases.append((n, SQLAlias(name)))
            n=upper(name)
            if n != name: aliases.append((n, SQLAlias(name)))
            dd[name]=item
            names.append(name)
            i=i+1
----------------------------------------------------------------------------------------------------

After testing for a while and trying to persuate ZRDB to accept empty column
names, I found a better way. I changed the first line of my code into:
SELECT topic_name, problems = count(topic_name)

so I gave it a name and worked arround the problem.

Just one question remaines. Why is it not possible to have the number of the
column as the column name, if there is none?
I hope, this really is seen as a problem too and somebody will go and find a
more flexible solution for it.


Yours
Thomas



PS: WHOW!! Did I really write that much stuff? 8)