Abstract the support for ORDER BY and LIMIT/OFFSET SQL generation
all DB engines do not support the same syntax for these features, MS SQLServer being the bad boy we try to support in CW.
* Use two new methods of dbhelper to add LIMIT/OFFSET clauses and ORDER BY clauses
* added unit tests for sqlserver backend
* changed unittest_rql2sql to lauch the backend tests even if the driver module is not installed on the machine, so
that we can run the sqlserver tests on linux (and the mysql tests too)
* adapt msstep.py to the new interface
closes #1154756
from __future__ import with_statement
import sys
if confirm('fix some corrupted entities noticed on several instances?'):
rql('DELETE CWConstraint X WHERE NOT E constrained_by X')
rql('SET X is_instance_of Y WHERE X is Y, NOT X is_instance_of Y')
commit()
if confirm('fix existing cwuri?'):
from logilab.common.shellutils import progress
from cubicweb.server.session import hooks_control
rset = rql('Any X, XC WHERE X cwuri XC, X cwuri ~= "%/eid/%"')
title = "%i entites to fix" % len(rset)
nbops = rset.rowcount
enabled = interactive_mode
with progress(title=title, nbops=nbops, size=30, enabled=enabled) as pb:
with hooks_control(session, session.HOOKS_DENY_ALL, 'integrity'):
for i, row in enumerate(rset):
data = {'eid': row[0], 'cwuri': row[1].replace(u'/eid', u'')}
rql('SET X cwuri %(cwuri)s WHERE X eid %(eid)s', data)
if not i % 100: # commit every 100 entities to limit memory consumption
pb.text = "%i committed" % i
commit(ask_confirm=False)
pb.update()
commit(ask_confirm=False)
try:
from cubicweb import devtools
option_group_changed('anonymous-user', 'main', 'web')
option_group_changed('anonymous-password', 'main', 'web')
except ImportError:
# cubicweb-dev unavailable, nothing needed
pass