def execute(query,condition=None,limit=None,debug=False,just_debug=False):

    qpe_dict_list=[]
    qpe_dl=dict()
    qpe_dl['table']=[]

    try:
        query = query.lower()
        [head,body] = query.split('->')
    except :
        print ("Unexpected format. Please stick to this format \nans(x,y)->viewname(x,_,y_)")
        sys.exit(1)
    #qpe_dl 'qpe_datalog' is a dictionary as expected by qpe team
    qpe_dl['result']=head
    head_cols = get_cols(head)

    while True:
        #ptrn = '^(\S*?)\((\S*?)\)'        #pattern to find the view in body
        #match = re.search(ptrn,body)
        strt = body.find('(')
        stp  = body.find(')')
        if strt!=-1 and stp !=-1:
            gv = body[:strt]
            c_body = gv+'('+body[strt+1:stp]+')'
            gv_cols = get_cols(c_body)
            l = find_needed_cols(gv_cols,head_cols,condition)
            dl = gsm[gv].get_child_dl(needed_cols=l)
            #dl = gsm[gv].unwrap()
            #print dl
            qpe_dl['table'] += dl
        else :
            #print("Unable to find body view.Please stick to this format. \nans(x,y)->viewname(x,_,y_)")
            #sys.exit(1)
            break
        body=body[stp+2:]

    qpe_dl['condition'] =condition
    qpe_dl['limit']=limit
    qpe_dl['table']=refine_query(qpe_dl['table'])


    qpe_dict_list=[qpe_dl]
    if debug==True:
        print_qpe_dict_list(qpe_dict_list)

    if just_debug==True:
        return "  "

    engine = HybridEngine(
        postgres={'server': '132.249.238.27', 'port': 5432, 'database': 'bookstore_pr', 'user': '******',
                  'password': '******'},
        asterix={'server': '132.249.238.32', 'port': 19002, 'dataverse': 'bookstore_pr'},
        solr={'server': '132.249.238.28', 'port': 8983, 'core': 'bookstore_pr'})
    qpe_dict_list=[qpe_dl]
    print(qpe_dl['table'])

    return(engine.queryDatalog(qpe_dict_list))
}]

datalog = [{
    'result': 'Ans(nodeid, category)',
    'table': ['asterix.categoryflat(nodeid, category)'],
    'condition': ["category = 'Education;Children & Teens'"],
    'limit': '10',
}]

#engine = HybridEngine()
engine = HybridEngine(postgres={
    'server': 'localhost',
    'port': 5432,
    'database': 'SQLBook',
    'user': '******',
    'password': '******'
},
                      asterix={
                          'server': 'localhost',
                          'port': 19002,
                          'dataverse': 'TinySocial'
                      },
                      solr={
                          'server': 'localhost',
                          'port': 8983,
                          'core': 'bookstore'
                      })
#result = engine.queryDatalog(datalog, debug=True)
result = engine.queryDatalog(datalog, loglevel=logging.DEBUG)
print(result)
    'limit': '10'
    }
]

# multi source aggregation
datalog = [
    {
    'result': 'Ans(lvl1, total_orders, total_value)',
    'table': ['postgres.orders(oid, _, _, _, _, _, _, _, _, _, _)',
            'postgres.orderlines(olid, oid, pid, _, date, _, nunits, price)',
            'postgres.products(pid, _, _, _, _, _, asin, nodeid)',
            'asterix.CategoryLevel(nodeid, lvl1, _, _, _, _)',
           ],
    'condition': ['pid > 1000', "date > '2015-01-01'"],
    'groupby': { 'key': 'lvl1', 'aggregation': ['count(oid, total_orders)', 'sum(price, total_value)']},
    'limit': '10'
    }
]

# union
# view

engine = HybridEngine()
#engine = HybridEngine(
#                postgres= {'server': 'localhost', 'port': 5432, 'database': 'SQLBook'},
#                asterix= {'server': 'localhost', 'port': 19002},
#                solr= {'server': 'localhost', 'port': 8983})
#result = engine.queryDatalog(datalog, debug=True)
result = engine.queryDatalog(datalog)
print(result)
from hybrid_engine import HybridEngine
engine = HybridEngine()
engine.execute('drop table RecommendationColaborative')
    gsm[head_view].join_col_dict = join_cols_matcher(body_cols_list)

    #print gsm[head_view].mapped_to

    #print "DONE."


engine = HybridEngine(postgres={
    'server': 'localhost',
    'port': 5432,
    'database': 'SQLBook',
    'user': '******',
    'password': '******'
},
                      asterix={
                          'server': 'localhost',
                          'port': 19002,
                          'dataverse': 'TinySocial'
                      },
                      solr={
                          'server': 'localhost',
                          'port': 8983,
                          'core': 'bookstore'
                      })


def define_virtual_view_in_source(query):
    engine.execute(query)
    #print("##define virtual view ")