class ComplexInnerModel(Model): fields = {'new': 'new', 'email': {'token': 'test'}} table = 'complex_inner_model' indexes = [ Index(["email.token"], "simple_token_index", "simple_id"), Index(["new"], "simple_new_index", "simple_id") ]
def test_index_populate(self): idx = self.populate_test_index() keyspace = idx.keyspace idx2 = Index('data', '$.k2') keyspace.add_index(idx2) self.assertEqual([row for row in idx2.all_items()], [ {'row_key': 2, 'value': u'x1-2'}, {'row_key': 4, 'value': u'x1-xx'}, {'row_key': 5, 'value': u'v1-x'}, {'row_key': 6, 'value': u'v1-y'}, ])
def test_query_expressions(self): idx2 = Index('data', '$.k2') idx = self.populate_test_index(idx2) query = idx.query('v1-1') | idx.query('v1-3') | idx.query('xx') self.assertEqual([row._data['data']['k1'] for row in query], [ 'v1-1', 'v1-3', 'xx']) query = (idx.query('v1-1') | idx.query('v1-3')) | idx2.query('x1-xx') self.assertEqual([row._data['data'] for row in query], [ {'k1': 'v1-1'}, {'k1': 'v1-3'}, {'k1': 'xx', 'k2': 'x1-xx'}, ])
def test_index(self): username = Index('user', '$.user.username') pet_name = Index('user', '$.user.pets[0].name') keyspace = self.db.keyspace('test2', username, pet_name) keyspace.create() charlie = { 'user': { 'username': '******', 'active': True, 'pets': [ {'name': 'huey', 'type': 'cat'}, {'name': 'mickey', 'type': 'dog'}, ], }, } nuggie = { 'user': { 'username': '******', 'active': True, 'pets': [ {'name': 'zaizee', 'type': 'cat'}, {'name': 'beanie', 'type': 'cat'}, ], }, } keyspace.create_row(user=charlie, misc={'foo': 'bar'}) keyspace.create_row(user=nuggie, misc={'foo': 'baze'}) rows = [row for row in username.query('charlie')] self.assertEqual(len(rows), 1) row = rows[0] self.assertEqual(row._data, { 'user': charlie, 'misc': {'foo': 'bar'}, }) rows = [row for row in pet_name.query('zaizee')] self.assertEqual(len(rows), 1) row = rows[0] self.assertEqual(row._data, { 'user': nuggie, 'misc': {'foo': 'baze'}, })
def test_query_descriptor(self): idx2 = Index('data', '$.k2') idx = self.populate_test_index(idx2) query = idx.query((idx.v == 'v1-1') | (idx.v == 'v1-3')) self.assertEqual([row._data for row in query], [ {'data': {'k1': 'v1-1'}, 'misc': 1337}, {'data': {'k1': 'v1-3'}, 'k1': 'v1-5', 'k2': 'v1-6'}, ]) query = idx.query((idx.v == 'v1-1') | (idx.v == 'v1-3'), reverse=True) self.assertEqual([row._data for row in query], [ {'data': {'k1': 'v1-3'}, 'k1': 'v1-5', 'k2': 'v1-6'}, {'data': {'k1': 'v1-1'}, 'misc': 1337}, ]) idx1_q = idx.query((idx.v == 'v1-1') | (idx.v == 'v1-3')) idx2_q = idx2.query(idx2.v == 'x1-xx') self.assertEqual([row._data['data'] for row in -(idx1_q | idx2_q)], [ {'k1': 'xx', 'k2': 'x1-xx'}, {'k1': 'v1-3'}, {'k1': 'v1-1'}, ])