def test_repeated_constraint_field(self): like_query = Query.from_string(self.env, 'owner!=someone|someone_else', order='id') query = Query.from_string(self.env, 'owner!=someone&owner!=someone_else', order='id') like_sql, like_args = like_query.get_sql() sql, args = query.get_sql() self.assertEqualSQL(sql, like_sql) self.assertEqual(args, like_args) tickets = query.execute(self.req)
def test_template_data(self): req = Mock(href=self.env.href, perm=MockPerm(), authname='anonymous', tz=None, locale=None) context = web_context(req, 'query') query = Query.from_string(self.env, 'owner=$USER&order=id') tickets = query.execute(req) data = query.template_data(context, tickets, req=req) self.assertEqual(['anonymous'], data['clauses'][0]['owner']['values']) query = Query.from_string(self.env, 'owner=$USER&order=id') tickets = query.execute(req) data = query.template_data(context, tickets) self.assertEqual(['$USER'], data['clauses'][0]['owner']['values'])
def test_all_ordered_by_id_from_unicode(self): query = Query.from_string(self.env, u'order=id') sql, args = query.get_sql() self.assertEqualSQL(sql, """SELECT t.id AS id,t.summary AS summary,t.owner AS owner,t.type AS type,t.status AS status,t.priority AS priority,t.milestone AS milestone,t.time AS time,t.changetime AS changetime,priority.value AS priority_value FROM ticket AS t LEFT OUTER JOIN enum AS priority ON (priority.type='priority' AND priority.name=priority) ORDER BY COALESCE(t.id,0)=0,t.id""") self.assertEqual([], args) tickets = query.execute(self.req)
def test_user_var(self): query = Query.from_string(self.env, 'owner=$USER&order=id') sql, args = query.get_sql(req=self.req) self.assertEqualSQL(sql, """SELECT t.id AS id,t.summary AS summary,t.owner AS owner,t.type AS type,t.status AS status,t.priority AS priority,t.milestone AS milestone,t.time AS time,t.changetime AS changetime,priority.value AS priority_value FROM ticket AS t LEFT OUTER JOIN enum AS priority ON (priority.type='priority' AND priority.name=priority) WHERE ((COALESCE(t.owner,'')=%s)) ORDER BY COALESCE(t.id,0)=0,t.id""") self.assertEqual(['anonymous'], args) tickets = query.execute(self.req)
def test_constrained_by_milestone_or_version(self): query = Query.from_string(self.env, 'milestone=milestone1&or&version=version1', order='id') sql, args = query.get_sql() self.assertEqualSQL(sql, """SELECT t.id AS id,t.summary AS summary,t.owner AS owner,t.type AS type,t.status AS status,t.priority AS priority,t.component AS component,t.time AS time,t.changetime AS changetime,t.version AS version,t.milestone AS milestone,priority.value AS priority_value FROM ticket AS t LEFT OUTER JOIN enum AS priority ON (priority.type='priority' AND priority.name=priority) WHERE ((COALESCE(t.milestone,'')=%s)) OR ((COALESCE(t.version,'')=%s)) ORDER BY COALESCE(t.id,0)=0,t.id""") self.assertEqual(['milestone1', 'version1'], args) tickets = query.execute(self.req)
def test_constrained_by_owner_endswith(self): query = Query.from_string(self.env, 'owner$=someone', order='id') sql, args = query.get_sql() self.assertEqualSQL(sql, """SELECT t.id AS id,t.summary AS summary,t.owner AS owner,t.type AS type,t.status AS status,t.priority AS priority,t.milestone AS milestone,t.time AS time,t.changetime AS changetime,priority.value AS priority_value FROM ticket AS t LEFT OUTER JOIN enum AS priority ON (priority.type='priority' AND priority.name=priority) WHERE ((COALESCE(t.owner,'') %(like)s)) ORDER BY COALESCE(t.id,0)=0,t.id""" % {'like': self.env.get_read_db().like()}) self.assertEqual(['%someone'], args) tickets = query.execute(self.req)
def test_special_character_escape(self): query = Query.from_string(self.env, r'status=here\&now|maybe\|later|back\slash', order='id') sql, args = query.get_sql() self.assertEqualSQL(sql, """SELECT t.id AS id,t.summary AS summary,t.status AS status,t.owner AS owner,t.type AS type,t.priority AS priority,t.milestone AS milestone,t.time AS time,t.changetime AS changetime,priority.value AS priority_value FROM ticket AS t LEFT OUTER JOIN enum AS priority ON (priority.type='priority' AND priority.name=priority) WHERE (COALESCE(t.status,'') IN (%s,%s,%s)) ORDER BY COALESCE(t.id,0)=0,t.id""") self.assertEqual(['here&now', 'maybe|later', 'back\\slash'], args) tickets = query.execute(self.req)
def test_constrained_by_keywords(self): query = Query.from_string(self.env, 'keywords~=foo -bar baz', order='id') sql, args = query.get_sql() self.assertEqualSQL(sql, """SELECT t.id AS id,t.summary AS summary,t.keywords AS keywords,t.owner AS owner,t.type AS type,t.status AS status,t.priority AS priority,t.time AS time,t.changetime AS changetime,priority.value AS priority_value FROM ticket AS t LEFT OUTER JOIN enum AS priority ON (priority.type='priority' AND priority.name=priority) WHERE (((COALESCE(t.keywords,'') %(like)s AND COALESCE(t.keywords,'') NOT %(like)s AND COALESCE(t.keywords,'') %(like)s))) ORDER BY COALESCE(t.id,0)=0,t.id""" % {'like': self.env.get_read_db().like()}) self.assertEqual(['%foo%', '%bar%', '%baz%'], args) tickets = query.execute(self.req)
def test_constrained_by_time_range_modified(self): query = Query.from_string(self.env, 'modified=2008-08-01..2008-09-01', order='id') sql, args = query.get_sql(self.req) self.assertEqualSQL(sql, """SELECT t.id AS id,t.summary AS summary,t.changetime AS changetime,t.owner AS owner,t.type AS type,t.status AS status,t.priority AS priority,t.time AS time,priority.value AS priority_value FROM ticket AS t LEFT OUTER JOIN enum AS priority ON (priority.type='priority' AND priority.name=priority) WHERE (((%(cast_changetime)s>=%%s AND %(cast_changetime)s<%%s))) ORDER BY COALESCE(t.id,0)=0,t.id""" % { 'cast_changetime': self.env.get_read_db().cast('t.changetime', 'int64')}) self.assertEqual([1217548800000000L, 1220227200000000L], args) tickets = query.execute(self.req)
def test_constrained_by_multiple_owners_not(self): query = Query.from_string(self.env, 'owner!=someone|someone_else', order='id') sql, args = query.get_sql() self.assertEqualSQL(sql, """SELECT t.id AS id,t.summary AS summary,t.owner AS owner,t.type AS type,t.status AS status,t.priority AS priority,t.milestone AS milestone,t.time AS time,t.changetime AS changetime,priority.value AS priority_value FROM ticket AS t LEFT OUTER JOIN enum AS priority ON (priority.type='priority' AND priority.name=priority) WHERE (COALESCE(t.owner,'') NOT IN (%s,%s)) ORDER BY COALESCE(t.id,0)=0,t.id""") self.assertEqual(['someone', 'someone_else'], args) tickets = query.execute(self.req)
def test_constrained_by_custom_field(self): self.env.config.set('ticket-custom', 'foo', 'text') query = Query.from_string(self.env, 'foo=something', order='id') sql, args = query.get_sql() foo = self.env.get_read_db().quote('foo') self.assertEqualSQL(sql, """SELECT t.id AS id,t.summary AS summary,t.owner AS owner,t.type AS type,t.status AS status,t.priority AS priority,t.milestone AS milestone,t.time AS time,t.changetime AS changetime,priority.value AS priority_value,%s.value AS %s FROM ticket AS t LEFT OUTER JOIN ticket_custom AS %s ON (id=%s.ticket AND %s.name='foo') LEFT OUTER JOIN enum AS priority ON (priority.type='priority' AND priority.name=priority) WHERE ((COALESCE(%s.value,'')=%%s)) ORDER BY COALESCE(t.id,0)=0,t.id""" % ((foo,) * 6)) self.assertEqual(['something'], args) tickets = query.execute(self.req)