def xtest_token_query(self):
     schema = self.schemas['schema1']
     dao = SqlAlchemyDAO(connection=self.connection, schema=schema)
     # Generate data.
     self.connection.execute(
         schema['sources']['substrate'].insert(), 
         [{'id': 'S1', 'label': 's1'}]
     )
     tkn1 = {'ID': 'tkn1', 'EXPRESSION': '__substrate__id'}
     token_registry = {'tkn1': tkn1}
     query_def = {
         'ID': 'test',
         'SELECT': [
             {'ID': 'tkn_id', 'EXPRESSION': '___TOKENS__tkn1'}
         ]
     }
     dao.execute_queries([query_def], token_registry=token_registry)
    def test_keyed_query(self):
        schema = self.schemas['schema1']
        dao = SqlAlchemyDAO(connection=self.connection, schema=schema)
        key_def = {
            'LABEL_ENTITY': {
                'ID': 'substrate_name'
            }, 
            'QUERY': {
                'SELECT': [
                    {'EXPRESSION': '__substrate__id', 'ID': 'substrate_id'}, 
                    {'EXPRESSION': '__substrate__label', 'ID': 'substrate_name'}
                ]
            }, 
            'KEY_ENTITY': {
                'ID': 'substrate_id', 'EXPRESSION': '__result__id'
            }
        }

        query_def = {
            'GROUP_BY': [], 
            'FROM': [
                {
                    'SOURCE': {
                        'GROUP_BY': [
                            {'ID': 'cell_id'}, 
                            {'ID': 'substrate_id'}
                        ], 
                        'WHERE': [
                            [{'TYPE': 'ENTITY', 'EXPRESSION': '__result__t', 'ID': 't'}, '==', 2]
                        ], 
                        'ID': 'inner', 
                        'SELECT': [
                            {'EXPRESSION': '__result__cell_id', 'ID': 'cell_id'}, 
                            #{'EXPRESSION': '__result__substrate_id', 'ID': 'substrate_id'}
                            {'EXPRESSION': '___TOKENS__KEY', 'ID': 'substrate_id'}
                        ], 
                        'SELECT_GROUP_BY': True
                    }, 
                    'ID': 'inner'
                }, 
                {
                    'SOURCE': 'cell', 
                    'JOINS': [
                        ['inner', [{'TYPE': 'ENTITY', 'EXPRESSION': '__inner__cell_id'}, '==', {'TYPE': 'ENTITY', 'EXPRESSION': '__cell__id'}]]
                    ]
                }, 
                {
                    'SOURCE': 'substrate', 
                    'JOINS': [
                        ['inner', [{'TYPE': 'ENTITY', 'EXPRESSION': '__inner__substrate_id'}, '==', {'TYPE': 'ENTITY', 'EXPRESSION': '__substrate__id'}]]
                    ]
                }
            ], 
            'ID': 'outer', 
            'SELECT': [
                {'EXPRESSION': 'func.sum(__cell__area)', 'ID': 'sum_cell_area'}, 
                {'EXPRESSION': '__substrate__label', 'ID': 'substrate_name'}
            ]
        }

        dao.get_keyed_results(key_def=key_def, query_defs=[query_def])
예제 #3
0
 def __init__(self, session=None, **kwargs):
     SqlAlchemyDAO.__init__(self, connection=session.connection(), **kwargs)
     self.session = session