seitime-frappe/cgi-bin/webnotes/multi_tenant/query_parser.py
2011-06-08 14:24:18 +05:30

38 lines
871 B
Python

import sqlparse
import webnotes
import webnotes.query_parser
def get_tables(parsed):
start = 0
for t in parsed[0].tokens:
if str(t.ttype)=='Token.Keyword' and t.value.lower()=='from':
start = 1
if start and type(t).__name__=='Identifier':
return [(str(t.get_real_name())),]
if start and type(t).__name__=='IdentifierList':
return [str(i.get_real_name()) for i in t.get_identifiers()]
return tl
def add_condition(query):
parsed = sqlparse.parse(query)
# get the tables
tl = get_tables(parsed)
# rebuild the query till the where clause
q = ''
for t in parsed[0].tokens:
q += str(t)
# where clause comes here
if type(t).__name__=='Where':
# add the conditions for the tables
for t in tl:
if t not in webnotes.query_parser.shared_tables:
q += ' and %s._tenant_id=%s' % (t, webnotes.tenant_id)
return q