def p_query(t): """query : SELECT selector WHERE statement | SELECT selector | SELECT data_clause WHERE statement | DELETE tag_list WHERE statement | DELETE WHERE statement | DELETE tag_list | SET set_list WHERE statement | SET set_list | APPLY apply_statement | HELP | HELP LVALUE """ if t[1] == 'select': if len(t) == 5: t[0] = make_select_rv(t, t[2], t[4].render()) elif len(t) == 3: t[0] = make_select_rv(t, t[2]) elif t[1] == 'delete': t[0] = make_delete_rv(t) elif t[1] == 'set': t[0] = make_set_rv(t) elif t[1] == 'apply': t[0] = t[2] elif t[1] == 'help': if len(t) == 2: t[0] = help.help(), None else: t[0] = help.help(t[2]), None
def p_query(t): """query : SELECT selector WHERE statement | SELECT selector | SELECT data_clause WHERE statement | DELETE tag_list WHERE statement | DELETE WHERE statement | DELETE tag_list | SET set_list WHERE statement | SET set_list | APPLY apply_statement | HELP | HELP LVALUE """ if t[1] == 'select': if len(t) == 5: t[0] = make_select_rv(t, t[2], t[4].render()) elif len(t) == 3: t[0] = make_select_rv(t, t[2]) settings.metrics.increment("select_count") elif t[1] == 'delete': t[0] = make_delete_rv(t) settings.metrics.increment("delete_count") elif t[1] == 'set': t[0] = make_set_rv(t) settings.metrics.increment("set_count") elif t[1] == 'apply': t[0] = t[2] settings.metrics.increment("apply_count") elif t[1] == 'help': if len(t) == 2: t[0] = help.help(), None else: t[0] = help.help(t[2]), None
def p_query(t): """query : SELECT selector WHERE statement | SELECT selector | SELECT data_clause WHERE statement | DELETE tag_list WHERE statement | DELETE WHERE statement | SET set_list WHERE statement | APPLY apply_statement | HELP | HELP LVALUE """ if t[1] == 'select': if len(t) == 5: t[0] = make_select_rv(t, t[2], t[4].render()) elif len(t) == 3: t[0] = make_select_rv(t, t[2]) elif t[1] == 'delete': # a new delete inner statement enforces that we only delete # things which we have the key for. if t[2] == 'where': # delete the whole stream, gone. this also deletes the # data in the backend readingdb. t[0] = ext_deletor, \ """DELETE FROM stream WHERE id IN ( SELECT s.id FROM stream s, subscription sub WHERE (%(restrict)s) AND s.subscription_id = sub.id AND (%(auth)s) ) RETURNING id, uuid """ % { 'restrict': t[3].render(), 'auth': qg.build_authcheck(t.parser.request, forceprivate=True) } else: # this alters the tags but doesn't touch the data del_tags = ', '.join(map(escape_string, t[2])) q = "UPDATE stream SET metadata = metadata - ARRAY[" + del_tags + \ "] WHERE id IN " + \ "(SELECT s.id FROM stream s, subscription sub " + \ "WHERE (" + t[4].render() + ") AND s.subscription_id = sub.id AND " + \ qg.build_authcheck(t.parser.request, forceprivate=True) + ")" t[0] = None, q elif t[1] == 'set': new_tags = build_setstring(t[2], t[4]) q = "UPDATE stream SET metadata = metadata || " + new_tags + \ " WHERE id IN " + \ "(SELECT s.id FROM stream s, subscription sub " + \ "WHERE (" + t[4].render() + ") AND s.subscription_id = sub.id AND " + \ qg.build_authcheck(t.parser.request, forceprivate=True) + ")" t[0] = None, q elif t[1] == 'apply': t[0] = t[2] elif t[1] == 'help': if len(t) == 2: t[0] = help.help(), None else: t[0] = help.help(t[2]), None